Deterministic wildcard activity scheduler with CSV output
Project description
Wildweek
Deterministic CLI scheduler for wildcard activities.
It reads activity data from CSV, builds a day-by-day schedule, prints a text table, writes an ICS file, and also writes a companion CSV schedule file.
Install
From PyPI:
pip install wildweek
From source (development):
pip install -e .
Input CSV
CSV headers must be:
name,duration,probability
name: activity nameduration: minutes (integer,>= 0)probability: float in[0,1]
Example (wild-events.csv):
name,duration,probability
Forest Trail,40,0.45
Birdwatching,30,0.35
Farmers Market,50,0.30
Kayak,60,0.20
Campfire,45,0.40
Stargazing,35,0.55
Command Line
Run:
wildweek --csv wild-events.csv
Supported flags:
--csv: input CSV path--config: config file path (default:wildweek.conf)--min_minutes: minimum daily minutes for wildcard activities (default:10)--max_minutes: maximum daily minutes for wildcard activities (default:60)--days: number of days to schedule (overrides configweeks)--ics_file: output ICS filename (default:wildweeks.ics)
Config File
All parameters can be set in config as key=value lines.
Default template file:
# Wildweek default config
# csv=wild-events.csv
# min_minutes=10
# max_minutes=60
# weeks=2
# days=14
# ics_file=wildweeks.ics
# seed=12345
Rules:
- Empty lines and
#comments are ignored. - CLI args override config values.
- If
daysis not set, scheduler usesweeks * 7(default2weeks). - Maximum schedule length is
35days (5 weeks). seedis config-only. When set, it enables reproducible shuffled activity ordering.
Output
The CLI writes:
- Text table to stdout, e.g.:
Day | Total Minutes | Activities
--- | ------------- | ----------
1 (Mon) | 75 | Hike(30), Museum(45)
2 (Tue) | 75 | Hike(30), Cafe(20), Read(25)
- ICS file at
--ics_filepath (orwildweeks.icsby default). - Additional CSV schedule file derived from the ICS filename:
something.ics->something.csv- otherwise
something->something.csv
Scheduling Behavior
- Deterministic draw function (same inputs produce same schedule).
- An activity appears at most once per day.
- Daily total is constrained by
min_minutesandmax_minuteswhen possible. - Effective activity probability increases with days since last use.
- Event start times are rounded up to the next half hour in both ICS and companion CSV outputs.
Tests
Run:
python3 -m unittest discover -s tests -v
Current test coverage includes:
- CSV parsing
- deterministic scheduling + constraints
- ICS generation
- companion CSV generation
- CLI-over-config precedence
- 35-day cap / 5-week limit behavior
- seeded reproducibility behavior
Build And Publish
Build distributions:
python3 -m build
Upload to PyPI:
python3 -m twine upload dist/*
Project details
Release history Release notifications | RSS feed
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 wildweek-0.3.0.dev0.tar.gz.
File metadata
- Download URL: wildweek-0.3.0.dev0.tar.gz
- Upload date:
- Size: 44.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ef65be01bb5cc94ec9b753e4023a02062695b59142a4edc33522bfd30bbf7dd
|
|
| MD5 |
52b307943f2f38236a27be25ed00b45d
|
|
| BLAKE2b-256 |
2aaf138b287f66b1f780c6ae5e59de34849294765343370cb02932899b4c90da
|
File details
Details for the file wildweek-0.3.0.dev0-py3-none-any.whl.
File metadata
- Download URL: wildweek-0.3.0.dev0-py3-none-any.whl
- Upload date:
- Size: 30.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ff61b18f784c31428f95d1b74915e00f9ff93c16e22bd41e540aa4d7d69de79
|
|
| MD5 |
5ae89da75a9bca0f3b4e23cfa5107786
|
|
| BLAKE2b-256 |
aa7a18efe92d7e33e3410132308463138a6bcf3c32285e569c7314b0204643df
|