Skip to main content

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] = row is 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.

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 ModDictdict 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

mod_dict-0.4.3-cp314-cp314-win_amd64.whl (285.8 kB view details)

Uploaded CPython 3.14Windows x86-64

mod_dict-0.4.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (132.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

mod_dict-0.4.3-cp314-cp314-macosx_11_0_arm64.whl (88.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

mod_dict-0.4.3-cp314-cp314-macosx_10_15_x86_64.whl (96.6 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

mod_dict-0.4.3-cp313-cp313-win_amd64.whl (277.3 kB view details)

Uploaded CPython 3.13Windows x86-64

mod_dict-0.4.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (132.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

mod_dict-0.4.3-cp313-cp313-macosx_11_0_arm64.whl (88.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

mod_dict-0.4.3-cp313-cp313-macosx_10_13_x86_64.whl (96.5 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

mod_dict-0.4.3-cp312-cp312-win_amd64.whl (277.3 kB view details)

Uploaded CPython 3.12Windows x86-64

mod_dict-0.4.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (132.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

mod_dict-0.4.3-cp312-cp312-macosx_11_0_arm64.whl (88.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

mod_dict-0.4.3-cp312-cp312-macosx_10_13_x86_64.whl (96.5 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

mod_dict-0.4.3-cp311-cp311-win_amd64.whl (276.8 kB view details)

Uploaded CPython 3.11Windows x86-64

mod_dict-0.4.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (131.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

mod_dict-0.4.3-cp311-cp311-macosx_11_0_arm64.whl (88.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

mod_dict-0.4.3-cp311-cp311-macosx_10_9_x86_64.whl (95.4 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

File details

Details for the file mod_dict-0.4.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: mod_dict-0.4.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 285.8 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

Hashes for mod_dict-0.4.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 2af2e43914e6cc4db5e3f9548a1b7f598ab7b05699de96c114b10b178c54ff01
MD5 241ec7b173073510609f1c457bbefbea
BLAKE2b-256 a4c0e600f670512acdc1f9248ede332360fc7c495ff8d0d50e0f8df1d59ac517

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp314-cp314-win_amd64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 34f26293655be1ead0a03c352e30b63e67126e4fa785f83e68f9560651e06bcc
MD5 71aff4ef1a7f67bb11475455b594ee0f
BLAKE2b-256 1c1fd82638c7b9a0cd9cbe61490560a95e871ed480b70fb6d385cfd67329169d

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b482c9edd09a3a56310240a3c3e2b4050c0f82a090bd16e783d3f3d527335eb8
MD5 555632fee1abe2cc706b0583ca38f978
BLAKE2b-256 f46f16a2873c50f7e1bb6049a7f99483573f9085f45b94f3d50663c775f9b182

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 0c99c3d5a3d451958859bed5cb6df1b649d8f6b6da5f32a1e99025c845a74f54
MD5 ecfd4ca979643c91e6d3e57ef78f8b4b
BLAKE2b-256 4979b31e8c2806bf8301fee23244f333a84cabaabb0f2aa3b90e8bb882969891

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: mod_dict-0.4.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 277.3 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

Hashes for mod_dict-0.4.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6c457525cba7cfeaec75957e90ad8a9b9fbe1987bd9721f00dd4cad94f3ca71b
MD5 5853d973be217a6f1caa050ed20f9418
BLAKE2b-256 5c1df24390cde0ea0975ad707ef4fa6b1f6ca9b241987df84c47c2eb04005215

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp313-cp313-win_amd64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1e78ed8fb4b4c364eded4326a44539134a6430cd173501c4d79171b256c0c939
MD5 a94ba3926b7e3de833bf2897ae3b5d31
BLAKE2b-256 3132853296c1a659843c9efe815c2a7409bd28ade6e5c2637df6f3ee6dda4c66

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 de0a80da8a5dec59eb07acbd4c51619853aedfa720b7c8fd0f5de58e12778f5b
MD5 9ca1a248b6a9188765558042b2759df1
BLAKE2b-256 966d1e4600a006c0c6513c6469b93ce52dabe11d71f05a2f651e81431f66c939

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 1b94c49a94ad2760c966c1c0c6ecd141856742435b70b670b3898d23aa5ad622
MD5 c025554cffd16c8d4eee79ee03909853
BLAKE2b-256 a1e94d4477d78cd766c04f81ae948d7cb11834df8cfe5054ecd09976a56f6961

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: mod_dict-0.4.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 277.3 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

Hashes for mod_dict-0.4.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0dcb40755b019898ad22ab180fc08b7067d1667154a854151d572a7625713b69
MD5 23a2b573413b0977f8a95d1d344f39b5
BLAKE2b-256 8ceb77badeacfdbfd2dc7f3ad46e06d8115eb3f814f80f4596935958eb8b0c64

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp312-cp312-win_amd64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 59b2f8bc405e38924b3116307c9b805c980a08723b0a59a08aa041d299f10932
MD5 e313b607171084b7dba86bf68fffc0c5
BLAKE2b-256 f47495e0017208d1d7d92440a7c0191f287bbd1c8c7083e89a95d8cd20175c0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80e2c1d4fc7acecfef8797580a0a241e915e2ec9fedde3c9d089fb8b215887a8
MD5 2810d45d83e65128a9d64cfd027f263e
BLAKE2b-256 3915b7d89914c1e885321b430e0bf8b7570c2ec6ff634fe8783c0fce6333a867

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 6d9ac4a0b3fea80f422315ba85a8abb430d4291afe9180d5ae60255a484619fc
MD5 d1031aadb07d4573b6e090fd0caaf49d
BLAKE2b-256 bdcf9467b4489229a8e0c0fb7e0c343b078f60718e63135c6cc5e7b5ea4f5dc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: mod_dict-0.4.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 276.8 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

Hashes for mod_dict-0.4.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7ddd7b42d9da3077a26f135b4a686b30b74bdd6a3a70d90a5d51102af1a9b7fd
MD5 294603ac28de5e78e2f1984e31a4807a
BLAKE2b-256 e437e3eec0e4ab4eb4e5f2dab1195586dcc2be4b79cbe444f7d739705da4b96e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp311-cp311-win_amd64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 30c8ecbda71ce3821bbdcc4f356bc721b43f02a2d07f8696f063ae874d9012e8
MD5 59e1f42bccc9b1637ec2082274d08a56
BLAKE2b-256 030640c697f47f992e2a06090f3052f693676b1a688b938c9b40c1fa7bc17312

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7d03dc6a0bd288ce31d8c9a415befaabdf29ebf613dd65a0465683ec61b71478
MD5 3763b1ffe46f7b57a21af82933415134
BLAKE2b-256 f6b2431c0eb5e177d478e304a745f9084be4c3cabf6ed879c240ad7f2d15db43

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mod_dict-0.4.3-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.3-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 322a41648d43b622a9f1f68823c1fcf6e71f4ba9289d4ecb6eebcdcf6a16a512
MD5 651210a182f0972a16a93559532972ab
BLAKE2b-256 bf0d51286eb2de11d451959ea4f5f1292d4ff9995483af6a0dbf18f6fb8776d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.3-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: build.yml on grey-pre-server/mod_dict

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page