Support dates all the way to 1BC#77
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #77 +/- ##
==========================================
- Coverage 99.12% 98.87% -0.26%
==========================================
Files 6 6
Lines 917 974 +57
==========================================
+ Hits 909 963 +54
- Misses 8 11 +3
... and 3 files with indirect coverage changes Continue to review full report in Codecov by Sentry.
|
3f0b3fe to
95ae6c3
Compare
davidhewitt
left a comment
There was a problem hiding this comment.
Thanks for working on this, this seems correct to me!
I assume that this will fix #15; can we please add some additional test cases around leap years to check that this is indeed the case?
| let d = Date::from_timestamp(-11_676_096_000 + 1000, false).unwrap(); | ||
| assert_eq!(d.to_string(), "1600-01-01"); | ||
| let d = Date::from_timestamp(-11_673_417_600, false).unwrap(); | ||
| assert_eq!(d.to_string(), "1600-02-01"); |
There was a problem hiding this comment.
Can we restore these test cases? Not immediately clear to me why they were deleted.
There was a problem hiding this comment.
I removed them because this test case is called date_from_timestamp_extremes and 1600 is no longer "an extreme value" (and I added 0000-01-01 instead.) I'll create a new test case and add them back.
|
I've added 3 cases checking 1 BC, 1200 AD and 1600 AD. Is there anything else specific I should add? I think other cases are already covered. |
|
It would be good to check February 29th of some leap years in that 0-1599 range to confirm we are handling them correctly. From wikipedia
So I guess February 29th should be valid on 1200, but not 1300, 1400, 1500. Similarly we could check 1200 (yes), 1201 (no), 1202 (no), 1203 (yes). |
|
I see. I've added some more test cases. Definitely not covering the entire range 0-1600 but I think these should be enough, unless we really want more of these tests. |
davidhewitt
left a comment
There was a problem hiding this comment.
Perfect, this looks great to me! Thanks 🙏
This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [pydantic](https://redirect.github.com/pydantic/pydantic) ([changelog](https://docs.pydantic.dev/latest/changelog/)) | `2.9.2` -> `2.10.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>pydantic/pydantic (pydantic)</summary> ### [`v2.10.0`](https://redirect.github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2100-2024-11-20) [Compare Source](https://redirect.github.com/pydantic/pydantic/compare/v2.9.2...v2.10.0) The code released in v2.10.0 is practically identical to that of v2.10.0b2. [GitHub release](https://redirect.github.com/pydantic/pydantic/releases/tag/v2.10.0) See the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights! ##### What's Changed ##### Packaging - Bump `pydantic-core` to `v2.27.0` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10825](https://redirect.github.com/pydantic/pydantic/pull/10825) - Replaced pdm with uv by [@​frfahim](https://redirect.github.com/frfahim) in [#​10727](https://redirect.github.com/pydantic/pydantic/pull/10727) ##### New Features - Support `fractions.Fraction` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10318](https://redirect.github.com/pydantic/pydantic/pull/10318) - Support `Hashable` for json validation by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10324](https://redirect.github.com/pydantic/pydantic/pull/10324) - Add a `SocketPath` type for `linux` systems by [@​theunkn0wn1](https://redirect.github.com/theunkn0wn1) in [#​10378](https://redirect.github.com/pydantic/pydantic/pull/10378) - Allow arbitrary refs in JSON schema `examples` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10417](https://redirect.github.com/pydantic/pydantic/pull/10417) - Support `defer_build` for Pydantic dataclasses by [@​Viicos](https://redirect.github.com/Viicos) in [#​10313](https://redirect.github.com/pydantic/pydantic/pull/10313) - Adding v1 / v2 incompatibility warning for nested v1 model by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10431](https://redirect.github.com/pydantic/pydantic/pull/10431) - Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10416](https://redirect.github.com/pydantic/pydantic/pull/10416) - Support compiled patterns in `protected_namespaces` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10522](https://redirect.github.com/pydantic/pydantic/pull/10522) - Add support for `propertyNames` in JSON schema by [@​FlorianSW](https://redirect.github.com/FlorianSW) in [#​10478](https://redirect.github.com/pydantic/pydantic/pull/10478) - Adding `__replace__` protocol for Python 3.13+ support by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10596](https://redirect.github.com/pydantic/pydantic/pull/10596) - Expose public `sort` method for JSON schema generation by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10595](https://redirect.github.com/pydantic/pydantic/pull/10595) - Add runtime validation of `@validate_call` callable argument by [@​kc0506](https://redirect.github.com/kc0506) in [#​10627](https://redirect.github.com/pydantic/pydantic/pull/10627) - Add `experimental_allow_partial` support by [@​samuelcolvin](https://redirect.github.com/samuelcolvin) in [#​10748](https://redirect.github.com/pydantic/pydantic/pull/10748) - Support default factories taking validated data as an argument by [@​Viicos](https://redirect.github.com/Viicos) in [#​10678](https://redirect.github.com/pydantic/pydantic/pull/10678) - Allow subclassing `ValidationError` and `PydanticCustomError` by [@​Youssefares](https://redirect.github.com/Youssefares) in [pydantic/pydantic-core#1413](https://redirect.github.com/pydantic/pydantic-core/pull/1413) - Add `trailing-strings` support to `experimental_allow_partial` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10825](https://redirect.github.com/pydantic/pydantic/pull/10825) - Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10537](https://redirect.github.com/pydantic/pydantic/pull/10537) - Improve `TypeAdapter` instance repr by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10872](https://redirect.github.com/pydantic/pydantic/pull/10872) ##### Changes - Don't allow customization of `SchemaGenerator` until interface is more stable by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10303](https://redirect.github.com/pydantic/pydantic/pull/10303) - Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10329](https://redirect.github.com/pydantic/pydantic/pull/10329) - Fix `mro` of generic subclass by [@​kc0506](https://redirect.github.com/kc0506) in [#​10100](https://redirect.github.com/pydantic/pydantic/pull/10100) - Strip whitespaces on JSON Schema title generation by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10404](https://redirect.github.com/pydantic/pydantic/pull/10404) - Use `b64decode` and `b64encode` for `Base64Bytes` type by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10486](https://redirect.github.com/pydantic/pydantic/pull/10486) - Relax protected namespace config default by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10441](https://redirect.github.com/pydantic/pydantic/pull/10441) - Revalidate parametrized generics if instance's origin is subclass of OG class by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10666](https://redirect.github.com/pydantic/pydantic/pull/10666) - Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10406](https://redirect.github.com/pydantic/pydantic/pull/10406) - Recommend against using `Ellipsis` (...) with `Field` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10661](https://redirect.github.com/pydantic/pydantic/pull/10661) - Migrate to subclassing instead of annotated approach for pydantic url types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10662](https://redirect.github.com/pydantic/pydantic/pull/10662) - Change JSON schema generation of `Literal`s and `Enums` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10692](https://redirect.github.com/pydantic/pydantic/pull/10692) - Simplify unions involving `Any` or `Never` when replacing type variables by [@​Viicos](https://redirect.github.com/Viicos) in [#​10338](https://redirect.github.com/pydantic/pydantic/pull/10338) - Do not require padding when decoding `base64` bytes by [@​bschoenmaeckers](https://redirect.github.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://redirect.github.com/pydantic/pydantic-core/pull/1448) - Support dates all the way to 1BC by [@​changhc](https://redirect.github.com/changhc) in [pydantic/speedate#77](https://redirect.github.com/pydantic/speedate/pull/77) ##### Performance - Schema cleaning: skip unnecessary copies during schema walking by [@​Viicos](https://redirect.github.com/Viicos) in [#​10286](https://redirect.github.com/pydantic/pydantic/pull/10286) - Refactor namespace logic for annotations evaluation by [@​Viicos](https://redirect.github.com/Viicos) in [#​10530](https://redirect.github.com/pydantic/pydantic/pull/10530) - Improve email regexp on edge cases by [@​AlekseyLobanov](https://redirect.github.com/AlekseyLobanov) in [#​10601](https://redirect.github.com/pydantic/pydantic/pull/10601) - `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10675](https://redirect.github.com/pydantic/pydantic/pull/10675) ##### Fixes - Remove guarding check on `computed_field` with `field_serializer` by [@​nix010](https://redirect.github.com/nix010) in [#​10390](https://redirect.github.com/pydantic/pydantic/pull/10390) - Fix `Predicate` issue in `v2.9.0` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10321](https://redirect.github.com/pydantic/pydantic/pull/10321) - Fixing `annotated-types` bound by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10327](https://redirect.github.com/pydantic/pydantic/pull/10327) - Turn `tzdata` install requirement into optional `timezone` dependency by [@​jakob-keller](https://redirect.github.com/jakob-keller) in [#​10331](https://redirect.github.com/pydantic/pydantic/pull/10331) - Use correct types namespace when building `namedtuple` core schemas by [@​Viicos](https://redirect.github.com/Viicos) in [#​10337](https://redirect.github.com/pydantic/pydantic/pull/10337) - Fix evaluation of stringified annotations during namespace inspection by [@​Viicos](https://redirect.github.com/Viicos) in [#​10347](https://redirect.github.com/pydantic/pydantic/pull/10347) - Fix `IncEx` type alias definition by [@​Viicos](https://redirect.github.com/Viicos) in [#​10339](https://redirect.github.com/pydantic/pydantic/pull/10339) - Do not error when trying to evaluate annotations of private attributes by [@​Viicos](https://redirect.github.com/Viicos) in [#​10358](https://redirect.github.com/pydantic/pydantic/pull/10358) - Fix nested type statement by [@​kc0506](https://redirect.github.com/kc0506) in [#​10369](https://redirect.github.com/pydantic/pydantic/pull/10369) - Improve typing of `ModelMetaclass.mro` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10372](https://redirect.github.com/pydantic/pydantic/pull/10372) - Fix class access of deprecated `computed_field`s by [@​Viicos](https://redirect.github.com/Viicos) in [#​10391](https://redirect.github.com/pydantic/pydantic/pull/10391) - Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@​MovisLi](https://redirect.github.com/MovisLi) in [#​10374](https://redirect.github.com/pydantic/pydantic/pull/10374) - Fix `NameError` when using `validate_call` with PEP 695 on a class by [@​kc0506](https://redirect.github.com/kc0506) in [#​10380](https://redirect.github.com/pydantic/pydantic/pull/10380) - Fix `ZoneInfo` with various invalid types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10408](https://redirect.github.com/pydantic/pydantic/pull/10408) - Fix `PydanticUserError` on empty `model_config` with annotations by [@​cdwilson](https://redirect.github.com/cdwilson) in [#​10412](https://redirect.github.com/pydantic/pydantic/pull/10412) - Fix variance issue in `_IncEx` type alias, only allow `True` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10414](https://redirect.github.com/pydantic/pydantic/pull/10414) - Fix serialization schema generation when using `PlainValidator` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10427](https://redirect.github.com/pydantic/pydantic/pull/10427) - Fix schema generation error when serialization schema holds references by [@​Viicos](https://redirect.github.com/Viicos) in [#​10444](https://redirect.github.com/pydantic/pydantic/pull/10444) - Inline references if possible when generating schema for `json_schema_input_type` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10439](https://redirect.github.com/pydantic/pydantic/pull/10439) - Fix recursive arguments in `Representation` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10480](https://redirect.github.com/pydantic/pydantic/pull/10480) - Fix representation for builtin function types by [@​kschwab](https://redirect.github.com/kschwab) in [#​10479](https://redirect.github.com/pydantic/pydantic/pull/10479) - Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10506](https://redirect.github.com/pydantic/pydantic/pull/10506) - Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@​Viicos](https://redirect.github.com/Viicos) in [#​10518](https://redirect.github.com/pydantic/pydantic/pull/10518) - Fix `stacklevel` on deprecation warnings for `BaseModel` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10520](https://redirect.github.com/pydantic/pydantic/pull/10520) - Fix warning `stacklevel` in `BaseModel.__init__` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10526](https://redirect.github.com/pydantic/pydantic/pull/10526) - Improve error handling for in-evaluable refs for discriminator application by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10440](https://redirect.github.com/pydantic/pydantic/pull/10440) - Change the signature of `ConfigWrapper.core_config` to take the title directly by [@​Viicos](https://redirect.github.com/Viicos) in [#​10562](https://redirect.github.com/pydantic/pydantic/pull/10562) - Do not use the previous config from the stack for dataclasses without config by [@​Viicos](https://redirect.github.com/Viicos) in [#​10576](https://redirect.github.com/pydantic/pydantic/pull/10576) - Fix serialization for IP types with `mode='python'` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10594](https://redirect.github.com/pydantic/pydantic/pull/10594) - Support constraint application for `Base64Etc` types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10584](https://redirect.github.com/pydantic/pydantic/pull/10584) - Fix `validate_call` ignoring `Field` in `Annotated` by [@​kc0506](https://redirect.github.com/kc0506) in [#​10610](https://redirect.github.com/pydantic/pydantic/pull/10610) - Raise an error when `Self` is invalid by [@​kc0506](https://redirect.github.com/kc0506) in [#​10609](https://redirect.github.com/pydantic/pydantic/pull/10609) - Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10523](https://redirect.github.com/pydantic/pydantic/pull/10523) - Tweak type alias logic by [@​kc0506](https://redirect.github.com/kc0506) in [#​10643](https://redirect.github.com/pydantic/pydantic/pull/10643) - Support usage of `type` with `typing.Self` and type aliases by [@​kc0506](https://redirect.github.com/kc0506) in [#​10621](https://redirect.github.com/pydantic/pydantic/pull/10621) - Use overloads for `Field` and `PrivateAttr` functions by [@​Viicos](https://redirect.github.com/Viicos) in [#​10651](https://redirect.github.com/pydantic/pydantic/pull/10651) - Clean up the `mypy` plugin implementation by [@​Viicos](https://redirect.github.com/Viicos) in [#​10669](https://redirect.github.com/pydantic/pydantic/pull/10669) - Properly check for `typing_extensions` variant of `TypeAliasType` by [@​Daraan](https://redirect.github.com/Daraan) in [#​10713](https://redirect.github.com/pydantic/pydantic/pull/10713) - Allow any mapping in `BaseModel.model_copy()` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10751](https://redirect.github.com/pydantic/pydantic/pull/10751) - Fix `isinstance` behavior for urls by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10766](https://redirect.github.com/pydantic/pydantic/pull/10766) - Ensure `cached_property` can be set on Pydantic models by [@​Viicos](https://redirect.github.com/Viicos) in [#​10774](https://redirect.github.com/pydantic/pydantic/pull/10774) - Fix equality checks for primitives in literals by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://redirect.github.com/pydantic/pydantic-core/pull/1459) - Properly enforce `host_required` for URLs by [@​Viicos](https://redirect.github.com/Viicos) in [pydantic/pydantic-core#1488](https://redirect.github.com/pydantic/pydantic-core/pull/1488) - Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@​andrey-berenda](https://redirect.github.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://redirect.github.com/pydantic/pydantic-core/pull/1515) - Fix serializing `complex` values in `Enum`s by [@​changhc](https://redirect.github.com/changhc) in [pydantic/pydantic-core#1524](https://redirect.github.com/pydantic/pydantic-core/pull/1524) - Refactor `_typing_extra` module by [@​Viicos](https://redirect.github.com/Viicos) in [#​10725](https://redirect.github.com/pydantic/pydantic/pull/10725) - Support intuitive equality for urls by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10798](https://redirect.github.com/pydantic/pydantic/pull/10798) - Add `bytearray` to `TypeAdapter.validate_json` signature by [@​samuelcolvin](https://redirect.github.com/samuelcolvin) in [#​10802](https://redirect.github.com/pydantic/pydantic/pull/10802) - Ensure class access of method descriptors is performed when used as a default with `Field` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10816](https://redirect.github.com/pydantic/pydantic/pull/10816) - Fix circular import with `validate_call` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10807](https://redirect.github.com/pydantic/pydantic/pull/10807) - Fix error when using type aliases referencing other type aliases by [@​Viicos](https://redirect.github.com/Viicos) in [#​10809](https://redirect.github.com/pydantic/pydantic/pull/10809) - Fix `IncEx` type alias to be compatible with mypy by [@​Viicos](https://redirect.github.com/Viicos) in [#​10813](https://redirect.github.com/pydantic/pydantic/pull/10813) - Make `__signature__` a lazy property, do not deepcopy defaults by [@​Viicos](https://redirect.github.com/Viicos) in [#​10818](https://redirect.github.com/pydantic/pydantic/pull/10818) - Make `__signature__` lazy for dataclasses, too by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10832](https://redirect.github.com/pydantic/pydantic/pull/10832) - Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10856](https://redirect.github.com/pydantic/pydantic/pull/10856) ##### New Contributors - [@​jakob-keller](https://redirect.github.com/jakob-keller) made their first contribution in [#​10331](https://redirect.github.com/pydantic/pydantic/pull/10331) - [@​MovisLi](https://redirect.github.com/MovisLi) made their first contribution in [#​10374](https://redirect.github.com/pydantic/pydantic/pull/10374) - [@​joaopalmeiro](https://redirect.github.com/joaopalmeiro) made their first contribution in [#​10405](https://redirect.github.com/pydantic/pydantic/pull/10405) - [@​theunkn0wn1](https://redirect.github.com/theunkn0wn1) made their first contribution in [#​10378](https://redirect.github.com/pydantic/pydantic/pull/10378) - [@​cdwilson](https://redirect.github.com/cdwilson) made their first contribution in [#​10412](https://redirect.github.com/pydantic/pydantic/pull/10412) - [@​dlax](https://redirect.github.com/dlax) made their first contribution in [#​10421](https://redirect.github.com/pydantic/pydantic/pull/10421) - [@​kschwab](https://redirect.github.com/kschwab) made their first contribution in [#​10479](https://redirect.github.com/pydantic/pydantic/pull/10479) - [@​santibreo](https://redirect.github.com/santibreo) made their first contribution in [#​10453](https://redirect.github.com/pydantic/pydantic/pull/10453) - [@​FlorianSW](https://redirect.github.com/FlorianSW) made their first contribution in [#​10478](https://redirect.github.com/pydantic/pydantic/pull/10478) - [@​tkasuz](https://redirect.github.com/tkasuz) made their first contribution in [#​10555](https://redirect.github.com/pydantic/pydantic/pull/10555) - [@​AlekseyLobanov](https://redirect.github.com/AlekseyLobanov) made their first contribution in [#​10601](https://redirect.github.com/pydantic/pydantic/pull/10601) - [@​NiclasvanEyk](https://redirect.github.com/NiclasvanEyk) made their first contribution in [#​10667](https://redirect.github.com/pydantic/pydantic/pull/10667) - [@​mschoettle](https://redirect.github.com/mschoettle) made their first contribution in [#​10677](https://redirect.github.com/pydantic/pydantic/pull/10677) - [@​Daraan](https://redirect.github.com/Daraan) made their first contribution in [#​10713](https://redirect.github.com/pydantic/pydantic/pull/10713) - [@​k4nar](https://redirect.github.com/k4nar) made their first contribution in [#​10736](https://redirect.github.com/pydantic/pydantic/pull/10736) - [@​UriyaHarpeness](https://redirect.github.com/UriyaHarpeness) made their first contribution in [#​10740](https://redirect.github.com/pydantic/pydantic/pull/10740) - [@​frfahim](https://redirect.github.com/frfahim) made their first contribution in [#​10727](https://redirect.github.com/pydantic/pydantic/pull/10727) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/spiraldb/ziggy-pydust). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AiLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [pydantic](https://redirect.github.com/pydantic/pydantic) ([changelog](https://docs.pydantic.dev/latest/changelog/)) | `==2.9.2` -> `==2.10.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>pydantic/pydantic (pydantic)</summary> ### [`v2.10.0`](https://redirect.github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2100-2024-11-20) [Compare Source](https://redirect.github.com/pydantic/pydantic/compare/v2.9.2...v2.10.0) The code released in v2.10.0 is practically identical to that of v2.10.0b2. [GitHub release](https://redirect.github.com/pydantic/pydantic/releases/tag/v2.10.0) See the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights! ##### What's Changed ##### Packaging - Bump `pydantic-core` to `v2.27.0` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10825](https://redirect.github.com/pydantic/pydantic/pull/10825) - Replaced pdm with uv by [@​frfahim](https://redirect.github.com/frfahim) in [#​10727](https://redirect.github.com/pydantic/pydantic/pull/10727) ##### New Features - Support `fractions.Fraction` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10318](https://redirect.github.com/pydantic/pydantic/pull/10318) - Support `Hashable` for json validation by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10324](https://redirect.github.com/pydantic/pydantic/pull/10324) - Add a `SocketPath` type for `linux` systems by [@​theunkn0wn1](https://redirect.github.com/theunkn0wn1) in [#​10378](https://redirect.github.com/pydantic/pydantic/pull/10378) - Allow arbitrary refs in JSON schema `examples` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10417](https://redirect.github.com/pydantic/pydantic/pull/10417) - Support `defer_build` for Pydantic dataclasses by [@​Viicos](https://redirect.github.com/Viicos) in [#​10313](https://redirect.github.com/pydantic/pydantic/pull/10313) - Adding v1 / v2 incompatibility warning for nested v1 model by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10431](https://redirect.github.com/pydantic/pydantic/pull/10431) - Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10416](https://redirect.github.com/pydantic/pydantic/pull/10416) - Support compiled patterns in `protected_namespaces` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10522](https://redirect.github.com/pydantic/pydantic/pull/10522) - Add support for `propertyNames` in JSON schema by [@​FlorianSW](https://redirect.github.com/FlorianSW) in [#​10478](https://redirect.github.com/pydantic/pydantic/pull/10478) - Adding `__replace__` protocol for Python 3.13+ support by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10596](https://redirect.github.com/pydantic/pydantic/pull/10596) - Expose public `sort` method for JSON schema generation by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10595](https://redirect.github.com/pydantic/pydantic/pull/10595) - Add runtime validation of `@validate_call` callable argument by [@​kc0506](https://redirect.github.com/kc0506) in [#​10627](https://redirect.github.com/pydantic/pydantic/pull/10627) - Add `experimental_allow_partial` support by [@​samuelcolvin](https://redirect.github.com/samuelcolvin) in [#​10748](https://redirect.github.com/pydantic/pydantic/pull/10748) - Support default factories taking validated data as an argument by [@​Viicos](https://redirect.github.com/Viicos) in [#​10678](https://redirect.github.com/pydantic/pydantic/pull/10678) - Allow subclassing `ValidationError` and `PydanticCustomError` by [@​Youssefares](https://redirect.github.com/Youssefares) in [pydantic/pydantic-core#1413](https://redirect.github.com/pydantic/pydantic-core/pull/1413) - Add `trailing-strings` support to `experimental_allow_partial` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10825](https://redirect.github.com/pydantic/pydantic/pull/10825) - Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10537](https://redirect.github.com/pydantic/pydantic/pull/10537) - Improve `TypeAdapter` instance repr by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10872](https://redirect.github.com/pydantic/pydantic/pull/10872) ##### Changes - Don't allow customization of `SchemaGenerator` until interface is more stable by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10303](https://redirect.github.com/pydantic/pydantic/pull/10303) - Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10329](https://redirect.github.com/pydantic/pydantic/pull/10329) - Fix `mro` of generic subclass by [@​kc0506](https://redirect.github.com/kc0506) in [#​10100](https://redirect.github.com/pydantic/pydantic/pull/10100) - Strip whitespaces on JSON Schema title generation by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10404](https://redirect.github.com/pydantic/pydantic/pull/10404) - Use `b64decode` and `b64encode` for `Base64Bytes` type by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10486](https://redirect.github.com/pydantic/pydantic/pull/10486) - Relax protected namespace config default by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10441](https://redirect.github.com/pydantic/pydantic/pull/10441) - Revalidate parametrized generics if instance's origin is subclass of OG class by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10666](https://redirect.github.com/pydantic/pydantic/pull/10666) - Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10406](https://redirect.github.com/pydantic/pydantic/pull/10406) - Recommend against using `Ellipsis` (...) with `Field` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10661](https://redirect.github.com/pydantic/pydantic/pull/10661) - Migrate to subclassing instead of annotated approach for pydantic url types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10662](https://redirect.github.com/pydantic/pydantic/pull/10662) - Change JSON schema generation of `Literal`s and `Enums` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10692](https://redirect.github.com/pydantic/pydantic/pull/10692) - Simplify unions involving `Any` or `Never` when replacing type variables by [@​Viicos](https://redirect.github.com/Viicos) in [#​10338](https://redirect.github.com/pydantic/pydantic/pull/10338) - Do not require padding when decoding `base64` bytes by [@​bschoenmaeckers](https://redirect.github.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://redirect.github.com/pydantic/pydantic-core/pull/1448) - Support dates all the way to 1BC by [@​changhc](https://redirect.github.com/changhc) in [pydantic/speedate#77](https://redirect.github.com/pydantic/speedate/pull/77) ##### Performance - Schema cleaning: skip unnecessary copies during schema walking by [@​Viicos](https://redirect.github.com/Viicos) in [#​10286](https://redirect.github.com/pydantic/pydantic/pull/10286) - Refactor namespace logic for annotations evaluation by [@​Viicos](https://redirect.github.com/Viicos) in [#​10530](https://redirect.github.com/pydantic/pydantic/pull/10530) - Improve email regexp on edge cases by [@​AlekseyLobanov](https://redirect.github.com/AlekseyLobanov) in [#​10601](https://redirect.github.com/pydantic/pydantic/pull/10601) - `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10675](https://redirect.github.com/pydantic/pydantic/pull/10675) ##### Fixes - Remove guarding check on `computed_field` with `field_serializer` by [@​nix010](https://redirect.github.com/nix010) in [#​10390](https://redirect.github.com/pydantic/pydantic/pull/10390) - Fix `Predicate` issue in `v2.9.0` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10321](https://redirect.github.com/pydantic/pydantic/pull/10321) - Fixing `annotated-types` bound by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10327](https://redirect.github.com/pydantic/pydantic/pull/10327) - Turn `tzdata` install requirement into optional `timezone` dependency by [@​jakob-keller](https://redirect.github.com/jakob-keller) in [#​10331](https://redirect.github.com/pydantic/pydantic/pull/10331) - Use correct types namespace when building `namedtuple` core schemas by [@​Viicos](https://redirect.github.com/Viicos) in [#​10337](https://redirect.github.com/pydantic/pydantic/pull/10337) - Fix evaluation of stringified annotations during namespace inspection by [@​Viicos](https://redirect.github.com/Viicos) in [#​10347](https://redirect.github.com/pydantic/pydantic/pull/10347) - Fix `IncEx` type alias definition by [@​Viicos](https://redirect.github.com/Viicos) in [#​10339](https://redirect.github.com/pydantic/pydantic/pull/10339) - Do not error when trying to evaluate annotations of private attributes by [@​Viicos](https://redirect.github.com/Viicos) in [#​10358](https://redirect.github.com/pydantic/pydantic/pull/10358) - Fix nested type statement by [@​kc0506](https://redirect.github.com/kc0506) in [#​10369](https://redirect.github.com/pydantic/pydantic/pull/10369) - Improve typing of `ModelMetaclass.mro` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10372](https://redirect.github.com/pydantic/pydantic/pull/10372) - Fix class access of deprecated `computed_field`s by [@​Viicos](https://redirect.github.com/Viicos) in [#​10391](https://redirect.github.com/pydantic/pydantic/pull/10391) - Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@​MovisLi](https://redirect.github.com/MovisLi) in [#​10374](https://redirect.github.com/pydantic/pydantic/pull/10374) - Fix `NameError` when using `validate_call` with PEP 695 on a class by [@​kc0506](https://redirect.github.com/kc0506) in [#​10380](https://redirect.github.com/pydantic/pydantic/pull/10380) - Fix `ZoneInfo` with various invalid types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10408](https://redirect.github.com/pydantic/pydantic/pull/10408) - Fix `PydanticUserError` on empty `model_config` with annotations by [@​cdwilson](https://redirect.github.com/cdwilson) in [#​10412](https://redirect.github.com/pydantic/pydantic/pull/10412) - Fix variance issue in `_IncEx` type alias, only allow `True` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10414](https://redirect.github.com/pydantic/pydantic/pull/10414) - Fix serialization schema generation when using `PlainValidator` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10427](https://redirect.github.com/pydantic/pydantic/pull/10427) - Fix schema generation error when serialization schema holds references by [@​Viicos](https://redirect.github.com/Viicos) in [#​10444](https://redirect.github.com/pydantic/pydantic/pull/10444) - Inline references if possible when generating schema for `json_schema_input_type` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10439](https://redirect.github.com/pydantic/pydantic/pull/10439) - Fix recursive arguments in `Representation` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10480](https://redirect.github.com/pydantic/pydantic/pull/10480) - Fix representation for builtin function types by [@​kschwab](https://redirect.github.com/kschwab) in [#​10479](https://redirect.github.com/pydantic/pydantic/pull/10479) - Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10506](https://redirect.github.com/pydantic/pydantic/pull/10506) - Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@​Viicos](https://redirect.github.com/Viicos) in [#​10518](https://redirect.github.com/pydantic/pydantic/pull/10518) - Fix `stacklevel` on deprecation warnings for `BaseModel` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10520](https://redirect.github.com/pydantic/pydantic/pull/10520) - Fix warning `stacklevel` in `BaseModel.__init__` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10526](https://redirect.github.com/pydantic/pydantic/pull/10526) - Improve error handling for in-evaluable refs for discriminator application by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10440](https://redirect.github.com/pydantic/pydantic/pull/10440) - Change the signature of `ConfigWrapper.core_config` to take the title directly by [@​Viicos](https://redirect.github.com/Viicos) in [#​10562](https://redirect.github.com/pydantic/pydantic/pull/10562) - Do not use the previous config from the stack for dataclasses without config by [@​Viicos](https://redirect.github.com/Viicos) in [#​10576](https://redirect.github.com/pydantic/pydantic/pull/10576) - Fix serialization for IP types with `mode='python'` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10594](https://redirect.github.com/pydantic/pydantic/pull/10594) - Support constraint application for `Base64Etc` types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10584](https://redirect.github.com/pydantic/pydantic/pull/10584) - Fix `validate_call` ignoring `Field` in `Annotated` by [@​kc0506](https://redirect.github.com/kc0506) in [#​10610](https://redirect.github.com/pydantic/pydantic/pull/10610) - Raise an error when `Self` is invalid by [@​kc0506](https://redirect.github.com/kc0506) in [#​10609](https://redirect.github.com/pydantic/pydantic/pull/10609) - Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10523](https://redirect.github.com/pydantic/pydantic/pull/10523) - Tweak type alias logic by [@​kc0506](https://redirect.github.com/kc0506) in [#​10643](https://redirect.github.com/pydantic/pydantic/pull/10643) - Support usage of `type` with `typing.Self` and type aliases by [@​kc0506](https://redirect.github.com/kc0506) in [#​10621](https://redirect.github.com/pydantic/pydantic/pull/10621) - Use overloads for `Field` and `PrivateAttr` functions by [@​Viicos](https://redirect.github.com/Viicos) in [#​10651](https://redirect.github.com/pydantic/pydantic/pull/10651) - Clean up the `mypy` plugin implementation by [@​Viicos](https://redirect.github.com/Viicos) in [#​10669](https://redirect.github.com/pydantic/pydantic/pull/10669) - Properly check for `typing_extensions` variant of `TypeAliasType` by [@​Daraan](https://redirect.github.com/Daraan) in [#​10713](https://redirect.github.com/pydantic/pydantic/pull/10713) - Allow any mapping in `BaseModel.model_copy()` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10751](https://redirect.github.com/pydantic/pydantic/pull/10751) - Fix `isinstance` behavior for urls by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10766](https://redirect.github.com/pydantic/pydantic/pull/10766) - Ensure `cached_property` can be set on Pydantic models by [@​Viicos](https://redirect.github.com/Viicos) in [#​10774](https://redirect.github.com/pydantic/pydantic/pull/10774) - Fix equality checks for primitives in literals by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://redirect.github.com/pydantic/pydantic-core/pull/1459) - Properly enforce `host_required` for URLs by [@​Viicos](https://redirect.github.com/Viicos) in [pydantic/pydantic-core#1488](https://redirect.github.com/pydantic/pydantic-core/pull/1488) - Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@​andrey-berenda](https://redirect.github.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://redirect.github.com/pydantic/pydantic-core/pull/1515) - Fix serializing `complex` values in `Enum`s by [@​changhc](https://redirect.github.com/changhc) in [pydantic/pydantic-core#1524](https://redirect.github.com/pydantic/pydantic-core/pull/1524) - Refactor `_typing_extra` module by [@​Viicos](https://redirect.github.com/Viicos) in [#​10725](https://redirect.github.com/pydantic/pydantic/pull/10725) - Support intuitive equality for urls by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10798](https://redirect.github.com/pydantic/pydantic/pull/10798) - Add `bytearray` to `TypeAdapter.validate_json` signature by [@​samuelcolvin](https://redirect.github.com/samuelcolvin) in [#​10802](https://redirect.github.com/pydantic/pydantic/pull/10802) - Ensure class access of method descriptors is performed when used as a default with `Field` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10816](https://redirect.github.com/pydantic/pydantic/pull/10816) - Fix circular import with `validate_call` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10807](https://redirect.github.com/pydantic/pydantic/pull/10807) - Fix error when using type aliases referencing other type aliases by [@​Viicos](https://redirect.github.com/Viicos) in [#​10809](https://redirect.github.com/pydantic/pydantic/pull/10809) - Fix `IncEx` type alias to be compatible with mypy by [@​Viicos](https://redirect.github.com/Viicos) in [#​10813](https://redirect.github.com/pydantic/pydantic/pull/10813) - Make `__signature__` a lazy property, do not deepcopy defaults by [@​Viicos](https://redirect.github.com/Viicos) in [#​10818](https://redirect.github.com/pydantic/pydantic/pull/10818) - Make `__signature__` lazy for dataclasses, too by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10832](https://redirect.github.com/pydantic/pydantic/pull/10832) - Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10856](https://redirect.github.com/pydantic/pydantic/pull/10856) ##### New Contributors - [@​jakob-keller](https://redirect.github.com/jakob-keller) made their first contribution in [#​10331](https://redirect.github.com/pydantic/pydantic/pull/10331) - [@​MovisLi](https://redirect.github.com/MovisLi) made their first contribution in [#​10374](https://redirect.github.com/pydantic/pydantic/pull/10374) - [@​joaopalmeiro](https://redirect.github.com/joaopalmeiro) made their first contribution in [#​10405](https://redirect.github.com/pydantic/pydantic/pull/10405) - [@​theunkn0wn1](https://redirect.github.com/theunkn0wn1) made their first contribution in [#​10378](https://redirect.github.com/pydantic/pydantic/pull/10378) - [@​cdwilson](https://redirect.github.com/cdwilson) made their first contribution in [#​10412](https://redirect.github.com/pydantic/pydantic/pull/10412) - [@​dlax](https://redirect.github.com/dlax) made their first contribution in [#​10421](https://redirect.github.com/pydantic/pydantic/pull/10421) - [@​kschwab](https://redirect.github.com/kschwab) made their first contribution in [#​10479](https://redirect.github.com/pydantic/pydantic/pull/10479) - [@​santibreo](https://redirect.github.com/santibreo) made their first contribution in [#​10453](https://redirect.github.com/pydantic/pydantic/pull/10453) - [@​FlorianSW](https://redirect.github.com/FlorianSW) made their first contribution in [#​10478](https://redirect.github.com/pydantic/pydantic/pull/10478) - [@​tkasuz](https://redirect.github.com/tkasuz) made their first contribution in [#​10555](https://redirect.github.com/pydantic/pydantic/pull/10555) - [@​AlekseyLobanov](https://redirect.github.com/AlekseyLobanov) made their first contribution in [#​10601](https://redirect.github.com/pydantic/pydantic/pull/10601) - [@​NiclasvanEyk](https://redirect.github.com/NiclasvanEyk) made their first contribution in [#​10667](https://redirect.github.com/pydantic/pydantic/pull/10667) - [@​mschoettle](https://redirect.github.com/mschoettle) made their first contribution in [#​10677](https://redirect.github.com/pydantic/pydantic/pull/10677) - [@​Daraan](https://redirect.github.com/Daraan) made their first contribution in [#​10713](https://redirect.github.com/pydantic/pydantic/pull/10713) - [@​k4nar](https://redirect.github.com/k4nar) made their first contribution in [#​10736](https://redirect.github.com/pydantic/pydantic/pull/10736) - [@​UriyaHarpeness](https://redirect.github.com/UriyaHarpeness) made their first contribution in [#​10740](https://redirect.github.com/pydantic/pydantic/pull/10740) - [@​frfahim](https://redirect.github.com/frfahim) made their first contribution in [#​10727](https://redirect.github.com/pydantic/pydantic/pull/10727) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/MartinBernstorff/Memium). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This is my attempt to fix pydantic/pydantic#8570. Tested this locally with pydantic-core and it worked.
The reason of that original error is underflow. I'm not very sure what is so special about year 1600 and why that was introduced. It seems that it was once year 1000 in c7f9257 but somehow it was revert back to 1600. Considering @davidhewitt's comment #55 (review), since the minimum time string allowed in RFC 3339 is
0000-01-01T00:00:00+00:00(UTC since other timestamp constants are also in UTC,) I think it makes sense to replace that year 1600 constant with the minimum year 0000, which will help get rid of the underflow problem.I added some test cases for the minimum timestamp and other existing test cases still work, but I'm not sure if I missed out anything, especially because I still don't know why 1600 was used in the first place.
Note that now watershed does not cover the entire range of acceptable negative timestamp values. I changed that value to cover the entire range at first, but then I reverted the change since that would probably affect existing users relying on that value.