An AWS Cron Parser
Project description
Main Branch Status
Develop Branch Status
pyawscron
A python port from a typescript project.
https://github.com/beemhq/aws-cron-parser
Install
pip install pyawscron
AWS Cron Expressions
cron(fields)
Field | Values | Wildcards |
---|---|---|
Minutes |
0-59 |
, - * / |
Hours |
0-23 |
, - * / |
Day-of-month |
1-31 |
, - * ? / L W |
Month |
1-12 or JAN-DEC |
, - * / |
Day-of-week |
1-7 or SUN-SAT |
, - * ? L # |
Year |
1970-2199 |
, - * / |
Wildcards
- The , (comma) wildcard includes additional values. In the Month field, JAN,FEB,MAR would include January, February, and March.
- The - (dash) wildcard specifies ranges. In the Day field, 1-15 would include days 1 through 15 of the specified month.
- The * (asterisk) wildcard includes all values in the field. In the Hours field, * would include every hour. You cannot use * in both the Day-of-month and Day-of-week fields. If you use it in one, you must use ? in the other.
- The / (forward slash) wildcard specifies increments. In the Minutes field, you could enter 1/10 to specify every tenth minute, starting from the first minute of the hour (for example, the 11th, 21st, and 31st minute, and so on).
- The ? (question mark) wildcard specifies one or another. In the Day-of-month field you could enter 7 and if you didn't care what day of the week the 7th was, you could enter ? in the Day-of-week field.
- The L wildcard in the Day-of-month or Day-of-week fields specifies the last day of the month or week.
- The W wildcard in the Day-of-month field specifies a weekday. In the Day-of-month field, 3W specifies the weekday closest to the third day of the month.
- The # wildcard in the Day-of-week field specifies a certain instance of the specified day of the week within a month. For example, 3#2 would be the second Tuesday of the month: the 3 refers to Tuesday because it is the third day of each week, and the 2 refers to the second day of that type within the month.
Iterative Use
next
from pyawscron import AWSCron
import datetime
import calendar
def main():
aws_cron = AWSCron("0 5 4 * ? *")
today = datetime.datetime.utcnow().date()
start_date = datetime.datetime(today.year, today.month, 1, tzinfo=datetime.timezone.utc)
last_day = calendar.monthrange(today.year, today.month)[1]
end_date = datetime.datetime(today.year, today.month, last_day, tzinfo=datetime.timezone.utc)
dt=start_date
while True:
dt = aws_cron.occurrence(dt).next()
if dt > end_date:
break
print(dt)
if __name__ == "__main__":
main()
prev
from pyawscron import AWSCron
import datetime
def main():
aws_cron = AWSCron("0 5 4 * ? *")
today = datetime.datetime.utcnow().date()
start_date = datetime.datetime(today.year, today.month, 1, tzinfo=datetime.timezone.utc)
end_date = datetime.datetime(today.year, today.month-1, 1, tzinfo=datetime.timezone.utc)
dt=start_date
while True:
dt = aws_cron.occurrence(dt).prev()
if dt < end_date:
break
print(dt)
if __name__ == "__main__":
main()
Helper Methods
get_all_schedule_bw_dates
Returns a list of UTC datetime objects using a start and end date. The end date has a flag to be inclusive or exclusive.
Note: This method has no limit on how many datetime object can be returned. Use Iterative approach or get_next_n_schedule if memory becomes an issue.
from_dt = datetime.datetime(2021, 8, 7, 8, 30, 57, tzinfo=datetime.timezone.utc)
to_date = datetime.datetime(2021, 8, 7, 11, 30, 57, tzinfo=datetime.timezone.utc)
AWSCron.get_all_schedule_bw_dates(from_dt, to_date, '0/23 * * * ? *')
# Resulting list
[datetime.datetime(2021, 8, 7, 8, 46, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 9, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 9, 23, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 9, 46, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 10, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 10, 23, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 10, 46, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 11, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 11, 23, tzinfo=datetime.timezone.utc)]
get_next_n_schedule
Returns a list with the n next datetimes that match the aws cron expression from the provided start date.
from_dt = datetime.datetime(2021, 8, 7, 8, 30, 57, tzinfo=datetime.timezone.utc)
AWSCron.get_next_n_schedule(10, from_dt, '0/23 * * * ? *')
# Resulting list
[datetime.datetime(2021, 8, 7, 8, 46, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 9, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 9, 23, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 9, 46, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 10, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 10, 23, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 10, 46, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 11, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 11, 23, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 11, 46, tzinfo=datetime.timezone.utc)]
get_prev_n_schedule
Returns a list with the n prev datetimes that match the aws cron expression from the provided start date.
from_dt = datetime.datetime(2021, 8, 7, 11, 50, 57, tzinfo=datetime.timezone.utc)
AWSCron.get_prev_n_schedule(10, from_dt, '0/23 * * * ? *')
# Resulting list
[datetime.datetime(2021, 8, 7, 11, 46, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 11, 23, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 11, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 10, 46, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 10, 23, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 10, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 9, 46, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 9, 23, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 9, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2021, 8, 7, 8, 46, tzinfo=datetime.timezone.utc)]
Project details
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
File details
Details for the file pyawscron-1.0.7.tar.gz
.
File metadata
- Download URL: pyawscron-1.0.7.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
57b3231562ab7411e6814a09f0ed0804f52899aa30a689dd9575be30bbe3a0db
|
|
MD5 |
31548de7dde1dfa2725f305fa87e158f
|
|
BLAKE2b-256 |
0ecc0d9553f92de8cd84e25479c36d4e277fb7c4354711f21edfe7d4e8e9b909
|
File details
Details for the file pyawscron-1.0.7-py3-none-any.whl
.
File metadata
- Download URL: pyawscron-1.0.7-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
e492cc77596b4db76b4e7be10700441ccdfebd5b6990b9ee5cca615d02c1e4bd
|
|
MD5 |
ba0be5931d510f2b5daf7b1870828e01
|
|
BLAKE2b-256 |
bf36b2627ddd2e87cd84a1cbdfcd5919ce8ce9a743fc329c5d7732db771d763f
|