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

Uploaded CPython 3.14Windows x86-64

mod_dict-0.4.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (132.5 kB view details)

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

mod_dict-0.4.4-cp314-cp314-macosx_11_0_arm64.whl (92.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

mod_dict-0.4.4-cp314-cp314-macosx_10_15_x86_64.whl (97.7 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

mod_dict-0.4.4-cp313-cp313-win_amd64.whl (277.5 kB view details)

Uploaded CPython 3.13Windows x86-64

mod_dict-0.4.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (132.4 kB view details)

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

mod_dict-0.4.4-cp313-cp313-macosx_11_0_arm64.whl (92.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

mod_dict-0.4.4-cp313-cp313-macosx_10_13_x86_64.whl (97.7 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

mod_dict-0.4.4-cp312-cp312-win_amd64.whl (277.6 kB view details)

Uploaded CPython 3.12Windows x86-64

mod_dict-0.4.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (132.4 kB view details)

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

mod_dict-0.4.4-cp312-cp312-macosx_11_0_arm64.whl (92.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

mod_dict-0.4.4-cp312-cp312-macosx_10_13_x86_64.whl (97.7 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

mod_dict-0.4.4-cp311-cp311-win_amd64.whl (277.0 kB view details)

Uploaded CPython 3.11Windows x86-64

mod_dict-0.4.4-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.4-cp311-cp311-macosx_11_0_arm64.whl (91.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

mod_dict-0.4.4-cp311-cp311-macosx_10_9_x86_64.whl (96.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: mod_dict-0.4.4-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 286.1 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.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 98d30fd8f06cc5a7e7848e8336a328f2c1bf21387df255cf34a6d40f5d6d79a1
MD5 bc016ac5a2e2dedfaead9edcf478fa98
BLAKE2b-256 add2992c6bc33a40e4a006dca63f94b9c6ef55869d5a0821948a970ba923883f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 39fea79324bd3bf59169384b011382159da2785dae43ed8001b4c7e533f9fc48
MD5 a9046279118c491685a61906faba7f8b
BLAKE2b-256 b1cd1d85167894ab32c1fe30f56a2b020046be97adb57c1f89b36ba650a7023c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 57fcb6371b40464cfccc89a01ea394785c894149b93b4406cdecbe8fbb4ff2dd
MD5 86269478b891b8688b95b4a4f71e18dc
BLAKE2b-256 c6bd269b4d4ad30f02f1b155e2fa94249aac3b0b3925612ed95b87fd2442f4b8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 365bec78d87948c7207a7c7ed7bd89650855a6a4b3f1313f65028925f0af53fe
MD5 efb5ea20d103d918b5e326cb45758ab5
BLAKE2b-256 d46eab851c40bd50d928bec575d519cc1980f3a149ebe4b904a6fdbdeb0d7c30

See more details on using hashes here.

Provenance

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

File metadata

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

Hashes for mod_dict-0.4.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f8693fd03305d743260b5effb7bcc32ea88c1bd33e8be5879971286d75ff6075
MD5 faac166b4a9fcae5600b7f0167c47a21
BLAKE2b-256 5dad99f07e444c8488bc7089bd36af14c2df2fe053ccac6985087323d3b96be3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 39726bb453090120694393c851e5098291f9286cb951c4f50e9b4b2a0d0baa64
MD5 58d772b33d304b3f08d03c45c4180311
BLAKE2b-256 84f0e9bf755580d3174fc30ed0e90d46de0441f0b85826d59b25fdcf03d48421

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 142cadf345a3f75b5014835999e2a5d4b1d6b6073b42a46d8b3c8bcac70515f9
MD5 323f37f6cd362d1006153e37d3563c05
BLAKE2b-256 7df8c58462ab87ad9fa94dbc1c21a03b7e423f064399119c5ddf84b8dfdcb66e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f939fc6dfaa7ce4996f97d78550ea573f1f87d5c81f2baf2c5f43f41ce68b822
MD5 671302545d1053902eeef57796ac3768
BLAKE2b-256 472e08892a236132390fd3d195286b2b9d45a961afb9b13dd71e59b0c01923d4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: mod_dict-0.4.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 277.6 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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f46a5f138bbddffac777e9c172fad3196d7c6915a9c775be704f6e3d2af65676
MD5 21c3f80e685eca864eb7044fda22731a
BLAKE2b-256 70f36c8f605d5465650f8707c6c8637a36fd6a9130cb5d1199a2f77efa15aeb2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 da34ba5d4796391b8f9a1d9d50e1d78aea4e4471aa4b87108a3ce4d967a5eb50
MD5 844d9c4252c89cb9900e096fff180f68
BLAKE2b-256 27eea16e2a4b4d13ee27f4977f6404869cac6ce2e33fd591b890335d4ca4527a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 66f352062efd9477050e7386d7abec13baf142d4b38f8ff4a979c734cc6b520a
MD5 1d0c464e89e60d2b14c072272b9e3267
BLAKE2b-256 27f98d923d7d8901287e9848c0210a8b52410fe24bbff2a9a4399e8155853fbc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4fd0b06cfb9e51d124ffe0909de9c7fc47ebb8d5d77eb60f72a4598e072894c6
MD5 d3708e811a4f112aa80a8a3c555f41e5
BLAKE2b-256 cf0e9f0b8641cc598f16438bc94b49896ae65ea222cf447c1a4cd38848814bf2

See more details on using hashes here.

Provenance

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

File metadata

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

Hashes for mod_dict-0.4.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8d25d600a2142da34654744592804b95b0c0356cc49eacadfa6822d6636b8912
MD5 e5b5b9de892707ed45ba2b3a103b0fa1
BLAKE2b-256 a454813a142c5a2d1c5f5f1949bebdfb90ba088bb45dd206055e17f438d687cf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5d36a90d3ff972402eb5fc4bf50507693f8ec3bc48e25218450c66bfa6f28990
MD5 4861c8d541e3489cab2cfb931f223dee
BLAKE2b-256 c8d67859e8cd05d68c96a5c5e5f5da6c078109ad5436abf9b6dfefa543ce125b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f60063db7d39ce09ea9010eca8d0105432d7c208472c033f1e1e5c71de24ee5d
MD5 647e481c9460ea19a272b9e38d168402
BLAKE2b-256 987b5ced81c46324e6bb70722c9824cd45138806826a2acae80a9a546c05e1ff

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mod_dict-0.4.4-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1b85132e3aa7b4e53f4e4950e0c2b78c773924c2c820707e309ac566d26394c5
MD5 1b8160f04ad30cc8a9f10e2dbfe85044
BLAKE2b-256 89e17de02baf95c6642696e6deb1beb88842de87bbda528646821304c06c23e7

See more details on using hashes here.

Provenance

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