CHANGELOG
v0.0.50 [unreleased]
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
open
method that forwards toopen
method ofpathlib.Path
- Added
mkdir
method that mimicsmkdir
method 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
PyEllipsis
forNone
values in serialization
- Fixed recursive serialization w/ max depth of 255 (aligning with
ryo3-json
minify
function to remove whitespace/newlines from json-string/bytes
ryo3-jiff
- internal refactoring
isoformat
methods aligned with python’sdatetime
library methods- Freeze (make pyclass frozen) for all jiff types (changed
*Series
iterables)
ryo3-fspath
which
feature allowingFsPath.which
andFsPath.which_all
v0.0.48 [2025-06-24]
ryo3-json
pybytes
bool kwargs to returnbuiltins.bytes
ifTrue
andry.Bytes
ifFalse
; default isFalse
ryo3-serde
- support for types defined in
ryo3-http
- support for
default
kwarg 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 aTypeError
orValueError
instead of returningNone
by default
- support for types defined in
ryo3-reqwest
json
kwarg added to request builders that auto-serializes viaryo3-serde
; also because it uses thereqwest::RequestBuilder
it auto sets theContent-Type
header toapplication/json
v0.0.47 [2025-06-17]
- pyo3 v0.25.1
ryo3-serde
(wip)- serializers for
PyAny
and more - this should theoretically allow for serializing any python object that is
serde
serializable with almost anyserde
serializer… that is the goal
- serializers for
ryo3-json
- Where json stuff + ry is going to live in the near future (may consolodate
ryo3-jiter
into this newer crate) ry.stringify()
usesryo3-serde
+serde_json
to 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 consolodate
v0.0.46 [2025-06-06]
- version 0.0.46
ryo3-reqwest
ResponseStream
- 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.Bytes
object ifjoin=True
or a list ofry.Bytes
objects ifjoin=False
- Added
async def take(self, n: int=1): ...
which returns n chunks as a list
- Added
ryo3-glob
- add
dtype
kwarg that takes eitherdtype=str | ry.FsPath | pathlib.Path
as 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_jsonl
for parsing json lines - Add
lines
kwarg toread_json
for 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
-
zoned
top level function- if
tz
isNone
then 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-macros
toryo3-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
TypedDict
andUnpack
- reqwest-request functions use
ryo3-jiff
- serde serialization features/support
ry.ZonedDateTime.replace
method mirroringZonedWith
–with
is a python keyword, so usedreplace
instead- example script based on jiff-docs examples
test_jiff_examples_v2.py
test script (basis for example script)- Was tired/fried so I copy-pasta-ed the
ry/ryo3/_jiff.pyi
type annotations, the jiff-v2-docs-examples, and the jiff-v1-hand-translatedtest_jiff_examples_v1.py
file into Chad-Gippity who was able to do most of the translation fromrust
tory
…
- Was tired/fried so I copy-pasta-ed the
ryo3-xxhash
- Align with
xxhash
pypi 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
uuid
wrapper foruuid
crate; ty to the maintainers ofuuid-utils
andfastuuid
for helping figure out some of the nitty gritty bits and bobs
- added
ryo3-tokio
AsyncFile
andaiopen
experiment(s) added for async file reading/writing etc
v0.0.42 [2025-05-12]
- panic=abort
- panic is now (maybe will go back)
abort
for 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_lot
for defaultreqwest
client 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
HeadersMap
for 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_json
function to read from path-like obj
- added
ryo3-bytes
- misc small improvements and tests
ryo3-std
ry.IpAddr
added to handle both ipv4/ipv6ry.read_dir
implemented
ryo3-walkdir
- added
objects
impl and example script
- added
ryo3-tokio
ry.read_dir_async
implemented; also contains fancy async take/collect
v0.0.40 [2025-04-11]
- scripts
dl_versions.py
script 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
pyo3
to0.24.1
- Fixed several new clippy lints that appear in CI stable rust builds
ryo3-std
std::net
ipv4/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.zstd
and/orry.ryo3.zstd
v0.0.38 [2025-03-13]
ryo3-reqwest
- client configuration for pickling
- allow buffer-protocol for
body
fetching methods (should add string maybe?)
ryo3-walkdir
- Few more options added
ryo3-glob
- new wrapper around
glob
crate
- new wrapper around
ryo3-jiff
- Switched to use conversions from
jiff
feature ofpyo3-v24
as 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-which
functions returnpathlib.Path
now 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-brotli
ryo3-bzip2
ryo3-flate2
ryo3-fnv
ryo3-xxhash
ryo3-zstd
v0.0.35 [2025-03-06]
- internal
- types split up and cleaned up
ryo3-size
ry.Size
object
ryo3-jiff
series
iterators havetake
function that takes ausize
returns a list of sizeusize
- updated series types to be
JiffSeries
class
v0.0.34 [2025-02-28]
ryo3-std
fs
:read_stream
function that returns an iterator ofry.Bytes
objects from aPathLike
object- 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
PyBytes
wrapper/buffer protocol to be given - renamed
jiter_cache_clear
tojson_cache_clear
andjiter_cache_usage
tojson_cache_usage
- Removed
parse_json_str
just useparse_json
withstr
input
- Allow
ryo3-fspath
- Allow read/write to take
ry.Bytes
orBytes
objects
- Allow read/write to take
v0.0.31 [2025-02-21]
ryo3-core
- got rid of
ryo3-types
and moved intoryo3-core
- got rid of
ryo3-tokio
read_async
andwrite_async
async functions
ryo3-which
which_re
functions acceptsry.Regex
orstr
now
ryo3-std
read
andwrite
functions which take/returnry.Bytes
objects
internal
- Changed many many many of the structs/classes to be pyo3
frozen
behaviour 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::fs
structs
- added several
ryo3-fspath
- conversion to
pathlib.Path
by 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 bothBytes
andFsPath
structs
- added
v0.0.28 [2025-01-31]
jiff
- Per Mr. Sushi’s thoughts changed all
until
/since
methods to use kwargs instead of the rust-like tuples that implFrom
/Into
as 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
debug
build
- Warning on
reqwest
- headers-property response returns
Headers
object instead of python dict
- headers-property response returns
same-file
- wrapper module added with
is_same_file
py-fn (yet another piece of burnt sushi)
- wrapper module added with
jiff
- jiff-version
0.1.25
~ addin_tz
methods and point oldintz
at newin_tz
methods and raiseDeprecationWarning
for oldintz
methods - Continued adding implementations that previously raised
NotImplementedError
Date.nth_weekday_of_month
Date.nth_weekday
DateTime.nth_weekday_of_month
DateTime.nth_weekday
TimeSpan.compare
TimeSpan.total
ZonedDateTime.nth_weekday_of_month
ZonedDateTime.nth_weekday
- jiff-version
v0.0.26 [2025-01-13]
reqwest
AsyncClient
renamed toHttpClient
jiff
- human timespan strings for
TimeSpan
andSignedDuration
objects: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.21
which 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
fetch
function likely needs work… - response
byte_stream
!
v0.0.23 [2024-12-19]
python -m ry.dev
repl 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
unindent
module 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
xxhash
is own sub package nowry.xxhash
JSON
is own subpackage right now – namedry.JSON
to avoid conflict withjson
module but maybe will change…- food-for-thought-ing how
ryo3
andry
should 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
jiff
until
/since
- Basic
until
/since
implementation but I do not like them and they confusingly named*Difference
structs/py-objects, so I may change how they work…
- Basic
jiff
seems to be about as performant aswhenever
~ yay! also the whenever dude appears to be watching this repo (as of 2024-12-16)
walkdir
collect
added toWalkdirGen
to collect the results into a list
- deps
thiserror
version2.0.7
->2.0.8
v0.0.21 [2024-12-13] (friday the 13th… spoogidy oogidity)
walkdir
- add
glob
kwarg that takes ary.Glob
orry.GlobSet
orry.Globster
obj to filter the walk on
- add
globset
- Internal refactoring
- added
globster()
method tory.Glob
andry.GlobSet
to return ary.Globster
obj - added
globset()
method tory.Glob
to return ary.GlobSet
obj from ary.Glob
obj
url
- python
Url
changed 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.Span
tory.TimeSpan
- Renamed
ry.Zoned
tory.ZonedDateTime
- Updated type stubs to reflect renames
- Renamed
- docs
- init-ed the docs
- style guide under
DEVELOPMENT.md
file
v0.0.17 [2024-12-02]
jiff
ry.TimeZone
testing and to/fromdatetime.tzinfo
conversions- Using nu-types for
jiff
intermediate types bc of the classic orphans problem (aka batman) w/ traits - hypothesis tests
jiter
- Updated to
jiter
v0.8.1
- Updated to
v0.0.16 [2024-11-29]
- Moved walkdir to
ryo3-walkdir
- added
ryo3-types
for custom and shared types heck
wrapper(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 annotations
added to all modules- cicd updated to include more targets
v0.0.14 [2024-11-20]
- Primitive/crude wrappers around Mr. Sushi’s
jiff
library - Updated to use pyo3 (had to use jiter git repo dep)
ry.FsPath
beefed out- Added iterdir gen wrapper
- (todo undo when jiter + pyo3 23 is public)
v0.0.13 [2024-11-20]
- VERSION SKIPPED DUE TO
13
BEING 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
globset
wrapper(s) - Added
__init__.py
generator
- 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
/zstd
andzstd_decode
) - Added gzip (
gzip_encode
/gzip
andgzip_decode
/gunzip
) - Added bzip2 (
bzip2_encode
/bzip2
andbzip2_decode
) - Added walkdir
- Reorg libs
v0.0.5 [2024-04-19]
- Added brotli (
brotli_encode
andbrotli_decode
) - xxhash
- const functions
- hasher streaming objects