A command-line interface for accessing Quranic verses and translations
Project description
GwaniCLI
A command-line interface for accessing Quranic verses and translations with elegant formatting and caching capabilities.
Features
- 🔄 Random verses: Get random Quranic verses with translations
- 📖 Surah browsing: Access specific surahs and ayahs
- 🌍 Multiple translations: Support for various translation options
- 💾 Smart caching: Offline access with configurable TTL
- 🎨 Beautiful formatting: Colored console output with Arabic text support
- ⚙️ Configurable: User-friendly configuration management
- 📱 JSON output: Machine-readable output option
Installation
From PyPI (when published)
pip install gwanicli
From Source
git clone https://github.com/bhantsi/gwani-cli.git
cd gwani-cli
pip install -e .
Quick Start
Get a random verse
gwani random
Get a specific surah
gwani surah 1 # Al-Fatiha
gwani surah "Al-Baqarah" --ayah 255 # Ayat al-Kursi
Configure translation
gwani config set translation en.sahih
gwani config get translation
JSON output
gwani random --json
Commands
gwani random
Get a random Quranic verse with translation.
Options:
--translation, -t TEXT: Specify translation (e.g., en.pickthall)--no-cache: Skip cache and fetch fresh data--json: Output in JSON format
Examples:
gwani random
gwani random --translation en.sahih
gwani random --json --no-cache
gwani surah <identifier>
Get verses from a specific surah by number or name.
Arguments:
identifier: Surah number (1-114) or name (e.g., "Al-Fatiha")
Options:
--ayah, -a INT: Specific ayah number--translation, -t TEXT: Specify translation--no-cache: Skip cache and fetch fresh data--json: Output in JSON format
Examples:
gwani surah 1 # Entire Al-Fatiha
gwani surah 2 --ayah 255 # Ayat al-Kursi
gwani surah "Al-Fatiha" --json # JSON format
gwani config
Manage configuration settings.
Subcommands:
set <key> <value>: Set a configuration valueget <key>: Get a configuration value
Supported Keys:
translation: Default translation (e.g., en.pickthall)cache_ttl: Cache time-to-live in seconds
Examples:
gwani config set translation en.sahih
gwani config set cache_ttl 3600
gwani config get translation
gwani version
Show version information.
Configuration
GwaniCLI stores configuration in ~/.config/gwanicli/config.toml.
Default configuration:
translation = "en.pickthall"
cache_ttl = 86400
Caching
The application caches API responses to improve performance and enable offline access:
- Location:
~/.cache/gwanicli/cache.db - Storage: SQLite database
- TTL: Configurable expiration time
- Management: Automatic cleanup of expired entries
Translations
Common translation identifiers:
en.pickthall: Pickthall English translationen.sahih: Sahih Internationalen.yusufali: Abdullah Yusuf Aliar.alafasy: Arabic (Mishary Alafasy)
Development
Setup Development Environment
git clone https://github.com/bhantsi/gwani-cli.git
cd gwani-cli
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e ".[dev]"
Run Tests
pytest
Code Formatting
black qwanicli/
flake8 qwanicli/
mypy qwanicli/
Project Structure
qwanicli/
├── __init__.py # Package initialization
├── cli.py # Main CLI entry point with Click commands
├── api_client.py # HTTP client for Quran API
├── config.py # Configuration management
├── cache.py # SQLite-based caching layer
├── formatter.py # Output formatting (console & JSON)
└── utils.py # Common utilities and error handling
API
GwaniCLI uses the Al-Quran Cloud API to fetch Quranic content.
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Al-Quran Cloud API for providing the Quranic data
- Click for the excellent CLI framework
- The open-source community for various Python packages used
Support
If you encounter any issues or have questions:
- Check the FAQ
- Search existing issues
- Create a new issue
Note: This tool is for educational and personal use. Please respect the sacred nature of the Quranic content.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gwanicli-0.1.0.tar.gz.
File metadata
- Download URL: gwanicli-0.1.0.tar.gz
- Upload date:
- Size: 22.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d5b07919dd110c95e1a3ccd6c57b3f759bc7c9dea1c8804fdf0b767b3c2d0f4
|
|
| MD5 |
bd49aaf9a45d72f525edacc6c4bae411
|
|
| BLAKE2b-256 |
3b76387f697cec83bfe84f504e2d4a8d5364542e2ca331cd61c15670c9701eb9
|
File details
Details for the file gwanicli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: gwanicli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5240e65952eac5e69e4f8de6fb3cbf39c4f925ef10a047f4830121572f3ab2fc
|
|
| MD5 |
0d534cad0fdedf17a5cfe734c9444277
|
|
| BLAKE2b-256 |
256b4a1d0b039103ba6c2a1c67870e9fd5aec990d41bfc832b7c7e571f01eada
|