Skip to main content

Async client for Hebcal API

Project description

Hebcal API Client

PyPI version Python 3.12+ License: MIT Ruff

A comprehensive, production-grade Python client for the Hebcal Jewish Calendar API. Modernized with Pydantic v2, httpx, and strict type safety.

Features

  • 🗓️ Functional API - Clean, functional interface for all Hebcal endpoints.
  • Pydantic Validation - Type-safe request models with automatic parameter validation.
  • 🇮🇱 Clean Hebrew Output - Specialized formatters that prioritize clean, nikud-free Hebrew text.
  • 🕯️ Advanced Shabbat & Zmanim - Precise halachic times for any location worldwide.
  • 🌾 Omer Support - Full support for fetching and formatting the daily Omer count.
  • Async Native - Built on httpx for high-performance asynchronous operations.
  • 📍 Flattened Location Support - Direct use of Geonames, coordinates, or city names.

Installation

pip install hebcal-api

Or with uv:

uv add hebcal-api

Quick Start

Basic Calendar Usage

Get Jewish holidays and events for any location.

from hebcal_api import CalendarRequest, fetch_calendar
from hebcal_api.utils.calendar_formatter import format_calendar_events

# Create a request for Jerusalem
request = CalendarRequest(
    location="Jerusalem",
    geonameid=281184,
    maj=True,    # Major holidays
    min=True     # Minor holidays
)

# Fetch data synchronously
response = fetch_calendar(request)

# Format for display (Always clean Hebrew by default)
print(format_calendar_events(response))

Shabbat Times

Fetch candle lighting and Havdalah times.

from hebcal_api import ShabbatRequest, fetch_shabbat

request = ShabbatRequest(
    geonameid=5128581,  # New York City
    c=True,             # Candle lighting
    s=True              # Shabbat info
)

response = fetch_shabbat(request)

for event in response.items:
    print(f"{event.title}: {event.date}")

Omer Count Today

Easily track the daily Omer count.

from hebcal_api import CalendarRequest, fetch_calendar

request = CalendarRequest(o=True)  # Enable Omer count
response = fetch_calendar(request)

# Find the Omer event
omer_event = next((i for i in response.items if i.type == "omer"), None)
if omer_event:
    print(f"Today is: {omer_event.title}")

Async Usage

Full async support for integration into modern web frameworks.

import asyncio
from hebcal_api import CalendarRequest, fetch_calendar_async

async def main():
    request = CalendarRequest(geonameid=281184)
    response = await fetch_calendar_async(request)
    
    for event in response.items:
        print(f"{event.title} - {event.hebrew}")

asyncio.run(main())

API Reference

Functional Interface

The library provides high-level fetch_* functions for both sync and async execution:

Endpoint Sync Function Async Function
/hebcal fetch_calendar fetch_calendar_async
/shabbat fetch_shabbat fetch_shabbat_async
/zmanim fetch_zmanim fetch_zmanim_async
/converter fetch_converter fetch_converter_async
/yahrzeit fetch_yahrzeit fetch_yahrzeit_async
/leyning fetch_leyning fetch_leyning_async

Unified Client

For custom network configuration, use the HebcalClient:

from hebcal_api import HebcalClient

# Configure custom timeout or headers
response = HebcalClient.execute(
    endpoint=Endpoint.CALENDAR,
    request=request,
    response_model=CalendarResponse,
    timeout=30
)

Error Handling

The library uses a hierarchy of specific exceptions:

  • HebcalError: Base exception for all library errors.
  • HebcalNetworkError: Raised for HTTP connection or status code failures.
  • HebcalValidationError: Raised when request parameters are invalid (e.g., missing location).
  • HebcalParseError: Raised when the API response cannot be parsed into the expected models.

Formatting Utilities

Located in hebcal_api.utils.calendar_formatter, these helper functions turn raw data into professional messages.

  • format_calendar_events(response): Returns a beautiful, multi-line string of events.
  • remove_hebrew_nikud(text): Manually strip diacritics from any Hebrew string.

Development

Set up the project using uv:

git clone https://github.com/sudo-py-dev/hebcal-api.git
cd hebcal-api
uv sync

Code Quality

We enforce strict linting and type checking:

uv run ruff check      # Linting
uv run ruff format     # Formatting
uv run pyright src/    # Type safety
uv run pytest          # Testing

License

MIT License. See LICENSE for details.

Support

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

hebcal_api-0.2.0.tar.gz (42.3 kB view details)

Uploaded Source

Built Distribution

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

hebcal_api-0.2.0-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file hebcal_api-0.2.0.tar.gz.

File metadata

  • Download URL: hebcal_api-0.2.0.tar.gz
  • Upload date:
  • Size: 42.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Zorin OS","version":"18","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for hebcal_api-0.2.0.tar.gz
Algorithm Hash digest
SHA256 916a6ac886d117ec45456a2a7d04f0d09be0d5a3239e78bfdba531aa46431a95
MD5 9502445ae3dc54b5bd28f2f4301fdcc7
BLAKE2b-256 6b51619fc55e21fc8a3aa06f669cafe6e30321fa7bed7626aa73155930ec2b91

See more details on using hashes here.

File details

Details for the file hebcal_api-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: hebcal_api-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 21.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Zorin OS","version":"18","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for hebcal_api-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b4bc21a151f7ddff5d0b86cad4d5ed1d7cedd5ccd362770a47e066fdc3755a94
MD5 88f8fb73c14f0d20b9f715bfdabf8fd3
BLAKE2b-256 943b3ff4ef90be586f521f36dce29450a2aec3dd78e2fe17a362daf10cc0a5bf

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