Lightweight job runner framework built on FastAPI and APScheduler with a simple web UI.
Project description
kicker
Lightweight job runner built on FastAPI and APScheduler with a simple web UI.
Features
- Schedule jobs with APScheduler
- Run jobs manually from UI
- Pause/resume scheduler and individual jobs
- Supports both sync and async functions
- Simple HTML interface (no frontend framework)
Installation
pip install kicker
Quick Start
Create a project and define your jobs:
# jobs.py
import logging
logger = logging.getLogger("kicker")
def my_job():
logger.info("Hello from job")
Run the app:
# main.py
from fastapi import FastAPI
from kicker import create_app
app = create_app()
Or use your current pattern:
uvicorn main:app --reload
Usage
Open in browser:
http://localhost:8000/kicker
From UI you can:
- Start / pause scheduler
- Run jobs manually
- Pause / resume individual jobs
- View execution logs
Writing Jobs
Sync job
def my_job():
print("sync job")
Async job
async def my_job():
await some_async_call()
Both are supported. Sync jobs are executed in a thread pool automatically.
Scheduling Jobs
Example:
scheduler.add_job(
my_job,
trigger="cron",
minute="*/5",
id="my_job"
)
Project Structure (example)
my_project/
├── main.py
└── jobs.py
Notes
- Scheduler runs in-process (not distributed)
- Running with multiple workers will duplicate job execution
- Designed for simple internal tools and automation
Roadmap
- Job registration decorators
- Plugin system
- Persistent job stores
- Better UI
License
MIT
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kicker-0.1.0.tar.gz.
File metadata
- Download URL: kicker-0.1.0.tar.gz
- Upload date:
- Size: 3.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.3","id":"zena","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6fe0dc79364077d33cbefc97b931e05be67232163be4df7bd8c3117663593317
|
|
| MD5 |
0d14aa79ad81da1503b8cf0fde05a9d3
|
|
| BLAKE2b-256 |
c6fdca4407558d1100d99a918a7f83144c6736d77df9177578773d71a37dea8f
|
File details
Details for the file kicker-0.1.0-py3-none-any.whl.
File metadata
- Download URL: kicker-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.3","id":"zena","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
212cb73cf0d041c6011837941660cdadffb2b38b5a9b52ea7cde8d03797a678a
|
|
| MD5 |
fba01cfda73e4c45712a1799cf4e08ff
|
|
| BLAKE2b-256 |
fd7a5b07568e7f0316525693ca8120bd5f048202d029b5d82c5b989c5cb4d7eb
|