Skip to main content

OpenDate

Date/time library built on Pendulum with business day support and financial calculations. Parsing runs on a Rust port of the dateutil parser.

pip install opendate

Quick Reference

# Imports
import opendate
from opendate import Date, DateTime, Time, Interval
from opendate import EST, UTC, LCL, WeekDay
from opendate import get_calendar, set_default_calendar

# Basics
today = Date.today()
now = DateTime.now()
parsed = Date.parse('T-3b')  # 3 business days ago

# Business days
today.b.add(days=5)                    # 5 business days forward
today.calendar('LSE').b.subtract(days=3)  # London calendar

# Module-wide default calendar
set_default_calendar('LSE')

Module Functions

Function Description
date(y, m, d) Create Date
datetime(y, m, d, h, m, s, tzinfo=UTC) Create DateTime (defaults to UTC)
time(h, m, s, tzinfo=UTC) Create Time (defaults to UTC)
interval(start, end) Create Interval
parse(s, calendar=None) Parse to DateTime (calendar optional, uses module default)
instance(obj) Convert datetime/date/time (preserves obj's tz if present, else UTC)
now(tz=None) Current DateTime (local tz if None)
today(tz=None) Today at 00:00:00 (local tz if None)
get_calendar(name) Calendar for name, in any case ('nyse' and 'NYSE' are the same)
set_default_calendar(name) Set module default calendar
get_default_calendar() Get current default calendar name
available_calendars() List available calendars

Date

Constructors

Method Description
Date(y, m, d) Create from components
Date.today() Current date (uses local tz for current day)
Date.parse(s, calendar='NYSE') Parse string. Calendar used for business day codes (T-3b, P), defaults to NYSE
Date.instance(obj) From datetime.date, Timestamp, datetime64
Date.fromordinal(n) From ordinal
Date.fromtimestamp(ts, tz=None) From Unix timestamp (UTC if None)

Properties

Inherited from pendulum: year, month, day, day_of_week, day_of_year, week_of_month, week_of_year, days_in_month, quarter

Arithmetic

Method Description
add(years, months, weeks, days) Add time units
subtract(years, months, weeks, days) Subtract time units
diff(other) Get Interval between dates

Period Boundaries

Method Description
start_of(unit) Start of day/week/month/quarter/year
end_of(unit) End of day/week/month/quarter/year
first_of(unit, day_of_week=None) First (or first weekday) of period
last_of(unit, day_of_week=None) Last (or last weekday) of period
nth_of(unit, n, day_of_week) Nth occurrence of weekday in period

Navigation

Method Description
next(day_of_week=None) Next occurrence of weekday
previous(day_of_week=None) Previous occurrence of weekday
closest(d1, d2) Closer of two dates
farthest(d1, d2) Further of two dates
average(other=None) Midpoint between dates
lookback(unit) One unit back: day/week/month/quarter/year

Business Day

Method Description
business() or .b Enable business day mode
calendar(name) Set calendar (NYSE, LSE, etc.)
is_business_day() Check if business day
business_hours() Returns (open, close) or (None, None)

Extras

Method Description
isoweek() ISO week number (1-53)
nearest_start_of_month() Nearest month start (threshold: day 15)
nearest_end_of_month() Nearest month end (threshold: day 15)
weekday_or_previous_friday() Snap weekend to Friday
to_string(fmt) Format (%- becomes %# on Windows)

DateTime

Constructors

Method Description
DateTime(y, m, d, h, m, s, us, tzinfo) Create from components
DateTime.now(tz=None) Current time in tz, any tzinfo (local tz if None)
DateTime.today(tz=None) Today at 00:00:00 (local tz if None, differs from pendulum)
DateTime.parse(s, calendar='NYSE') Parse string or timestamp. A string keeps an offset it spells out, else UTC. A date code (T, P) gives a naive midnight. A timestamp gives local wall time in LCL. Calendar used for business day codes, defaults to NYSE
DateTime.instance(obj, tz=None) From datetime, Timestamp, datetime64. Preserves obj's tz if present, else uses tz param, else UTC
DateTime.combine(date, time, tzinfo=None) Combine Date and Time (uses time's tz if tzinfo=None)
DateTime.fromtimestamp(ts, tz=None) From Unix timestamp in tz, any tzinfo (UTC if None)
DateTime.utcfromtimestamp(ts) From timestamp as UTC
DateTime.utcnow() Current UTC time
DateTime.strptime(s, fmt) Parse with format
DateTime.fromordinal(n) From ordinal

Properties

Inherited from pendulum: year, month, day, hour, minute, second, microsecond, day_of_week, day_of_year, week_of_month, week_of_year, days_in_month, quarter, timestamp, timezone, tz, timezone_name, offset, offset_hours

Extraction

Method Description
date() Extract Date
time() Extract Time (preserves tz)
epoch() Unix timestamp (alias for timestamp())

Timezone

Method Description
in_timezone(tz) Same instant in tz, a zone name or any tzinfo. On a naive value, keeps the wall clock and sets tz
in_tz(tz) Alias for in_timezone
astimezone(tz) Same instant in tz, a tzinfo or None. Reads a naive value as system local time. None means the system local zone

Arithmetic & Navigation

Same as Date: add, subtract, diff, start_of, end_of, first_of, last_of, nth_of, next, previous

Business Day

Same as Date: business(), .b, calendar(name), is_business_day(), business_hours()

Formatting

Method Description
format(fmt, locale=None) Format with tokens
isoformat() ISO 8601 string
rfc3339() RFC 3339 (same as isoformat)
to_date_string() YYYY-MM-DD
to_datetime_string() YYYY-MM-DD HH:MM:SS
to_time_string() HH:MM:SS
to_iso8601_string() Full ISO 8601

Time

Constructors

Method Description
Time(h, m, s, us, tzinfo) Create from components
Time.parse(s, fmt=None) Parse string. UTC unless the string ends in Z or a signed hh:mm or hhmm offset
Time.instance(obj, tz=None) From datetime.time, datetime. Preserves obj's tz if present, else uses tz param, else UTC

Properties

hour, minute, second, microsecond, tzinfo

Methods

Method Description
in_timezone(tz) Same instant as a time of day in tz, converted on today's date, so a daylight-saving zone uses today's offset. Reads a naive time as UTC
in_tz(tz) Alias for in_timezone

Interval

Constructor

Interval(start, end)  # start/end are Date or DateTime

Properties

Property Description
days Signed calendar days (business days if .b)
months Float with fractional months (differs from pendulum)
years Whole years, truncated toward zero
quarters Approximate: 4 * days / 365, negative when reversed
start Start date
end End date

Methods

Method Description
business() or .b Enable business day mode
calendar(name) Set calendar
range(unit, amount=1) Iterate by unit (days/weeks/months/years); a reversed interval steps backward
is_business_day_range() Yields bool for each day
start_of(unit) List of period starts in interval
end_of(unit) List of period ends in interval
yearfrac(basis) Year fraction under a day-count basis

yearfrac Basis

Each basis equals its QuantLib day counter bitwise on an ascending interval. A reversed interval returns the negated ascending value. A basis outside 0-8 raises ValueError, on equal endpoints too.

Basis Convention QuantLib twin
0 30/360 US (SIA) Thirty360(USA)
1 ACT/ACT ISDA ActualActual(ISDA)
2 ACT/360 Actual360()
3 ACT/365 Fixed Actual365Fixed()
4 30E/360 (Eurobond) Thirty360(European)
5 ACT/365.25 Actual36525()
6 30/360 Bond Basis Thirty360(BondBasis)
7 30E/360 ISDA Thirty360(German)
8 ACT/365 No Leap Actual365Fixed(NoLeap)

Parsing

OpenDate parses with a Rust port of the dateutil parser. It reads the formats dateutil reads, with fuzzy matching and format detection.

Special Codes

Code Meaning
T or N Today
Y Yesterday
P Previous business day
M Last day of previous month

Business Day Offsets

Pattern Example Meaning
{code}+-{n} T-5 5 calendar days ago
{code}+-{n}b T-3b 3 business days ago

Parser Capabilities

  • Dates: ISO 8601, US/European formats, compact, natural language
  • Times: 12/24-hour, with/without seconds, AM/PM, timezones
  • Combined: Any date + time combination, Unix timestamps (auto-detects ms/s)
  • Fuzzy: Extracts dates from text containing other content
# Accepted forms
Date.parse('2024-01-15')
Date.parse('Jan 15, 2024')
Date.parse('15/01/2024')
DateTime.parse('2024-01-15T09:30:00Z')
DateTime.parse(1640995200)  # Unix timestamp
DateTime.parse('meeting on Jan 15 at 3pm')  # Fuzzy
DateTime.parse('2024-01-15T24:00')  # ISO 24:00 is 00:00 on 2024-01-16

Rejected Input

parse returns None on input it cannot read. With raise_err=True it raises ValueError, and the message names the input. Rejected input includes an all-numeric string that is not 8 digits (Date.parse), an hour, minute or second past its range (25:00, 12:61), and a malformed ISO date (2024-13-01, 2024-02-30).

Date.parse('2024011', raise_err=True)   # ValueError: Invalid date: 2024011
Time.parse('25:00', raise_err=True)     # ValueError: Failed to parse time: 25:00
DateTime.parse('2024-02-30')            # None

Business Days

Default Calendar

from opendate import set_default_calendar, get_default_calendar

get_default_calendar()      # 'NYSE' initially
set_default_calendar('LSE') # Module-wide

Per-Operation Calendar

date.calendar('NYSE').b.add(days=5)
date.calendar('LSE').is_business_day()

Available Calendars

All calendars from pandas-market-calendars: NYSE, LSE, XLON, XPAR, XFRA, XJPX, XHKG, etc. A name is accepted in any case.

from opendate import available_calendars
print(available_calendars())

Business Day Examples

# Add/subtract business days
Date(2024, 3, 29).b.add(days=1)  # Skips Good Friday + weekend

# Period boundaries
Date(2024, 7, 1).b.start_of('month')  # First business day of July
Date(2024, 4, 30).b.end_of('month')   # Last business day of April

# Iterate business days only
for d in Interval(start, end).b.range('days'):
    print(d)

# Count business days
Interval(start, end).b.days

Timezones

Built-in

Constant Zone
UTC UTC
GMT GMT
EST America/New_York
LCL System local

Custom

from opendate import Timezone
tokyo = Timezone('Asia/Tokyo')
dt = DateTime(2024, 1, 15, 9, 30, tzinfo=tokyo)

Conversion

Every method that takes a zone accepts any tzinfo: a pendulum zone, zoneinfo.ZoneInfo, pytz, a fixed datetime.timezone, or a dateutil zone. opendate stores a named zone as the pendulum zone of that name and a fixed offset as a fixed pendulum zone. Pendulum reads a dateutil zone as UTC. opendate converts by that zone's offset.

dt.in_timezone(UTC)                                   # same instant in UTC; in_tz() is an alias
dt.in_timezone(dateutil.tz.gettz('Australia/Sydney'))  # timezone_name is 'Australia/Sydney'
dt.astimezone(None)                                   # same instant in the system local zone

Decorators

Decorator Effect
@expect_date Converts arg to Date
@expect_datetime Converts arg to DateTime
@expect_time Converts arg to Time
@expect_date_or_datetime Converts to Date or DateTime
@prefer_utc_timezone Adds UTC if no tz
@expect_utc_timezone Converts result to UTC
@prefer_native_timezone Adds local tz if no tz
@expect_native_timezone Converts result to local

Extras Module

Legacy standalone functions:

from opendate import is_business_day, is_within_business_hours, overlap_days

is_business_day()              # Is today a business day?
is_within_business_hours()     # Is current time in market hours?

overlap_days(int1, int2)           # Do intervals overlap? (bool)
overlap_days(int1, int2, days=True) # Day count of overlap (int)

Pendulum Differences

Feature Pendulum OpenDate
DateTime.today() Current time Start of day (00:00:00)
DateTime.instance() default tz None Preserves obj's tz if present, else UTC
Time.parse() default tz None UTC
Interval.months int float (fractional)
Business day support No Yes
Default calendar N/A set_default_calendar()

Examples

Month-End Dates

interval = Interval(Date(2024, 1, 1), Date(2024, 12, 31))
month_ends = interval.end_of('month')
business_month_ends = interval.b.end_of('month')

Third Friday (Options Expiration)

Date.today().add(months=1).start_of('month').nth_of('month', 3, WeekDay.FRIDAY)

Interest Accrual

days_fraction = Interval(issue_date, settlement_date).yearfrac(2)  # Actual/360
accrued = coupon_rate * days_fraction

Market Hours Check

now = DateTime.now(tz=get_calendar('NYSE').tz)
if now.calendar('NYSE').is_business_day():
    open_time, close_time = now.business_hours()
    if open_time and open_time <= now <= close_time:
        print("Market open")

Development

See docs/developer-guide.md

License

MIT - Built on Pendulum and pandas-market-calendars

Metadata

Release files for opendate 0.1.50

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for opendate 0.1.50
File Size Uploaded
opendate-0.1.50.tar.gz 72.0 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for opendate 0.1.50
File
opendate-0.1.50-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
opendate-0.1.50-cp313-cp313-musllinux_1_1_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.1+ x86-64 Details
opendate-0.1.50-cp313-cp313-musllinux_1_1_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.1+ ARM64 Details
opendate-0.1.50-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
opendate-0.1.50-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
opendate-0.1.50-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
opendate-0.1.50-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
opendate-0.1.50-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
opendate-0.1.50-cp312-cp312-musllinux_1_1_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.1+ x86-64 Details
opendate-0.1.50-cp312-cp312-musllinux_1_1_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.1+ ARM64 Details
opendate-0.1.50-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
opendate-0.1.50-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
opendate-0.1.50-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
opendate-0.1.50-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details
opendate-0.1.50-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
opendate-0.1.50-cp311-cp311-musllinux_1_1_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.1+ x86-64 Details
opendate-0.1.50-cp311-cp311-musllinux_1_1_aarch64.whl CPython 3.11 CPython 3.11 Linux musl 1.1+ ARM64 Details
opendate-0.1.50-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
opendate-0.1.50-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
opendate-0.1.50-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
opendate-0.1.50-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
opendate-0.1.50-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
opendate-0.1.50-cp310-cp310-musllinux_1_1_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.1+ x86-64 Details
opendate-0.1.50-cp310-cp310-musllinux_1_1_aarch64.whl CPython 3.10 CPython 3.10 Linux musl 1.1+ ARM64 Details
opendate-0.1.50-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
opendate-0.1.50-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
opendate-0.1.50-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
opendate-0.1.50-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details

Total release size: 9.8 MB

Release files / opendate-0.1.50.tar.gz

Download URL opendate-0.1.50.tar.gz
Size 72.0 kB
Tags Source
SHA-256 checksum
How to use checksums
3cf1ec4521e2dd9b8c939d372299d0724fcd7077b377bb3b903b2e7f05b1eef2
BLAKE2b-256 checksum
How to use checksums
e52eb1207b89f7a79432def66a96911a3aa4baabaa0f6aa3c3fa75c82f85df27
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp313-cp313-win_amd64.whl

Download URL opendate-0.1.50-cp313-cp313-win_amd64.whl
Size 228.2 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
5c78c0aa0640a41651ffdc9d8aa130025247b3e429af0034dbe491f1e8a4435c
BLAKE2b-256 checksum
How to use checksums
de26f149a889885a7d74b7fbd369874a1d560f806e03588c5acbdfb7353464d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp313-cp313-musllinux_1_1_x86_64.whl

Download URL opendate-0.1.50-cp313-cp313-musllinux_1_1_x86_64.whl
Size 524.4 kB
Tags CPython 3.13 Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
8646a63870d84623e4f8d41cccd89a9a8077cc4857862256e2ac72eae541cfb2
BLAKE2b-256 checksum
How to use checksums
5b66894690af299f650512d89a95fad7e9572d38fd6a261638d022ff2cdad89e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp313-cp313-musllinux_1_1_aarch64.whl

Download URL opendate-0.1.50-cp313-cp313-musllinux_1_1_aarch64.whl
Size 480.5 kB
Tags CPython 3.13 Linux musl 1.1+ ARM64
SHA-256 checksum
How to use checksums
18bf90aaa37598201b250b6aea0108100cf0221c53b4ecbb01440d6dd33ac13b
BLAKE2b-256 checksum
How to use checksums
446668958d6d772324606b186ab2c30d4e8d678e4493a0eed5b756f161534dbb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL opendate-0.1.50-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 312.2 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
49f780ff88cefb804955e763152c3056327fa2df590b5ae54ef402517048a581
BLAKE2b-256 checksum
How to use checksums
8209bc72c37ce8c8ed2c19a4554e1298cab42816272f953a427288d9d07b4e65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL opendate-0.1.50-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 302.0 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
2eb905959c2ba7122dfef06e549918c485da91f418471fc5db9188fc75a1215a
BLAKE2b-256 checksum
How to use checksums
51f7a50de52d312cba968e7a5a94992fa948eecc393dc2b7e667178c2467ed35
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp313-cp313-macosx_11_0_arm64.whl

Download URL opendate-0.1.50-cp313-cp313-macosx_11_0_arm64.whl
Size 291.3 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5531bfa605f140b1bb47a43b1101349c9b6eb4bf1461c20466e7786f7a5f22fa
BLAKE2b-256 checksum
How to use checksums
a58914e0e4ecfac8c2de5e75c2f28228ac03b9d0b88bba4f6cc9c8a34b207237
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp313-cp313-macosx_10_12_x86_64.whl

Download URL opendate-0.1.50-cp313-cp313-macosx_10_12_x86_64.whl
Size 302.3 kB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
699e44d81ea601734b27415b1cce5cc462446b068bd63b57043c2e318f5a2327
BLAKE2b-256 checksum
How to use checksums
23e46559c30a832a00da83c292f829995176265ce1eca81b51bce203b8033d30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp312-cp312-win_amd64.whl

Download URL opendate-0.1.50-cp312-cp312-win_amd64.whl
Size 228.6 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
e8f7da7aa19aca5ff3a6af079c42c1ad5dbdb4eed2fb4720e8b959a57bbb1ff7
BLAKE2b-256 checksum
How to use checksums
353f96f4d1e47f2c062de442473f3fc08776664a4f203782b7b0e4d2f5f46ef6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp312-cp312-musllinux_1_1_x86_64.whl

Download URL opendate-0.1.50-cp312-cp312-musllinux_1_1_x86_64.whl
Size 524.8 kB
Tags CPython 3.12 Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
0f546db16b08bd9052afb88229088ebf5f2134f8547e490eecec3379f958a301
BLAKE2b-256 checksum
How to use checksums
016b90c0fa2f77657b2ed4182b0ee45b9b0e2c688b5522aae23d47793145aebe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp312-cp312-musllinux_1_1_aarch64.whl

Download URL opendate-0.1.50-cp312-cp312-musllinux_1_1_aarch64.whl
Size 480.8 kB
Tags CPython 3.12 Linux musl 1.1+ ARM64
SHA-256 checksum
How to use checksums
d25cb5e0ee1fc6ffd0e749158d9bef10cdb3cca3a472738e29774c9eb43354a4
BLAKE2b-256 checksum
How to use checksums
072eb018db2aab6162e809381b842217ee861f6f99409646182039be8b3ca3db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL opendate-0.1.50-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 312.6 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
e78121d453ce79e88dd8e8275ed27536c11ff0802d277f7a3f9e53e7fae81752
BLAKE2b-256 checksum
How to use checksums
a36f3dc947d0e8d86364b125eeb3e26bfa34f84b1177673500eacade48d31491
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL opendate-0.1.50-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 302.3 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
3648ea11e5ed7be5b0c3ce45f6b6aba09998ff22cef2ff669417f566002ac831
BLAKE2b-256 checksum
How to use checksums
b8b1a5e88fc4fd4b6b7b08ab04d223127e14d0cd37496326e5ea406fb94d35db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp312-cp312-macosx_11_0_arm64.whl

Download URL opendate-0.1.50-cp312-cp312-macosx_11_0_arm64.whl
Size 291.4 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1576083cc7e97a3c58c30a10250e842793c735e8f87506ce571e560e4be675fd
BLAKE2b-256 checksum
How to use checksums
ad1bedd3e7c4e17603cd4ef0ccd84889673c2e0bd5e283f52a50492cb0ff1012
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp312-cp312-macosx_10_12_x86_64.whl

Download URL opendate-0.1.50-cp312-cp312-macosx_10_12_x86_64.whl
Size 302.7 kB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
259fd6c4204a2ac9cc072abc82f694cedaae5d2a19fc2590df1b111d4214dae8
BLAKE2b-256 checksum
How to use checksums
a0d8d8b5e21a4dc2cc1f4df276bc9a5037b373d1f89ab1625bd4349bb93f10f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp311-cp311-win_amd64.whl

Download URL opendate-0.1.50-cp311-cp311-win_amd64.whl
Size 227.9 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
d185bd94b7bff5923b85e663f9de232f90bd2033d8ec542ea41c15968fdf9631
BLAKE2b-256 checksum
How to use checksums
f9f18b0c581da06355c085704fa62406eb2800d78af69b1be4b346e07e164cda
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp311-cp311-musllinux_1_1_x86_64.whl

Download URL opendate-0.1.50-cp311-cp311-musllinux_1_1_x86_64.whl
Size 524.1 kB
Tags CPython 3.11 Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
b78f55d1844bfb82a0b63dced76e79142fe0c6ff104963c6aa88a6b0a2174844
BLAKE2b-256 checksum
How to use checksums
6666bf8df22d6fa579321e8c4854c43904149bd335fc2da3f0643baff19b3fc2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp311-cp311-musllinux_1_1_aarch64.whl

Download URL opendate-0.1.50-cp311-cp311-musllinux_1_1_aarch64.whl
Size 480.6 kB
Tags CPython 3.11 Linux musl 1.1+ ARM64
SHA-256 checksum
How to use checksums
2e14196550547642657fdb3f0ce2639961586fa7636f3f98a29d596d1b950a80
BLAKE2b-256 checksum
How to use checksums
f3baaec24180df0949f938b4f50ea4758da9fd4632191704be3eb317de279380
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL opendate-0.1.50-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 311.7 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ec13de5aa16017b0d9204228b80de7a604ffab00fda74ec6da1937355a4c9c47
BLAKE2b-256 checksum
How to use checksums
1605991b934676c03d1856c18edf92c21b99222093b1e1cbe081eca7e0ed9a2d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL opendate-0.1.50-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 302.2 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
beeef98d20897c7f3990cca2f5013896175130094b564ece7eddfca7d57a1aca
BLAKE2b-256 checksum
How to use checksums
0161f69249941822101df669d07e6252a53123cfc73a6385c8556283cd603b34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp311-cp311-macosx_11_0_arm64.whl

Download URL opendate-0.1.50-cp311-cp311-macosx_11_0_arm64.whl
Size 291.4 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
21087b082d716b39ed1aa8fba60e4bfbae998288859e10404f7f79e8e2d72386
BLAKE2b-256 checksum
How to use checksums
1363c59d7cfb139296b97a3ab5f0c22db72b01bd5d9e2da75ef44a41013be569
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp311-cp311-macosx_10_12_x86_64.whl

Download URL opendate-0.1.50-cp311-cp311-macosx_10_12_x86_64.whl
Size 302.8 kB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c6c275effe3538fc6f83d64c3b4b705d0e7ad030462ae8f600967a773e9e34a6
BLAKE2b-256 checksum
How to use checksums
167ea69fdf55a64a12cb1090603ec727ec1c4915d367a2de640e11a072c4cf3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp310-cp310-win_amd64.whl

Download URL opendate-0.1.50-cp310-cp310-win_amd64.whl
Size 228.0 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
c3fe2b444b4ac9d423490b8dcaaa32dc1896fb577f1a116293f1bc897dbf6f95
BLAKE2b-256 checksum
How to use checksums
33846ba0e97069a09c70f946c20d9a6eb7f30a9c833e70f692942c76ee820f05
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp310-cp310-musllinux_1_1_x86_64.whl

Download URL opendate-0.1.50-cp310-cp310-musllinux_1_1_x86_64.whl
Size 524.1 kB
Tags CPython 3.10 Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
dc0c311c64a6e4941575e0028fdc558b8912945c4f22ec0ac13ac2c613b3f762
BLAKE2b-256 checksum
How to use checksums
3c4575991cbb35cdf76b9e97d856435c418867e7a4d7c8ff3184916863160016
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp310-cp310-musllinux_1_1_aarch64.whl

Download URL opendate-0.1.50-cp310-cp310-musllinux_1_1_aarch64.whl
Size 480.7 kB
Tags CPython 3.10 Linux musl 1.1+ ARM64
SHA-256 checksum
How to use checksums
41efd736c07ca0347443a91cd0e1725ed82dfcea3da1a7c40d442f5b93c7c858
BLAKE2b-256 checksum
How to use checksums
32847c251bbf8276dfdb984fbf42a3efd5ae12a3435222fc8aeade3d601018a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL opendate-0.1.50-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 312.0 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
f7a936a270173110b95dae65c77748061f328aaba61688fe615072cb4d9869a5
BLAKE2b-256 checksum
How to use checksums
7acf5fba1aba824bceb235d9e19cd93bfd0e72135fc79e708d1db6d0d1fe3328
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL opendate-0.1.50-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 302.3 kB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
996a8c45b3dba0ebdd445fc424486565827d672dc8121ee32d083036103d028c
BLAKE2b-256 checksum
How to use checksums
bdef3fcf3aaae611e0bf5ad37e01e87ce31d58eab7ac7c138c3fff0e71a372cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp310-cp310-macosx_11_0_arm64.whl

Download URL opendate-0.1.50-cp310-cp310-macosx_11_0_arm64.whl
Size 291.5 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6d167b3a87fe37cc075639bcfee3126d11ea1321b7c072cf7ef62f8d24e6de3b
BLAKE2b-256 checksum
How to use checksums
614853f32d804e048b5be3592b2400829ac07f7b1d2d62f0abdbe9e500e27591
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / opendate-0.1.50-cp310-cp310-macosx_10_12_x86_64.whl

Download URL opendate-0.1.50-cp310-cp310-macosx_10_12_x86_64.whl
Size 302.8 kB
Tags CPython 3.10 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
fb5be4f5f98867341104f86388f6488dce4556428039e0891d5d3002dd84ac7d
BLAKE2b-256 checksum
How to use checksums
acc4e8d6dee71b3edd1d1491be7d37c2a0edffb3a4dfc702fc54ec2d7cb22bdb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.50 This release

29 release files

0.1.23

2 release files

0.1.21

2 release files

0.1.20

2 release files

0.1.19

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page