A tiny DSL for calendar interval algebra - compose, filter, and query time ranges using set operations.
Project description
calgebra 🗓️
Set algebra for calendars. Compose lazily and query efficiently.
Installation
pip install calgebra
# Or with Google Calendar support
pip install calgebra[google-calendar]
# Or with iCalendar (.ics) file support
pip install calgebra[ical]
Quick Start
from calgebra import day_of_week, time_of_day, at_tz, pprint, hours, HOUR
from itertools import islice
tz = "US/Pacific"
at = at_tz(tz)
# Team calendars
alice, bob, charlie = ... # Timeline objects (Google Calendar, .ics files, etc.)
# Define when work happens
weekend = day_of_week(["saturday", "sunday"], tz=tz)
weekdays = ~weekend
workhours = time_of_day(start=9*HOUR, duration=8*HOUR, tz=tz)
business_hours = weekdays & workhours
# When is anyone busy?
team_busy = alice | bob | charlie
# Free slots: business hours minus busy, at least 2 hours
free_slots = (business_hours - team_busy) & (hours >= 2)
# Query January 2025
pprint(islice(free_slots[at("2025-01-01"):at("2025-02-01")], 5), tz=tz)
# 2025-01-06 14:00:00 -> 2025-01-06 17:00:00
# 2025-01-08 09:00:00 -> 2025-01-08 12:00:00
# ...
Core Features:
- Set operations:
|(union),&(intersection),-(difference),~(complement) - Lazy composition: Build complex queries, execute with slicing
- Recurring patterns:
day_of_week(),time_of_day(),recurring()(RFC 5545) - Interval filtering:
hours >= 2,summary == "standup", custom properties - Google Calendar: Read/write via
calgebra.gcsa - iCalendar (.ics): Load/save standard RFC 5545 files
→ Quick-start | Tutorial | API Reference | Google Calendar | Demo Video
License
MIT License - see LICENSE file for details.
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
calgebra-0.10.11.tar.gz
(130.8 kB
view details)
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
calgebra-0.10.11-py3-none-any.whl
(101.2 kB
view details)
File details
Details for the file calgebra-0.10.11.tar.gz.
File metadata
- Download URL: calgebra-0.10.11.tar.gz
- Upload date:
- Size: 130.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bd92bf24fbed4affcc5c017126a6ddecd421c5518212b569697b8d0c9e6574a
|
|
| MD5 |
e5133a32e8e4f97922b78fc682105b58
|
|
| BLAKE2b-256 |
62cec836b3f00aa03135a8910c8c04eaf80a75aada38ce02fe23ca0799b49644
|
File details
Details for the file calgebra-0.10.11-py3-none-any.whl.
File metadata
- Download URL: calgebra-0.10.11-py3-none-any.whl
- Upload date:
- Size: 101.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7a7620c6b3b95e3b15e79177b06d33cf5d5a7f73b0ac9194b3821e536c96374
|
|
| MD5 |
91ecfe3e78a94f503b4bd1c265274340
|
|
| BLAKE2b-256 |
6dadf438975689de128b4894bcb4f1036cbdd705a6ac1eef8b9c1ce476d9f066
|