Skip to main content

citry_core

Python package that exposes Rust functionality from the twin citry_core_py Rust crate.

Install and quick start

pip install citry-core

The public APIs are namespaced by capability:

from citry_core.template_parser import compile_template, parse_template

template = parse_template("<p>Hello {{ name }}!</p>")
python_source = compile_template(template)

The package also exposes HTML transformation, Fluent i18n, safe expression evaluation, template formatting, and browser-expression analysis.

Build integration

This package is the Python-side twin to the citry_core_py Rust crate. The connection between them is defined in pyproject.toml via the [tool.maturin] section:

[tool.maturin]
manifest-path = "../../../crates/citry_core_py/Cargo.toml"
module-name = "citry_core._rust"

When built with maturin, the Rust crate is compiled into a Python extension module that provides the core functionality, while this package adds Python-side wrappers, type stubs, and additional utilities.

Maturin module-name configuration

Important: The module-name setting is crucial for this package to work correctly.

By default, maturin would create a Python module with the same name as the Rust crate (citry_core_py), but we want to publish this package as citry_core. The module-name = "citry_core._rust" setting tells maturin to:

  1. Create the compiled Rust extension as _rust.cpython.so (instead of citry_core_py.cpython.so)
  2. Place it in the citry_core/ directory (matching our Python package name)
  3. Merge it with our existing citry_core/ Python code

This allows us to:

  • Keep the Rust crate named citry_core_py (useful for potential future bindings like citry_core_js)
  • Publish the Python package as citry_core (the desired public name)
  • Have maturin automatically merge the Rust binary with our Python code

The module-name format is <python_package_name>.<rust_module_name>, where:

  • python_package_name must match the Python package directory (here, ./citry_core/)
  • rust_module_name must match the #[pymodule] function name in the Rust crate's lib.rs (e.g., fn _rust)

See the detailed comments in pyproject.toml for more information about this configuration.

Package structure

The package uses a mixed Rust/Python layout:

packages/py/citry_core/
├── citry_core/               # Package code
│   ├── __init__.py           # Empty - see below
│   ├── _rust                 # Platform extension module generated by maturin
│   │                         # from `crates/citry_core_py` (suffix varies).
│   │                         # Name set by `module-name` setting in `pyproject.toml`
│   ├── _rust.pyi             # Type stubs for Rust API
│   │                         # Filename matches <rust_module_name> from `module-name`
│   │
│   │   # API for individual Rust crates defined
│   │   # as separate submodules / subdirectories
│   │
│   ├── html_transform/      # HTML transformation API
│   │   └── __init__.py      # API for this submodule
│   ├── i18n/                # Fluent compiler and locale runtime API
│   ├── safe_eval/           # Safe eval API
│   ├── template_formatter/  # Authored template formatting API
│   ├── template_parser/     # Template parsing API
│   └── ...
├── tests/                    # Package tests
└── pyproject.toml

Manual API management

By default, maturin auto-generates __init__.py files. However, this package manually manages the Python-side API for several reasons:

  1. Multiple crates: The Rust crate exposes multiple submodules (html_transform, i18n, safe_eval, template_formatter, template_parser). We split these into separate submodules to avoid name conflicts.
  2. Python-side post-processing: Some crates need Python-side code that wraps or extends the Rust API. safe_eval executes transformed code, while template_parser provides Python wrappers around the Rust parser and compiler.

The root __init__.py is intentionally empty because we namespace each Rust crate under its own Python module. Instead, the API for each crate is defined in a separate directory with its own __init__.py file, e.g.:

  • citry_core/html_transform/__init__.py
  • citry_core/i18n/__init__.py
  • citry_core/safe_eval/__init__.py
  • citry_core/template_formatter/__init__.py
  • citry_core/template_parser/__init__.py

This allows clean, namespaced imports:

from citry_core.html_transform import transform_html
from citry_core.i18n import CatalogCompiler, canonicalize_locale
from citry_core.safe_eval import safe_eval
from citry_core.template_formatter import (
    finish_embedded_format,
    format_template,
    prepare_embedded_format,
    python_expression_provider,
)
from citry_core.template_parser import (
    analyze_browser_source,
    compile_template,
    parse_diagnostic,
    parse_template,
)

The i18n API compiles and analyzes Fluent project catalogs and runs their locale-aware messages, formatting, and strict number/date/time input. The parser API also exposes stable diagnostics, JavaScript analysis, and parser-owned syntax inventories for editor and batch tooling.

The formatter includes conservative Citry/HTML structural layout plus the vendored, in-process Python expression adapter. The provider identity function lets tooling report the exact pinned Ruff implementation used for expression output. JavaScript and CSS providers use an opaque two-pass API: prepare_embedded_format() returns immutable, source-bound requests for safe expression-free <script> and <style> bodies, and finish_embedded_format() validates every result before composing one atomic template result. This package discovers regions and enforces Citry boundaries; the caller chooses and invokes the external provider.

Remember: When you import
citry_core.html_transform,
you are directly accessing
citry_core/html_transform/__init__.py
You are NOT accessing
citry_core/__init__.py

Type stubs and runtime access

Issues with type checking

Type checkers (mypy, Pylance/Pyright) cannot pick up signatures and docstrings from the Rust API generated by maturin. The Rust code is compiled into a binary extension module, and type checkers don't have access to the original Rust source code or its PyO3 annotations.

To solve the type checking issue, we define type stubs in _rust.pyi.

The _rust.pyi:

  • Re-defines function signatures and docstrings
  • Enables type checking, IDE autocomplete, hover tooltips, etc
  • Important: The filename _rust.pyi MUST match the second part of the module-name setting in pyproject.toml
    (tool.maturin.module-name = "citry_core._rust").
    This ensures type checkers can find the type stubs for the Rust extension module.

Issues with Pytest and virtual modules

Another issue is with pytest. We define nested Python submodules for each Rust crate to avoid name conflicts in the Rust API. But pytest can't import the nested modules directly using the import keyword. This fails in pytest:

from citry_core._rust.template_parser import parse_template
# ModuleNotFoundError: No module named 'citry_core._rust.template_parser'

The cause is likely because the Rust-generated submodules (like _rust.template_parser) are virtual modules - they don't exist as actual files, but only inside the Rust binary.

To fix the issue with pytest, we have to avoid importing the virtual Python modules using import keyword.

This simply means that, instead of importing the Rust API as:

from citry_core._rust.html_transform import transform_html

transform_html(...)

We have to do:

from citry_core import _rust

_rust.html_transform.transform_html(...)

Development

Installing from the source distribution requires Rust 1.95 or newer. Normal installations use a prebuilt wheel and do not need a Rust toolchain.

Build

Build the package using maturin:

cd packages/py/citry_core
maturin develop  # Development build
maturin build    # Production build

Or with uv:

uv run maturin develop

Test

Important: Before running tests, you must install the package in development mode:

cd packages/py/citry_core
uv run maturin develop

This builds the Rust extension module and installs the package so Python can import it. Without this step, tests will fail with ModuleNotFoundError: No module named 'citry_core'.

After installing, run tests:

# From the package directory
uv run pytest

Adding a new Rust crate

When a new Rust crate / submodule is added to the twin Rust crate citry_core_py:

  1. Add to _rust.pyi: Define the type stubs

    class new_module:
        def new_function(...) -> ...:
            """Docstring"""
            ...
    
  2. Create Python wrapper: Add citry_core/new_module/__init__.py if needed

NOTE: A validator bindings (run by python scripts/check.py) checks that we've added entries to _rust.pyi and that the new_module subdirectory exists.

Type stub maintenance

When updating Rust functions:

  1. Update the function signature and docstring in _rust.pyi
  2. Ensure the filename _rust.pyi matches the second part from module-name in pyproject.toml

Download files

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

Source Distribution

citry_core-1.5.1.tar.gz (2.2 MB view details)

Uploaded Source

Built Distributions

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

citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (6.2 MB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl (6.0 MB view details)

Uploaded PyPymusllinux: musl 1.2+ i686

citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl (5.9 MB view details)

Uploaded PyPymusllinux: musl 1.2+ ARMv7l

citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (6.0 MB view details)

Uploaded PyPymusllinux: musl 1.2+ ARM64

citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (6.3 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ s390x

citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (6.4 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ppc64le

citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (5.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARMv7l

citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.8 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl (5.9 MB view details)

Uploaded PyPymanylinux: glibc 2.5+ i686

citry_core-1.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

citry_core-1.5.1-cp314-cp314t-musllinux_1_2_i686.whl (6.1 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ i686

citry_core-1.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl (5.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARMv7l

citry_core-1.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl (6.0 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

citry_core-1.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

citry_core-1.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl (6.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ s390x

citry_core-1.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (6.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ppc64le

citry_core-1.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (5.7 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARMv7l

citry_core-1.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.8 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

citry_core-1.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl (5.9 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.5+ i686

citry_core-1.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl (4.5 MB view details)

Uploaded CPython 3.14PyEmscripten 2026.0 wasm32

citry_core-1.5.1-cp310-abi3-win_amd64.whl (5.9 MB view details)

Uploaded CPython 3.10+Windows x86-64

citry_core-1.5.1-cp310-abi3-win32.whl (5.5 MB view details)

Uploaded CPython 3.10+Windows x86

citry_core-1.5.1-cp310-abi3-musllinux_1_2_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

citry_core-1.5.1-cp310-abi3-musllinux_1_2_i686.whl (6.1 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ i686

citry_core-1.5.1-cp310-abi3-musllinux_1_2_armv7l.whl (5.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARMv7l

citry_core-1.5.1-cp310-abi3-musllinux_1_2_aarch64.whl (6.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

citry_core-1.5.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

citry_core-1.5.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (6.3 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ s390x

citry_core-1.5.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (6.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ppc64le

citry_core-1.5.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (5.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARMv7l

citry_core-1.5.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

citry_core-1.5.1-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl (5.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.5+ i686

citry_core-1.5.1-cp310-abi3-macosx_11_0_arm64.whl (5.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

citry_core-1.5.1-cp310-abi3-macosx_10_12_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file citry_core-1.5.1.tar.gz.

File metadata

  • Download URL: citry_core-1.5.1.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for citry_core-1.5.1.tar.gz
Algorithm Hash digest
SHA256 c23f53d674ecda5b214851e0f01d8a1e32a5ecbcd33b50478bc8b6fab43abbe1
MD5 81b5d414a958ad070974c23fe8384925
BLAKE2b-256 27b4cde1a27d674f7c83a17267274150afb671458abcbc30537df6e6892e1b44

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1.tar.gz:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3e4d4cf11fa1e86e3cf4228192c19cef11d47f7c6985a3d769361b5ac8a8ffd7
MD5 38019e57677048f8d372b54861b9de4a
BLAKE2b-256 342447f63261afff947e971782ed78494fe54d473af8968e40dc9ecd5541f899

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 02e75aafcc5feea492d36252c927c05baf096bb414eee35d10525482c6988b7a
MD5 c120412f0682b311e525df182cca6772
BLAKE2b-256 4a885b454291a18e32b757413d05572c32fc3d1c1c30ef72579ea817cc65832e

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 eee4d4287730820d735e379aa45e3b843ebb44e121354700b5a80f3a1cbf4ad0
MD5 a7e90ff751f3cebcd55a65e46d147108
BLAKE2b-256 e073c26343fce81b2dfc0a18e49040ff9f1022f90d437d334e2c7d1fa980e62e

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d02d9e8546afdcfc23055e01249776958b79a2cc5f88f3a88ec767aaa7880038
MD5 da6f4e601742ffa13f6ecc035798e62b
BLAKE2b-256 7f5ba3706270e6110ab898b3a33c676ee9d9df7e02dfa9c1524cac363e92fc90

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6c6eec07f87e2c05f3393025f111e4ee29c4958e69e668c3993c3076d73764c7
MD5 b89d88f3c502174710ee6097cb179acd
BLAKE2b-256 1fa837a182a34766ac8b02f9a46f729c79dd15a83c02c64b89e2ea8108a386db

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 8998ba51534f0cf82204cdc69c8d477710b356ec1350fb33d1ecf6d88e51da0c
MD5 6fcf4521e12544f13173860e988bd9d7
BLAKE2b-256 6f9387809933eb175f87fa048955d10ec8c48b8966f2d0786b7ee6125497e89b

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 8183139cd25b2c9f3867b12252d073a7ecaca4f52e34ebd0163af34da9198d14
MD5 f7084ef52976b631cc7bf42553ed6b02
BLAKE2b-256 67d4cefe28f9c3f7af73b619e858bb1e7fee88ec68d709cd159aa738cfc21b5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 01b3fcd1d1b52e6a8893ab2a34caeb65d597b8f62d820c38fd43831a575228a5
MD5 ead06838f85d5f8426c332859ca6e149
BLAKE2b-256 86bb5cb9d113a72fa0c8bebc714a8d72e241e126114ee50d4e1c634c5d795c98

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a2c88f61118916c9058a1c0a7d7bfab5f5d073c0c86b892ba09969eb30515939
MD5 09877293c7e94ff8ea2a1b26c2c64ecf
BLAKE2b-256 3ed12a0d19c259a6a3b67ebe1091b66154ef4dba67fbb99d4f7a9a72b4046aee

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 87587f471ffaa832cc68adbbbae84cc71323ec0f7abd9dce4e8911e56ea72604
MD5 c91855349cb7c60378018404d283d05f
BLAKE2b-256 fba7f77d994e5d5451c23c2744102cce1f261c42af291fcc817e74b202dd68ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 36f7205bff1dcef3291acd273144d7f05812819a9a642044e0b61d347ae65fcb
MD5 0431b6b18381babdd122ae5cff9cab6a
BLAKE2b-256 e912b18a16b57a40f07b16ee2423ad5af826c942f683b97aaf0022f2ad701fc7

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 43626e82ca1f4acaa2730efff3bc432aa3bd59a7f302a0e38d23260817fb5bab
MD5 31f13f5ecb5bce1d14caececc1d6d932
BLAKE2b-256 768691a5ae8d164b9f53ad36207bfaf3b4165d832edb928d38f2a3c6c21b9af0

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-musllinux_1_2_i686.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 f28e8f596a1a596530ee5c5df228e29f86ca8d3ad790a539e1047f703d330bb7
MD5 0db999dedf48c3b9b19ab32dc673f25e
BLAKE2b-256 a69e0ace384073e7dabd5f77623d77b4780652ddb63adb281748e9d07c513fe0

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8117125c74185dcf03a04c6ee29f12fc5adf5f4331236dd67f8e33969e13c143
MD5 f2725cd595185fc83974068c1ffa2cde
BLAKE2b-256 1e9e0e8438b475d272c6b9c433760d75c02dade8f61885b1db0e94a71ec89685

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d75178b3543f05ebd9dda69c3074fc4ae0682ec3852d254ed54903313c8c50c5
MD5 e91b57a0b1c532c7f6174eda0ef3eb49
BLAKE2b-256 f1ab5ac3bc8edfdd42a0893a78fea850b9537c65d98b80f6af700badb6b70add

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 d6bcc19bb49124dcf0e127df5a7c5d15b1fcf7b10ff79ca3f6390d6d5553373c
MD5 49a91202f62a4998987d818f028d8432
BLAKE2b-256 783e3391f9efe57da4f5b7d60ad10242d30a38bfa23112cae1dc7042120d5254

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 7263e25570ae76dfe05aae8ea3735d0b567e3f5fd73e3e3e8089ec953bd675a4
MD5 d3851398cf9ffea926c36bc3054ee653
BLAKE2b-256 3a48213137e3b9743b29d7043a525c9b8d8202b4d2047a262fa72c49bd47bbbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 0bbd999fb8cd747572a9074acccdf82bce24b7dd76bd008facfce6514c21a47a
MD5 819c239f1f456bd3827d0bd39a52b253
BLAKE2b-256 93d13eca8ae30546c5d6141c30a0a413ba349e86c53fe5b14c0bb469fa6f410b

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6048268c6889be966b84121b7c88c632f5bdc0a83468e5c50149f9f3849cabe0
MD5 1d8ab52a7591630b3c800d5f0db71458
BLAKE2b-256 68089aa8ef08c3cf6bb8c972736dfca6bae09e17e62b118f50ae6e64c18343c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 8428547578e695ad056765b05773095d10aa4febdc8fb03d5d2e81bbc12bddd4
MD5 946eba60849e9f8d54f432b92e333d0f
BLAKE2b-256 23498f825f3b58e3c6ccc8a3e3c369ba513641fcc0695ea4ab73f3d40d4c0101

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl
Algorithm Hash digest
SHA256 081e1e2a8adfb2a51a49de1dc34749f0325dfd3861bd6960640beee5286bc52f
MD5 e8abfaaf0d2bda2df541d5b98afc5aa1
BLAKE2b-256 e8e3a3f65946b66fb78f6395c71f1d81c5db2dc48eaeea807ac8db4d1d31a238

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: citry_core-1.5.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.9 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5cdca380237a05612d0420b8d8cb8432aac2e0ab8d4ad4f064c0420201009831
MD5 30e3c63d3d8e69d7424af05900fc4d60
BLAKE2b-256 d33315c1ccf12cb4ade6ad16286abe2fa391572aeb1abe6d7dcf2d2df3b871e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-win_amd64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-win32.whl.

File metadata

  • Download URL: citry_core-1.5.1-cp310-abi3-win32.whl
  • Upload date:
  • Size: 5.5 MB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 3c0d04c47827a3b3eb01baebee32b7148a129af46eb66cccd5de853367173d39
MD5 023d3c6c55a56fc63ece07c2c280bad6
BLAKE2b-256 403a8b9fa3751844c73bad6d0f637a9ffadab7d7b269b3a69000d86d958d9a93

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-win32.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a9d19574a1a5d7d90b7f171278687c3067a01bb1dfe55c906d416dcc23e44d97
MD5 144746172fc4a1b30072d0837389aaab
BLAKE2b-256 028e2d3db46547a01eddd4e60b3de265e54b1f18d280490685c54d98f1e4dd1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 462253f5887c76d08ea81f1baea8374a0a71b4e7991164aa53beb1095f33632c
MD5 3c89624a0095cafb36370a64ec51dfa7
BLAKE2b-256 755fdb1bdd546b1930101327b1bc4f522480c9743a82fe425e07346ac6ea26f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-musllinux_1_2_i686.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 acb244c2e5f9976fb7e3034454547dc9743e033b46e3597063376f017894e759
MD5 7f1415f9f780edd85a82886c729a58ea
BLAKE2b-256 a5e6195d0a6583f6ed41fc9e8a864dc311611ba06250cbb674959566f8df6be3

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-musllinux_1_2_armv7l.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9deeb1682a872a97dd1882882f3766de1f0089065fdc1f03706a839ad30e0cbf
MD5 8dee757844a4c2c17efcb225ce322a1b
BLAKE2b-256 4b7f7053cfdd7311bbb246d0172f1ec7b1fc70c5a4a67c9e714d3cdc5860f133

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-musllinux_1_2_aarch64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 297beb1da1119af5b570771a299761edb97f9c92708b342635fd0be3b63d2912
MD5 b25187633561793a1acdea0730846fe5
BLAKE2b-256 4b24a6f9cdcc67596bc6784761431bbea403bcb34610805a535712d921a0b658

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 8764ad182c92f0adc073251e2b9cdf629ac46ae3518d16730662c20740e436f7
MD5 ebd0112cafddd85c5ca5f896101acd5a
BLAKE2b-256 ecd09bee5366300002c654b043042b1719d1b37debbe36b9f2db79a741a8702f

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 ac2a6e4dbd107245ebdf7e7e758728e5450c3129163136aefbf23994f3ced61c
MD5 61cd361738a05c1352767c69540a5968
BLAKE2b-256 a33d2a48cfca56bf42b82a7d11763735a6d31bf65d8aac7f09bf3e7da61e17b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 01e9603147202b8bee730bdc84078a50df381c151714a703a16334f1277eba6b
MD5 dc486320a9d24dbf1dad9ba33151d028
BLAKE2b-256 0ed15310591d637dad6847e7810fa49051b499e1b6ba841b5d4f2f9d093a5120

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 86c4e07eaa49affa2b306520c13fb0a928c4cd2ce8237033140d897847324d30
MD5 4f56e92297ce64b076de4a9a2f43ffff
BLAKE2b-256 d8dfe5ad60a686adde52289077459b10af97e18fc389e6a17246bf45e040dd75

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 1e10ea69ec58d86075982685da2ac13b8a6ba240911f405da563e41935af1776
MD5 0e9eb0cc75471f79e7d4d936f7689599
BLAKE2b-256 08843409bd37776d06481e454d46f2b713d493ab409a1b5be6785a5ec5c1f8a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 86e7d4d65928ee1638a56405b6a111a19e4abc9dcd00d18c89dbb0e145193ce2
MD5 27d328080ef1d86ab2b638747542ac68
BLAKE2b-256 1b4f0d498dcf0f2a406c24b6d5239964dbc14d274bcb401d0267a7e3a9d13914

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

File details

Details for the file citry_core-1.5.1-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for citry_core-1.5.1-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c0464ff642fe8ae732a5ec93c172ce83c64156a5c0f836cbfd1608f44b1a3e04
MD5 d96e060a852d1febd6b1ed1956e90ae0
BLAKE2b-256 f1355ec2463ff1b1e546e864881f01c07a6b9a90c78ee0d97bc7bf3e2943d7cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for citry_core-1.5.1-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: py--citry-core--publish.yml on citry-dev/citry

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

Release history Release notifications | RSS feed

1.6.1

36 files

1.6.0

36 files

This release

1.5.1 This release

36 files

1.5.0

92 files

1.4.0

92 files

1.3.0

91 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page