Skip to main content

Libary for repeated execution of functions at specific times.

Project description

REPeated TASK ORGanizer - reptaskorg

Libary for repeated execution of functions at specific times.

Python PyPI Python DeepSource

Examples:

  • Every minute, when seconds 5 and 34 are reached:

    task = RepTaskOrg(second=[5, 34])  # 00:00:05, 00:00:34, 00:01:05, ...
    
  • Every day, when hours 2, 8 and 12 and seconds 5 and 34 are reached:

    task = RepTaskOrg(hour=[2, 8, 12], second=[5, 34])  # 02:00:05, 02:00:34, 08:00:05, ...
    
  • Every year, at the first second of may:

    task = RepTaskOrg(month=[5])  # 2021.05.01 00:00:00, 2022.05.01 00:00:00, ...
    
  • Every monday at 8 am:

    task = RepTaskOrg(weekday=[0], hour=[8])  # 2021.05.03 08:00:00, 2022.05.10 08:00:00, ...
    
  • Every day in week 18 at 8 am:

    task = RepTaskOrg(week=[18], hour=[8])  # 2021.05.03 08:00:00, 2022.05.04 08:00:00, ...
    

Table of Contents

Install

For installation use Pypi:

pip install reptaskorg or pip3 install reptaskorg

Usage

Without threading

If you have no time-consuming tasks in your main loop RapTaskOrg is a good solution.

import datetime
import time
from reptaskorg import RepTaskOrg


def do_something(alarm_number):
    print('{} - ALARM {}'.format(datetime.datetime.now().strftime('%H:%M:%S:%f'), alarm_number))


def main():
    # Define tasks with desired time stamps.
    task_1 = RepTaskOrg(second=[0, 10, 20, 30, 40, 50])
    task_2 = RepTaskOrg(
        minute=[37, 39],
        second=[0, 10, 20, 30, 40, 50]
        )

    # Call Task repeatedly to keep it up to date. 
    while True:
        # Outputs true as soon as the target time is reached
        if task_1.check_task():
            do_something(1)

        if task_2.check_task():
            do_something(2)
        time.sleep(0.001)


if __name__ == "__main__":
    main()

With threading

If you have time-consuming tasks in your main loop use RepTaskOrgTH. Here a separate thread is started for each task.

import datetime
import time
from reptaskorg import RepTaskOrgTH


def do_something(alarm_number):
    """Function which should be executed repeatedly."""

    print('{} - ALARM {}'.format(
        datetime.datetime.now().strftime('%H:%M:%S:%f'),
        alarm_number
        ))


def do_anotherthing(alarm_number, alarm_comment):
    """Function which should be executed repeatedly with multiple arguments."""

    print('{} - ALARM {} {}'.format(
        datetime.datetime.now().strftime('%H:%M:%S:%f'),
        alarm_number,
        alarm_comment
        ))


def main():
    """Main-Function."""

    # Define tasks with desired time stamps.
    task_1 = RepTaskOrgTH(do_something, 1, second=[0, 10, 20, 30, 40, 50])

    # Define multiple arguments for given function at task
    task_2 = RepTaskOrgTH(do_anotherthing, 2, 'test_2', minute=[33, 34, 36], second=[0, 10, 20, 30, 40, 50])

    # Main-loop for other tasks
    while True:
        time.sleep(0.001)


if __name__ == "__main__":
    main()

Other features

You can stop and restart task-threads by:

# stop task
task.stop_task()

# restart task
task.restart_task()

Information on the set timer are showed by:

# show one parameter
print(task.every_year)
print(task.every_month)
print(task.every_week)
print(task.every_weekday)
print(task.every_day)
print(task.every_hour)
print(task.every_minute)
print(task.every_second)

# show all set parameters
print(task.set_time)

By default, the Libary uses the current system time. You can set a UTC-time-offset by:

# UTC
task_1 = RepTaskOrg(second=[0, 10, 20, 30, 40, 50], offset_hour=0, offset_minute=0)
task_2 = RepTaskOrgTH(do_something, 1, second=[0, 10, 20, 30, 40, 50], offset_hour=0, offset_minute=0)

# United States (Pacific Time Zone) = UTC -08:00
task_3 = RepTaskOrg(second=[0, 10, 20, 30, 40, 50], offset_hour=-8, offset_minute=0)
task_4 = RepTaskOrgTH(do_something, 1, second=[0, 10, 20, 30, 40, 50], offset_hour=-8, offset_minute=0)

Arguments

You can define a task with the arguments in the following chapters.

RepTaskOrg

Args:
    year (list, optional): valid year. Defaults to None.
    month (list, optional): valid month. Defaults to None.
    week (set, optional): valide week. Defaults to None.
    weekday (set, optional): valide day of week. Defaults to None.
    day (list, optional): valid day. Defaults to None.
    hour (list, optional): valid hours. Defaults to None.
    minute (list, optional): valid minute. Defaults to None.
    second (list, optional): valid second. Defaults to None.
    offset_hour (int, optional): valide hour for offset. Defaults to 0.
    offset_minute (int, optional): valide minute for offset. Defaults to 0.

RepTaskOrgTH

Args:
    function (function): function to execute.
    function_arguments (tuple): parameters of the given function.
    year (set, optional): valid year. Defaults to None.
    month (set, optional): valid month. Defaults to None.
    week (set, optional): valide week. Defaults to None.
    weekday (set, optional): valide day of week. Defaults to None.
    day (set, optional): valid day. Defaults to None.
    hour (set, optional): valid hour. Defaults to None.
    minute (set, optional): valid minute. Defaults to None.
    second (set, optional): valid second. Defaults to None.
    offset_hour (int, optional): valide hour for offset. Defaults to 0.
    offset_minute (int, optional): valide minute for offset. Defaults to 0.

Release Notes

1.0.1

  • Fix typo
  • Check current run-status
  • Testing implemented

1.0.0

  • Stable Release
  • Exception TimemachineError introduced
  • Minor changes of the documentation in the code

0.2.3

  • Show all set parameters with task.set_timer

0.2.2

  • Bugfix if only weekday was set
  • Introduction weeks as argument

0.2.1

  • Introduction weekday as argument

0.2

  • Introduction UTC - offset as argument

0.1.1

  • Revision of the documentation

0.1

  • Initial release

MIT License Copyright (c) 2021 Cedric Klimt

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

reptaskorg-1.0.1.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

reptaskorg-1.0.1-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file reptaskorg-1.0.1.tar.gz.

File metadata

  • Download URL: reptaskorg-1.0.1.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.8.10

File hashes

Hashes for reptaskorg-1.0.1.tar.gz
Algorithm Hash digest
SHA256 c174545bb7c352e5f78b980583ac2f4e88d6f45bd6cce3d77703195830ce99be
MD5 d6b53698dc622bdcf8c451d8c41dbc81
BLAKE2b-256 bca2e4302ae27fd4dd893d4ec055ac41a3e5cc8d5e89451ab413620a6c65915b

See more details on using hashes here.

File details

Details for the file reptaskorg-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: reptaskorg-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.8.10

File hashes

Hashes for reptaskorg-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 013ce91f756c11d2da447fea455fd9a2d7847f4dea48150041a49a8572dec6e4
MD5 3a1d280e25d87bf1c2cc7f41ee102e2a
BLAKE2b-256 969b64fe89b9906f265af5ae349bf936aca23dbda4fc136d97ea3c49525b02ae

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