Skip to main content

Checking the date for belonging to a non-working day, according to official decrees and orders.

Project description

🗓️ isdayoff-api

Production Calendar API Client

PyPI - Version PyPI - Python Version PyPI - Downloads GitHub License CI

🐍 Async + Sync Python client for isdayoff.ru – production calendar data for 7 countries.

Check if a date is a working day, a day off, or a shortened day according to official government decrees.

This is a fork of the original kobylinsky-m/isdayoff.


📦 Installation

pip install isdayoff-api

Requires Python 3.11+.


🚀 Quick Start

Async (recommended)

import asyncio
from isdayoff import DateType, ProdCalendar


async def main():
    async with ProdCalendar(locale="us") as calendar:
        if await calendar.today() == DateType.WORKING:
            print("Today is a working day ✅")
        else:
            print("Today is a day off 🎉")


asyncio.run(main())

Sync

from isdayoff import DateType, SyncProdCalendar


with SyncProdCalendar(locale="us") as calendar:
    if calendar.today() == DateType.WORKING:
        print("Today is a working day ✅")
    else:
        print("Today is a day off 🎉")

🌍 Supported Locales

Code Country
ru Russia
kz Kazakhstan
by Belarus
us United States
uz Uzbekistan
tr Turkey
lv Latvia

📖 API Reference

All methods are available on both ProdCalendar (async) and SyncProdCalendar (sync).

Parameters

Parameter Type Default Description
locale str "ru" Country code
pre bool False Mark shortened pre‑holiday days
covid bool False Mark working days due to COVID‑19
sd bool False Consider 6‑day work week

Methods

# ── Async ──
await calendar.today(locale="ru", pre=True, covid=True, sd=True)
await calendar.tomorrow()
await calendar.date(date(2024, 8, 25))
await calendar.month(date(2024, 8, 1))
await calendar.year(date(2024, 1, 1))
await calendar.range_date(date(2024, 1, 1), date(2024, 5, 1))
calendar.is_leap(date(2024, 1, 1))

# ── Sync ──
calendar.today(locale="ru", pre=True, covid=True, sd=True)
calendar.tomorrow()
calendar.date(date(2024, 8, 25))
calendar.month(date(2024, 8, 1))
calendar.year(date(2024, 1, 1))
calendar.range_date(date(2024, 1, 1), date(2024, 5, 1))
calendar.is_leap(date(2024, 1, 1))

Return Types

Method Returns
today() / tomorrow() / date() DateType (enum)
month() / year() / range_date() dict[str, DateType] — ISO date → type
is_leap() bool

DateType Enum

Value Meaning
DateType.WORKING (0) Working day
DateType.NOT_WORKING (1) Day off / holiday
DateType.SHORTENED (2) Shortened pre‑holiday day
DateType.WORKING_DAY (4) Working day (special period, e.g. COVID)

📋 Full Example

import asyncio
from datetime import date
from isdayoff import DateType, ProdCalendar


async def main():
    async with ProdCalendar(locale="us") as calendar:
        month_data = await calendar.month(date(2024, 8, 1), locale="ru")
        days_off = sum(1 for v in month_data.values() if v == DateType.NOT_WORKING)
        print(f"Days off in August 2024 (RU): {days_off}")


asyncio.run(main())

🛠 Development

# Install dependencies
uv sync

# Run unit tests (mocked, no API calls)
uv run pytest

# Run integration tests (real API calls)
uv run pytest -m integration

# Build package
uv build

Test Suite

Type Count Command
🔬 Unit 40 uv run pytest
🌐 Integration 8 uv run pytest -m integration

🔗 Links


📄 License

MIT

© 2021 Maxim Kobylinsky (original author) · © 2026 Aleksandr Bevz


Data provided by isdayoff.ru

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

isdayoff_api-1.1.0.tar.gz (6.6 kB view details)

Uploaded Source

Built Distribution

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

isdayoff_api-1.1.0-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file isdayoff_api-1.1.0.tar.gz.

File metadata

  • Download URL: isdayoff_api-1.1.0.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for isdayoff_api-1.1.0.tar.gz
Algorithm Hash digest
SHA256 4b71db5f339af65d93fe5611bf738ad71d4f66ef1b279966721566fce2905538
MD5 fe569f1068de88d057d63455e5de21bb
BLAKE2b-256 4396731ae49f2e398572e72e5838a7868ee799ae1d2499cd4e13e3251fb7b1c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for isdayoff_api-1.1.0.tar.gz:

Publisher: release.yml on asbevz/isdayoff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isdayoff_api-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: isdayoff_api-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for isdayoff_api-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0cb6f182b73135cf8b9f4b4160dec6774fd522c28902bf8b3be5effacafda470
MD5 0108dd3d8a12fe50eb14ac524bfd8b5d
BLAKE2b-256 3610feec3f16c394b414e2d607556b859117257efbe05155986a5d9684771193

See more details on using hashes here.

Provenance

The following attestation bundles were made for isdayoff_api-1.1.0-py3-none-any.whl:

Publisher: release.yml on asbevz/isdayoff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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