Skip to main content

TaskOps

A flexible and extensible task processing system that allows you to schedule, execute, and monitor tasks with ease.

Features

  • Flexible Task Scheduling: Support for recurring and one-time tasks
  • Extensible Plugin System: Easy integration with various services and databases
  • Robust Error Handling: Built-in retry mechanisms and error logging
  • YAML Configuration: Simple task configuration using YAML files
  • Comprehensive Logging: Detailed logging with rotation and retention policies
  • Type Safety: Full type hints and validation using Pydantic

Installation

From GitHub (Recommended)

pip install git+https://github.com/sharik709//task-runner.git

From TestPyPI

pip install -i https://test.pypi.org/simple/ taskops

From PyPI

pip install taskops

This will install TaskOps along with its dependencies (pydantic, schedule, loguru, and pyyaml).

Quick Start

  1. Create a task configuration file (tasks.yaml):
tasks:
  - name: "backup_database"
    command: "pg_dump mydb > backup.sql"
    schedule:
      type: "recurring"
      interval: "1d"
    retry:
      max_attempts: 3
      delay: 300  # 5 minutes
  1. Run the task processor:
taskops --config-dir /path/to/config

Configuration

Task Configuration

Tasks can be configured using YAML files. Each task can have the following properties:

name: "task_name"          # Unique identifier for the task
command: "command_to_run"  # Shell command to execute
schedule:
  type: "recurring"        # or "one-time"
  interval: "1h"          # for recurring tasks (e.g., "1m", "1h", "1d")
  start_time: "2024-02-20T10:00:00"  # for one-time tasks
retry:
  max_attempts: 3         # Maximum number of retry attempts
  delay: 60              # Delay between retries in seconds

Command Line Options

taskops [OPTIONS]

Options:
  --config-dir TEXT     Directory containing task configuration files
  --log-dir TEXT       Directory for log files
  --max-log-files INT  Maximum number of log files to keep per task
  --help              Show this message and exit

Python API Usage

You can also use TaskOps directly in your Python code:

from datetime import datetime
from task_processor import Task, Schedule, RetryConfig, TaskScheduler, LogManager, LogConfig

# Initialize logging (optional but recommended)
log_config = LogConfig(log_dir="./logs")
log_manager = LogManager(log_config)

# Create a task scheduler with logging
scheduler = TaskScheduler(log_manager=log_manager)

# Define a recurring task
recurring_task = Task(
    name="data_processing",
    command="python process_data.py",
    schedule=Schedule(
        type="recurring",
        interval="1h"  # Run every hour
    ),
    retry=RetryConfig(
        max_attempts=3,
        delay=60  # Retry after 60 seconds
    )
)

# Define a one-time task
one_time_task = Task(
    name="database_cleanup",
    command="python cleanup_db.py",
    schedule=Schedule(
        type="one-time",
        start_time=datetime(2024, 5, 1, 3, 0, 0)  # Run at 3 AM on May 1, 2024
    ),
    retry=RetryConfig(
        max_attempts=2,
        delay=300  # Retry after 5 minutes
    )
)

# Add tasks to the scheduler
scheduler.add_task(recurring_task)
scheduler.add_task(one_time_task)

# Start the scheduler (this will block and run until stopped)
try:
    print("Task scheduler is running. Press Ctrl+C to stop.")
    scheduler.run()
except KeyboardInterrupt:
    print("Shutting down scheduler...")
    scheduler.stop()

For a complete working example, see example_taskops.py.

Development

Setup

  1. Clone the repository:
git clone https://github.com/sharik709//task-runner.git
cd task-runner
  1. Create and activate a virtual environment:
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
  1. Install development dependencies:
pip install -r requirements.txt

Running Tests

pytest

For coverage report:

pytest --cov=task_processor --cov-report=term-missing

Contributing

See CONTRIBUTING.md for guidelines.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for taskops 0.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for taskops 0.1.7
File Size Uploaded
taskops-0.1.7.tar.gz 17.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for taskops 0.1.7
File Interpreter ABI Platform
taskops-0.1.7-py3-none-any.whl Python 3 none any Details

Total release size: 36.9 kB

Release files / taskops-0.1.7.tar.gz

Download URL taskops-0.1.7.tar.gz
Size 17.1 kB
Tags Source
SHA-256 checksum
How to use checksums
5207dd052c3f079914250ca67d578554efb0dcfbe70872eb7fc3e3fdea2ee8b5
BLAKE2b-256 checksum
How to use checksums
102287224ba81bc7fbb406d9df7a7a79405d6614241af616dac621596dedea48
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / taskops-0.1.7-py3-none-any.whl

Download URL taskops-0.1.7-py3-none-any.whl
Size 19.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e9f8a62f86afa619d834b442fbb6a1a49fcf4d90449f85faeef83ea59f8c42a7
BLAKE2b-256 checksum
How to use checksums
33715d3fe7c3e55baa1eb5fe34335230d5bda5617ed7c6c53fcfd9b146fe5ddb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 release files

0.1.6

2 release files

0.1.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page