EAScheduler


NameEAScheduler JSON
Version 0.2.1 PyPI version JSON
download
home_pagehttps://github.com/spacemanspiff2007/eascheduler
SummaryEasy async scheduling with a nice interface
upload_time2024-11-20 12:52:23
maintainerNone
docs_urlNone
authorspaceman_spiff
requires_python>=3.10
licenseNone
keywords scheduler asyncio
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # EAScheduler
[![Tests Status](https://github.com/spacemanspiff2007/eascheduler/workflows/Tests/badge.svg)](https://github.com/spacemanspiff2007/eascheduler/actions)
[![Documentation Status](https://readthedocs.org/projects/eascheduler/badge/?version=latest)](https://eascheduler.readthedocs.io/en/latest/?badge=latest)
[![Updates](https://pyup.io/repos/github/spacemanspiff2007/eascheduler/shield.svg)](https://pyup.io/repos/github/spacemanspiff2007/eascheduler/)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/eascheduler)

[![PyPI](https://img.shields.io/pypi/v/eascheduler)]((https://pypi.org/project/EAScheduler/))
[![Downloads](https://pepy.tech/badge/eascheduler/month)](https://pepy.tech/project/eascheduler)



_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](https://pypi.org/project/HABApp/) make use of EAScheduler.


## Documentation
[The documentation can be found here](https://eascheduler.readthedocs.io)

## Example

````python
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

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/spacemanspiff2007/eascheduler",
    "name": "EAScheduler",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "scheduler, asyncio",
    "author": "spaceman_spiff",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/9c/73/f93989b9d07e96fbbc9d13bd7f875697181d13a0edc98aeec809a61a7662/eascheduler-0.2.1.tar.gz",
    "platform": null,
    "description": "# EAScheduler\n[![Tests Status](https://github.com/spacemanspiff2007/eascheduler/workflows/Tests/badge.svg)](https://github.com/spacemanspiff2007/eascheduler/actions)\n[![Documentation Status](https://readthedocs.org/projects/eascheduler/badge/?version=latest)](https://eascheduler.readthedocs.io/en/latest/?badge=latest)\n[![Updates](https://pyup.io/repos/github/spacemanspiff2007/eascheduler/shield.svg)](https://pyup.io/repos/github/spacemanspiff2007/eascheduler/)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/eascheduler)\n\n[![PyPI](https://img.shields.io/pypi/v/eascheduler)]((https://pypi.org/project/EAScheduler/))\n[![Downloads](https://pepy.tech/badge/eascheduler/month)](https://pepy.tech/project/eascheduler)\n\n\n\n_Easy async task scheduling_\n\n\nEasy Async Scheduler (or EAScheduler) is a lightweight asyncio scheduler with a nice and easy to use interface.\n\nThe home automation software [HABApp](https://pypi.org/project/HABApp/) make use of EAScheduler.\n\n\n## Documentation\n[The documentation can be found here](https://eascheduler.readthedocs.io)\n\n## Example\n\n````python\nimport eascheduler\n\nasync def my_coro() -> None:\n    print('Hello')\n\n# If you want something easy that you can use out of the box just use the default scheduler\nscheduler = eascheduler.get_default_scheduler()\n\n# -------------------------------------------------------------------------------------------------------\n# Different job types\n# -------------------------------------------------------------------------------------------------------\n\n# Run once in 30s\njob_once = scheduler.once(30, my_coro)\n\n# Countdown\ncountdown = scheduler.countdown(30, my_coro)\ncountdown.reset()               # make countdown start (again)\ncountdown.stop()                # stop countdown\ncountdown.set_countdown(15)     # set different countdown time which will be used for the next reset call\n\n# Trigger job which runs continuously, e.g.\n\n# every day at 8\njob_every = scheduler.at(scheduler.triggers.time('08:00:00'), my_coro)\n# for the first time in 10 mins, then every hour\njob_every = scheduler.at(scheduler.triggers.interval(600, 3600), my_coro)\n\n# -------------------------------------------------------------------------------------------------------\n# Restricting the trigger with a filter.\n# Only when the filter condition passes the time will be taken as the next time\n\n# every Fr-So at 8\nscheduler.at(\n    scheduler.triggers.time('08:00:00').only_at(scheduler.filters.weekdays('Fr-So')),\n    my_coro\n)\n\n# Triggers can be grouped\n# Mo-Fr at 7, Sa at 8\nscheduler.at(\n    scheduler.triggers.group(\n        scheduler.triggers.time('07:00:00').only_at(scheduler.filters.weekdays('Mo-Fr')),\n        scheduler.triggers.time('08:00:00').only_at(scheduler.filters.weekdays('Fr-So')),\n    ),\n    my_coro\n)\n\n# Filters can be grouped with any or all\n# On the first sunday of the month at 8\nscheduler.at(\n    scheduler.triggers.time('08:00:00').only_at(\n        scheduler.filters.all(\n            scheduler.filters.days('1-7'),\n            scheduler.filters.weekdays('So'),\n        ),\n    ),\n    my_coro\n)\n\n# -------------------------------------------------------------------------------------------------------\n# The trigger time can also be modified\n\n# On sunrise, but not earlier than 8\nscheduler.at(\n    scheduler.triggers.sunset().earliest('08:00:00'),\n    my_coro\n)\n\n# One hour before sunset\nscheduler.at(\n    scheduler.triggers.sunset().offset(timedelta(hours=-1)),\n    my_coro\n)\n````\n\n## Changelog\n#### 0.2.1 (2024-11-20)\n- Updated dependencies and some type hints\n\n#### 0.2.0 (2024-11-13)\n- Complete rewrite\n\n#### 0.1.11 (2023-09-11)\n- Fixed an issue with a possible infinite loop\n\n#### 0.1.10 (2023-08-24)\n- Added option to add a callback to the job when the execution time changes\n\n#### 0.1.9 (2023-07-19)\n- Fix for days when the sun doesn't rise or set.\n  In that case the next date with a sunrise/sunset will be returned.\n\n#### 0.1.8 (2022-12-14)\n- Fix for OneTimeJob incorrectly showing a remaining time after the execution\n- Dependency update\n\n#### 0.1.7 (2022-07-27)\n- Added py.typed\n\n#### 0.1.6 (2022-07-27)\n- Removed Python 3.7 support\n- Fixed setup issues\n\n#### 0.1.5 (2022-02-14)\n- Jobs have a remaining function\n- CountdownJob has a stop function\n\n#### 0.1.4 (2021-06-01)\n- Added option to pause and resume the scheduler\n- Jobs don't have to be in the future any more\n- Sorted imports with isort\n\n#### 0.1.3 (2021-05-06)\n- Fixed a bug where a negative offset/jitter could result in multiple executions\n\n#### 0.1.2 (2021-05-06)\n- Fixed a bug where ``.every(None, ...)`` would result in an error\n\n#### 0.1.1 (2021-05-02)\n- Implemented a much nicer API and fixed some bugs\n\n#### 0.1.0 (2021-04-21)\n- Fixed a race condition\n- Added tests\n\n#### 0.0.9 (2021-04-19)\n- Fixes for wrong timezone\n- Added tests\n\n#### 0.0.8 (2021-04-17)\n- Fixes for SunJob, ReoccurringJob\n- Added tests\n\n#### 0.0.7 (2021-04-15)\n- Fixes for Sunrise/Sunset\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Easy async scheduling with a nice interface",
    "version": "0.2.1",
    "project_urls": {
        "Documentation": "https://eascheduler.readthedocs.io/",
        "GitHub": "https://github.com/spacemanspiff2007/eascheduler",
        "Homepage": "https://github.com/spacemanspiff2007/eascheduler"
    },
    "split_keywords": [
        "scheduler",
        " asyncio"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "577a290e1c55ef428985515fa0250ca5df4772cf43438c6b2341183de0f144ee",
                "md5": "f6cc4be9264272017d0455c77baaa45e",
                "sha256": "7c37b36068fdfb5b832ba003f7405827be1a46ea4047be38f737dff499a1bb6c"
            },
            "downloads": -1,
            "filename": "EAScheduler-0.2.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f6cc4be9264272017d0455c77baaa45e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 45776,
            "upload_time": "2024-11-20T12:52:22",
            "upload_time_iso_8601": "2024-11-20T12:52:22.606689Z",
            "url": "https://files.pythonhosted.org/packages/57/7a/290e1c55ef428985515fa0250ca5df4772cf43438c6b2341183de0f144ee/EAScheduler-0.2.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9c73f93989b9d07e96fbbc9d13bd7f875697181d13a0edc98aeec809a61a7662",
                "md5": "2fe1fb22d3e364136d684cc55a015256",
                "sha256": "23857574dc62bb445a597277629ee18d37b0e3794a8352307b54a9e7ff1c42d4"
            },
            "downloads": -1,
            "filename": "eascheduler-0.2.1.tar.gz",
            "has_sig": false,
            "md5_digest": "2fe1fb22d3e364136d684cc55a015256",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 31942,
            "upload_time": "2024-11-20T12:52:23",
            "upload_time_iso_8601": "2024-11-20T12:52:23.633926Z",
            "url": "https://files.pythonhosted.org/packages/9c/73/f93989b9d07e96fbbc9d13bd7f875697181d13a0edc98aeec809a61a7662/eascheduler-0.2.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-20 12:52:23",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "spacemanspiff2007",
    "github_project": "eascheduler",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "tox": true,
    "lcname": "eascheduler"
}
        
Elapsed time: 0.41152s