Skip to main content

Easy async scheduling with a nice interface

Project description

EAScheduler

Tests Status Documentation Status Updates PyPI - Python Version

PyPI Downloads

Easy async task scheduling

Easy Async Scheduler (or EAScheduler) is a lightweight asyncio scheduler with a nice and easy to use interface.

The home automation software HABApp make use of EAScheduler.

Documentation

The documentation can be found here

Example

import eascheduler

async def my_coro() -> None:
    print('Hello')

# If you want something easy that you can use out of the box just use the default scheduler
scheduler = eascheduler.get_default_scheduler()

# -------------------------------------------------------------------------------------------------------
# Different job types
# -------------------------------------------------------------------------------------------------------

# Run once in 30s
job_once = scheduler.once(30, my_coro)

# Countdown
countdown = scheduler.countdown(30, my_coro)
countdown.reset()               # make countdown start (again)
countdown.stop()                # stop countdown
countdown.set_countdown(15)     # set different countdown time which will be used for the next reset call

# Trigger job which runs continuously, e.g.

# every day at 8
job_every = scheduler.at(scheduler.triggers.time('08:00:00'), my_coro)
# for the first time in 10 mins, then every hour
job_every = scheduler.at(scheduler.triggers.interval(600, 3600), my_coro)

# -------------------------------------------------------------------------------------------------------
# Restricting the trigger with a filter.
# Only when the filter condition passes the time will be taken as the next time

# every Fr-So at 8
scheduler.at(
    scheduler.triggers.time('08:00:00').only_at(scheduler.filters.weekdays('Fr-So')),
    my_coro
)

# Triggers can be grouped
# Mo-Fr at 7, Sa at 8
scheduler.at(
    scheduler.triggers.group(
        scheduler.triggers.time('07:00:00').only_at(scheduler.filters.weekdays('Mo-Fr')),
        scheduler.triggers.time('08:00:00').only_at(scheduler.filters.weekdays('Fr-So')),
    ),
    my_coro
)

# Filters can be grouped with any or all
# On the first sunday of the month at 8
scheduler.at(
    scheduler.triggers.time('08:00:00').only_at(
        scheduler.filters.all(
            scheduler.filters.days('1-7'),
            scheduler.filters.weekdays('So'),
        ),
    ),
    my_coro
)

# -------------------------------------------------------------------------------------------------------
# The trigger time can also be modified

# On sunrise, but not earlier than 8
scheduler.at(
    scheduler.triggers.sunset().earliest('08:00:00'),
    my_coro
)

# One hour before sunset
scheduler.at(
    scheduler.triggers.sunset().offset(timedelta(hours=-1)),
    my_coro
)

Changelog

0.2.1 (2024-11-20)

  • Updated dependencies and some type hints

0.2.0 (2024-11-13)

  • Complete rewrite

0.1.11 (2023-09-11)

  • Fixed an issue with a possible infinite loop

0.1.10 (2023-08-24)

  • Added option to add a callback to the job when the execution time changes

0.1.9 (2023-07-19)

  • Fix for days when the sun doesn't rise or set. In that case the next date with a sunrise/sunset will be returned.

0.1.8 (2022-12-14)

  • Fix for OneTimeJob incorrectly showing a remaining time after the execution
  • Dependency update

0.1.7 (2022-07-27)

  • Added py.typed

0.1.6 (2022-07-27)

  • Removed Python 3.7 support
  • Fixed setup issues

0.1.5 (2022-02-14)

  • Jobs have a remaining function
  • CountdownJob has a stop function

0.1.4 (2021-06-01)

  • Added option to pause and resume the scheduler
  • Jobs don't have to be in the future any more
  • Sorted imports with isort

0.1.3 (2021-05-06)

  • Fixed a bug where a negative offset/jitter could result in multiple executions

0.1.2 (2021-05-06)

  • Fixed a bug where .every(None, ...) would result in an error

0.1.1 (2021-05-02)

  • Implemented a much nicer API and fixed some bugs

0.1.0 (2021-04-21)

  • Fixed a race condition
  • Added tests

0.0.9 (2021-04-19)

  • Fixes for wrong timezone
  • Added tests

0.0.8 (2021-04-17)

  • Fixes for SunJob, ReoccurringJob
  • Added tests

0.0.7 (2021-04-15)

  • Fixes for Sunrise/Sunset

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

eascheduler-0.2.1.tar.gz (31.9 kB view details)

Uploaded Source

Built Distribution

EAScheduler-0.2.1-py3-none-any.whl (45.8 kB view details)

Uploaded Python 3

File details

Details for the file eascheduler-0.2.1.tar.gz.

File metadata

  • Download URL: eascheduler-0.2.1.tar.gz
  • Upload date:
  • Size: 31.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for eascheduler-0.2.1.tar.gz
Algorithm Hash digest
SHA256 23857574dc62bb445a597277629ee18d37b0e3794a8352307b54a9e7ff1c42d4
MD5 2fe1fb22d3e364136d684cc55a015256
BLAKE2b-256 9c73f93989b9d07e96fbbc9d13bd7f875697181d13a0edc98aeec809a61a7662

See more details on using hashes here.

File details

Details for the file EAScheduler-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: EAScheduler-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 45.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for EAScheduler-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7c37b36068fdfb5b832ba003f7405827be1a46ea4047be38f737dff499a1bb6c
MD5 f6cc4be9264272017d0455c77baaa45e
BLAKE2b-256 577a290e1c55ef428985515fa0250ca5df4772cf43438c6b2341183de0f144ee

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page