CHANGELOG
All notable changes to this project will be documented in this file.
pre-
0.1.0releases may contain breaking changes, but imma do my best to tell ya; hit me up if you find a bug/breaking-change
v0.0.98 [unreleased]
ryo3-jiff- updated to
v0.16.0
- updated to
ryo3-serde- dictionary serialization
- exact map lengths and no double
len()calls - hot path for string keys (which is the primary use case)
- exact map lengths and no double
- dictionary serialization
v0.0.97 [2026-06-26]
ryo3-globset— redesigned from the ground up- BREAKING
ry.Globno longer allows negation (!-prefixed patterns) ry.GlobSetandry.Globsterconstructors take (*args)GlobOptionsinternal refactoring__repr__includes kwargs when non-defaultGlobsteruses gitignore-style last match wins for negative patterns- split src files up
- BREAKING
ryo3-bytes- constructor returns same instance if input is already
ry.Bytes - added
Bytes.clone()method which clones internally returning new instance __add__now accepts anyReadableBuffer(not just anotherBytes); returns self/other unchanged when one operand is empty
- constructor returns same instance if input is already
ryo3-fspath__repr__usesposix_display()for correct cross-platform path renderingparentsreturns internal lazy iter (PyFsPathAncestors)drive,extension,file_name,file_prefix,file_stem,namereturnOsStringanchorusesOsStr::display()instead ofto_string_lossy()
ryo3-jiterJiterParseOptionsgains builder methods:new(),with_allow_inf_nan(),with_cache_mode(),with_partial_mode(),with_catch_duplicate_keys()- re-exports
FloatMode,PartialMode,PythonParse,StringCacheMode,map_json_erroraspub use
ryo3-jiff- update jiff to 0.2.29
- add
ry.ZonedDateTime.UNIX_EPOCH
_ryo3-devcleaned out
v0.0.96 [2026-06-12]
- pyo3-v0.29
ryo3-jiff- BREAKING: removed deprecated fns slated for removal:
ry.SignedDuration.from_isoformat(usery.SignedDuration.fromisoformatinstead)ry.TimeSpan.parse_common_iso(usery.TimeSpan.fromisoformatinstead)ry.TimeSpan.from_isoformat(usery.TimeSpan.fromisoformatinstead)
- refactored
__sub__/subimplementations to be cleaner - internal refactoring
- BREAKING: removed deprecated fns slated for removal:
ryo3-walkdir- BREAKING: removed support for
objects=Falseso iterators always yieldry.WalkDirEntry - BREAKING:
ry.WalkdirGenrenamed tory.WalkDirIter
- BREAKING: removed support for
- misc
- all
__repr__impls now usestd::fmt::Display
- all
ry.ulidsubmodule removed; usery.ULIDry.dirssubmodule removed; usery.XYZ_dir()instead (egry.home_dir())
v0.0.95 [2026-06-04]
NOTE:
- build
- fix cicd git-hash embedding
ryo3-fnv- renamed
keytoseedforxxhashparity and bc it is a better term for the hash - added clsattr
ry.fnv1a.default_seed - added static-method
ry.fnv1a.oneshot_int(data: Buffer, *, seed: int | bytes = 0xCBF29CE484222325) -> int: ... - added static-method
ry.fnv1a.oneshot_hex(data: Buffer, *, seed: int | bytes = 0xCBF29CE484222325) -> str: ...
- renamed
ryo3-twox-hash- added class-level one-shot helpers to xxhash hashers (
xxh32,xxh64,xxh3_64,xxh3_128):ry.xxh32.oneshot_int(data, *, seed=0) -> intry.xxh32.oneshot_hex(data, *, seed=0) -> strry.xxh64.oneshot_int(data, *, seed=0) -> intry.xxh64.oneshot_hex(data, *, seed=0) -> strry.xxh3_64.oneshot_int(data, *, seed=0, secret=...) -> intry.xxh3_64.oneshot_hex(data, *, seed=0, secret=...) -> strry.xxh3_128.oneshot_int(data, *, seed=0, secret=...) -> intry.xxh3_128.oneshot_hex(data, *, seed=0, secret=...) -> str
- added class-level one-shot helpers to xxhash hashers (
ryo3-aws-lc- added static-methods to
ry.<AWS-HASHER>.oneshot_hex(data)
- added static-methods to
ryo3-dirs- moved
*_dirto ry package rooot - DEPRECATED: deprecated
ry.dirs.*and all the non-suffixed methods
- moved
ryo3-ulid- exposed
ry.ULIDat theryroot;ry.ulid.ULIDremains as a deprecated compatibility export until0.0.96
- exposed
ryo3-uuid- added
ry.UUID.NILandry.UUID.MAXto match python3.14 - moved
UUID,uuid1,uuid3,uuid4,uuid5,uuid6,uuid7, anduuid8to therypackage root - kept
ry.uuidas a compatibility module that re-exports UUID helpers and constants
- added
- types
- reshuffled type annotation files (was a nightmare)
v0.0.94 [2026-06-03]
-
ryo3-reqwest- upate to
0.13.4which notably updateshickory-resolverto0.26
- upate to
-
ryo3-jiff- added
ry.TimeSpan.MINandry.TimeSpan.MAXas the minimum and maximum representable time spans - made
ry.TimeSpanmapping-like so you can spread it into a dict or kwargs… - update to
0.13.4which notably updateshickory-resolverto0.26 ry.SignedDuration.secondsreturns the total seconds instead of the seconds remainder (seconds % 86400) and addedry.SignedDuration.seconds_remainderry.SignedDuration.__truediv__now supports being divided byry.Duration
- added
-
ryo3-bytes__getitem__return via enum +impl IntoPyObject
-
ryo3-cookie- added
ry.Cookie.to_string()for consistency w/ otherrytypes
- added
-
ryo3-size- added constants/classattrs to
ry.Size- min/max/zero
ry.Size.ZERO: t.Final[Size] # Size(0)ry.Size.MAX: t.Final[Size] # Size(9_223_372_036_854_775_807)ry.Size.MIN: t.Final[Size] # Size(-9_223_372_036_854_775_808)
- byte units
ry.Size.B: t.Final[Size] # Size(1)ry.Size.BYTE: t.Final[Size] # Size(1)ry.Size.KB: t.Final[Size] # Size(1_000)ry.Size.KIB: t.Final[Size] # Size(1_024)ry.Size.KIBIBYTE: t.Final[Size] # Size(1_024)ry.Size.KILOBYTE: t.Final[Size] # Size(1_000)ry.Size.MB: t.Final[Size] # Size(1_000_000)ry.Size.MEBIBYTE: t.Final[Size] # Size(1_048_576)ry.Size.MEGABYTE: t.Final[Size] # Size(1_000_000)ry.Size.MIB: t.Final[Size] # Size(1_048_576)ry.Size.GB: t.Final[Size] # Size(1_000_000_000)ry.Size.GIB: t.Final[Size] # Size(1_073_741_824)ry.Size.GIBIBYTE: t.Final[Size] # Size(1_073_741_824)ry.Size.GIGABYTE: t.Final[Size] # Size(1_000_000_000)ry.Size.TB: t.Final[Size] # Size(1_000_000_000_000)ry.Size.TEBIBYTE: t.Final[Size] # Size(1_099_511_627_776)ry.Size.TERABYTE: t.Final[Size] # Size(1_000_000_000_000)ry.Size.TIB: t.Final[Size] # Size(1_099_511_627_776)ry.Size.PB: t.Final[Size] # Size(1_000_000_000_000_000)ry.Size.PEBIBYTE: t.Final[Size] # Size(1_125_899_906_842_624)ry.Size.PETABYTE: t.Final[Size] # Size(1_000_000_000_000_000)ry.Size.PIB: t.Final[Size] # Size(1_125_899_906_842_624)ry.Size.EB: t.Final[Size] # Size(1_000_000_000_000_000_000)ry.Size.EIB: t.Final[Size] # Size(1_152_921_504_606_846_976)ry.Size.EXABYTE: t.Final[Size] # Size(1_000_000_000_000_000_000)ry.Size.EXBIBYTE: t.Final[Size] # Size(1_152_921_504_606_846_976)
- min/max/zero
- internal refactoring to preserve integer inputs as opposed to coercing them
to floats when doing
ry.Size.from_*
- added constants/classattrs to
-
parsing
parse(...)/from_str(...)are positional only now
v0.0.93 [2026-05-22]
- set MSRV to 1.95
ryo3-reqwest- refactor internals
- don’t clone header map, split via
into_partsand use the actual owned headers map - custom copy pasta charset handling
- still no body caching bc I think that is dumb but may add if someone asks
- use
ryo3-tokio-rthelpers more
- deprecations
- new
- deprecated
ry.SignedDuration.from_isoformat,ry.TimeSpan.parse_common_iso, andry.TimeSpan.from_isoformatin favor of*.fromisoformat; this matches python/pandas
- deprecated
- removed
- removed deprecated jiff
.intz(...)aliases; use.in_tz(...)instead ryo3_tokio::fs::aiopen(akary.aiopen); usery.aopeninstead (which has the benefit of not having the letters “ai”)ryo3_url::URL.replace_*methods in favor ofryo3_url::URL.with_*methodsry.HttpClient(ryo3_reqwest::RyHttpClient) removed (finally); use insteadry.Client
- removed deprecated jiff
- new
v0.0.92 [2026-05-15]
- errors
- use
format_args!instead offormat!inpy_*_err!(...)/py_*_error!(...)macros to avoid allocations on string-literal error messages
- use
ryo3-bytes- upgrade
strip,lstrip, andrstripmethods; return same instance if no stripping - use
ReadableBufferfor slightly faster access onry.Bytesmethods - custom internal iterator for bytes (bc I need it (for work) to be a weeee bit faster)
- upgrade
v0.0.91 [2026-05-08]
- use readable buffer in
ryo3-flate2,ryo3-bzip2andryo3-brotli - fixed context handlers to use
&Bound<'_, PyAny>instead ofPy<PyAny> ryo3-brotli- compression/decompression functions now return
ry.Bytesinstead ofbuiltins.bytes
- compression/decompression functions now return
ryo3-tokio-websocket- unexpected ws disconnects mark websocket closed when read/write fail
v0.0.90 [2026-04-30]
ryo3-reqwest- deprecated
ry.HttpClientin favor ofry.Client;ry.HttpClientwill be removed in0.0.93 - consolidated
ry.HttpClientintory.Clientwith impls flip flopping based onpyo3/experimental-asyncactivation - removed
joinkwarg fromResponseStream.collectandBlockingResponseStream.collectand replaced with.readall()method on the stream classes
- deprecated
ryo3-fspath- pydantic integration
ryo3-http- pydantic support for
ry.Headersandry.HttpStatus
- pydantic support for
- pydantic integration
- changed all pydantic stuff to use
no_info_plain_validator_functioninstead ofno_info_wrap_validator_functionfor all butulidas it is 25-50% faster in benchmarks:
- changed all pydantic stuff to use
---------------------------------------------------------------------------------------- benchmark 'pydantic-Timestamp-validate-json': 2 tests ----------------------------------------------------------------------------------------
Name (time in ns) Min Max Mean StdDev Median IQR Outliers OPS (Mops/s) Rounds Iterations
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
test_rydantic_bench_json[ry.Timestamp] (0001_plain) 337.9992 (1.0) 55,788.9998 (1.0) 373.8919 (1.0) 303.6747 (1.0) 363.9998 (1.0) 23.0011 (1.0) 147;2168 2.6746 (1.0) 56877 1
test_rydantic_bench_json[ry.Timestamp] (0002_wrap) 394.0004 (1.17) 143,503.9994 (2.57) 453.5600 (1.21) 699.1917 (2.30) 441.9999 (1.21) 35.0010 (1.52) 77;1176 2.2048 (0.82) 50096 1
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------- benchmark 'pydantic-Timestamp-validate-python': 2 tests ---------------------------------------------------------------------------------
Name (time in us) Min Max Mean StdDev Median IQR Outliers OPS (Kops/s) Rounds Iterations
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
test_rydantic_bench_python[ry.Timestamp] (0001_plain) 1.0610 (1.0) 51.7840 (1.44) 1.1756 (1.0) 0.4291 (1.12) 1.1460 (1.0) 0.0880 (1.54) 129;420 850.6392 (1.0) 29310 1
test_rydantic_bench_python[ry.Timestamp] (0002_wrap) 1.4080 (1.33) 35.9990 (1.0) 1.5289 (1.30) 0.3846 (1.0) 1.5130 (1.32) 0.0570 (1.0) 78;379 654.0615 (0.77) 15973 1
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
v0.0.89 [2026-04-24]
- tests
- tests for
ry.panic()andry.unreachable()
- tests for
- repo
- switch to
prek.tomlfrom.pre-commit.yaml
- switch to
- rust-deps
tokio->1.52.1mimalloc->0.1.49(changes underlying mimalloc tov3AFAICT)uuid->1.23.1
ryo3-core- added
UnreachableErrorandPanicExceptionexception types - added
unreachable()andpanic()funks (useful for testing)
- added
ryo3-fspath- constructor takes
*argsnow likepathlib.Path - impl joinpath with
*args
- constructor takes
ryo3-jiff- pattern matching support via
__match_args__for:ry.Date:(year, month, day)ry.DateTime:(year, month, day, hour, minute, second, subsec_nanosecond)ry.ISOWeekDate:(year, week, weekday)ry.Time:(hour, minute, second, subsec_nanosecond)ry.SignedDuration:(secs, nanos)ry.Timestamp:(secs, nanos)ry.ZonedDateTime:(year, month, day, hour, minute, second, subsec_nanosecond)
- remove
std::sync::Arcwrapper aroundry.TimeZone - pydantic support for
ry.TimeZone
- pattern matching support via
ryo3-std- pattern matching support for
ry.Duration=>(secs, nanos)
- pattern matching support for
ryo3-size- random updates n shit (use
PyAsciiString, make surereprfor formatter evals to same thing still dont love the size wrapper lib) - formatter improvements
- random updates n shit (use
ryo3-uuid- use readable-buffer and small adjustments to speed up extraction
- use
PyAsciiStringfor__repr__and__str__
ryo3-ulid- macros for errors
- use
PyAsciiStringfor__repr__and__str__
v0.0.88 [2026-04-10] back-to-the-future
- repo
- use import granularity
Module
- use import granularity
ryo3-serde- python
enumserialization support - fix issue with depth in
set/frozenset - serializers no longer redundantly cast/check types
- python
- expanding usage of
ReadableBufferfor (every-so-slightly) perf gains when reading bytes- use in
memchr
- use in
ryo3-memchr- use
ReadableBufferfor bytes extraction
- use
ryo3-aws-lc- Use release GIL if length of bytes to digest is
>2047similar to how python’shashlibdoes it
- Use release GIL if length of bytes to digest is
ryo3-tokio-websocketsconfig()function onry.WebSocketto return a typed dict with the config values
ryo3-twox-hash- fix secret validaion/ extraction for
xxhash3*: was validating secret to be buf w/ length 192, when in reality an xxhash3-secret is valid so long as it is as least 132 bytes - reexport xxhasher pyclasses at top level of library (stupid submodules)
oneshotmethods now return bytes as it is (slightly) faster
- fix secret validaion/ extraction for
ryo3-fnvoneshotstatic method now returns bytes not an integer
v0.0.87 [2026-04-03]
- internal
- remove imports from
pyo3where covered bypyo3::prelude::*
- remove imports from
ryo3-tokio-rt- moved the
ryo3-tokioruntime tools/utils into own crateryo3-tokio-rt - Use crate in
ryo3-reqwest,ryo3-tokioand futureryo3-tokio-websockets
- moved the
ryo3-tokio-websockets- finally implemented (over about a week) bc I am working on a ws server at work and gonna use this to test it
- work in progress websocket client using
tokio-websocketscrate - add
json()fn tory.WsMessageto parse message payload as JSON
ryo3-cookie- Move
PyCookieout from underryo3-reqwestand into its own happy home
- Move
v0.0.86 [2026-03-18]
ryo3-serde- refactor py-uuid serializer
- refactor py-float serializer
- clean up dead code
v0.0.85 [2026-03-04]
ryo3-fnv- drop
fnvcrate dependency - internal refactoring and cleanup to use
ryo3-coreutils
- drop
ryo3-reqwesttext_with_charsetresponse methodstextnow takesencoding="utf-8"kw-only-arg (looks like rnet guy copied this… nice)
ryo3-aws-lc- dep updates to resolve depbot security issues
v0.0.84 [2026-02-16]
- bump
jiffversion to0.2.20 ryo3-aws-lc- new crate! yay
- implemented digest wrappers!
v0.0.83 [2026-02-05]
- pyo3: updated
pyo3to0.28.x ryo3-jiff- more timestamp testing
- pendulum/whenever/arrow style
addandsubapis for jiff types
- misc
- add clippy
derive_partial_eq_without_eqlint
- add clippy
ryo3-glob- Renamed
PatterntoGlobPatternfor clarity. People usingry.GlobPatternprobably prefer usingry.Globoverry.GlobPattern(formerlyry.Pattern) as it is more performant and more configurable.
- Renamed
v0.0.82 [2026-01-27]
ryo3-http- renamed several http types to have
Pyprefix to avoid confusion withhttpcrate types and be clear that they are wrapper types for extracting/into-ing w/pyo3:HttpMethod->PyHttpMethodHttpVersion->PyHttpVersionHttpHeaderName->PyHttpHeaderNameHttpHeaderNameRef->PyHttpHeaderNameRefHttpHeaderValue->PyHttpHeaderValueHttpHeaderMap->PyHttpHeaderMap
- renamed several http types to have
ryo3-reqwestconnection_verbosekwarg forry.HttpClient,ry.Clientandry.BlockingClientfor debugging- internal refactoring of client kwargs extraction
v0.0.81 [2026-01-23]
ryo3-jiter- restore big-int json parsing support. jiter
feature: num-bigintwas removed when I turned off all default features :/
- restore big-int json parsing support. jiter
v0.0.80 [2026-01-22] ~ the wild 80’s
ryo3-http- remove
parking_lotfrom http - cache status
ry.HttpStatuscode struct instances. the classattrs go through the same mechanism sory.HttpStatus.OK is ry.HttpStatus(200)isTrue. Statuses are only cached for codes in the 100-599 range even tho::http::StatusCodeallowsu16from100..=999(which idk why they did that)
- remove
ryo3-std- the internal
DirEntrystruct getters were changed to be methods instead of properties to match theasyncversion inryo3-tokio FileTypefinally supportingFileTypeExtand internally reworked- removed
FileType.to_dict()and associatedFileTypeDicttyped-dict - sync-file-stream kwarg
chunk_sizerenamed toread_sizeto be more clear
- the internal
ryo3-tokio- async-file-stream kwarg
chunk_sizerenamed toread_sizeto be more clear - Experiments with using tokio runtime to spawn instead of pyo3-async-runtimes + py-futures
- async-file-stream kwarg
v0.0.79 [2026-01-15]
ryo3-jiff- rejigger
__add__to be commutative for span/signed_duration
- rejigger
default-features = falseeverywere and manually fine-grain control featsryo3-serde- internal refactoring and some unsafe-ness where it is straight-forward
- removed
Dataclassfrom pointer lookup table and put dataclass serialzation under the newPyUnknownSerializer
type-annotations- removed generic
ry.Proxyas it was more confusing than helpful
- removed generic
v0.0.78 [2026-01-12]
- internal
- use uv publishing
- update pre-commit stuff
- update dev/testing deps
ryo3-reqwest- added new
tls_crls_onlykwarg - added
ry.CertificateRevocationList - added
ry.Identity - added
resolvemapping support for clients - renames/deprecations:
root_certificates->tls_certs_mergeandtls_certs_onlydanger_accept_invalid_certs->tls_danger_accept_invalid_certsdanger_accept_invalid_hostnames->tls_danger_accept_invalid_hostnames
- added new
v0.0.77 [2026-01-07]
ryo3-reqwest- Allow
Generator[Buffer] | AsyncGenerator[Buffer] | Iterable[Buffer] | AsyncIterable[Buffer]as body input - Renamed tls version kwargs to match reqwest naming:
tls_max_version->tls_version_maxtls_min_version->tls_version_min
Response.stream()now takes amin_read_sizekwarg; must be positive int, anddefault=0meaning no buffering
- Allow
v0.0.76 [2026-01-05]
ryo3-jiff- Custom extractors for enums to avoid clones
- Cleaner
SpanRelativeToimpl that does not involve cloning - bump jiff version:wq
ryo3-reqwest- Update to reqwest
v0.13.1+
- Update to reqwest
ryo3-serde- Custom faster string extraction w/ orjson as the inspiration
v0.0.75 [2025-12-22]
ryo3-serde- Renamed all
SerializePy*structs toPy*Serializerw/ this one-liner:find . -type f -name "*.rs" -print0 | xargs -0 sed -i -E 's/SerializePy([A-Z][A-Za-z0-9_]*)/Py\1Serializer/g'
- Renamed all
ryo3-jiff- Consolidate
map_py_err_*functions intoryo3_core ry.TimeZone.preceding&ry.TimeZone.followingfor timezone transitions
- Consolidate
ryo3-core- renamed
PyMutextoRyMutexto avoid confusion withpyo3’sPyMutex
- renamed
ryo3-fspath- Removed richcmp between non
FsPathobjects andry.FsPath(can useequiv) to check for equality - Use
RyMutexinstead ofparking_lot::Mutex
- Removed richcmp between non
ryo3-glob- Use
RyMutexinstead ofparking_lot::Mutex
- Use
ryo3-reqwest- Remove mutex wrapping global client
- Experimental new
ry.Clientthat usespyo3’sexperimental-asyncfeat
ryo3-uuid- made
__hash__equiv to python’s__hash__impl so that rich comparisons betweenry.UUIDanduuid.UUIDwork as expected in hashed collections
- made
ryo3-url- Added
equivmethod for comparingry.URLwith otherry.URLinstances or pythonstrobjects - Removed richcmp between non
URLobjects andry.URL(can useequiv) to check for equality
- Added
v0.0.74 [2025-12-16]
- updating pyo3 to use
skip_from_py_objectwhere applicable (this will be a staged effort) ryo3-serde- move to using
borrowedover&bound; benchmarks show 10-20% perf in serializing
- move to using
ryo3-jiff- Removed equality with
datetime.timedeltacan usery.SignedDuration.equivto compare todatetime.timedelta,ry.SignedDuration, orry.Duration.
- Removed equality with
ryo3-reqwest- Fix race condition when creating error from reqwest-client-wrapper
v0.0.73 [2025-12-12]
ryo3-jiff- offset
- pydantic integration
- Changed signature of constructor to be
ry.Offset(hours=0, minutes=0, seconds=0)
- use defaults for all round/difference objects/function calls
- fixed f-str formatting when empty fmt string given
- offset
v0.0.72 [2025-12-10]
- RENAMES:
ry.URL.replace_*->ry.URL.with_*: thereplace_*methods are deprecated in favor ofwith_*methods. Thery.URL.replacestill exists as a way to replace multiple parts at once.ry.aiopen->ry.aopen: it was supposed to be “asyncio-open”, but it could be easily confused with “artificial-intelligence-open”/“llm-open”ryo3-fnvFnvHasher->fnv1afnv1afunction removed as it was just a stupid proxy forfnv1aclass constructor
ryo3-tokio- Added
AsyncFileReadStreampyclass for async file read streams - Helper function
read_str_asyncfor creating anAsyncFileReadStream
- Added
ryo3-jiff- use
PyMutexand get rid ofparking_lot::Mutexfor jiff series iterators
- use
v0.0.71 [2025-12-03]
ryo3-serde- crude string subclass support
ryo3-jiff- use
py_parseandpy_from_strfor jiff types so that str/bytes are alloweddef parse(cls, s: str | bytes) -> t.Self: - Fix pydantic paring problems caused by lazy copy-pasta-ing w/o using eyeballs to read what I had copy-pasta-ed
- use
v0.0.70 [2025-12-02] (30 is the new 70)
- type annotations
- Fixing type annotations and starting to use
stubtest
- Fixing type annotations and starting to use
ryo3-http- Bump version to 1.4.0 which adds
103 Early Hintsstatus code among other things
- Bump version to 1.4.0 which adds
ryo3-reqwest- Removed
clientkwarg fromfetchfunction as it is kinda stupid BlockingClientandBlockingResponsefor sync/blocking reqs… This makes theHttpClientname awkward and may rename it to justClient… TBD- added
fetch_syncfunction for blocking/sync http requests
- Removed
ryo3-jiffoffset_conflictanddisambiguationtype annotation fixescollect()methods for jiff series
v0.0.69 [2025-11-21]
- added
immutable_typeattr to pyclasses bc many of the things in this crate are practically primitives ryo3-fnv- Add
py.detachwhere it makes sense - Return python
builtins.bytesfrom digest notry.Bytes
- Add
ryo3-urlURL.hostproperty returnsNone | str | ry.Ipv4Addr | ry.Ipv6ddrifryo3-stdfeature enabled
ryo3-std- pydantic support for
ry.Ipv4Addr,ry.Ipv6addr, andry.Ipaddr
- pydantic support for
ryo3-brotli- Internal refactoring & type-annotation updates
ryo3-bzip2- Internal refactoring & type-annotation updates
ryo3-flate2- Internal refactoring & type-annotation updates
v0.0.68 [2025-11-14]
ryo3-glob- fix error on
take
- fix error on
ryo3-corePyMutexthat lets ya pick to throw or not via const generic (very fancy look at me)
ryo3-jiff- Update jiff to
0.2.16 - Add
ZonedSeries
- Update jiff to
ryo3-std- Use jiff for duration formatting
ry.Duration.secondsnow returns total seconds in durationry.Duration.seconds_remainderreturns seconds % days (self.seconds % 86400)- Remove
datetime.timedeltasupport forry.Duration.__richcmp__as there is not a one-2-uno direct mapping between timedeltas and durations (bc durations are unsigned) - pydantic support for
ry.Duration
ryo3-serde- Use jiff unsigned-duration serialization for
ry.Duration
- Use jiff unsigned-duration serialization for
v0.0.67 [2025-11-07]
ryo3-stdread_strasread_textalias
- fix musl builds
ryo3-url- pydantic support
v0.0.66 [2025-10-31]
- fix typos in python tests
- windows arm64 builds
- use
py.detachwhere beneficial:ryo3-brotliryo3-fspathryo3-same-fileryo3-stdryo3-walkdirryo3-which
ryo3-bytes- optimized extraction of
builtins.bytes,ry.Bytes
- optimized extraction of
ryo3-http- switch from
parking_lot::Mutextoparking_lot::RwLockforPyHeaders:wq
- switch from
- global-allocator
mimallocfeature added to usemimallocover the system allocator- added top level
__allocator__constant
v0.0.65 [2025-10-24]
ryo3-reqwest- Manually implement
ClientConfig::defaultas global fetch was failing
- Manually implement
ryo3-uuid- Fixed features problems as pointed out by clippy + cargo-hack
- Removed unused
uuid2function as it is not implemented in the underlyinguuidcrate
v0.0.64 [2025-10-20]
ryo3-reqwest- Turn on hickory-dns by default
- Use `rustls-tls-webpki-roots
v0.0.63 [2025-10-20]
- pyo3
- Upgrade pyo3 version to
0.27.x
- Upgrade pyo3 version to
ryo3-std- Missing
std::fsfunction wrappers:std::fs::hard_link->ry.hard_link(src: FsPathLike, dst: FsPathLike) -> Nonestd::fs::read_link->ry.read_link(path: FsPathLike) -> FsPathLikestd::fs::read_to_string->ry.read_to_string(path: FsPathLike) -> strstd::fs::set_permissions->ry.set_permissions(path: FsPathLike, permissions: ry.Permissions) -> Nonestd::fs::soft_link->ry.soft_link(from_path: FsPathLike, to_path: FsPathLike) -> Nonestd::fs::symlink_metadata->ry.symlink_metadata(path: FsPathLike) -> ry.Metadata
- Missing
ryo3-glob- Detach implementation of
takeandcollect(which is cleaner and probably a wee bit faster)
- Detach implementation of
_futureryo3-ignorewrapper placeholderryo3-tokio-websocketscrate placeholder
ryo3-reqwestry.CertificateforHttpClientaddedroot_certificatesadded tory.HttpClient
v0.0.62 [2025-10-15]
- python3.14 builds
ryo3-uuid- Fixed uuid
.timeproperty on python 3.14+
- Fixed uuid
ryo3-sqlformat- Internal refactoring
- Fixed type annotations
- Starting to think that the
QueryParamswrapper is totally stupid and useless and may remove/deprecate - Upgrade sqlformat to
0.5.0which adds the kwargdialect: t.Literal["generic", "postgresql", "sqlserver"] = "generic" - Added
SqlFormatterobject for storing a “config”/set-o-opts and for reuse (which I was in need of)
ryo3-reqwest- Added
basic_authandbearer_authkwargs to fetch functions (get,post,put,delete,head,patch, and of coursefetch) - Internal refactoring of body/form/json/multipart parsing.
- Added more client kwargs from
reqwest::ClientBuilder:redirect: int | None = 10referer: bool = Truezstd: bool = Truehickory_dns: bool = Truehttp1_only: bool = Falsehttps_only: bool = Falsehttp1_title_case_headers: bool = Falsehttp1_allow_obsolete_multiline_headers_in_responses: bool = Falsehttp1_allow_spaces_after_header_name_in_responses: bool = Falsehttp1_ignore_invalid_headers_in_responses: bool = Falsehttp2_prior_knowledge: bool = Falsehttp2_initial_stream_window_size: int | None = Nonehttp2_initial_connection_window_size: int | None = Nonehttp2_adaptive_window: bool = Falsehttp2_max_frame_size: int | None = Nonehttp2_max_header_list_size: int | None = Nonehttp2_keep_alive_interval: Duration | None = Nonehttp2_keep_alive_timeout: Duration | None = Nonehttp2_keep_alive_while_idle: bool = Falsepool_idle_timeout: Duration | None = ..., # 90 secondpool_max_idle_per_host: int | None = ..., # usize::MAtcp_keepalive: Duration | None = ..., # 15 secondtcp_keepalive_interval: Duration | None = ..., # 15 secondtcp_keepalive_retries: int | None = 3tcp_nodelay: bool = Truetls_min_version: t.Literal["1.0", "1.1", "1.2", "1.3"] | None = Nonetls_max_version: t.Literal["1.0", "1.1", "1.2", "1.3"] | None = Nonetls_info: bool = Falsetls_sni: bool = Truedanger_accept_invalid_certs: bool = Falsedanger_accept_invalid_hostnames: bool = False
- Added
v0.0.61 [2025-10-08]
ryo3-std- added
to_dict/from_dicttory.Duration
- added
- use
jessekrubin/pyo3-async-runtimes(branch ‘unpaid-interns’) git repo (for now): ryo3-uuid- supa speedy pydantic support added to
ry.uuid.UUID(bc I need it now)
- supa speedy pydantic support added to
ryo3-reqwestry.Cookieclass/struct andcookies/set_cookiesproperties on thery.Responseclass/struct
- removed deprecated
.string()methods from several structs/classes:ry.FsPathry.UUIDry.DateTimery.Datery.SignedDurationry.TimeSpanry.Timery.Timestampry.ZonedDateTime
v0.0.60 [2025-09-26]
- deprecations
- bump out
.string()method deprecation removals to0.0.61
- bump out
ryo3-stdry.FileTypestruct now has inner faux type/real type
ryo3-jiffstrftime/__format__changed to useBrokenDownTimeto not panic
ryo3-tokio- renamed:
DirEntryAsync->AsyncDirEntryReadDirAsync->AsyncReadDir
- renamed:
v0.0.59 [2025-09-24]
ryo3-request- switched query/form kwargs to accept anything that can be serde-d via
ryo3-serdewhich is basically anything that is json-serializable viary.stringify
- switched query/form kwargs to accept anything that can be serde-d via
ry.protocols- moved all protocols to
ry.protocols
- moved all protocols to
- deprecations
- deprecate all
obj.string()methods in favor ofobj.to_string()tho I still dont love it in the first place
- deprecate all
ryo3-jiff- added
isoformatandfrom_isoformatmethods tory.TimeSpanandry.SignedDurationstructs
- added
ryo3-sqlformat- Updated to version 0.4.0 of
sqlformatcrate - Added sqlformat version 0.4.0 new options:
ignore_case_convert: list[str] | None = Noneinline: bool = Falsemax_inline_block: int = 50max_inline_arguments: int | None = Nonemax_inline_top_level: int | None = Nonejoins_as_top_level: bool = False
- Changed
indentarg/kwarg to accept either:int(positive integer for number of spaces)str(“tabs”, “\t” or “spaces”)
- Changed
uppercasearg/kwarg to default toFalseinstead ofTrueto be more inline with the default behaviour ofsqlformatcrate
- Updated to version 0.4.0 of
v0.0.58 [2025-09-18]
ryo3-jiff- added
.__format__()methods to several jiff structs to allow custom f-string formatting - Fixed
SignedDuration.__truediv__operator
- added
- internal
- migrated all
downcast*usages tocast*
- migrated all
- Min python version for ry is now 3.11+
v0.0.57 [2025-09-12]
ryo3-jiff- Added
TimeRoundpython struct - Fixed types for all
*Roundoperations limiting max “smallest” arg literal types. - Round-api changes
- builder-y functions and getter functions have been flip-flopped:
- Switched “builder”-y apis to start with prefix for all
*Roundstructs:increment(n: int) -> Self->_increment(n: int) -> Selfmode(m: str) -> Self->_mode(m: str) -> Selfsmallest(unit: str) -> Self->_smallest(unit: str) -> Self
- Switched all getter functions to be properties:
round_obj._increment() -> int->round_obj.increment -> intround_obj._mode() -> str->round_obj.mode -> strround_obj._smallest() -> str->round_obj.smallest -> str
- Switched “builder”-y apis to start with prefix for all
- builder-y functions and getter functions have been flip-flopped:
- Added
to_dict().asdict()renamed to.to_dict()all structs- renames structs:
ry.DateTime.asdict()->ry.DateTime.to_dict()ry.Date.asdict()->ry.Date.to_dict()ry.TimeSpan.asdict()->ry.TimeSpan.to_dict()ry.Time.asdict()->ry.Time.to_dict()ry.Headers.asdict()->ry.Headers.to_dict()
- Added
.to_dict()to:
- migrated from
xxhash-rusttotwox-hash~ retiringryo3-xxhash:( - thexxhash-rusthashers liked to sometimes crash, whereas thetwox-hashpy-hashers dont
v0.0.56 [2025-09-05]
ryo3-serde- refactoring and testing recursion and stitch
ryo3-tokio- Fix: python open mode parsing for
aiopenfunction
- Fix: python open mode parsing for
ryo3-reqwest- Add
jiterparsing options toResponse.json()
- Add
ryo3-jiff- use
#[pyo3(warn(...))]for deprecation warnings instead of doing it manually - fixed utc methods to use
.with_time_zone(TimeZone::UTC)instead of.in_tz("UTC")
- use
v0.0.55 [2025-09-03]
- upgrade pyo3 v0.26.x
ryo3-bytes- Update buffer usage based on kyle barron
pyo3-byteschanges
- Update buffer usage based on kyle barron
ryo3-std- Make each sub-module a feature flag
std-net,std-fs,std-time, etc…
- Make each sub-module a feature flag
- internal changes
- Implemented
Displayfor several types for use in their__repr__methods
- Implemented
v0.0.54 [2025-08-28]
ryo3-std- Serialization for std types
- Speed run of socketaddr types (WIP); needs more testing and the socket types could be cleaner…
ryo3-memchr- Basic functionality for
memchrandmemrchroperations
- Basic functionality for
ryo3-jiff- Changed
humanarg/kwarg inry.TimeSpanandry.SignedDurationtofriendlyand also make keyword only - Changed
strptimeandstrftimefunctions to be more inline with python’sdatetimemodule by changing the order of args to be(string, format)instead of(format, string); the strptime signature isstrptime(s: str, /, fmt: str) -> Self - Added to
ry.TimeSpanandry.SignedDurationthefriendlymethod for more natural string representations - Many internal refactors and cleanup
- Converted all
__repr__methods to use structDisplayimpls - Fixed rounding object repr function(s) and added pickling and tests for round objects
- Changed
- type-annotations
- Missing
lstrip/rstripmethod types forry.Bytes - Updated types for
ry.TimeSpanandry.SignedDurationw/ correctfriendlykwarg andfriendly()methods
- Missing
- Added ruff
A002lint - Added ruff
FBTlints
v0.0.53 [2025-08-18]
ry- Bump min python version 3.10 – this is a breaking change, but ry is still very much a WIP/in-beta, so the versioning schema is “yolo-versioning”
ryo3-serde- internal refactoring and cleanup
v0.0.52 [2025-07-30]
ryo3-bytes- internal refactoring
- added
ry.Bytes.__rmul__ry.Bytes.lstripry.Bytes.rstrip
ryo3-xxhash- all xxhash-ing classes are now
frozenpyclasses #259
- all xxhash-ing classes are now
v0.0.51 [2025-07-25]
ryo3-bytes- Separated
pyo3-bytesandryo3-bytespyo3-bytesmirrors the officialpyo3-bytescrate + extra methods, BUT it requires themultiple-pymethodsfeature to be enabledryo3-bytesis a crammed together version of thepyo3-bytesimplementation and extra methods and does NOT require themultiple-pymethodsfeature to be enabled
- Made
PythonBytesMethodstrait for the methods that are shared betweenpyo3-bytesandryo3-bytes
- Separated
ryo3-ulid- strict + lax ulid parsing for pydantic
ryo3-jiff- Renamed
checked_addandchecked_subtoaddandsubwhere the checked_version can error; did not remove where the checked version returns anOptiontype (ry.SignedDuration)..checked_addmay return later as a method that returns anOptiontype for all types (tbd). This is also meant to pave the way foradd/subfunctions with a more familiar api akin towhenever,pendulum,arrow,insert-other-datetime-lib-here - Added
replacemethods toDate,DateTimeandTimestructs that use the underlying jiffwithfunctions
- Renamed
v0.0.50 [2025-07-14]
- internal
- clippy lint fixes
unused_self(all butryo3-byteswhich needs its own cleanup)
- clippy lint fixes
ryo3-bytes- Added (bc I need them) more python compat methods:
title()swapcase()expandtabs()strip()
- Added (bc I need them) more python compat methods:
ryo3-fspath- Added
openmethod that forwards toopenmethod ofpathlib.Path - Added
mkdirmethod that mimicsmkdirmethod ofpathlib.Path
- Added
v0.0.49 [2025-07-04] (fourth o july)
- workspace
- set rust edition to 2024
ryo3-serde- Fixed recursive serialization w/ max depth of 255 (aligning with
orjson) - support
PyEllipsisforNonevalues in serialization
- Fixed recursive serialization w/ max depth of 255 (aligning with
ryo3-jsonminifyfunction to remove whitespace/newlines from json-string/bytes
ryo3-jiff- internal refactoring
isoformatmethods aligned with python’sdatetimelibrary methods- Freeze (make pyclass frozen) for all jiff types (changed
*Seriesiterables)
ryo3-fspathwhichfeature allowingFsPath.whichandFsPath.which_all
v0.0.48 [2025-06-24]
ryo3-jsonpybytesbool kwargs to returnbuiltins.bytesifTrueandry.BytesifFalse; default isFalse
ryo3-serde- support for types defined in
ryo3-http - support for
defaultkwarg that is passed to the serde serializer; like w/ the stdlib-json and orjson serializers, this allows for serializing types that are not natively supported by ry/serde and if failure should occur, it should raise aTypeErrororValueErrorinstead of returningNoneby default
- support for types defined in
ryo3-reqwestjsonkwarg added to request builders that auto-serializes viaryo3-serde; also because it uses thereqwest::RequestBuilderit auto sets theContent-Typeheader toapplication/json
v0.0.47 [2025-06-17]
- pyo3 v0.25.1
ryo3-serde(wip)- serializers for
PyAnyand more - this should theoretically allow for serializing any python object that is
serdeserializable with almost anyserdeserializer… that is the goal
- serializers for
ryo3-json- Where json stuff + ry is going to live in the near future (may consolidate
ryo3-jiterinto this newer crate) ry.stringify()usesryo3-serde+serde_jsonto write json bytes/bufs and it is pretty fast, faster than ujson and rapidjson (not tested yyjson), BUT orjson is still fastest (read a bunch of their code and it is remarkably advanced and optimized)
- Where json stuff + ry is going to live in the near future (may consolidate
v0.0.46 [2025-06-06]
- version 0.0.46
ryo3-reqwestResponseStream- Added
__repr__method - Added
async def take(self, n: int=1): ...method returns n chunks as a list - Added
async def collect(self: join = False) -> ...:method that collects the stream into a singlery.Bytesobject ifjoin=Trueor a list ofry.Bytesobjects ifjoin=False - Added
async def take(self, n: int=1): ...which returns n chunks as a list
- Added
ryo3-glob- add
dtypekwarg that takes eitherdtype=str | ry.FsPath | pathlib.Pathas type of obj yielded by the iterable; something about this feels really icky, the default may be changed tostr(frompathlib.Path)
- add
ryo3-ulid- Added mostly as a way to test how much pydantic + ry integration would be
ryo3-which- upgrade which to version 8
v0.0.45 [2025-05-30]
- added
__target__to python package metadata inry.__about__with the target triple of the current build ryo3-std- Buffering for
FileReadStream
- Buffering for
ryo3-jiter- Add function
parse_jsonlfor parsing json lines - Add
lineskwarg toread_jsonfor parsing/reading json lines
- Add function
ryo3-jiff-
ZonedDateTime.__new__takes more python-datetime like args/kwargs, old version of constructor moved to classmethodZonedDateTime.from_parts(timestamp: ry.Timestamp, tz: ry.TimeZone) -> ZonedDateTime -
zonedtop level function- if
tzisNonethen it uses the system timezone - SIGNATURE
def zoned( year: int, month: int, day: int, hour: int = 0, minute: int = 0, second: int = 0, nanosecond: int = 0, tz: str | None = None, ) -> ZonedDateTime: ... - if
-
v0.0.44 [2025-05-23]
- internal:
- renamed
ryo3-macrostoryo3-macro-rules
- renamed
- docs
- Cleaned up
./README.md - Removed type-annotations from
./README.md
- Cleaned up
- pyo3-v0.25.0
- py-types
- reqwest-request functions use
TypedDictandUnpack
- reqwest-request functions use
ryo3-jiff- serde serialization features/support
ry.ZonedDateTime.replacemethod mirroringZonedWith–withis a python keyword, so usedreplaceinstead- example script based on jiff-docs examples
test_jiff_examples_v2.pytest script (basis for example script)- Was tired/fried so I copy-pasta-ed the
ry/ryo3/_jiff.pyitype annotations, the jiff-v2-docs-examples, and the jiff-v1-hand-translatedtest_jiff_examples_v1.pyfile into Chad-Gippity who was able to do most of the translation fromrusttory…
- Was tired/fried so I copy-pasta-ed the
ryo3-xxhash- Align with
xxhashpypi library w/ respect to naming conventions
- Align with
v0.0.43 [2025-05-17]
ryo3-jiff- panic-able functions to create new/altered (time)spans moved to use
try_*
- panic-able functions to create new/altered (time)spans moved to use
- fix: anyio marker flat issue in pytests for cicd
ryo3-uuid- added
uuidwrapper foruuidcrate; ty to the maintainers ofuuid-utilsandfastuuidfor helping figure out some of the nitty gritty bits and bobs
- added
ryo3-tokioAsyncFileandaiopenexperiment(s) added for async file reading/writing etc
v0.0.42 [2025-05-12]
- panic=abort
- panic is now (maybe will go back)
abortfor release builds - means smaller binaries and faster error handling (in theory)
- panic is now (maybe will go back)
ryo3-reqwest- more type fixes to response
- Got response type more inline with other python http-client libraries
- try
parking_lotfor defaultreqwestclient mutex - include missing kwargs for fetch functions
ryo3-glob- freeze struct(s) to be frozen
ryo3-http- http version python conversions to/from string/int
- crude-ish serde implementation for
HeadersMapfor json encoding/decoding… was a lot of googling - status code reason(s) interned
- intern all standard http header-names
ryo3-fnv- align with hashlib style hashing
- deps-up
- pyo3 version 0.24.2
- brotli 8
- jiff patch
v0.0.41 [2025-04-18]
ryo3-jiter- added
read_jsonfunction to read from path-like obj
- added
ryo3-bytes- misc small improvements and tests
ryo3-stdry.IpAddradded to handle both ipv4/ipv6ry.read_dirimplemented
ryo3-walkdir- added
objectsimpl and example script
- added
ryo3-tokiory.read_dir_asyncimplemented; also contains fancy async take/collect
v0.0.40 [2025-04-11]
- scripts
dl_versions.pyscript to download all versions of ry while ry is still pre-1-point-oh and old version(s) are being nuked from pypi as needed
- types
- fix types for few packages
- Updated several dependencies ~ most notably
pyo3to0.24.1 - Fixed several new clippy lints that appear in CI stable rust builds
ryo3-stdstd::netipv4/ipv6 wrappers speed run impl
v0.0.39 [2025-03-14]
- internal
- cleaned up several dependencies and features
ryo3-zstd- actually changed to use py buffer protocol this time… I dont know how it got missed before…
- re-factored a decent bit and made submodule with future plans to expand encoding/decoding dictionary support
- submodule is
ry.zstdand/orry.ryo3.zstd
v0.0.38 [2025-03-13]
ryo3-reqwest- client configuration for pickling
- allow buffer-protocol for
bodyfetching methods (should add string maybe?)
ryo3-walkdir- Few more options added
ryo3-glob- new wrapper around
globcrate
- new wrapper around
ryo3-jiff- Switched to use conversions from
jifffeature ofpyo3-v24as opposed to hand-rolled conversions we had before
- Switched to use conversions from
v0.0.37 [2025-03-11]
- pyo3 version
0.24.0 ryo3-whichfunctions returnpathlib.Pathnow due to changes in pyo3-v24; this may change in the near future…
v0.0.36 [2025-03-11]
- dependencies updated
- pickling support and tests for several types
- bytes/buffer-protocol support for several sub-packages/packages:
ryo3-brotliryo3-bzip2ryo3-flate2ryo3-fnvryo3-xxhashryo3-zstd
v0.0.35 [2025-03-06]
- internal
- types split up and cleaned up
ryo3-sizery.Sizeobject
ryo3-jiffseriesiterators havetakefunction that takes ausizereturns a list of sizeusize- updated series types to be
JiffSeriesclass
v0.0.34 [2025-02-28]
ryo3-stdfs:read_streamfunction that returns an iterator ofry.Bytesobjects from aPathLikeobject- Several more fs functions added
ryo3-tokio- Several more tokio fs functions added
- internal
- reorganized type annotations to be not a HUGE file…
v0.0.33 [2025-02-26]
- update to pyo3 v0.23.5
v0.0.32 [2025-02-25]
ryo3-jiter- Allow
PyByteswrapper/buffer protocol to be given - renamed
jiter_cache_cleartojson_cache_clearandjiter_cache_usagetojson_cache_usage - Removed
parse_json_strjust useparse_jsonwithstrinput
- Allow
ryo3-fspath- Allow read/write to take
ry.BytesorBytesobjects
- Allow read/write to take
v0.0.31 [2025-02-21]
ryo3-core- got rid of
ryo3-typesand moved intoryo3-core
- got rid of
ryo3-tokioread_asyncandwrite_asyncasync functions
ryo3-whichwhich_refunctions acceptsry.Regexorstrnow
ryo3-stdreadandwritefunctions which take/returnry.Bytesobjects
internal- Changed many many many of the structs/classes to be pyo3
frozenbehaviour should not be different
- Changed many many many of the structs/classes to be pyo3
v0.0.30 [2025-02-18]
jiff- Upgraded jiff to version 2
- internal
- Switch all lints from
#[allow(...)]/#![allow(...)]to#[expect(...)]/#![expect(...)] - Removed a bunch o commented out code
- Switch all lints from
ryo3-std- added several
std::fsstructs
- added several
ryo3-fspath- conversion to
pathlib.Pathby way ofFsPath.to_pathlib()
- conversion to
v0.0.29 [2025-02-03]
- internal
- Made sure each
ryo3-*crate has aREADME.md
- Made sure each
ryo3-bytes&ryo3-fspath- added
__hash__dunders to bothBytesandFsPathstructs
- added
v0.0.28 [2025-01-31]
jiff- Per Mr. Sushi’s thoughts changed all
until/sincemethods to use kwargs instead of the rust-like tuples that implFrom/Intoas it does not translate well to python - Gets rid of the following inane types:
- Per Mr. Sushi’s thoughts changed all
IntoDateDifference = (
DateDifference
| Date
| DateTime
| ZonedDateTime
| tuple[JIFF_UNIT_STRING, Date]
| tuple[JIFF_UNIT_STRING, DateTime]
| tuple[JIFF_UNIT_STRING, ZonedDateTime]
)
IntoTimeDifference = (
TimeDifference
| Time
| DateTime
| ZonedDateTime
| tuple[JIFF_UNIT_STRING, Time]
| tuple[JIFF_UNIT_STRING, DateTime]
| tuple[JIFF_UNIT_STRING, ZonedDateTime]
)
IntoDateTimeDifference = (
DateTimeDifference
| Date
| Time
| DateTime
| ZonedDateTime
| tuple[JIFF_UNIT_STRING, Date]
| tuple[JIFF_UNIT_STRING, Time]
| tuple[JIFF_UNIT_STRING, DateTime]
| tuple[JIFF_UNIT_STRING, ZonedDateTime]
)
IntoTimestampDifference = (
TimestampDifference
| Timestamp
| ZonedDateTime
| tuple[JIFF_UNIT_STRING, Timestamp]
| tuple[JIFF_UNIT_STRING, ZonedDateTime]
)
v0.0.27 [2025-01-23]
ry- Warning on
debugbuild
- Warning on
reqwest- headers-property response returns
Headersobject instead of python dict
- headers-property response returns
same-file- wrapper module added with
is_same_filepy-fn (yet another piece of burnt sushi)
- wrapper module added with
jiff- jiff-version
0.1.25~ addin_tzmethods and point oldintzat newin_tzmethods and raiseDeprecationWarningfor oldintzmethods - Continued adding implementations that previously raised
NotImplementedErrorDate.nth_weekday_of_monthDate.nth_weekdayDateTime.nth_weekday_of_monthDateTime.nth_weekdayTimeSpan.compareTimeSpan.totalZonedDateTime.nth_weekday_of_monthZonedDateTime.nth_weekday
- jiff-version
v0.0.26 [2025-01-13]
reqwestAsyncClientrenamed toHttpClient
jiff- human timespan strings for
TimeSpanandSignedDurationobjects:ry.TimeSpan.parse("P2M10DT2H30M").string(human=True) == "2mo 10d 2h 30m"ry.SignedDuration.parse("PT2H30M").string(human=True) == "2h 30m"
- human timespan strings for
- internal
- workspace-ified all the deps
v0.0.25 [2024-01-07] (25 for 2025)
jiff- Updated to
0.1.21which has span and signed duration strings with capital letters
- Updated to
v0.0.24 [2024-12-24] (the night b4 xmas…)
http- basic headers struct/obj – WIP
reqwest- reqwest client (currently root-export)
- default client + root
fetchfunction likely needs work… - response
byte_stream!
v0.0.23 [2024-12-19]
python -m ry.devrepl for ipython/python repl ~ handy nifty secret tool makes it into repo- internal
- in process of renaming all python-rust
#[new]functions to be namedfn py_new(...)
- in process of renaming all python-rust
unindent- Added
unindentmodule for unindenting strings will move toryo3-unindent
- Added
FsPath- creeping ever closer to being a full-fledged pathlib.Path replacement
- Added bindings to all rust
std::path::Path(buf)methods forFsPath
- sub-packaging
xxhashis own sub package nowry.xxhashJSONis own subpackage right now – namedry.JSONto avoid conflict withjsonmodule but maybe will change…- food-for-thought-ing how
ryo3andryshould be organized w/ respsect to sub-packages and where that organization should be
- type-annotations
- required to break up the type annotations due to migration to sub-packages
- breaking up the type annotations file into smaller files under
<REPO>/python/ry/ryo3/*.pyi
v0.0.22 [2024-12-16]
regex- Super simple regex wrapper (must to do here, but was added for
ryo3-which::which_re)
- Super simple regex wrapper (must to do here, but was added for
jiffuntil/since- Basic
until/sinceimplementation but I do not like them and they confusingly named*Differencestructs/py-objects, so I may change how they work…
- Basic
jiffseems to be about as performant aswhenever~ yay! also the whenever dude appears to be watching this repo (as of 2024-12-16)
walkdircollectadded toWalkdirGento collect the results into a list
- deps
thiserrorversion2.0.7->2.0.8
v0.0.21 [2024-12-13] (friday the 13th… spoogidy oogidity)
walkdir- add
globkwarg that takes ary.Globorry.GlobSetorry.Globsterobj to filter the walk on
- add
globset- Internal refactoring
- added
globster()method tory.Globandry.GlobSetto return ary.Globsterobj - added
globset()method tory.Globto return ary.GlobSetobj from ary.Globobj
url- python
Urlchanged nameURL; aligns with jawascript and other python libs
- python
bzip2- update to v5
jiff- conversions for jiff-round-mode/unit/weekday
- not-implemented placeholders and new impls
-
RyDateTime -
RyDate -
RyOffset -
RySignedDuration -
RySpan -
RyTimeZone -
RyTime -
RyZoned
-
- span builder functions use form
s._hours(1)for panic-inducing building, ands.try_hours(1)for non-panic-inducing building
- type-annotations
- fixes and updates and a hacky script I wrote to check for discrepancies
v0.0.20 [2024-12-10]
regex- Templated out regex package but nothing added
ry- python 3.13 yay!
jiter- Updated jiter version thanks depbot!
v0.0.19 [2024-12-05]
jiff- py-conversions
-
JiffDateTime- FromPyObject
- IntoPyObject
- IntoPyObject (REF)
-
JiffDate- FromPyObject
- IntoPyObject
- IntoPyObject (REF)
-
JiffOffset- FromPyObject
- IntoPyObject
- IntoPyObject (REF)
-
JiffSignedDuration- FromPyObject
- IntoPyObject
- IntoPyObject (REF)
-
JiffSpan- FromPyObject
- IntoPyObject
- IntoPyObject (REF)
-
JiffTimeZone- FromPyObject
- IntoPyObject
- IntoPyObject (REF)
-
JiffTime- FromPyObject
- IntoPyObject
- IntoPyObject (REF)
-
JiffZoned- FromPyObject
- IntoPyObject
- IntoPyObject (REF)
-
- py-conversions
v0.0.18 [2024-12-03]
jiff- Renamed
ry.Spantory.TimeSpan - Renamed
ry.Zonedtory.ZonedDateTime - Updated type stubs to reflect renames
- Renamed
- docs
- init-ed the docs
- style guide under
DEVELOPMENT.mdfile
v0.0.17 [2024-12-02]
jiffry.TimeZonetesting and to/fromdatetime.tzinfoconversions- Using nu-types for
jiffintermediate types bc of the classic orphans problem (aka batman) w/ traits - hypothesis tests
jiter- Updated to
jiterv0.8.1
- Updated to
v0.0.16 [2024-11-29]
- Moved walkdir to
ryo3-walkdir - added
ryo3-typesfor custom and shared types heckwrapper(s)- jiff
- Added operators
+/+=/-/-=to date/time/datetime/etc - TODO: figure out how to take refs in the union enum for the operators
- Added operators
- fspath
- further beefing out as well as testing
v0.0.15 [2024-11-20]
from __future__ import annotationsadded to all modules- cicd updated to include more targets
v0.0.14 [2024-11-20]
- Primitive/crude wrappers around Mr. Sushi’s
jifflibrary - Updated to use pyo3 (had to use jiter git repo dep)
ry.FsPathbeefed out- Added iterdir gen wrapper
- (todo undo when jiter + pyo3 23 is public)
v0.0.13 [2024-11-20]
- VERSION SKIPPED DUE TO
13BEING SPOOKY AND ME BEING MODERATELY-STITCHOUS (AKA fully ‘superstitchous’)
v0.0.12 [2024-11-14]
- sqlformat wrapper(s) (this is the first
ryo3-*sub-crate)
v0.0.11 [2024-09-22]
- dependencies updated
- prepare for python 3.13
v0.0.10 [2024-09-22]
- dependencies updated
v0.0.9 [2024-08-22]
- Added
globsetwrapper(s) - Added
__init__.pygenerator
- Upgraded to pyo3-v0.22
v0.0.8 [2024-06-25]
- Upgraded to pyo3-v0.22
v0.0.7 [2024-06-08]
- internal refactoring
v0.0.6 [2024-06-05]
- Added zstd (
zstd_encode/zstdandzstd_decode) - Added gzip (
gzip_encode/gzipandgzip_decode/gunzip) - Added bzip2 (
bzip2_encode/bzip2andbzip2_decode) - Added walkdir
- Reorg libs
v0.0.5 [2024-04-19]
- Added brotli (
brotli_encodeandbrotli_decode) - xxhash
- const functions
- hasher streaming objects