Skip to main content

A tiny DSL for calendar interval algebra - compose, filter, and query time ranges using set operations.

Project description

calgebra 🗓️

A tiny DSL for merging and searching over calendar-like intervals.

Installation

pip install calgebra

# Or with Google Calendar support
pip install calgebra[google-calendar]

Quick Start

from calgebra import day_of_week, time_of_day, hours, at_tz, HOUR
from itertools import islice

# Compose time windows
weekdays = day_of_week(["monday", "tuesday", "wednesday", "thursday", "friday"])
work_hours = time_of_day(start=9*HOUR, duration=8*HOUR, tz="US/Pacific")
business_hours = weekdays & work_hours

# Find free time
busy = monday_meetings | friday_focus
free = business_hours - busy
long_slots = free & (hours >= 2)

# Query results (forward)
at = at_tz("US/Pacific")
meeting_options = list(long_slots[at("2025-01-01"):at("2025-02-01")])

# Query in reverse (last 5 events)
last_5 = list(islice(calendar[at("2024-01-01"):at("2025-01-01"):-1], 5))

Intervals use exclusive end bounds ([start, end)), matching Python slicing. Interval(start=10, end=13) represents 3 seconds. Intervals are automatically clipped to query bounds.

Core Features:

  • Set operations: | (union), & (intersection), - (difference), ~ (complement)
  • Recurring patterns: recurring(), day_of_week(), time_of_day() (RFC 5545 via python-dateutil)
  • Reverse iteration: timeline[end:start:-1] for reverse chronological order
  • Aggregations: total_duration, max_duration, min_duration, count_intervals, coverage_ratio
  • Transformations: buffer() (add time around intervals), merge_within() (coalesce nearby intervals)
  • Google Calendar: calgebra.gcsa.calendars() for read/write operations

**→ Quick-start | Tutorial | API Reference | Google Calendar

License

MIT License - see LICENSE file for details.

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

calgebra-0.8.2.tar.gz (87.8 kB view details)

Uploaded Source

Built Distribution

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

calgebra-0.8.2-py3-none-any.whl (68.8 kB view details)

Uploaded Python 3

File details

Details for the file calgebra-0.8.2.tar.gz.

File metadata

  • Download URL: calgebra-0.8.2.tar.gz
  • Upload date:
  • Size: 87.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for calgebra-0.8.2.tar.gz
Algorithm Hash digest
SHA256 ebfd8928fbfa45dc748dd28758fcde81c8086f6052dd036ad80a537204349665
MD5 487cf5228773a32b683af6bffbf2f87d
BLAKE2b-256 8071830a68cb2df29dd51cb7fdb939018c768fd0967ba45ba88e73b27b071962

See more details on using hashes here.

File details

Details for the file calgebra-0.8.2-py3-none-any.whl.

File metadata

  • Download URL: calgebra-0.8.2-py3-none-any.whl
  • Upload date:
  • Size: 68.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for calgebra-0.8.2-py3-none-any.whl
Algorithm Hash digest
SHA256 36dbe123f3c5a40cfdeb80309cf7656cdf7c567f587f2e3e4741189000caa69b
MD5 2a4b9cbfb63e1e73a13f93982c455cbb
BLAKE2b-256 e31f67f7f42d183a20bcab958f5837ff9bc6aa9cdf74b17e38a953cf6c7bdf6f

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