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
rows   = mn.select(["age", "score"], returns="values")  # → [{"age":..}, ..]

# 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":..}, ...]

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.2-cp314-cp314-win_amd64.whl (285.4 kB view details)

Uploaded CPython 3.14Windows x86-64

mod_dict-0.4.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (131.6 kB view details)

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

mod_dict-0.4.2-cp314-cp314-macosx_11_0_arm64.whl (88.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

mod_dict-0.4.2-cp314-cp314-macosx_10_15_x86_64.whl (96.2 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

mod_dict-0.4.2-cp313-cp313-win_amd64.whl (276.9 kB view details)

Uploaded CPython 3.13Windows x86-64

mod_dict-0.4.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (131.6 kB view details)

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

mod_dict-0.4.2-cp313-cp313-macosx_11_0_arm64.whl (88.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

mod_dict-0.4.2-cp313-cp313-macosx_10_13_x86_64.whl (96.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

mod_dict-0.4.2-cp312-cp312-win_amd64.whl (276.9 kB view details)

Uploaded CPython 3.12Windows x86-64

mod_dict-0.4.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (131.6 kB view details)

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

mod_dict-0.4.2-cp312-cp312-macosx_11_0_arm64.whl (88.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

mod_dict-0.4.2-cp312-cp312-macosx_10_13_x86_64.whl (96.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

mod_dict-0.4.2-cp311-cp311-win_amd64.whl (276.4 kB view details)

Uploaded CPython 3.11Windows x86-64

mod_dict-0.4.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (130.9 kB view details)

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

mod_dict-0.4.2-cp311-cp311-macosx_11_0_arm64.whl (87.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

mod_dict-0.4.2-cp311-cp311-macosx_10_9_x86_64.whl (95.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: mod_dict-0.4.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 285.4 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.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 2883ba52db59582af7cf0e65f5701c3e30ef2835f616a3e7ac09aff082190deb
MD5 42d409629a7ad0d74041597c3a85422f
BLAKE2b-256 e222e76a88202a2bfcb0b6d2533906df243630178e173d39aacafd8305e34101

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c8a661ba98921821f8b584488c2b3a6707f677c63d215ac7bf87bcf75ceecde4
MD5 31a9318eec7770db84afb3514443a2a2
BLAKE2b-256 a807e8503e240fbbd9145260aea8de28453def269f103e9a8efd90706b419786

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0bce5a8bf61b7058f0c1a15a5e820ca4f19855d1df8fc2caa6e1d7c2377ecee1
MD5 830a063026f9d2145c428c7a50e4ec91
BLAKE2b-256 25be88f88f1f4a6ef29dd566370ad42d7fd98b6411e225d18a37b7d5ae434233

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 511c0897468c1b0b0fecff42490509aeb05bd15dff90352de9d335c0f743f1d9
MD5 b724bdcdbebe197682d26f9917f3feed
BLAKE2b-256 649ff9906bdd2216512abb8fdd9924e5c13e9e883bf255af215428e03149628e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: mod_dict-0.4.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 276.9 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.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a197804312c66bc84542f6a64f77dc5cdfe09ee6027d8b48b66c9cc0464a305c
MD5 0eecc42f6bf9498462e7171caf7884ba
BLAKE2b-256 32bd0e7206fd367bd5ebc1586a0cc17d2ff22983cd01389ea3e7079b587fbec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bc7973fc233b24f3b7aac9a879efcebeda98e8232fdc4ee2132744c4af608123
MD5 ec03f5f66ae62f9f2ffdc1b6af748482
BLAKE2b-256 762caee6bbbf184300a3fa8cdfd82a7baa0362c359855fd5533b3772362e59aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c8ffff9c23c5bafd78bff7e68e2d516b84c71ccd2e64ded94fe0afd077f41516
MD5 d66d7144172da7a9cd8abe9667d5994c
BLAKE2b-256 d48ea57b9383c60250a3d6202adb9130005707af81ce5b6117cf81a83f65dd03

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 d7a0e7fe453403f0e0693335597b41e7bc8ac7aa2bed1fcefe2c001d8e971e54
MD5 c7ef2e8d27bbf4da233da38f78362ad5
BLAKE2b-256 befcd977eb59ba764ed1b7df79cb1de95c06ce4045997c09aca5047ccdeffd3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: mod_dict-0.4.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 276.9 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.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 aea239708e69c4c9a11d007295d94c80f00d7d3f1fcdfd0c5d196b0e0520aafe
MD5 21c05ec1014e2989da8cd4477a789598
BLAKE2b-256 6019bd80d7bd22a4bcfdae84e59d526d07d8f5073d0535faa0f4e44769459eb5

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 82174fbd0cc981c36e63c040de21dad85007743fa23bceab01335379a30a010f
MD5 beca48d158e26aba8bea86cdf3324d91
BLAKE2b-256 b528dfa01faf2b03634e35d7073f86f3616377de9ebb6c2c844e5d46f9c1760b

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e9ae22d1579f1995141e5a9bb5d8dcd518cc377b8da62ca126e6c6f14ff227ab
MD5 a66614946525bbdf89ed94a83e4dce0e
BLAKE2b-256 dfb33f3e976625e0958a8916bd66b36f3aea5ab013390de24bc1180d09e2a14d

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b230b2f498b72ff407db717a53d943b8750c79b8f593f4340e050b4abc1a575c
MD5 c52826ecca9a307316baa77e92189613
BLAKE2b-256 4801d73d5bd5b7f4862c18c4616834fe6090c470b3fb1375b4f65857e7a2a8cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: mod_dict-0.4.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 276.4 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.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 43221940d65faff68d4566e649a7ec697071a4f4150b5e36bd67b1d9b789725f
MD5 45072f07bd02cc61d65331aa2cdc15f3
BLAKE2b-256 a796916b5e97a2ee8724b97151dadbdc0439ab4e0f5e81952d51cb7822f58034

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b76e95129f696b71541347beb2056ff130215f62b3614d297a5edad93c5c9f1
MD5 bc00f05a2fb07cb735ab6be8f0597065
BLAKE2b-256 ce4708f24723129ea29a60e948a114f925e9ed87efb48eb41300ae90d1e4372c

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 25854da9145e9425ce880a549fe524e89ed48ebc6904711d913070856901d660
MD5 dc10d2274eecb45973a6937e1c958367
BLAKE2b-256 4e0db49b9a8226321202ae13e378d4b02fc5c42e871d04d010a87888ccc43318

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mod_dict-0.4.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 628c235369ccc6bbdc4fff98ab103dc57766e35da9009704ee059f3e8bfb02e5
MD5 df67809283916ec9eaa6f2ff7296f3a2
BLAKE2b-256 b5b58925b7b1f4a2ae215c815add72977abb75fb383bfa5dbb02b4d5a9c133af

See more details on using hashes here.

Provenance

The following attestation bundles were made for mod_dict-0.4.2-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