Moroccan Prayer Times CLI
A command-line interface (CLI) application to fetch and display Moroccan prayer times for the current day or the next prayer time remaining. The data comes, by default, from the official Moroccan Ministry of Habous and Islamic Affairs website, and other providers can be selected.
Features
- Display today's prayer times for a selected Moroccan city
- Show the time remaining until the next prayer
- Configure the preferred city, language and prayer times provider
- Pluggable prayer times providers (Habous and Aladhan included)
- Caching the fetched prayer times for better performance
- Localization support for Arabic, English, and French languages
Installation
You can install the package using either pipx or pip.
Note: It is highly recommended to install this package using pipx. It provides an isolated environment for installing and managing command-line tools. It also simplifies running CLIs without activating a virtual environment.
Check out this page to compare pip and pipx.
Using pipx
pipx install moroccan-prayer-times
Using pip
pip install moroccan-prayer-times
Usage
After the installation, you can run the CLI application with the following command:
prayertime help
This will display the list of available commands and their descriptions.
Commands
prayertime next: Show the remaining time until the next prayer.prayertime today: Display today's prayer times for the configured city.prayertime config: Display the current configuration (city, language, provider and past prayer display).prayertime setup: Configure the preferred city, language, provider and past prayer display.prayertime help: Show the help message.
Note: the default command is
next.
Configuration
The first time you run the application, it will prompt you to select a city (english is the default language). These settings will be saved for future use.
You can change the city, the language or the provider anytime using the setup command.
Past prayer display
By default, prayertime next only shows the upcoming prayer. You can also have it remind you of a prayer that has just
passed, for a number of minutes between 1 and 20:
Al-Asr was 3 minute(s) ago
Al-Maghrib at 17:47 => 2 hour(s) and 24 minute(s) left
It is disabled by default. Enable, change or disable it with prayertime setup, or by editing the
past_prayer_minutes entry of the config file (remove it to disable the feature).
Providers
A provider is the source of the prayer times. The provider is part of the config and defaults to habous.
| Provider | Source |
|---|---|
habous |
habous.gov.ma (default) |
aladhan |
api.aladhan.com (method 21, Morocco), limited to a subset of the cities |
Aladhan finds a city by its name and cannot resolve many small towns, so
aladhanonly offers the cities that were verified to work (scripts/check_aladhan_cities.shandscripts/reverify_aladhan_cities.shre-check them). If your saved city isn't available when you switch to it,setupasks you to pick another one.
Choose it with prayertime setup, or by editing the provider entry of the config file. The PRAYERTIME_PROVIDER
environment variable overrides the saved value, which is handy for a one-off run:
PRAYERTIME_PROVIDER=aladhan prayertime today
Adding a provider
A provider is a subclass of PrayerTimesProvider (moroccan_prayer_times/providers/base.py). It only has to define:
name: the identifier used in the config,get_cities(): the available cities ({id: name}),fetch_prayer_times(city_id): today's six times (Fajr, Sunrise, Dhuhr, Asr, Maghrib, Isha) as"HH:MM".
The today and next commands are implemented by the base class on top of those (with a per-day cache), and can be
overridden if a provider needs something different.
from moroccan_prayer_times.providers import PrayerTimesProvider, register
@register
class MyProvider(PrayerTimesProvider):
name = "my-provider"
def get_cities(self):
return {1: "Rabat"}
def fetch_prayer_times(self, city_id):
return {"Fajr": "05:03", "Sunrise": "06:31", "Dhuhr": "12:12",
"Asr": "15:17", "Maghrib": "17:47", "Isha": "19:01"}
Inside this package, put the class in a new module of moroccan_prayer_times/providers/ named like the provider (e.g. aladhan.py for aladhan) and decorate it with @register: it is found automatically, and only imported when it is selected.
From an external package, declare it as an entry point instead and it will be discovered automatically:
# setup.py of the plugin
entry_points={"moroccan_prayer_times.providers": ["my-provider = my_package.module:MyProvider"]}
City ids are the ones of the Habous website; they are shared by all the providers, which map them to their own cities.
NOTE: If you choose to use the Arabic language option with this package, make sure to check the following:
Terminal Encoding: Ensure that your terminal is configured to use UTF-8 or another encoding that supports Arabic characters. In some terminals or IDEs (like PyCharm), you may need to set the encoding explicitly.
Font Support: Verify that your system has fonts installed that support the display of Arabic characters. Without proper font support, Arabic text may not render correctly.
Contributing
To run the tests:
pip install -r requirements.txt -r requirements-dev.txt
python -m pytest tests
Contributions are welcome! If you find any issues or have suggestions for improvements, please open an issue or submit a pull request on the GitHub repository.
License
This project is licensed under the MIT License.
Contact
If you have any questions or suggestions, feel free to contact me at ismailben44@gmail.com.
Metadata
Release files for moroccan-prayer-times 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| moroccan_prayer_times-2.1.0.tar.gz | 27.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| moroccan_prayer_times-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 52.9 kB
Release files / moroccan_prayer_times-2.1.0.tar.gz
| Download URL | moroccan_prayer_times-2.1.0.tar.gz |
|---|---|
| Size | 27.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5a7f1990d650fc19932bb5edd05a77851bb57978ee4504be4b499f53a9330313
|
|
BLAKE2b-256 checksum How to use checksums |
ca663358d04c47b3b9b4581d7921e3dc2d51681ef326fc8945b253393a91f1a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|
Release files / moroccan_prayer_times-2.1.0-py3-none-any.whl
| Download URL | moroccan_prayer_times-2.1.0-py3-none-any.whl |
|---|---|
| Size | 25.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
73801567c26d5735bfbf504db6e2751e4e9f747566b19de906f51b3c26c8d41b
|
|
BLAKE2b-256 checksum How to use checksums |
f8488611dde1aea187e1b84fa76ff41bf499c41c366c53d6387812e71162fb41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|
Security for moroccan-prayer-times 2.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.