Nested dictionary with indexed field queries, merge and serialization
Project description
mod_dict
A Python extension (C++) that stores nested dictionaries by reference and provides indexed filtering, sorting, grouping and merging — without converting to a DataFrame or a database.
import mod_dict as md
mn = md.ModDict()
mn["alice"] = {"age": 30, "score": 9.5, "active": True,
"meta": {"level": 5, "details": {"rank": 42}}}
# Field access via chaining on stored PyObject* — no copy
age = mn["alice"]["age"] # 30
rank = mn["alice"]["meta"]["details"]["rank"] # 42
mn["alice"]["age"] = 31 # update in-place
# Indexed filter / sort / group — auto-builds index on first call
adults = mn.filter("age").gte(18)
active = mn.filter("active").eq(True)
rows = mn.sort_by("age") # → [row, row, ...]
keys = mn.sort_by("age", returns="parent_keys")# → [key, key, ...]
ages = mn.sort_by("age", returns="values") # → [18, 25, 30, ...]
groups = mn.group_by("age") # → {value: ModDict, ...}
slim = mn.select(["age", "score"]) # → new ModDict
cols = mn.select(["age", "score"], returns="values") # → [[age,...], [score,...]] (columnar)
# Dot-notation paths in sort / group / select
mn.sort_by("meta.details.rank")
mn.group_by("meta.level")
mn.select(["meta.details.rank", "score"])
# Update from another collection
mn.update(other) # bulk insert (like dict.update)
mn.update(other, "*", "*") # key-to-key merge (only updates existing)
mn.update(other, "?", "?") # key-to-key: also inserts new keys from other
mn.update(other, "user_id", "id") # field-to-field
mn.update(other, "*.geo.lat", "*.geo.lat") # deep field only
# Aliases — transparent second key for the same row
mn.alias("alice", "al")
mn["al"]["age"] = 32 # same row — mn["alice"]["age"] == 32
mn["al"] = {"age": 33} # replaces row via alias
del mn["al"] # removes both alias and original
print(mn.aliases()) # {"al": "alice"}
# Build from a list of rows or any Mapping
mn3 = md.ModDict.from_rows(users, key="id") # {r["id"]: r for r in users}
mn4 = md.ModDict(other_mn) # copy from ModDict
mn5 = md.ModDict(OrderedDict(...)) # any Mapping accepted
# Deep copy (7.8× faster than deepcopy)
backup = mn.copy()
# Index access by insertion order
mn.at(0) # first value
mn.at(-1) # last value
# Binary serialization (full Python type set — date, bytes, Decimal, Path, …)
data = mn.serialize()
mn2 = md.ModDict(); mn2.deserialize(data)
# Custom type converters — applied at insert time
md.register_converter(Temperature, lambda t: t.celsius)
Architecture
Rows are stored as PyObject* references — the same dict object the caller passed in, with Py_INCREF. No deep copy.
mn["alice"] = row_dict # Py_INCREF(row_dict), store pointer
mn["alice"]["age"] # outer hash → PyObject* → PyDict_GetItemString
On top of the outer hash table, a FieldIndex per field powers O(1) equality and O(log n) range queries. Indices are built automatically on the first filter() / sort_by() / group_by() call and reused after.
When it fits
- Collection of records with a fixed (or semi-fixed) schema.
- You need indexed filter, sort, group, or field-level merge without pandas/SQL.
- Write once, query many times.
- In-process cache shared across asyncio coroutines — zero-copy, no GC pressure on reads.
When it does not fit
- Truly write-heavy, latency-sensitive workloads —
mn[k] = rowis slightly slower than dict (refcount + hash). - You need concurrent writes from multiple threads.
- Schema is fully dynamic with no repeating field names.
API at a glance
# Write
mn[key] = value # scalar or nested dict
mn[key]["field"] = value # update field in-place
del mn[key]
# Read
mn[key] # full row — O(1), returns stored dict ref
mn[key]["field"] # field via Python chaining
mn.get(key, default)
mn.pop(key) # remove and return value
mn.pop(key, default) # return default if not found
# Membership / size
key in mn
len(mn) # aliases are not counted
# Iteration — aliases are hidden
for key in mn: ...
mn.keys() / mn.values() / mn.items()
# Filter (auto-builds index on first call, reused after)
mn.filter("age").eq(18) # age == 18
mn.filter("age").ne(18) # age != 18
mn.filter("age").lt(18) # age < 18
mn.filter("age").lte(18) # age <= 18
mn.filter("age").gt(18) # age > 18
mn.filter("age").gte(18) # age >= 18
mn.filter("age").between(18, 30) # 18 <= age <= 30
mn.filter("city").in_(["NY", "LA"]) # city in [...]
mn.filter("orders.?.status").eq("shipped") # ? skips one key, checks value
mn.filter("?").eq("orders") # terminal ?: outer rows that HAVE key "orders"
mn.filter("g1.?.status").eq("shipped") # anchor: first segment scopes scan to key "g1"
mn.filter("region.?.?.status").eq("Active") # one ? per level — chain for deeper nesting
# non-terminal wildcard results are PRUNED: only matching inner keys survive,
# so chained filters behave as AND (not OR)
mn.filter("a.?.age").eq(30).filter("a.?.name").eq("alice")
# returns parameter: collect inner-level results without rebuilding a new ModDict
mn.filter("age").gte(18, returns="rows_here") # → [row, ...]
mn.filter("age").gte(18, returns="values", value_field="name") # → [name, ...]
# Sort / select / group — support dot-notation paths
mn.sort_by("age", reverse=False, returns="rows") # default → [row, ...]
mn.sort_by("age", returns="parent_keys") # → [key, ...]
mn.sort_by("age", inplace=True) # reorders mn in-place, returns None
mn.sort_by("meta.details.rank", returns="values") # → [val, ...]
mn.select(["age", "name"]) # → new ModDict
mn.select(["age", "meta.level"], returns="values") # → [[age,...], [meta.level,...]] (columnar)
mn.group_by("active") # → {value: ModDict, ...}
mn.group_by("meta.level")
# Aliases
mn.alias(key, alias) # create alias (1 per key)
mn.aliases() # → {alias: original_key, ...}
del mn[alias] # removes alias and original
# Update from another collection
mn.update(other) # bulk insert
mn.update(other, from_path, to_path, conflict="keep_right")
# Deep copy (7.8× faster than copy.deepcopy)
mn.copy() # → new ModDict, rows deep-copied
# Index access by insertion order (O(1), supports negative indices)
mn.at(0) # first inserted key's value
mn.at(-1) # last inserted key's value
# Build from a list of dicts
md.ModDict.from_rows(rows, key="id") # {r["id"]: r for r in rows}
md.ModDict.from_row(row) # normalize Mapping → plain dict
# Serialize
mn.serialize() / mn.deserialize(data) # data → self, returned for chaining
mn.to_dict() # → plain dict (bypasses RowProxy)
md.dumps(obj) / md.loads(data) # serialize any object; ModDict round-trips as ModDict
# Index management (optional — auto-index handles most cases)
mn.create_index("field") / mn.drop_index("field") / mn.has_index("field")
Path syntax for update and filter
| Token | Meaning |
|---|---|
* |
scan_key — match by outer key (update: only updates existing keys) |
? |
pass_key — wildcard one nesting level (update: also inserts new keys; filter non-terminal: skips any key; filter terminal: checks if KEY exists at this level) |
key |
anchor (filter) — first segment matched against outer keys to scope the scan |
mn.update(updates, "*", "*") # join by outer key (existing only)
mn.update(updates, "?", "?") # join + insert new keys from other
mn.update(prices, "*.meta.score", "*.meta.score") # update one deep field
mn.filter("orders.?.status").eq("shipped") # ? skips any order id key
mn.filter("?").eq("orders") # terminal ?: outer row HAS key "orders"
mn.filter("g1.?.status").eq("shipped") # anchor "g1": scan scoped to one row
mn.filter("region.?.?.status").eq("Active") # one ? per level, chain for deeper nesting
mn.filter("age").gte(18, returns="rows_here") # → flat list of matching inner dicts
mn.filter("age").gte(18, returns="values", value_field="name") # → list of field values
Non-terminal wildcard matches are pruned — the result only keeps the inner
keys that actually matched (not the whole row), so chaining .filter(...)
calls on wildcard paths behaves as AND, not OR. eq() on wildcard paths
(any depth) and terminal ? reconstruct directly from the index with no
rescan; ne() and range ops (lt/gt/...) on wildcard paths fall back to a
full scan every call — there's no index shortcut for those yet.
Space is an alias for . in path strings
Every path-accepting API (filter, sort_by, group_by, select, update,
create_index, ...) treats whitespace as a literal alias for . — "meta.level"
and "meta level" are identical. No collapsing: "meta level" (extra spaces)
is equivalent to "meta...level" (extra dots) — both produce empty segments
in the middle, matching nothing. Same strictness for both separators.
mn.filter("meta level").eq(5) # same as mn.filter("meta.level").eq(5)
mn.filter("g1 ? user_id").eq(1) # same as mn.filter("g1.?.user_id").eq(1)
A field name that itself contains a literal . or space can't be written as
a string path — pass a tuple/list instead, where each element is taken
as one exact segment with no splitting at all:
mn.filter(("first name",)).eq("alice") # field literally named "first name"
mn.filter(("a.b",)).eq(1) # field literally named "a.b"
Also new: mn.to_dict() returns a plain dict (bypasses RowProxy — useful
for libraries like Pydantic that require an actual dict), and module-level
md.dumps(obj) / md.loads(data) serialize any supported object, not just
a whole ModDict — a ModDict round-trips back as a ModDict, everything
else as itself. No implicit ModDict → dict conversion; call mn.to_dict()
first if that's what you want serialized.
Custom type converters
Converters are applied at insert time — values are converted before storage, so they survive serialize().
MRO is walked: a converter for a base class also applies to subclasses.
md.register_converter(MyType, lambda obj: obj.to_dict())
mn["key"] = {"value": MyType(...)} # → stored as dict, serializable
Built-in converters for shapely geometry (WKB) and geoalchemy2 (WKBElement) activate automatically when the library is installed.
Full type stubs with docstrings are in src/mod_dict.pyi — visible in IDE on hover and via help().
Installation
pip install mod_dict
Requires Python ≥ 3.11. Pre-built wheels for Windows / Linux / macOS.
To build from source: pip wheel . (requires CMake ≥ 3.15 and a C++17 compiler).
Asyncio
ModDict is safe for concurrent reads in a single-threaded event loop. Rows are stored as PyObject* references — no copy between coroutines, no GC pressure during reads.
cache = md.ModDict()
async def handler(request):
row = cache[request.user_id]
return Response(row["meta"]["details"]["rank"])
async def startup():
for key, row in data:
cache[key] = row
See BENCHMARK.md for detailed numbers.
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 Distributions
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 mod_dict-0.4.5-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 287.0 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 |
bdb45ab4e1876a5cf792145085c5a6025163cc4818e288d45116ab35e8fc982c
|
|
| MD5 |
67debfe1110d5219495584ba4d5f95e0
|
|
| BLAKE2b-256 |
1f5c12af396bd047f6761eebe614dc64897cf3d81ab9eeca720861726ba1f64d
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp314-cp314-win_amd64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp314-cp314-win_amd64.whl -
Subject digest:
bdb45ab4e1876a5cf792145085c5a6025163cc4818e288d45116ab35e8fc982c - Sigstore transparency entry: 2046111863
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 133.9 kB
- Tags: CPython 3.14, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5d728038b2e97daf57db3a95b3a76bd2f9514c6b7bdb9afae33a06fbb281c78
|
|
| MD5 |
966a234e88ca0816c9db7d8ed311bb78
|
|
| BLAKE2b-256 |
769042fc22a3ab4bf8e529d823ccc538c98a6a14c78a9c0515390a577df5435d
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
d5d728038b2e97daf57db3a95b3a76bd2f9514c6b7bdb9afae33a06fbb281c78 - Sigstore transparency entry: 2046109057
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 94.3 kB
- Tags: CPython 3.14, 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 |
bf612c632e9d3e3e8bb24410a576cf8e79619272c17a3d34d8964cccfd256ee6
|
|
| MD5 |
ab24ed0277c7c7585327e8282110d840
|
|
| BLAKE2b-256 |
b8812bb08ac7bba17db1f1f85226960b9eaf6e088ab675826b29503950b5e042
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp314-cp314-macosx_11_0_arm64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp314-cp314-macosx_11_0_arm64.whl -
Subject digest:
bf612c632e9d3e3e8bb24410a576cf8e79619272c17a3d34d8964cccfd256ee6 - Sigstore transparency entry: 2046110248
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp314-cp314-macosx_10_15_x86_64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp314-cp314-macosx_10_15_x86_64.whl
- Upload date:
- Size: 100.3 kB
- Tags: CPython 3.14, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93d69809a055b926954f3212c10b4f62fc8bd79e6c189b1822c7b45629bfb43f
|
|
| MD5 |
2ea7c9de3dcde21d6e76c9f3b7b29227
|
|
| BLAKE2b-256 |
cd5a72448bcf2c90eff298d7ff23e3adf6e72d2581a631a43e98cce076176b77
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp314-cp314-macosx_10_15_x86_64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp314-cp314-macosx_10_15_x86_64.whl -
Subject digest:
93d69809a055b926954f3212c10b4f62fc8bd79e6c189b1822c7b45629bfb43f - Sigstore transparency entry: 2046111608
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 278.5 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 |
4ac468719750f7823b94dc29b6420ba28f23a8d1edd1b4db6aa7b1a4c2eec062
|
|
| MD5 |
062b23c99d62f4cd1f571261f95eb76a
|
|
| BLAKE2b-256 |
77f0b10301b6e4509cb083cfda546a0c95e45156f83112bb7bcd94a3e096c598
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp313-cp313-win_amd64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp313-cp313-win_amd64.whl -
Subject digest:
4ac468719750f7823b94dc29b6420ba28f23a8d1edd1b4db6aa7b1a4c2eec062 - Sigstore transparency entry: 2046110375
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 133.8 kB
- Tags: CPython 3.13, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
317f4a1106916566754891134e7293b112a91335a9c443cfb7dd3a94312150f7
|
|
| MD5 |
b0d18c2df779d140d0b47c26aeaf491c
|
|
| BLAKE2b-256 |
4a8defaa980c4476615d80d150b17ec12e59846b79917f929e73c4b5e32b1aac
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
317f4a1106916566754891134e7293b112a91335a9c443cfb7dd3a94312150f7 - Sigstore transparency entry: 2046109846
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 94.2 kB
- Tags: CPython 3.13, 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 |
2475147be82b11d4df412a88603448f9004a1348aba016dd30a65687c7348ec3
|
|
| MD5 |
d786871b059710208541af0e7743c65c
|
|
| BLAKE2b-256 |
2bf9484f02cec709dc82e6eea9cac09fb0124bd08984862fc260cc1e6c8ac285
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
2475147be82b11d4df412a88603448f9004a1348aba016dd30a65687c7348ec3 - Sigstore transparency entry: 2046112095
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp313-cp313-macosx_10_13_x86_64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp313-cp313-macosx_10_13_x86_64.whl
- Upload date:
- Size: 100.3 kB
- Tags: CPython 3.13, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2f27b71be875a940848ddd0aeaa00896713ff2cb6d177d1d74c0049b43cd022
|
|
| MD5 |
efa73788ea92a160eca3a2d9e0a34aec
|
|
| BLAKE2b-256 |
790a504cc3b325e003edf923208f65a54403cf59adf587670126a2ad7b8c2fa4
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp313-cp313-macosx_10_13_x86_64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp313-cp313-macosx_10_13_x86_64.whl -
Subject digest:
d2f27b71be875a940848ddd0aeaa00896713ff2cb6d177d1d74c0049b43cd022 - Sigstore transparency entry: 2046110868
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 278.5 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 |
387b97501ba589ee126442a5b1e8f8315d4df425413edf675483502f9192ed68
|
|
| MD5 |
4047b410ae29067a77ab92c5367484dc
|
|
| BLAKE2b-256 |
d1bf4146f2969d9ceb92e43f85c4fe982c926e98cd4a113817b10f27545cc7df
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp312-cp312-win_amd64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp312-cp312-win_amd64.whl -
Subject digest:
387b97501ba589ee126442a5b1e8f8315d4df425413edf675483502f9192ed68 - Sigstore transparency entry: 2046111452
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 133.8 kB
- Tags: CPython 3.12, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b627f747d4bd6594118914b8c2299cb1c543cb7bb004d6f11a8d90c415a87af
|
|
| MD5 |
e7c8c79290205ec30a14c9602d7f9e4b
|
|
| BLAKE2b-256 |
657630918f4f589d0b3bf347b973e13dffbcc57f44aad5c65dc19166246c6b1c
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
2b627f747d4bd6594118914b8c2299cb1c543cb7bb004d6f11a8d90c415a87af - Sigstore transparency entry: 2046112422
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 94.2 kB
- Tags: CPython 3.12, 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 |
e242d3e7a894faca4444982f041e17850f279b9d1bf359c41dc670f8fe2aae08
|
|
| MD5 |
4a055dcbebc9ed08439a26577524e158
|
|
| BLAKE2b-256 |
43efe5460f3327cfdeb6c45abc919ddea0b97d1ad22c361473786a698b7fc632
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
e242d3e7a894faca4444982f041e17850f279b9d1bf359c41dc670f8fe2aae08 - Sigstore transparency entry: 2046109457
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp312-cp312-macosx_10_13_x86_64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp312-cp312-macosx_10_13_x86_64.whl
- Upload date:
- Size: 100.3 kB
- Tags: CPython 3.12, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9e48d42a7defb7a4759fd74d4a531bcff928622c8aa0e29bbe97f37ba998643
|
|
| MD5 |
bd745d4a4ea7d2eecd80c5d18c2bfbd9
|
|
| BLAKE2b-256 |
d40109c33c84af3da1da5e977f68e5c1fc6cd2d7bc6394772559390f093db76f
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp312-cp312-macosx_10_13_x86_64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp312-cp312-macosx_10_13_x86_64.whl -
Subject digest:
e9e48d42a7defb7a4759fd74d4a531bcff928622c8aa0e29bbe97f37ba998643 - Sigstore transparency entry: 2046110705
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 278.0 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3edd58afec8d8bd5643c29774f399f704bd9d6380041dfbefbe24be867d08196
|
|
| MD5 |
a624eefdd10f10db689d0a2f8fa4c07e
|
|
| BLAKE2b-256 |
e55dffc68bfefb4fad186500a27e9bf0fb5673eff57eee7d8057121cdc8e80e8
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp311-cp311-win_amd64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp311-cp311-win_amd64.whl -
Subject digest:
3edd58afec8d8bd5643c29774f399f704bd9d6380041dfbefbe24be867d08196 - Sigstore transparency entry: 2046110042
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 132.4 kB
- Tags: CPython 3.11, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0216f995bcaa0b79acb0225e2dc933f01e57e71f979ee5f5bcda432728d6d36
|
|
| MD5 |
9de1f5359dcbadb41819ccfbb15a5ac3
|
|
| BLAKE2b-256 |
adff906cb4d4c18eeb71c432352848cc7229cf0d441198c0775a4e125bcefc24
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
e0216f995bcaa0b79acb0225e2dc933f01e57e71f979ee5f5bcda432728d6d36 - Sigstore transparency entry: 2046111042
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 93.8 kB
- Tags: CPython 3.11, 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 |
274440d7f3ab9b68a83f1753a348a80870c7e31da41c4ee75a077b04af025803
|
|
| MD5 |
577e187d46be4de67bfa63a90b2d50d5
|
|
| BLAKE2b-256 |
541db92690783e746893a2997a1df3a148359aec5a4f3e4a2a6e9d9f2b81595d
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
274440d7f3ab9b68a83f1753a348a80870c7e31da41c4ee75a077b04af025803 - Sigstore transparency entry: 2046109681
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mod_dict-0.4.5-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: mod_dict-0.4.5-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 99.2 kB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79c9c746f770196e14948ff84ee051c8687de008a545698d28b9ff250d3fdb2e
|
|
| MD5 |
061c946848d18add1af1cbaf7c0392ee
|
|
| BLAKE2b-256 |
503e619b421491c75fab32a3c670dfaace13c1f90e30ca5646f71b77aa44275f
|
Provenance
The following attestation bundles were made for mod_dict-0.4.5-cp311-cp311-macosx_10_9_x86_64.whl:
Publisher:
build.yml on grey-pre-server/mod_dict
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mod_dict-0.4.5-cp311-cp311-macosx_10_9_x86_64.whl -
Subject digest:
79c9c746f770196e14948ff84ee051c8687de008a545698d28b9ff250d3fdb2e - Sigstore transparency entry: 2046110504
- Sigstore integration time:
-
Permalink:
grey-pre-server/mod_dict@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/grey-pre-server
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b0fd259fd15f33e7ea8b105d30fade39794538a9 -
Trigger Event:
push
-
Statement type: