Skip to main content

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 name
  • duration: 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 config weeks)
  • --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 days is not set, scheduler uses weeks * 7 (default 2 weeks).
  • Maximum schedule length is 35 days (5 weeks).
  • seed is 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_file path (or wildweeks.ics by 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_minutes and max_minutes when 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wildweek-0.3.0.dev0.tar.gz (44.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wildweek-0.3.0.dev0-py3-none-any.whl (30.2 kB view details)

Uploaded Python 3

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

Hashes for wildweek-0.3.0.dev0.tar.gz
Algorithm Hash digest
SHA256 1ef65be01bb5cc94ec9b753e4023a02062695b59142a4edc33522bfd30bbf7dd
MD5 52b307943f2f38236a27be25ed00b45d
BLAKE2b-256 2aaf138b287f66b1f780c6ae5e59de34849294765343370cb02932899b4c90da

See more details on using hashes here.

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

Hashes for wildweek-0.3.0.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 4ff61b18f784c31428f95d1b74915e00f9ff93c16e22bd41e540aa4d7d69de79
MD5 5ae89da75a9bca0f3b4e23cfa5107786
BLAKE2b-256 aa7a18efe92d7e33e3410132308463138a6bcf3c32285e569c7314b0204643df

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page