Skip to main content

Dates actions for RPA

Project description

RPA Dates 2.0

A robust, fault-tolerant Python library for date calculations in Robotic Process Automation (RPA).

rpa-dates simplifies complex date arithmetic—especially regarding working days and holidays—ensuring your automation bots never crash due to unexpected calendar edge cases or API outages.

License: MIT Python 3.10+ uv Code Style: Ruff Checked with mypy Build Status

Key Features

  • Resilient Holiday Fetching: Uses a "Chain of Responsibility" fallback strategy.
    1. Local Library (0ms latency, works offline).
    2. Nager.Date API (Primary Web API).
    3. OpenHolidays API (Backup Web API).
    • If one fails, the next one takes over automatically.
  • Production-Grade Working Day Logic:
    • Correctly handles year boundaries (e.g., adding 5 working days to Dec 29th).
    • Preserves time components (e.g., 14:30 remains 14:30).
    • Supports positive and negative offsets.
  • RPA-Friendly: Designed to handle string, date, and datetime inputs interchangeably.
  • Fiscal Year Support: Built-in utilities for fiscal calendars.

Installation

Install using uv (recommended) or pip:

uv add rpa-dates
# OR
pip install rpa-dates

Quick Start

Basic Date Operations

The DateService accepts strings, dates, or datetimes and normalizes them automatically.

from rpa_dates import DateService

ds = DateService()

# Normalizes inputs automatically
dt = ds.normalize("11.02.2025")  # Returns datetime object

# Easy offsets
future_date = ds.offset("01.01.2025", days=10, months=1)
print(future_date)  # 11.02.2025

Working with Business Days

Calculate deadlines accurately by skipping weekends and public holidays.

# Calculate +5 working days from a Friday
# Skips Sat, Sun, and any public holidays found for the country (e.g., 'US')
deadline = ds.working_day_offset(5, "2025-07-03", country_code="US")

print(deadline)
# If July 4th is a holiday, this correctly skips it!

Finding the Nth Working Day

Perfect for "Report is due on the 3rd working day of the month" scenarios.

# Get the 3rd working day of January 2025 in Poland (PL)
report_date = ds.nth_working_day_of_month(3, "2025-01-01", country_code="PL")

print(report_date)
# 2025-01-01 is New Year (Holiday) -> Skip
# 2025-01-02 (Thu) -> 1st WD
# 2025-01-03 (Fri) -> 2nd WD
# 2025-01-04 (Sat) -> Skip
# 2025-01-05 (Sun) -> Skip
# 2025-01-06 (Mon) is Epiphany (Holiday) -> Skip
# 2025-01-07 (Tue) -> 3rd WD (Result)

Configuration

You can customize the service behavior using DateConfig.

from rpa_dates import DateService, DateConfig

config = DateConfig(
    default_input_format='%Y-%m-%d',
    fiscal_year_start_month=10,  # e.g., US Government fiscal year
    api_timeout_seconds=5
)

ds = DateService(config=config)

Architecture: The Provider Fallback

The library guarantees high availability for holiday data using a multi-provider strategy.

  • LocalPythonHolidayProvider: Checks the local holidays Python package. Fast and offline.
  • NagerDateV3Provider: Queries date.nager.at.
  • NagerDateV4Provider: Queries the newer V4 API.
  • OpenHolidaysProvider: Queries openholidaysapi.org.

You don't need to configure this; it happens automatically inside ProviderFactory.

Contributing

I use uv for dependency management.

  1. Clone the repo:

    git clone [https://github.com/21010/rpa-dates.git](https://github.com/21010/rpa-dates.git)
    cd rpa-dates
    
  2. Install dependencies:

    uv sync
    
  3. Run Tests:

    uv run pytest
    

License

This project is licensed under the MIT License - see the 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

rpa_dates-2.0.0.tar.gz (51.9 kB view details)

Uploaded Source

Built Distribution

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

rpa_dates-2.0.0-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file rpa_dates-2.0.0.tar.gz.

File metadata

  • Download URL: rpa_dates-2.0.0.tar.gz
  • Upload date:
  • Size: 51.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.6

File hashes

Hashes for rpa_dates-2.0.0.tar.gz
Algorithm Hash digest
SHA256 2675a76f1698bd4d9a933c11a1f44443422764d939656c9b1691ee77f911feb1
MD5 e071c49ecd4b7bc114cd9858750f4fd2
BLAKE2b-256 282aa44831d7c1441b62f8065febdaa3d181db31d628aa7c001688f4b5482607

See more details on using hashes here.

File details

Details for the file rpa_dates-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: rpa_dates-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.6

File hashes

Hashes for rpa_dates-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2e15ecd0328b9eb0a94e494059eea00139251f8b2b3be2487a52ca8a2d3ed680
MD5 6d898924f50bdc9ca11f60bf3ee779f3
BLAKE2b-256 49c96fa67cbaf8c89b6ad36f29905b0e7e5e891987c4f1f2b7a720f3f32aa3a5

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