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 Tests Code style

🐍 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.0.1.tar.gz (8.8 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.0.1-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: isdayoff_api-1.0.1.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for isdayoff_api-1.0.1.tar.gz
Algorithm Hash digest
SHA256 693c40d231efd5b179b5b879afa0d75bef9bb552fd03eb0ac17c74f1f47d2331
MD5 cb2510b0ff56bd79b5bcbd7713263056
BLAKE2b-256 ddb9a5be9aca67bcb9b366ca1f20a52b1e94f80165d8675fcc8c8f277798c718

See more details on using hashes here.

File details

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

File metadata

  • Download URL: isdayoff_api-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for isdayoff_api-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 997ba4a2f18f8700c38511298ae7ecc301a6213ee43040df5b324118b8614f49
MD5 9eb5092471bc68cf3b20c6bb1eb481dc
BLAKE2b-256 dcc19e57a1ac37d5cb69b2d1962f252e8caae6a9ddc8977f05c20b9d3bf19ff6

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