oncalendar
A systemd OnCalendar expression parser and evaluator. Requires Python 3.10+.
oncalendar is written for and being used in Healthchecks (a scheduled task monitoring service).
This package provides three iterators:
-
oncalendar.BaseIterator(expression: str, start: datime): supports expressions without timezone (example: "Mon, 12:34"). Accepts both naive and timezone-aware datetimes as the start time.
-
oncalendar.TzIterator(expression: str, start: datetime): supports expressions with and without timezone. (example: "Mon, 12:34 Europe/Riga"). Requires the start datetime to be timezone-aware.
-
oncalendar.OnCalendar(expressions:str, start: datetime): supports multiple expressions with or without timezones, separated by newlines. Requires the start datetime to be timezone-aware. Example:
2020-01-01 12:34 Europe/Riga
Installation
pip install oncalendar
Usage
from datetime import datetime
from oncalendar import BaseIterator
it = BaseIterator("Mon, 12:34", datetime.now())
for x in range(0, 10):
print(next(it))
Produces:
2023-12-11 12:34:00
2023-12-18 12:34:00
2023-12-25 12:34:00
2024-01-01 12:34:00
2024-01-08 12:34:00
2024-01-15 12:34:00
2024-01-22 12:34:00
2024-01-29 12:34:00
2024-02-05 12:34:00
2024-02-12 12:34:00
If oncalendar receives an invalid expression, it raises oncalendar.OnCalendarError
exception:
from datetime import datetime
from oncalendar import BaseIterator
BaseIterator("Mon, 123:456", datetime.now())
Produces:
oncalendar.OnCalendarError: Bad hour
If oncalendar hits year 2200 while iterating, it stops iteration by raising
StopIteration:
from datetime import datetime
from oncalendar import BaseIterator
# 2199 is not leap year, and we stop at 2200
print(next(BaseIterator("2199-2-29", datetime.now())))
Produces:
StopIteration
Known Limitations
- Does not support decimals in the second field.
Release files for oncalendar 1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| oncalendar-1.1.tar.gz | 8.7 kB | Details |
Release files / oncalendar-1.1.tar.gz
| Download URL | oncalendar-1.1.tar.gz |
|---|---|
| Size | 8.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3122aa811786c313568a53745015729aa650e35054b689c08b6db4b1ee891287
|
|
BLAKE2b-256 checksum How to use checksums |
d2160a632a870a4f6916c91e95a717391a9c0eaaa28a3d2402704551861b118a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.12
|