Skip to main content

Sensible and typesafe datetimes

Project description

⏰ Whenever

Typed and DST-safe datetimes for Python, written in Rust

Do you cross your fingers every time you work with Python's datetime—hoping that you didn't mix naive and aware? or that you avoided its other pitfalls? or that you properly accounted for Daylight Saving Time (DST)? There’s no way to be sure...

✨ Until now! ✨

Whenever helps you write correct and type checked datetime code. Mistakes become red squiggles in your IDE, instead of bugs in production. It's also way faster than other third-party libraries—and usually the standard library as well.

Shows a bar chart with benchmark results.

RFC3339-parse, normalize, compare to now, shift, and change timezone (1M times)

⚠️ Note: Whenever is in pre-1.0 beta. The API may change as we gather feedback and improve the library. Leave a ⭐️ on github if you'd like to see how this project develops!

Why not the standard library?

Over 20+ years, Python's datetime has grown out of step with what you'd expect from a modern datetime library. Two points stand out:

  1. It doesn't always account for Daylight Saving Time (DST). Here is a simple example:

    bedtime = datetime(2023, 3, 25, 22, tzinfo=ZoneInfo("Europe/Paris"))
    full_rest = bedtime + timedelta(hours=8)
    # It returns 6am, but should be 7am—because we skipped an hour due to DST!
    

    Note this isn't a bug, but a design decision that DST is only considered when calculations involve two timezones. If you think this is surprising, you are not alone.

  2. Typing can't distinguish between naive and aware datetimes. Your code probably only works with one or the other, but there's no way to enforce this in the type system!

    # Does this expect naive or aware? Can't tell!
    def schedule_meeting(at: datetime) -> None: ...
    

Why not other libraries?

There are two other popular third-party libraries, but they don't (fully) address these issues. Here's how they compare to whenever and the standard library:

Whenever datetime Arrow Pendulum
DST-safe ⚠️
Typed aware/naive
Fast

Arrow is probably the most historically popular 3rd party datetime library. It attempts to provide a more "friendly" API than the standard library, but doesn't address the core issues: it keeps the same footguns, and its decision to reduce the number of types to just one (arrow.Arrow) means that it's even harder for typecheckers to catch mistakes.

Pendulum arrived on the scene in 2016, promising better DST-handling, as well as improved performance. However, it only fixes some DST-related pitfalls, and its performance has significantly degraded over time. Additionally, it hasn't been actively maintained since a breaking 3.0 release last year.

Why use whenever?

  • 🌐 DST-safe arithmetic. Always.
  • 🛡️ Typesafe API prevents common bugs
  • ✅ Fixes issues arrow/pendulum don't
  • ⚖️ Based on proven and familiar concepts
  • ⚡️ Unmatched performance
  • 💎 Thoroughly tested and documented
  • 📆 Support for date arithmetic
  • ⏱️ Nanosecond precision
  • 🦀 Rust!—but with a pure-Python fallback
  • 🚀 Support for the latest GIL-related improvements (experimental)

Quickstart

>>> from whenever import (
...    # Explicit types for different use cases
...    Instant,
...    ZonedDateTime,
...    LocalDateTime,
... )

# Identify moments in time, without timezone/calendar complexity
>>> now = Instant.now()
Instant(2024-07-04 10:36:56Z)

# Simple, explicit conversions
>>> now.to_tz("Europe/Paris")
ZonedDateTime(2024-07-04 12:36:56+02:00[Europe/Paris])

# A 'naive' local time can't accidentally mix with other types.
# You need to explicitly convert it and handle ambiguity.
>>> party_invite = LocalDateTime(2023, 10, 28, hour=22)
>>> party_invite.add(hours=6)
Traceback (most recent call last):
  ImplicitlyIgnoringDST: Adjusting a local datetime implicitly ignores DST [...]
>>> party_starts = party_invite.assume_tz("Europe/Amsterdam", disambiguate="earlier")
ZonedDateTime(2023-10-28 22:00:00+02:00[Europe/Amsterdam])

# DST-safe arithmetic
>>> party_starts.add(hours=6)
ZonedDateTime(2022-10-29 03:00:00+01:00[Europe/Amsterdam])

# Comparison and equality
>>> now > party_starts
True

# Formatting & parsing common formats (ISO8601, RFC3339, RFC2822)
>>> now.format_rfc2822()
"Thu, 04 Jul 2024 10:36:56 GMT"

# If you must: you can convert to/from the standard lib
>>> now.py_datetime()
datetime.datetime(2024, 7, 4, 10, 36, 56, tzinfo=datetime.timezone.utc)

Read more in the feature overview or API reference.

Roadmap

  • 🧪 0.x: get to feature-parity, process feedback, and tweak the API:

    • ✅ Datetime classes
    • ✅ Deltas
    • ✅ Date and time of day (separate from datetime)
    • ✅ Implement Rust extension for performance
    • 🚧 Parsing leap seconds
    • 🚧 Improved parsing and formatting
    • 🚧 More helpful error messages
    • 🚧 Intervals
  • 🔒 1.0: API stability and backwards compatibility

Limitations

  • Supports the proleptic Gregorian calendar between 1 and 9999 AD
  • Timezone offsets are limited to whole seconds (consistent with IANA TZ DB)
  • No support for leap seconds (consistent with industry standards and other modern libraries)

Versioning and compatibility policy

Whenever follows semantic versioning. Until the 1.0 version, the API may change with minor releases. Breaking changes will be meticulously explained in the changelog. Since the API is fully typed, your typechecker and/or IDE will help you adjust to any API changes.

⚠️ Note: until 1.x, pickled objects may not be unpicklable across versions. After 1.0, backwards compatibility of pickles will be maintained as much as possible.

Acknowledgements

This project is inspired by the following projects. Check them out!

The benchmark comparison graph is based on the one from the Ruff project.

Contributing

Contributions are welcome! Please open an issue or a pull request.

⚠️ Note: Non-trivial changes should be discussed in an issue first. This is to avoid wasted effort if the change isn't a good fit for the project.

⚠️ Note: Some tests are skipped on Windows. These tests use unix-specific features to set the timezone for the current process. As a result, Windows isn't able to run certain tests that rely on the system timezone. It appears that this functionality (only needed for the tests) is not available on Windows.

Setting up a development environment

An example of setting up things up:

# install the dependencies
make init

# build the rust extension
make build

make test  # run the tests (Python and Rust)
make format  # apply autoformatting
make ci-lint  # various static checks
make typecheck  # run mypy and typing tests

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

whenever-0.6.0rc1.tar.gz (140.0 kB view details)

Uploaded Source

Built Distributions

whenever-0.6.0rc1-cp312-none-win_amd64.whl (228.2 kB view details)

Uploaded CPython 3.12 Windows x86-64

whenever-0.6.0rc1-cp312-none-win32.whl (256.8 kB view details)

Uploaded CPython 3.12 Windows x86

whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl (533.3 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_i686.whl (591.4 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_armv7l.whl (681.3 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARMv7l

whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl (545.2 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

whenever-0.6.0rc1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (435.3 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

whenever-0.6.0rc1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (400.4 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

whenever-0.6.0rc1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (419.5 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

whenever-0.6.0rc1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (419.0 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.5+ i686

whenever-0.6.0rc1-cp312-cp312-macosx_11_0_arm64.whl (313.9 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

whenever-0.6.0rc1-cp312-cp312-macosx_10_12_x86_64.whl (323.6 kB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

whenever-0.6.0rc1-cp311-none-win_amd64.whl (226.6 kB view details)

Uploaded CPython 3.11 Windows x86-64

whenever-0.6.0rc1-cp311-none-win32.whl (255.7 kB view details)

Uploaded CPython 3.11 Windows x86

whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_x86_64.whl (532.1 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_i686.whl (590.0 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_armv7l.whl (680.3 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARMv7l

whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_aarch64.whl (544.2 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

whenever-0.6.0rc1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (434.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

whenever-0.6.0rc1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (399.4 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

whenever-0.6.0rc1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (418.5 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

whenever-0.6.0rc1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (417.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.5+ i686

whenever-0.6.0rc1-cp311-cp311-macosx_11_0_arm64.whl (312.8 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

whenever-0.6.0rc1-cp311-cp311-macosx_10_12_x86_64.whl (321.5 kB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

whenever-0.6.0rc1-cp310-none-win_amd64.whl (226.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

whenever-0.6.0rc1-cp310-none-win32.whl (255.7 kB view details)

Uploaded CPython 3.10 Windows x86

whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_x86_64.whl (532.1 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_i686.whl (590.0 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_armv7l.whl (680.3 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARMv7l

whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_aarch64.whl (544.2 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

whenever-0.6.0rc1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (434.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

whenever-0.6.0rc1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (399.4 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

whenever-0.6.0rc1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (418.5 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

whenever-0.6.0rc1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (417.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.5+ i686

whenever-0.6.0rc1-cp310-cp310-macosx_11_0_arm64.whl (312.8 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

whenever-0.6.0rc1-cp310-cp310-macosx_10_12_x86_64.whl (321.5 kB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

whenever-0.6.0rc1-cp39-none-win_amd64.whl (226.9 kB view details)

Uploaded CPython 3.9 Windows x86-64

whenever-0.6.0rc1-cp39-none-win32.whl (256.2 kB view details)

Uploaded CPython 3.9 Windows x86

whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_x86_64.whl (532.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_i686.whl (590.5 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_armv7l.whl (680.9 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARMv7l

whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_aarch64.whl (544.6 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

whenever-0.6.0rc1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (435.1 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

whenever-0.6.0rc1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (399.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

whenever-0.6.0rc1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (419.2 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

whenever-0.6.0rc1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (417.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.5+ i686

whenever-0.6.0rc1-cp39-cp39-macosx_11_0_arm64.whl (313.3 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

whenever-0.6.0rc1-cp39-cp39-macosx_10_12_x86_64.whl (322.6 kB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

File details

Details for the file whenever-0.6.0rc1.tar.gz.

File metadata

  • Download URL: whenever-0.6.0rc1.tar.gz
  • Upload date:
  • Size: 140.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for whenever-0.6.0rc1.tar.gz
Algorithm Hash digest
SHA256 a21d59ffdd1480eb57664cbad23f323bf227db8c1fd0d86e165ab344a4eb431b
MD5 3e5dc827fb17b0dd0bd815298219f727
BLAKE2b-256 3eb483bba0fa2dedbc0fcaa9760d3fee26e6ce02039cddc0e8b08b8e1af5892d

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 d0513da2aaf7dac7ad8f7fe6071901f8467b4f96893b3d788d425c75f6e5a291
MD5 8cf27ac40514fd2924ee746d944ce353
BLAKE2b-256 93e17f38f199f54e68358c4243622cf6aea8ff50eadf97eb193348dac9823be8

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-none-win32.whl.

File metadata

  • Download URL: whenever-0.6.0rc1-cp312-none-win32.whl
  • Upload date:
  • Size: 256.8 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for whenever-0.6.0rc1-cp312-none-win32.whl
Algorithm Hash digest
SHA256 63fd0e89e933a28793ad2fcdde43707bc18e7e9542c9ef01debab0678026a707
MD5 a541b58ae2ca39d02f6fd74e39e0312f
BLAKE2b-256 a317691a6ab0e1382087faa60fc255f8e18b00c56f21e8e83c24bf41358e23ff

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ec846841456d6934493f84a11d89c81bc11af6764d0975e45409d59a962d4fbd
MD5 b5156c0850d3b4dfc6fb3834f02ea200
BLAKE2b-256 e5bba37b719dd8f37b2dd255f2e7abd7f8c935b450c3ed3e8e90a4718d314fda

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 60a4b0c771a44f205e0031200f2ce1d292ad55176bd5618234e2af29893d71af
MD5 d34a82d20b51e2de1bb515d48b356515
BLAKE2b-256 5c51dea1878692956022497dd856e99d5856272f841f9abceb08b1aba0d4e463

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 0b7563abebfaac98d4db990d8ae63d515fb0076c2ae772577bed602f4343149a
MD5 f6feb8804d9a198959b5bfeaff0ced04
BLAKE2b-256 4e0ef551ab41cecc2d83e42a3981e2ee9d453d565a71007b8ad040dee2a8955c

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e7cbf1d9c835b66658aac2ea4af34bb9d7c9799d8c4bece909eef15eeabc7041
MD5 f092ae0d81f98a386a32594b5bcfa6f3
BLAKE2b-256 be3849e407601983758bb5c5c29129219ae68227e4c0fd7a3eb8aea0697afaff

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 5023adc0ee63c67002b0a4c2ed79e4b0ac1809990fae2dfc0472b549f0c8f3d1
MD5 2fa18e818f1b2558dfaf8ae85f13f1f2
BLAKE2b-256 3f618d3e4685357e078c0d746ec31834261516b81fddcb106cf65f2afa40aa3d

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 d79e60da69bef15cb3a03fb417a6aad2a82798c309eb0c53ea7e02cf797121a6
MD5 744193991cbebae83bdae2122ab54412
BLAKE2b-256 5d28d890abe79100d5b5c58b2678d71fa422cd9295323ac8da29968f9b714a71

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2e123f5f00ab6a0806454840ea6194d55f022117ac2cfcd586baa847d0b0c3cc
MD5 03b4c9f2f412e17032a8115549a47eb4
BLAKE2b-256 92fee389524a670ace7f61a94abc03c87187d022e9532e91b6d858982fe60324

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 bb14e50105a34cc8478e94f922b1db34cc16fb2f6fa818be57dec9cb11ddbce3
MD5 31ec27e87467176c5d53a7f0fa8bc30c
BLAKE2b-256 ad9c43c769bfa163e8a1733e5b107d920996eac7daa00bba6d46e519bcdecfd2

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e48031b32722f7294cb3bb340088ed20e725154938974a812fe0252a98cc351f
MD5 0a7ee92561460f778a3f71590d876052
BLAKE2b-256 bdb5a0fae848e1afff5dabe5bfaf115963447081a6b64d2420e93a767ce16b20

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 48d5b7cf48f757e9d844c9df1808cb806813a625cb096cfbda5058b437b74856
MD5 f37c88ba2c022c3673be261f53617f56
BLAKE2b-256 ebdc3cf09874e47f1fcd6ada2635d355977096eef4d96985cefd4c74556c55a9

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 63342022aa1e58d543ebd9ad558acab416b8ace92f67f4c5e6f11703191b1a72
MD5 301f5535c6c186501fd79bf4bf665a4f
BLAKE2b-256 ced58043b1f3dd8080fed8999446762d0044984a9cd6dea05a5bb486ef1aacf7

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-none-win32.whl.

File metadata

  • Download URL: whenever-0.6.0rc1-cp311-none-win32.whl
  • Upload date:
  • Size: 255.7 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for whenever-0.6.0rc1-cp311-none-win32.whl
Algorithm Hash digest
SHA256 5b801e18b2c1055992ffd56fc0a77a6ddb57696a2e5f4e1cbaa88a0e986433e2
MD5 3cc093137cac2957b1d02d191d20ca70
BLAKE2b-256 f976dc6cc71a69f513bf8acf37f880627e84c60e31f3c1a17ed152a72210a048

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eaa96c1d4cf8121f282c10b2460bac8d13d088b43a2f159e9d39deb153148a6c
MD5 bad7d808de5639dc0c446290433b2268
BLAKE2b-256 8c0bfb5152a86ad38e9132e4c66da8d50af7e78985e764813240b68c6d6f0337

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 704495e6ca0b9b923984b49445b985b6ed8f756c1987b3a3f6ac4b8e18751b1e
MD5 dacedccd06b55b5dc6f10d3a776f6194
BLAKE2b-256 ac159ec29eeab15ed93b6c26a588901e3a4faaf5ce46a57383e50e803ae8678e

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 f1c4d77b511d2c8c978d259da5d87d2ab69da1ccd9a72c7e382e77f611085cd1
MD5 938419c8cc45e5994e488062c84f168b
BLAKE2b-256 c19647cd6414e55178d8463c7cb48760b18aee7aa5d2628ae610da64deead566

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 243134592e309d279de75447a78d158ce82f60c46109427ea1a2ab80b01fb018
MD5 377b9151a531016974107b2c8b187606
BLAKE2b-256 44f781a2ca2c6842620756746bbd2a504e78dd27d78dfe56cb6e439a6151818b

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 e5fa964f35a009b9b6cc8991c3722b43709108b439a7524d7110ebd3073572aa
MD5 bf664039a2e88e9e951efdbab29c7c8b
BLAKE2b-256 b0f03e664280019e0e74c1f1a6af3a1e559ebb192f6c7e9c165b3fff3587431d

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 fae5913ca5c0cd40f02986cb1b8e1065e388bca36f9c1b77bd4d7690b49ef91e
MD5 434c2c75e666a1f38491c434d2a1d295
BLAKE2b-256 b4aa065e2c8aa9c2a91e08b121b95ee864fd2fa9bbcb655663f59833931fe6e3

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 662e929d00a16536d699fe86b02a8e07827778888b72c55e940a79d81e13988e
MD5 d71e0d6408bd28a7866f2d69f92c7131
BLAKE2b-256 794ebfe6438ee64a422a7f292419f8b1828221171704c7a4d0a0a9ba04719e7a

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 85afcb6ec70154072e554f0eb6f93c03005f7425a5ef790e1d4a65ded1bbd7e4
MD5 57520385e3f6f1269dcf00157ad74dcb
BLAKE2b-256 616b96fb339eba5875d62bb6e48c6800bdf17db6b11f5469f3ad6d6eb146f90f

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 399ab97a5118172ab8d3764cae127d04bdb6ba0bcd9184a1011eb877f64d0ddf
MD5 178971c770d34a34726f69cc6c2563a4
BLAKE2b-256 b0a59496de22320a7e2a6c52256711f3f7fb7b0257f012d65dff4f42a73ffbc2

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bf2849a5d58308e1aee6d10be902d463741bb31af30fa69db8c16bde4667b15a
MD5 b0ef6705bf4c63ae4c89b0899e75f74c
BLAKE2b-256 a90ff642bbb91609c93d05281328af3e02bad418042963718c5b57e059170e4b

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 955a048eda7db7f27f7af397e3097fb4e41fb7617e97290d1902f5801873ca19
MD5 c597a87a0490e3eabbb1707a62151d46
BLAKE2b-256 e852c046daec1782de6bb9f7dcb59b77ef689761085ac1189ccdc930352a9d4c

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-none-win32.whl.

File metadata

  • Download URL: whenever-0.6.0rc1-cp310-none-win32.whl
  • Upload date:
  • Size: 255.7 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for whenever-0.6.0rc1-cp310-none-win32.whl
Algorithm Hash digest
SHA256 37fb9418a123def0586e61c47d541dee9fe81f4f9ab3fcda670f34e6aa4f3765
MD5 cdcc8cf86493bdf1714c167283e3eaf1
BLAKE2b-256 4a38b76678294350afa246fa7a6b679cb8c4310c144017edf844a506b0747966

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3fc8eac4bb445b09fdc8aa3fe19bfc61a2d62ed8406a009af0b61ae053057e44
MD5 12038c7cc9711f8ab22520f20175357f
BLAKE2b-256 40c70014d89c4b0e26fbf1258ab0c48184a9e16e00cde429af87dd3e4ab5467d

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 d0e3308241f46e5ee352da2997cc2acdd293ceffdf0ef7bacf09c32c04d58797
MD5 40d72505069ca191f3e4cc6de4c0eda0
BLAKE2b-256 63a9e38fd059d89fc93a98c22b5a69814d5548d600467d690b014e19b40e0d65

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 95236fb9c5543caf2cc63524400c73f335a86fe987adebe5f5c7ad4c294bc3e4
MD5 af46dd579c960f901674f94dd05a1135
BLAKE2b-256 a3bb940fc8b2c764eab7c66523a2aada90a6a98286f110448f73ad21e01e600c

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 239156c0644202d6b45bbc54a76021d9d60d4b2f1c0a743181bb74a434286f8a
MD5 ae839d7f108855be898ef1dedb8bb71c
BLAKE2b-256 3bb787b3ea8f7a99efc7d5d2e56db57905414d51b2e7e6d5a3c94f6e9beb41f0

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 f869d3725578c405a38343348bfab346081aa9387e612c1a63e1689b2993a4c9
MD5 9230f362c133b5ce3d61bdacfa8252c8
BLAKE2b-256 defe53086586827e5023f6cd99ffc2d4744f32602ef8d4ae4b97e623e02ba290

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 d83003a994a86594d74f4b126405ec5a464fdd3338854e0412084cbc98c1fc72
MD5 fcbcf3151565cb2d87cf04070d590e02
BLAKE2b-256 79c70f45a83dbe29276758db363d97e0173b65d576d1bb845cbb8ff0f7cf414d

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 095be3742eaeea45271a17e509dddbe13ea41a5fe163cf3f58c9b5a5078ba81d
MD5 5275989bcf35ae9cea8d52b3677bbbc7
BLAKE2b-256 f1beb85606804e07b96a1cbb2747d1b4e259f0b4af094e93c6204229addfb7f0

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 891a121d0bf9508eb88814bf79b02f1d45c3530040a3764ce20b63072effe4d5
MD5 6ce34dffa9fb67fd4476266497fc967a
BLAKE2b-256 8a9801fdfe60f9ed0565c193d6c7d69216b7d2792a9af384a3c13d08564efd9c

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6b67c8a1db2f0687f8a313964955770d645770f85474fe0918f853ed4e6a5742
MD5 a59d58c9201d198504781649ec258001
BLAKE2b-256 679e87133628a139879bb5ec261d97ac84f1583db56df6bc28a2fb767ac35cf6

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ad75cb4bbfee0d3eba75135150d45ad9ff36cc87d9d5aa65eeef55872a0a99ea
MD5 f4ad24116c191ab76c7b5d25ac19090f
BLAKE2b-256 8a21454581128ffa549caa74dfa18fd4f984fb1252ce76fc2a08474aac56da9a

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 1d6fff363d1f4223567acf7dae99f14fb3f25ebfdd3d49e375c1785a9f1b4a41
MD5 b187e49f3a3a8b02b3105a6810018269
BLAKE2b-256 33f83930f98168c51460533f8c8bcf085e34f29c0b7a6db446a361dc9bccfcc8

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-none-win32.whl.

File metadata

  • Download URL: whenever-0.6.0rc1-cp39-none-win32.whl
  • Upload date:
  • Size: 256.2 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for whenever-0.6.0rc1-cp39-none-win32.whl
Algorithm Hash digest
SHA256 0d6d8b1e0f79b8535590e2911c81b30de371448e99fc11f569a578170f2923aa
MD5 7c662eebf5b28a96cb216032878d2565
BLAKE2b-256 701811e767e68f4bc90bb4800b8db258f7c83c998fdee2cf5b15de7ba5dbf933

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b621edae0fe7f0ce18a4f126e355927ebe5f7eed6c8e12911a4728d3bf7033c0
MD5 46c7b6d8fae69014ce3a238255e74430
BLAKE2b-256 3b5cb4db82f571d931a3f87b54777d3f687c9071290756ba6236e0435c7b3015

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 69c44a5ea314f5e1b20851a99db3ffb70c2693398151a9e0d1a376266ebd7d45
MD5 0124621050c62578bb602c95a1da8af8
BLAKE2b-256 7255714a27a912f27db50bb5c26f58377103e581798c1fe82d0f1bbd5850a179

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 47312dc300157ea0f0784846fef9b6a65a3cc2afaa44ac013520e3124e3b5d91
MD5 5522a96bcb46dd43eaa3c5cf94c5abb4
BLAKE2b-256 71de12a21c435b8ef42dd41d223207b912aa16e3a59d1f9466c6066f5cca20e6

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f3c7e8a768550e2688038e5a4bf83213bd6612522ed089e7a6926247416817de
MD5 4d0d2728c2f4b2dd3ad29d4fb4dc157f
BLAKE2b-256 607dbeaac4fd70e5ddda332f0af2772640b3630b0e688fed4f6b6a7a98836868

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 e3b260885edbc94c65ad7fd5400c4352e06cf8bcb294b0bf3ace69e617a21498
MD5 4f1dd0f80d7c4caa65fbae8195c5c615
BLAKE2b-256 4644a9d08c4cc22a9eba6aee6732eca753176cf901f39bca0b79d2c9a409ccaf

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 b34679b6b5255513d3a6eb46a907b9dbf09024597d6e005bd71228f18ceb170e
MD5 f433b0dec98cca95b688cdcd93ed57a4
BLAKE2b-256 37eb6fd1cf027d2effd8fc079f3664c99809ef620f8e6adf929c34e74bfa3947

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 93158929878d4cb4f8f49b5e65c8333dbf4843f3751082b1fd7ff6dedf50d5fe
MD5 ddde74ccf4bf41aa5d35ccca0778759f
BLAKE2b-256 527ee71c6d5347a9494f95fc7e64d6eb3d03fbc8ef1ac89abd4316d9ca17c9ea

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 77d1476147ad9e4a08a42065b413ec0cd1eddf2097b66d3ed400accc5b41985c
MD5 43ae573f1282f4cda9770e1e67ffa219
BLAKE2b-256 7a580a6fb3f380b1c41e2c8c6ecfd5ad49147626ef5da71a700dc436664aad9f

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 10fdca9baa11d7d0a8dcf497d2aac63d07e49b79ef2ccd4fc90528300c82afe7
MD5 becf80ec32ad98d2addda040413b06ed
BLAKE2b-256 97cc64813c9605e660e6b34d5d355ed736704bf87572c530a16779c51c1faaf4

See more details on using hashes here.

File details

Details for the file whenever-0.6.0rc1-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for whenever-0.6.0rc1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 63b9dc75621c3c4a880b2e40955102b013d84cde5b6a5165ef12a6fe4aab2b31
MD5 2a84d91c56640a6c423313b6ac485990
BLAKE2b-256 442e9cb8718caf2c74435493f9a528edb7a13743f11417c8b202a7838a7e80b8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page