Mango Calendar
A Python library for working with calendar data, holidays, and date-related features with a focus on Spanish holidays and autonomous communities.
Features
Spanish Holiday Support - Comprehensive support for Spanish national and autonomous community holidays
Multi-Country Support - Built on the holidays library for international calendar support
Flexible Data Formats - Support for both pandas and polars DataFrames
Weighted Communities - Assign weights to different autonomous communities
Distance Calculations - Calculate distances to holidays for time-series analysis
Calendar Events - Support for commercial events like Black Friday
COVID Lockdown Data - Built-in COVID-19 lockdown period data
Pivot Functionality - Transform calendar data into pivot tables
Type Hints - Full type annotation support for better IDE integration
Installation
Using uv:
# Create virtual environment with Python 3.11
uv venv --python 3.11
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv add mango-calendar
Using pip:
pip install mango-calendar
Quick Start
from mango_calendar import get_calendar
# Get Spanish holidays for 2024
holidays_df = get_calendar(country="ES", start_year=2024, end_year=2025)
print(holidays_df.head())
Usage Examples
Basic Holiday Calendar
from mango_calendar import get_calendar
# Get basic Spanish holidays
holidays = get_calendar(
country="ES",
start_year=2024,
end_year=2025
)
print(holidays[['date', 'name']].head())
Advanced Features
# Get holidays with autonomous communities and weights
holidays_with_communities = get_calendar(
country="ES",
start_year=2024,
end_year=2025,
communities=True,
return_weights=True,
calendar_events=True # Include Black Friday
)
# Calculate distances to holidays
holidays_with_distances = get_calendar(
country="ES",
start_year=2024,
end_year=2025,
communities=True,
return_distances=True,
distances_config={
"steps_back": 7,
"steps_forward": 7
}
)
Date Utilities
from mango_calendar.date_utils import get_holidays_df, get_covid_lockdowns
# Get holidays in a specific format with window bounds
holidays_polars = get_holidays_df(
steps_back=3,
steps_forward=7,
start_year=2024,
country="ES",
output_format="polars"
)
# Get COVID lockdown periods
covid_data = get_covid_lockdowns()
Pivot Calendar Data
# Create a pivot table of holidays
pivot_calendar = get_calendar(
country="ES",
start_year=2024,
end_year=2025,
communities=True,
return_weights=True,
pivot=True,
pivot_keep_communities=True
)
API Reference
get_calendar()
Main function to retrieve calendar data.
Parameters:
country (str): Country code (default: “ES”)
start_year (int): Start year for the calendar (default: 2010)
end_year (int): End year for the calendar (default: current year + 2)
communities (bool): Include autonomous community holidays (default: False)
weight_communities (dict): Custom weights for communities
calendar_events (bool): Include events like Black Friday (default: False)
return_weights (bool): Return community weights (default: None)
return_distances (bool): Return distance calculations (default: False)
distances_config (dict): Configuration for distance calculations
name_transformations (bool): Apply name transformations (default: True)
pivot (bool): Return data in pivot format (default: False)
pivot_keep_communities (bool): Keep communities when pivoting (default: False)
Returns:
pd.DataFrame: Calendar data with requested features
get_holidays_df()
Get holidays dataframe with window bounds.
Parameters:
steps_back (int): Days to go back from holiday
steps_forward (int): Days to go forward from holiday
start_year (int): Start year (default: 2014)
country (str): Country code (default: “ES”)
output_format (str): “polars” or “pandas” (default: “polars”)
Development Setup
Prerequisites
Python 3.12+
uv (recommended) or pip
Setup
# Clone the repository
git clone <repository-url>
cd mango_calendar
# Install dependencies
uv sync
# Run tests
python run_tests.py
Project Structure
mango_calendar/ ├── src/ │ └── mango_calendar/ │ ├── __init__.py │ ├── calendar_features.py │ └── date_utils.py ├── tests/ │ ├── test_calendar_features.py │ ├── test_date_utils.py │ └── test_init.py ├── pyproject.toml └── README.rst
Dependencies
holidays>=0.76: Holiday data
numpy>=2.3.1: Numerical operations
pandas>=2.3.1: Data manipulation
polars>=1.31.0: Fast DataFrame operations
pyarrow>=20.0.0: Columnar data format
pycountry>=24.6.1: Country information
unidecode>=1.4.0: Unicode text processing
Code Quality
This project uses:
Ruff: For linting and code formatting
Type hints: Full type annotation support
pytest: For testing
PEP 8: Code style compliance
Docstring conventions: PEP 257 compliance
Contributing
Fork the repository
Create a feature branch (git checkout -b feature/awesome-feature)
Commit your changes (git commit -m 'Add awesome feature')
Push to the branch (git push origin feature/awesome-feature)
Open a Pull Request
Development Guidelines
Follow PEP 8 style guidelines
Add type hints to all functions
Write comprehensive docstrings
Include tests for new features
Run uv run coverage run -m unittest discover -s tests -p "test_*.py" -v before submitting
License
This project is developed by baobab soluciones (mango@baobabsoluciones.es).
Support
For questions, issues, or contributions, please contact:
Email: mango@baobabsoluciones.es
Create an issue on the repository
—
Made with ❤️ by baobab soluciones
Metadata
Release files for mango-calendar 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mango_calendar-1.0.1.tar.gz | 44.4 kB | Without provenance | Details for mango_calendar-1.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mango_calendar-1.0.1-py3-none-any.whl | Python 3 | none | any | Details for mango_calendar-1.0.1-py3-none-any.whl |
Total release size: 62.6 kB
Release files / mango_calendar-1.0.1.tar.gz
| Download URL | mango_calendar-1.0.1.tar.gz |
|---|---|
| Size | 44.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e0c3030c392232cad4d56626ae5587d44e6454f621204f8b35b5fe39a256cf65
|
|
BLAKE2b-256 checksum How to use checksums |
9c4fd48bcef450ee1cb23fde29c968c6cb18cc04cd2e1b5cf3dc166eff1aaa87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / mango_calendar-1.0.1-py3-none-any.whl
| Download URL | mango_calendar-1.0.1-py3-none-any.whl |
|---|---|
| Size | 18.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
98620fdbab979d74f50e232a1047ad84555a48bec505d2578b5555a2fbc22c7e
|
|
BLAKE2b-256 checksum How to use checksums |
fa730a70c820fe4c82a1846759dd9671a0779f28a33eb5ed1d95fe79472703a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for mango-calendar 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.