Library with a collection of usefull classes and methods to DRY
Project description
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
holidayslibrary 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 pip
pip install mango-calendar
# Using uv (recommended)
uv add 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 communitiescalendar_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 calculationsname_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 holidaysteps_forward(int): Days to go forward from holidaystart_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.md
Dependencies
holidays>=0.76: Holiday datanumpy>=2.3.1: Numerical operationspandas>=2.3.1: Data manipulationpolars>=1.31.0: Fast DataFrame operationspyarrow>=20.0.0: Columnar data formatpycountry>=24.6.1: Country informationunidecode>=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" -vbefore 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mango_calendar-0.1.0a1.tar.gz.
File metadata
- Download URL: mango_calendar-0.1.0a1.tar.gz
- Upload date:
- Size: 45.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
896c9441708220eeaf1ee9f06227d703c3d0ed109cb12cc050863bae62c03ea4
|
|
| MD5 |
bfc235cf1a80fb3ad9fcf95f37d9888c
|
|
| BLAKE2b-256 |
306036bc3777362eac05429b5d08df6a11b53088a40b41584d0e7c3fe9e58ce4
|
File details
Details for the file mango_calendar-0.1.0a1-py3-none-any.whl.
File metadata
- Download URL: mango_calendar-0.1.0a1-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8deb9e98703c5a44e053de7286816f7c9ec47bca6002bb6f866e8d71199ef4e1
|
|
| MD5 |
72ebfaef8681f2d20e2ad213330dcdc5
|
|
| BLAKE2b-256 |
86263d4cf3dc3d34c82328cfbbb9842b04215a77face91a80b7613c11367ad4e
|