Skip to main content

Lightweight fiscal and ISO calendar utilities.

Project description

PyPI Version

Calendar-Smith is a zero-dependency, high-performance Python utility for fiscal year calculations, ISO week mapping, and safe date parsing.

It was built for data engineers and analysts who need to process CSVs or perform calendar math without the overhead of heavy libraries like Pandas or Arrow.

Key Features

  • Safety-First Parsing: Strictly rejects ambiguous 6-digit (460614) and 7-digit (2026123) strings to prevent century errors and data corruption.

  • Fiscal Logic: Built-in support for US (October 1 start) and Japanese (April 1 start) fiscal systems.

  • Fast-Path Execution: Utilizes datetime.fromisoformat for high-performance processing of standard data.

  • Ordinal Formatting: Human-friendly outputs (e.g., “1st week”, “3rd week”).

  • Zero External Dependencies: Uses only the Python Standard Library (3.10+).

Installation

pip install calendar-smith

To contribute or run tests:

git clone https://github.com/youruser/calendar-smith.git
cd calendar-smith
pip install -e ".[dev]"
pytest

CLI Commands

1. calendar-smith-csv

Appends a fiscal_year column to an existing CSV file.

calendar-smith-csv records.csv records_with_fy.csv --system jp --date-column created_at

2. calendar-smith-solve

Lists the Monday-to-Sunday date ranges for every ISO week in a given year.

calendar-smith-solve 2026

3. calendar-smith-nth

Interactive tool to find the ordinal week of the month and the ISO week of the year for any date.

$ calendar-smith-nth
Date? [yyyy-mm-dd] >> 2026-02-17
Result:
  Date:       2026-02-17 (Tuesday)
  Month Week: The 3rd week
  Year Week:  The 8th week

4. calendar-smith-windows

Generate a series of future dates by stepping forward in time with a specified window size and number of repeats.

calendar-smith-windows 2026-03-17 7 4

Date Parsing Rules

To ensure data integrity, calendar-smith follows these parsing rules:

  • Accepted: 2026-02-17, 2026/02/17, 2026.02.17, 2026-2-17, 20260217.

  • Rejected:
    • 260217 (6-digit): Rejected to avoid century ambiguity (1926 vs 2026).

    • 2026123 (7-digit): Rejected because it could be Jan 23rd or Dec 3rd.

API Example

from calendar_smith import get_fiscal_year, to_date, get_nth_week_of_month, get_dates_windows

# Parse a messy but valid string
d = to_date("2026/4/1")

# Get Japanese Fiscal Year (2026)
fy_jp = get_fiscal_year(d, system="jp")

# Get US Fiscal Year (2026 - starts Oct 2025)
fy_us = get_fiscal_year(d, system="us")

# Get week of month
week_num = get_nth_week_of_month(d)

# Generate next 4 weeks (returns list of (start, end) date tuples)
future_windows = get_dates_windows(d, window_size=7, repeats=4)

License

MIT License. See LICENSE 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

calendar_smith-0.2.0.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

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

calendar_smith-0.2.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file calendar_smith-0.2.0.tar.gz.

File metadata

  • Download URL: calendar_smith-0.2.0.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for calendar_smith-0.2.0.tar.gz
Algorithm Hash digest
SHA256 dfe6484c7bd37e8d79be7e82aebd33622533d58aedc11de4c7f6daf836444e70
MD5 0973cc33b6c315681a5a7f12b140c343
BLAKE2b-256 1ede9e71200b18989929e69789a77a11b80bb2488a8c553049f4220fee1f9f24

See more details on using hashes here.

File details

Details for the file calendar_smith-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: calendar_smith-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for calendar_smith-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b0218ce09f8a413c55f8ee539b6796b880dc6840f1232b22a73487aacb41a529
MD5 da11da44869256bf99f447f12b5c1729
BLAKE2b-256 0b3abd32de6e764aab692c7afd0045d95774819d704203f00b2b87c7e6b0275f

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