A YAML round-trip library that preserves comments and insertion order
Project description
yarutsk
A Python YAML library that round-trips documents while preserving comments, insertion order, scalar styles, tags, anchors and aliases, blank lines, and explicit document markers.
What it does
Most YAML libraries silently drop comments on load. yarutsk keeps them attached to their keys — both inline (key: value # like this) and block-level (# above a key) — so a load → modify → dump cycle leaves the rest of the file intact.
import io
import yarutsk
doc = yarutsk.load(io.StringIO("""
# database config
host: localhost # primary
port: 5432
"""))
doc["port"] = 5433
out = io.StringIO()
yarutsk.dump(doc, out)
print(out.getvalue())
# # database config
# host: localhost # primary
# port: 5433
YamlMapping is a subclass of dict and YamlSequence is a subclass of list, so they work everywhere a dict or list is expected:
import json
doc = yarutsk.loads("name: Alice\nscores: [10, 20, 30]")
isinstance(doc, dict) # True
isinstance(doc["scores"], list) # True
json.dumps(doc) # '{"name": "Alice", "scores": [10, 20, 30]}'
Round-trip fidelity
yarutsk reproduces the source text exactly for everything it understands. A loads followed by dumps gives back the original string byte-for-byte in the common case:
src = """\
defaults: &base
timeout: 30
retries: 3
service:
name: api
config: *base
"""
assert yarutsk.dumps(yarutsk.loads(src)) == src
Specifically preserved:
- Scalar styles — plain,
'single-quoted',"double-quoted", literal block|, folded block> - Non-canonical scalars —
yes/no/on/off,~,Null,True/False,0xFF,0o77— reproduced as written, not re-canonicalised totrue/false/null/255 - YAML tags —
!!str,!!python/tuple, and any custom tag are emitted back verbatim - Anchors and aliases —
&nameon the anchor node and*namefor references are preserved; the Python layer returns the resolved value transparently - Blank lines between mapping entries and sequence items
- Explicit document markers —
---and...
Installation
pip install yarutsk
To build from source (requires Rust 1.85+):
pip install maturin
git clone --recurse-submodules https://github.com/theyugin/yarutsk
cd yarutsk
maturin develop
API
Loading and dumping
# Load from stream (StringIO / BytesIO)
doc = yarutsk.load(stream) # first document
docs = yarutsk.load_all(stream) # all documents as a list
# Load from string
doc = yarutsk.loads(text)
docs = yarutsk.loads_all(text)
# Dump to stream
yarutsk.dump(doc, stream)
yarutsk.dump_all(docs, stream)
# Dump to string
text = yarutsk.dumps(doc)
text = yarutsk.dumps_all(docs)
# Custom indentation (default is 2 spaces)
text = yarutsk.dumps(doc, indent=4)
load / loads return a YamlMapping, YamlSequence, or YamlScalar (for a top-level scalar document), or None for empty input. Nested container nodes are YamlMapping or YamlSequence; scalar leaves inside mappings and sequences are returned as native Python primitives (int, float, bool, str, bytes, datetime.datetime, datetime.date, or None).
Type conversions
Implicit coercion
Plain YAML values (no tag) are converted to Python types automatically:
| Value pattern | Python type | Examples |
|---|---|---|
| Decimal integer | int |
42, -7 |
| Hex / octal integer | int |
0xFF → 255, 0o17 → 15 |
| Float | float |
3.14, 1.5e2, .inf, -.inf, .nan |
true / false (any case) |
bool |
True, FALSE |
yes / no / on / off (any case) |
bool |
YAML 1.1 booleans |
null, Null, NULL, ~, empty value |
None |
— |
| Anything else | str |
hello, "quoted" |
Non-canonical forms are reproduced as written on dump — yes stays yes, 0xFF stays 0xFF, ~ stays ~.
Explicit tags
A !!tag overrides implicit coercion and controls which Python type is returned:
| Tag | Python type | Notes |
|---|---|---|
!!str |
str |
Forces string even if the value looks like an int, bool, or null |
!!int |
int |
Parses decimal, hex (0xFF), and octal (0o17) |
!!float |
float |
Promotes integer literals (!!float 1 → 1.0) |
!!bool |
bool |
— |
!!null |
None |
Forces null regardless of content (!!null "" → None) |
!!binary |
bytes |
Base64-decoded on load; base64-encoded on dump |
!!timestamp |
datetime.datetime or datetime.date |
Date-only values return date; datetime values return datetime |
Tags are preserved through the round-trip: load → dump reproduces the original tag and source text exactly.
import datetime
# !!binary
doc = yarutsk.loads("data: !!binary aGVsbG8=\n")
doc["data"] # b'hello'
yarutsk.dumps(doc) # 'data: !!binary aGVsbG8=\n'
# !!timestamp
doc = yarutsk.loads("ts: !!timestamp 2024-01-15T10:30:00\n")
doc["ts"] # datetime.datetime(2024, 1, 15, 10, 30)
doc = yarutsk.loads("ts: !!timestamp 2024-01-15\n")
doc["ts"] # datetime.date(2024, 1, 15)
# !!float promotes integers
doc = yarutsk.loads("x: !!float 1\n")
doc["x"] # 1.0 (float, not int)
# !!str forces a string
doc = yarutsk.loads("x: !!str 42\n")
doc["x"] # '42'
# Dumping Python bytes / datetime automatically produces the right tag
mapping = yarutsk.loads("x: placeholder\n")
mapping["x"] = b"hello"
yarutsk.dumps(mapping) # 'x: !!binary aGVsbG8=\n'
mapping["x"] = datetime.datetime(2024, 1, 15, 10, 30)
yarutsk.dumps(mapping) # 'x: !!timestamp 2024-01-15T10:30:00\n'
Schema — custom types
Schema lets you register loaders (tag → Python object, fired on load) and dumpers (Python type → tag + data, fired on dump). Pass it as a keyword argument to any load or dump function.
Mapping types
The loader receives a YamlMapping (dict-like); the dumper returns a (tag, dict) tuple:
import yarutsk
class Point:
def __init__(self, x, y): self.x, self.y = x, y
schema = yarutsk.Schema()
schema.add_loader("!point", lambda d: Point(d["x"], d["y"]))
schema.add_dumper(Point, lambda p: ("!point", {"x": p.x, "y": p.y}))
doc = yarutsk.loads("origin: !point\n x: 0\n y: 0\n", schema=schema)
doc["origin"] # Point(0, 0)
doc["pos"] = Point(3, 4) # assigning custom objects works too
yarutsk.dumps(doc, schema=schema)
# origin: !point
# x: 0
# y: 0
# pos: !point
# x: 3
# y: 4
Scalar types
The loader receives the raw scalar string; the dumper returns a (tag, str) tuple:
class Color:
def __init__(self, r, g, b): self.r, self.g, self.b = r, g, b
schema = yarutsk.Schema()
schema.add_loader("!color", lambda s: Color(*[int(x) for x in s.split(",")]))
schema.add_dumper(Color, lambda c: ("!color", f"{c.r},{c.g},{c.b}"))
doc = yarutsk.loads("bg: !color 255,0,128\n", schema=schema)
doc["bg"] # Color(255, 0, 128)
yarutsk.dumps(doc, schema=schema) # 'bg: !color 255,0,128\n'
Overriding built-in tags
Registering a loader for !!int, !!float, !!bool, !!null, or !!str bypasses the built-in coercion. The callable receives the raw YAML string rather than the already-converted Python value:
schema = yarutsk.Schema()
schema.add_loader("!!int", lambda raw: int(raw, 0)) # parses 0xFF, 0o77, etc.
doc = yarutsk.loads("x: !!int 0xFF\n", schema=schema)
doc["x"] # 255
Multiple dumpers for the same type are checked in registration order; the first isinstance match wins.
YamlScalar
Top-level scalar documents are wrapped in a YamlScalar node:
doc = yarutsk.loads("42")
doc.value # 42 (Python int)
doc.to_dict() # same as .value
# Scalar style
doc = yarutsk.loads("---\n'hello'\n")
doc.style # 'single'
doc.style = "double" # 'plain'|'single'|'double'|'literal'|'folded'
# YAML tag
doc = yarutsk.loads("!!str 42")
doc.tag # '!!str'
doc.tag = None # clear tag
# Explicit document markers
doc = yarutsk.loads("---\n42\n...")
doc.explicit_start # True
doc.explicit_end # True
doc.explicit_start = False
doc.explicit_end = False
YamlMapping
YamlMapping is a subclass of dict with insertion-ordered keys. All standard dict operations work directly:
# Standard dict interface (inherited)
doc["key"] # get (KeyError if missing)
doc["key"] = value # set (preserves position if key exists)
del doc["key"] # delete
"key" in doc # membership test
len(doc) # number of entries
for key in doc: ... # iterate over keys in order
doc.keys() # KeysView in insertion order
doc.values() # ValuesView in insertion order
doc.items() # ItemsView of (key, value) pairs
doc.get("key") # returns None if missing
doc.get("key", default) # returns default if missing
doc.pop("key") # remove & return (KeyError if missing)
doc.pop("key", default) # remove & return, or default
doc.setdefault("key", default) # get or insert default
doc.update(other) # merge from dict or YamlMapping
doc == {"a": 1} # equality comparison
# Works with any dict-expecting library
isinstance(doc, dict) # True
json.dumps(doc) # works
# Conversion
doc.to_dict() # deep conversion to plain Python dict
# Comments (1-arg = get, 2-arg = set; pass None to clear)
doc.comment_inline("key") # -> str | None
doc.comment_before("key") # -> str | None
doc.comment_inline("key", text)
doc.comment_before("key", text)
# YAML tag
doc.tag # -> str | None (e.g. '!!python/object:Foo')
doc.tag = "!!map"
# Explicit document markers
doc.explicit_start # bool
doc.explicit_end # bool
doc.explicit_start = True
doc.explicit_end = True
# Node access — returns YamlScalar/YamlMapping/YamlSequence preserving style/tag/anchor
node = doc.node("key") # KeyError if absent
# Scalar style shortcut (equivalent to: doc.node("key").style = "single")
doc.scalar_style("key", "single") # 'plain'|'single'|'double'|'literal'|'folded'
# Container style (read from source; also settable to switch block ↔ flow)
doc.style # -> 'block' | 'flow'
doc.style = "flow" # emit as {key: value, ...}
# Blank lines before a key (1-arg = get, 2-arg = set)
doc.blank_lines_before("key") # -> int
doc.blank_lines_before("key", 2) # emit 2 blank lines before this key
doc.trailing_blank_lines # blank lines after all entries
doc.trailing_blank_lines = 1
# Sorting
doc.sort_keys() # alphabetical, in-place
doc.sort_keys(reverse=True) # reverse alphabetical
doc.sort_keys(key=lambda k: len(k)) # custom key function on key strings
doc.sort_keys(recursive=True) # also sort all nested mappings
YamlSequence
YamlSequence is a subclass of list. All standard list operations work directly:
# Standard list interface (inherited)
doc[0] # get by index (negative indices supported)
doc[0] = value # set by index
del doc[0] # delete by index
value in doc # membership test
len(doc) # number of items
for item in doc: ... # iterate over items
doc.append(value) # add to end
doc.insert(idx, value) # insert before index
doc.pop() # remove & return last item
doc.pop(idx) # remove & return item at index
doc.remove(value) # remove first occurrence (ValueError if missing)
doc.extend(iterable) # append items from list or YamlSequence
doc.index(value) # index of first occurrence
doc.count(value) # number of occurrences
doc.reverse() # reverse in-place
doc == [1, 2, 3] # equality comparison
# Works with any list-expecting library
isinstance(doc, list) # True
json.dumps(doc) # works
# Conversion
doc.to_dict() # deep conversion to plain Python list
# Comments (1-arg = get, 2-arg = set; pass None to clear)
doc.comment_inline(idx) # -> str | None
doc.comment_before(idx) # -> str | None
doc.comment_inline(idx, text)
doc.comment_before(idx, text)
# YAML tag
doc.tag # -> str | None (e.g. '!!python/tuple')
doc.tag = None
# Explicit document markers
doc.explicit_start # bool
doc.explicit_end # bool
doc.explicit_start = True
doc.explicit_end = True
# Scalar style shortcut (equivalent to: doc.node(idx).style = "single")
doc.scalar_style(0, "double") # 'plain'|'single'|'double'|'literal'|'folded'
# Container style
doc.style # -> 'block' | 'flow'
doc.style = "flow" # emit as [item, ...]
# Blank lines before an item (1-arg = get, 2-arg = set)
doc.blank_lines_before(0) # -> int
doc.blank_lines_before(0, 1) # emit 1 blank line before item 0
doc.trailing_blank_lines # blank lines after all items
doc.trailing_blank_lines = 0
# Sorting (preserves comment metadata)
doc.sort() # natural order, in-place
doc.sort(reverse=True)
doc.sort(key=lambda v: len(v)) # custom key function on item values
Sorting preserves all comments — each entry or item carries its inline and before-key comments with it when reordered.
Comparison
| Feature | yarutsk | ruamel.yaml | PyYAML |
|---|---|---|---|
| Comments preserved | Yes | Yes | No |
| Scalar styles preserved | Yes | Partial | No |
| Insertion order preserved | Yes | Yes | No |
| Blank lines preserved | Yes | Partial | No |
| Tags preserved | Yes | Yes | No |
| Anchors/aliases preserved | Yes | Yes | No |
dict / list subclasses |
Yes | No | No |
| Rust speed | Yes | No | No |
| Python 3.12+ required | Yes | No | No |
yarutsk focuses on round-trip fidelity: if you need to edit a config file and emit it back without touching the formatting, it keeps every comment, blank line, and scalar quote style exactly as written. ruamel.yaml offers similar round-trip support in pure Python. PyYAML is faster for load-only workloads where output formatting doesn't matter.
Error handling
import yarutsk
# Malformed YAML → ValueError
try:
yarutsk.loads("key: [unclosed")
except ValueError as e:
print(e) # scan error: ...
# Unsupported Python type → TypeError
try:
yarutsk.dumps({"key": {1, 2}}) # sets are not supported
except TypeError as e:
print(e)
# Missing key → KeyError (standard dict behaviour)
doc = yarutsk.loads("a: 1")
doc["missing"] # KeyError: 'missing'
doc.comment_inline("missing") # KeyError: 'missing'
# Bad index → IndexError (standard list behaviour)
seq = yarutsk.loads("- 1\n- 2")
seq[99] # IndexError
Limitations
- Integer range: integers are stored as 64-bit signed (
i64). Values outside[-9223372036854775808, 9223372036854775807]are loaded as strings. - Underscore separators:
1_000is not parsed as an integer — it is loaded as the string"1_000"(and round-tripped faithfully as such). - Blank line cap: at most 255 blank lines before any entry are tracked; runs longer than that are clamped to 255 on load.
- Block only by default: the emitter writes block-style YAML. Flow containers (
{...}/[...]) from the source are preserved if they were already flow-style, but there is no option to force everything to flow on dump. - Streaming: the entire document must fit in memory; incremental/streaming parse is not supported.
- YAML version: the scanner implements YAML 1.1 boolean/null coercion (
yes/no/on/off/~). Most YAML 1.2-only documents work, but a small number of spec edge cases differ — seetests/test_yaml_suite.pyfor thexfailmarkers.
Benchmarks
Compare load, dump, and round-trip performance against PyYAML and ruamel.yaml across small, medium, and large inputs:
uv sync --group benchmark
uv run maturin develop --release
uv run pytest benchmarks/ -v --benchmark-sort=name
Running tests
You need Rust 1.85+ and Python 3.12+ with uv. Python 3.12 is the minimum — YamlSequence subclasses list, which requires PyO3's extends = PyList support introduced in Python 3.12.
# 1. Clone with the yaml-test-suite submodule
git clone --recurse-submodules https://github.com/theyugin/yarutsk
cd yarutsk
# 2. Create a virtual environment and install dev dependencies
uv sync --group dev
# 3. Build the extension in dev (debug) mode
uv run maturin develop
# 4. Run the suites
uv run pytest tests/ --ignore=tests/test_yaml_suite.py -v # core library tests
uv run pytest tests/test_yaml_suite.py -q # yaml-test-suite compliance
test_yaml_suite.py requires the yaml-test-suite submodule. Tests that fail due to known YAML normalisation differences are marked xfail and do not count as failures.
Internals
The scanner and parser are vendored from yaml-rust2 (MIT licensed) with one targeted modification: the comment-skipping loop in the scanner now emits Comment tokens instead of discarding them. Everything else — block/flow parsing, scalar type coercion, multi-document support — comes from yaml-rust2 unchanged. The builder layer wires those tokens to the data model, and a hand-written block-style emitter serialises it back out.
YamlMapping and YamlSequence are PyO3 pyclasses that extend Python's built-in dict and list types. A Rust inner field stores the full YAML data model (including comments); the parent dict/list is kept in sync on every mutation so that all standard Python operations work transparently.
Disclaimer
This library was created with Claude Code (Anthropic). The design, implementation, tests, and this README were written by Claude under human direction.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yarutsk-0.2.4.tar.gz.
File metadata
- Download URL: yarutsk-0.2.4.tar.gz
- Upload date:
- Size: 141.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1d9326110b97ac312f8c9c4414772f07ff42d9bb4c1275b82f951d28fe11a7b
|
|
| MD5 |
4dd63666f20965ea8cc06868d8ab8e57
|
|
| BLAKE2b-256 |
33efd53c5234c42de974a2326c278ecbde0be7ee968949451606d1395870f40a
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4.tar.gz:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4.tar.gz -
Subject digest:
d1d9326110b97ac312f8c9c4414772f07ff42d9bb4c1275b82f951d28fe11a7b - Sigstore transparency entry: 1300744381
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yarutsk-0.2.4-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: yarutsk-0.2.4-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 423.3 kB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6380988a75a0bbda3790aa59d19567610801f048011ba663cd4e10f1036172f
|
|
| MD5 |
6dc83d2951076c48735e0b7afecb835c
|
|
| BLAKE2b-256 |
717b3c9fb5bc915ce79b4f1c0228a26257788a871c3c875997b8f5b27328ecc0
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4-cp314-cp314-win_amd64.whl:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4-cp314-cp314-win_amd64.whl -
Subject digest:
a6380988a75a0bbda3790aa59d19567610801f048011ba663cd4e10f1036172f - Sigstore transparency entry: 1300744736
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yarutsk-0.2.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: yarutsk-0.2.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 535.7 kB
- Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebcdc96b1959f6ac8e984ec918e8e92e79a826560b528b78400cdb8cab9bb0c8
|
|
| MD5 |
b2032516da887f7c08095768576dd1c4
|
|
| BLAKE2b-256 |
65892db29d2871051ecf7f53b5a354bf282b060ac50a92b06383c46f3e748145
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
ebcdc96b1959f6ac8e984ec918e8e92e79a826560b528b78400cdb8cab9bb0c8 - Sigstore transparency entry: 1300744652
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yarutsk-0.2.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: yarutsk-0.2.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 999.5 kB
- Tags: CPython 3.14, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e62cf15e405fa64b0d3c6a45117a4da3fb7e0cc1a2301f6c2ef21dbd7dd36f50
|
|
| MD5 |
a15364e6fe31ae2aa1baed66ec7d8645
|
|
| BLAKE2b-256 |
14df2b0aec063e4bcce290c0cde4549580177b5bfde7d2bba829a2c4dc44208b
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
e62cf15e405fa64b0d3c6a45117a4da3fb7e0cc1a2301f6c2ef21dbd7dd36f50 - Sigstore transparency entry: 1300744911
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yarutsk-0.2.4-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: yarutsk-0.2.4-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 424.7 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a74d179d749d73df34e8bd68dbec16957359a35a3aa4afc144fa18a9b4de96b
|
|
| MD5 |
09f1f5f8090093274bcc331253c8ec1d
|
|
| BLAKE2b-256 |
b6989a455a0753414e6511532f8233337757ef51e1972659f3a8eac5c67c1538
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4-cp313-cp313-win_amd64.whl:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4-cp313-cp313-win_amd64.whl -
Subject digest:
2a74d179d749d73df34e8bd68dbec16957359a35a3aa4afc144fa18a9b4de96b - Sigstore transparency entry: 1300745008
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yarutsk-0.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: yarutsk-0.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 540.8 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6862badd061ea426b5d19c6361c46b2bbe8318118f7beefb58ddad039df95cd7
|
|
| MD5 |
5775e842ce446ebdf1166b3ee02c53c4
|
|
| BLAKE2b-256 |
69a109e9cf29db61c2f0fdc9dbd45a0803e9b35de34b2000d78baa0aafa5cc4d
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
6862badd061ea426b5d19c6361c46b2bbe8318118f7beefb58ddad039df95cd7 - Sigstore transparency entry: 1300745191
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yarutsk-0.2.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: yarutsk-0.2.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.13, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5144283fad6b518799ecf25450144d2b977e7276037ba3a27808917c4a538e94
|
|
| MD5 |
3b83a6fbb498b2b67cf1ee69a96327e9
|
|
| BLAKE2b-256 |
31c811517873bd672c8251b18a8e21dcf796d4bc726b56e327539e35b3938f38
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
5144283fad6b518799ecf25450144d2b977e7276037ba3a27808917c4a538e94 - Sigstore transparency entry: 1300744833
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yarutsk-0.2.4-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: yarutsk-0.2.4-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 425.2 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6104411b525c4724670c49018198dd3b921134d528f99f8839446181fc89d548
|
|
| MD5 |
b5c8abed01f4ae6e14c94036d71693a4
|
|
| BLAKE2b-256 |
8fda02f1edc7e62b2918ffb75753df21c84a182b47e1fbcb1e76373381ccdd53
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4-cp312-cp312-win_amd64.whl:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4-cp312-cp312-win_amd64.whl -
Subject digest:
6104411b525c4724670c49018198dd3b921134d528f99f8839446181fc89d548 - Sigstore transparency entry: 1300745297
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yarutsk-0.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: yarutsk-0.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 541.7 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31ac3e9d5103372c0aa27574a2c0d7d057093e37378e56288621c9bd6f8aba92
|
|
| MD5 |
488e169d011d81622d62c9ce05ff1876
|
|
| BLAKE2b-256 |
43ba582d68b0d259aaa1f6eeba4a815a0293b458016ffdfd5e1c45c751756866
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
31ac3e9d5103372c0aa27574a2c0d7d057093e37378e56288621c9bd6f8aba92 - Sigstore transparency entry: 1300745094
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yarutsk-0.2.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: yarutsk-0.2.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.12, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b2505e18a444e6b89145510c9751a1e1794d043d291b366525b63284409c49e
|
|
| MD5 |
b215cc2ba33766ff0642fe62e2ef35ad
|
|
| BLAKE2b-256 |
b1a67b6650c5b83102b815b6a96e42d04a6429e27b021f9f903b2f94330de7ab
|
Provenance
The following attestation bundles were made for yarutsk-0.2.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
ci.yml on theyugin/yarutsk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yarutsk-0.2.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
2b2505e18a444e6b89145510c9751a1e1794d043d291b366525b63284409c49e - Sigstore transparency entry: 1300744520
- Sigstore integration time:
-
Permalink:
theyugin/yarutsk@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/theyugin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@df0db9663f0b8149186d269ca93ff449f3d59f33 -
Trigger Event:
push
-
Statement type: