Skip to main content

Damga — Text Normalization (TN) & Inverse Text Normalization (ITN)

Türkçe README

Damga (damga on PyPI) is an open-source, offline, deterministic text-normalization engine built on weighted finite-state transducers, with Turkish as the default language (languages). It turns what a speech recognizer hears into what people write (ITN), and what a language model or a database writes into what a TTS voice should say (TN):

Direction Input Output
ITN (spoken → written) yirmi beş bin altı yüz 25.600
ITN yüz elli türk lirası 150 TL
ITN saat dokuz otuzda saat 09:30'da
ITN sıfır beş otuz iki yüz yirmi üç kırk beş altmış yedi 0532 123 45 67
ITN derya nokta öztürk et gmail nokta com derya.ozturk@gmail.com
ITN otuz dört a b c sekiz yüz kırk iki 34 ABC 842
TN (written → spoken) 25.600 yirmi beş bin altı yüz
TN 2,50 TL iki lira elli kuruş
TN 15.10.2026 saat 09:30 on beş ekim iki bin yirmi altı saat dokuz otuz

Why a grammar engine and not a model:

  • Deterministic. The same input always gives the same output; every behaviour is a line in a golden file you can read and change.
  • Safe on sensitive entities. Phone numbers, IBANs and plates are never padded or "repaired": if the digit count is wrong the words stay words.
  • Fast and small. Sub-millisecond per utterance on one CPU core, no GPU, no network, no LLM; the wheel installs with zero dependencies.
  • Built for real recognizers. The grammars accept the mixed forms ASR systems actually emit: written digits inside spoken numbers, punctuation in the middle of a phone number, glued separators, mis-heard e-mail domains.
  • Two directions, one set of grammars. TN number writing is the exact inverse of the ITN cardinal grammar, so the two directions can never disagree.

Install

pip install damga                 # Linux, macOS, Windows — no other dependency
pip install "damga[build]"        # + pynini, only for writing or changing grammars

The wheel contains the precompiled grammars of all seven languages and a small native runtime (damga._fstrt, OpenFst statically linked), so nothing is compiled on the user's machine and pynini is not needed at run time. Grammar authors install the build extra (pynini has Linux wheels on PyPI; on macOS use conda install -c conda-forge pynini) and run python -m damga.build after editing a grammar. With pynini present, backend="pynini" (or DAMGA_BACKEND=pynini) runs the grammars live; custom category selections automatically use it.

Quick start: your microphone, on your machine

The fastest way to see Damga work is live speech. Mihu Turkish STT runs on your CPU (no GPU, no cloud, no API key), Damga turns what it hears into written text while you speak:

git clone https://github.com/mihu-ai/damga && cd damga
pip install damga turkish-stt sounddevice     # Linux: sudo apt install libportaudio2 first
python examples/mic_streaming.py              # --list shows input devices, --device N picks one

Say "telefon numaram sıfır beş otuz iki yüz yirmi üç kırk beş altmış yedi":

 … telefon numaram 0 5 32 123
[01] STT : telefon numaram sıfır beş otuz iki yüz yirmi üç kırk beş altmış yedi
     ITN : telefon numaram 0532 123 45 67

The line updates while you talk; when you pause the final line is printed. The recognizer model (about 70 MB) downloads once on the first run. On macOS allow microphone access for your terminal (System Settings → Privacy & Security → Microphone). More engines (Mihu STT cloud, ElevenLabs, Whisper, Ollama): examples/.

Usage

from damga import InverseNormalizer, TextNormalizer, Normalizer

itn = InverseNormalizer()
itn.normalize("yüz elli lira")                    # '150 TL'
itn.normalize_batch(["on beş ekim", "yüzde on"])  # ['15 Ekim', '%10']

tn = TextNormalizer()
tn.normalize("Toplam 25.600 adet, %12,5 indirim.")
# 'Toplam yirmi beş bin altı yüz adet, yüzde on iki virgül beş indirim.'

Normalizer(mode="itn").normalize("yirmi beş bin")   # '25.000'

Options (all keyword arguments, all optional):

option meaning
categories=[...] enable a subset of cardinal ordinal decimal money percent measure time date telephone iban plate email address spelling lexicon_entry (needs pynini)
strict=True conservative ITN: bare numbers stay words, only keyword/structure-driven classes fire (needs pynini)
custom_vocab={"e te es tur": "ETS Tur"} your own spoken → written terms (take precedence)
cache_dir=... / use_cache=False where compiled grammars (FAR) are stored (default ~/.cache/damga, override with DAMGA_CACHE_DIR)
group_thousands=False write 25600 instead of 25.600
group_four_digits=False ITN: no thousands dot in four-digit numbers (2024 seçimleri, 1500 kişi); five digits and more keep it (needs pynini)
scale_words=True ITN: round millions and up keep their scale word (beş milyon → 5 milyon, elli altı milyar → 56 milyar) instead of 5.000.000 (needs pynini)
preserve_case=False lower-case everything instead of keeping the recognizer's casing on untouched words
diagnostics=True normalize_with_details() keeps the intermediate record
repair_spelling=True restore diacritic-less (yuz elli) and glued (onbeş) number words before the grammars run; False feeds the text as is
backend="auto" | "native" | "pynini" runtime selection (see below)
deterministic=False TN only: normalize_variants() also lists the other ways a form is read (see below)

Writing-style options for the other languages (off by default; plain post-processing, so they work without pynini):

language / mode option effect
en ITN unit_symbols=True units after a number as symbols: two hundred kilometers per hour → 200 km/h, twenty five square meters → 25 m², minus five degrees celsius → -5 °C
es TN formal_ordinals=True ordinals 11–100 as ordinal words instead of the cardinal: el 80.º aniversario → el octogésimo aniversario, la 11.ª edición → la undécima edición
ru ITN ordinal_digits=True ordinals 1–9 as digits with the short ending: восьмого → 8-го, на пятом этаже → на 5-м этаже (10 and up are digits already)
de ITN fraction_digits=True fractions with a slash: drei viertel → 3/4, zweieinhalb Stunden → 2 1/2 Stunden; die Hälfte, ein Viertel der Stadt stay words
from damga import InverseNormalizer
InverseNormalizer(lang="en", unit_symbols=True).normalize("two hundred kilometers per hour")   # "200 km/h"

Deterministic (default) and non-deterministic TN

By default Damga is deterministic: one written form, one spoken form, every time. That is what a voice agent needs, and normalize() always works this way: about 1 ms per sentence on one CPU core, the same reading in every call. Choosing a reading with a language model would add 0.3–2 s per sentence before the TTS starts, so for voice AI keep the deterministic default.

Some forms are read in more than one way by Turkish speakers (09:30 is dokuz otuz or dokuz buçuk). With deterministic=False, TN also lists those readings, default first. Use it to prepare TTS or ASR training text that matches what a speaker actually said:

tn = TextNormalizer(deterministic=False)
tn.normalize("Saat 09:30'da")             # 'Saat dokuz otuzda'  (unchanged)
tn.normalize_variants("Saat 09:30'da")    # ['Saat dokuz otuzda', 'Saat dokuz buçukta']
tn.normalize_variants("2,50 TL")          # ['iki lira elli kuruş', 'iki Türk lirası elli kuruş', 'iki buçuk lira']
tn.normalize_matching("Saat 09:30'da", heard="saat dokuz buçukta")   # 'Saat dokuz buçukta'

ITN stays deterministic: a phone number or an amount has one written form, and guessing between several is exactly what ITN must not do. Details: docs/deterministic.md.

Streaming ITN for live ASR

from damga.streaming import StreamingNormalizer

sn = StreamingNormalizer(mode="itn")
sn.update("yirmi beş", is_final=False).text              # '25'        (provisional)
sn.update("yirmi beş bin", is_final=False).text          # '25.000'    (still provisional — nothing committed)
sn.update("yirmi beş bin altı yüz", is_final=True).text  # '25.600'    (final, state reset)

update() always receives the latest full hypothesis of the current utterance. A prefix is committed only when it has been stable for stable_after updates and does not end inside a span a grammar could still extend, so a number is never frozen too early. The final result is always the batch normalization of the whole utterance. See docs/streaming.md.

How it works: a token-based, two-pass WFST pipeline

Damga is a token-based normalizer. Normalization is not one big spoken → written rewrite; it is two transducers with a structured, inspectable token string in between:

"toplam yirmi beş bin altı yüz lira kırk kuruş ödedim"
        │
        │  pass 1 — reader FST (union of all readers, weighted)
        ▼
word="toplam" money(integer="25600" fractional="40" currency="TL") word="ödedim"
        │
        │  pass 2 — writer FST (union of all writers)
        ▼
"toplam 25.600,40 TL ödedim"
  • Pass 1, reading. Every semantic class (cardinal, money, time, telephone, email, …) is a small grammar that maps a spoken span to a token class(field="value" …). Words no class claims fall through to word="…". The sentence reader is the weighted union of all class readers; the best analysis is the shortest path through the lattice. A semantic class costs about 1, the word fallback costs 100 per token, so any grammar that matches beats leaving the words alone, and among grammars the more specific one wins (iban < email < telephone < money < cardinal).
  • Pass 2, writing. Each class has a writer that renders its token: money puts the currency symbol after the amount, time zero-pads and re-attaches the case suffix (saat 09:30'da), telephone groups digits the Turkish way. Fields are emitted in a fixed order by the reader, so there is no Python re-ordering stage between the two passes: the whole pipeline is two compositions and two shortest-path searches.

Why token-based rather than a single "tokenless" transducer that rewrites text directly?

token-based (Damga) single-pass rewrite
adding a class one reader + one writer, independent of the others every new rule interacts with every existing rule in one grammar
precedence one weight per class, in one table encoded implicitly in rule order and context
debugging diagnostics=True shows the record, so you see what was recognised before how it was written only input and output
TN ↔ ITN the same token protocol in both directions; TN number writers are the inverse of the ITN cardinal grammar two unrelated grammars
formatting changes change a writer, readers untouched (100 $ vs $100, 25600 vs 25.600) touch the recognition rules
cost two compositions per utterance one

The second composition is cheap (the writer has a few hundred states), so the token layer costs well under a millisecond and buys composability, a readable intermediate form and golden tests at the tag level. The numbers grammar is the foundation: fixed-width, zero-padded sub-graphs (two digits, three digits, thousands, millions …) composed with a leading-zero stripper, reused by every class that contains a number. Ambiguity is resolved with path weights, not code: a non-standard bir yüz carries a penalty, a telephone group ending on a round word (otuz, iki yüz) is penalised so beş yüz otuz iki yüz yirmi üç is read 532 | 123. Details in docs/architecture.md.

Runtime

Grammars are written in Pynini and compiled once into two OpenFst files per language and direction (damga/<lang>/<mode>/compiled/). At run time the native extension damga._fstrt (OpenFst statically linked, ~2 MB) loads them and runs input chain ∘ FST → shortest path in C++; the GIL is released during the search. With pynini installed you can also run the grammars live (backend="pynini"), which is what grammar authors and custom category selections use. Both backends execute the same transducers and are tested to give identical output.

Using Damga with speech recognizers and language models

Damga sits between the recognizer and whatever consumes the text, and between the text generator and the TTS voice:

microphone → ASR (Mihu STT, Whisper, …) → Damga ITN → written text → LLM / CRM / display
LLM (Ollama, …) / database → written text → Damga TN → spoken text → TTS

Mihu Turkish STT

turkish-stt is a real-time, CPU-only Turkish recognizer with turn-end detection. It writes numbers as words; Damga turns them into their written form. Damga does not depend on it:

import mihu_stt                                # pip install turkish-stt (on-prem, CPU)
from damga import InverseNormalizer
from damga.streaming import StreamingNormalizer

itn = InverseNormalizer()
print(itn.normalize(mihu_stt.transcribe("audio.wav")))   # "… sıfır beş otuz iki …" → "… 0532 …"

stt, sn = mihu_stt.StreamingSTT(), StreamingNormalizer(mode="itn")
for pcm16_chunk in audio_frames():             # 16 kHz int16 bytes, as they arrive
    text, is_final = stt.accept_pcm16(pcm16_chunk, 16000)
    if text.strip():
        res = sn.update(text, is_final=is_final)
        show(res.text)                         # best current rendering, tail may still change
        if is_final:                           # recognizer detected end of turn
            handle(res.text)                   # == itn.normalize(text)

The same recognizer is available as a cloud API; its transcripts go through itn.normalize the same way. examples/mihu_stt_onprem.py, examples/mihu_stt_cloud.py and examples/elevenlabs_stt_tts.py (ElevenLabs STT + TTS) are complete scripts; docs/voice-pipeline.md walks through a live call and a batch transcription step by step.

Whisper, Ollama and other pipelines

docs/integrations.md and the examples/ folder show how to put Damga behind Whisper / faster-whisper (batch and segment-wise ITN, and why Whisper's mixed 40 bir output needs it), in front of a TTS voice fed by Ollama or any other LLM (sentence-wise TN on the streamed reply), and inside a generic streaming recognizer loop (Vosk, sherpa-onnx, cloud ASR partials). The core rule for any streaming source: send Damga the recognizer's latest full hypothesis, never a delta.

Using Damga for NLP and data work

Damga is not only for voice products. Anything that reads spoken or transcribed Turkish (or English, German, …) gets numbers, dates, amounts and identifiers in one written form, the form NER models, regular expressions, databases and language models handle best:

from damga import InverseNormalizer, TextNormalizer
itn = InverseNormalizer()

itn.normalize("müşteri yirmi beş bin lira iade istiyor")
# müşteri 25.000 TL iade istiyor
itn.normalize("on dört haziranda saat dokuz buçukta arayın, numaram sıfır beş otuz iki yüz yirmi üç kırk beş altmış yedi")
# 14 Haziran'da saat 09:30'ta arayın, numaram 0532 123 45 67
itn.normalize("plakam otuz dört a b c yüz yirmi üç, e posta adresim ali nokta yılmaz et gmail nokta com")
# plakam 34 ABC 123, e posta adresim ali.yilmaz@gmail.com
  • Call-centre and meeting analytics: amounts become numbers you can sum and filter (complaints above 5.000 TL), dates and times become comparable.
  • Information extraction: phone numbers, IBANs, plates, e-mail addresses, dates and amounts come out in the shape your NER model or regex expects.
  • Search: a call in which on dört haziran was said is found by 14 Haziran.
  • Language model input: consistent written numbers, fewer tokens, better arithmetic.
  • Fair ASR evaluation: normalize both the reference and the hypothesis, so yirmi beş kişi against 25 kişi is not counted as two errors.
  • TTS and ASR training data: normalize_matching writes each sentence the way it was actually said in its recording:
tn = TextNormalizer(deterministic=False)
tn.normalize_matching("Saat 09:30'da 250 TL ödendi.", "saat dokuz buçukta iki yüz elli lira ödendi")
# Saat dokuz buçukta iki yüz elli lira ödendi.

Damga normalizes forms that are written differently from how they are said (numbers, dates, times, money, measures, phone numbers, IBANs, plates, e-mail and web addresses). It is not a general text cleaner: slang, spelling errors and stemming are left to tools such as Zemberek, which work well next to it.

What is covered

ITN: cardinals (with a glued case suffix: yirmi altıda → 26'da), ordinals, negatives, decimals, money (TL/$/€/£ + kuruş/sent), percent/permille, measurements (km, kg, lt, m², °, MB …), clock times (saat dokuz otuz, dokuzu çeyrek geçe, dokuza on kala, case suffixes), dates (on beş ekim iki bin yirmi altı, ekimde, yılında, iki bin yirmi altıda → 2026'da), Turkish phone numbers (any grouping, +90), IBAN, vehicle plates (letters, letter names or the phonetic alphabet), e-mail and web addresses, street addresses (numara on iki daire yedi → No: 12 Daire: 7), the Turkish letter-coding habit (Diyarbakır'ın D'si Edirne'nin E'si … → De…), abbreviations and brands, custom vocabulary. TN covers the same classes in the written → spoken direction, including apostrophe suffixes (2026'da, 25'te, 3'üncüsü).

Known limitations are listed in docs/grammars.md (for example: a lone bir is treated as the article, bare four-digit numbers are not read as years, inflected ordinals such as üçüncüsü are not converted by ITN).

Brands, domains and custom terms

Three data layers, all plain TSV under damga/tr/itn/data/ (see its README for sources and licences):

  • brands.tsv — hand-written brand/product names with official casing and Turkish mis-hearings (vatsap → WhatsApp, peypal → PayPal, a ve es → AWS);
  • brands_extra.tsv — ~700 well-known businesses, brands and Turkish institutions, common Turkish words filtered out;
  • domains.tsv + email_providers.tsv — mis-heard mail domains (cimil → gmail, yahu → yahoo) and ~7 800 free-mail provider labels from free-email-domains (MIT), used to recover a dropped "et" before a known provider. Spellings outside the table (giymiel for gmail) are left as heard: that is a recognizer error, and the fix is contextual biasing (hotwords) in the recognizer with these same lists, not guessing in the normalizer.

Your own terms go in custom_vocab={...} (they win over every table). None of this requires retraining the recognizer; for recognizer-level coverage use contextual biasing (hotwords) with the same lists.

Real recognizer output

Recognizers do not emit clean spoken forms. Mihu STT, for example, produces Sabit hattımız sıfır 5, 3-74, bir dokuz, sekiz yedi bir sekiz or Burak Nokta Koçet örnek banka nokta kom nokta Tier. The ITN grammars therefore accept written digits inside spoken sequences, punctuation inside numbers, glued separators (koçet, noktaçelik, etörnek), mis-heard TLDs (kom, tier, ay) and a table of mis-heard domains (damga/tr/itn/data/domains.tsv).

Measured on 575 real Mihu-STT transcripts of synthetic phone/e-mail prompts (tests/golden/itn_asr.tsv holds 84 of them): telephone numbers 256/256 exact, e-mail addresses 274/319 exact (the rest are recognizer errors such as a dropped "et" or an unrecognisable domain — Damga leaves those as words rather than guessing). On the held-out KPI set (300 phone + 300 e-mail clips, 8 unseen voices, Mihu STT v1.2 with hotwords) exact-match is 84% for phone numbers and 97% for e-mail addresses; the misses are digits dropped by the recognizer, not normalization errors.

End-to-end (TTS → Mihu STT v1.2 → Damga) on 1 200 synthetic sentences spoken by 8 unseen voices: money 100%, percent 100%, dates 100%, times 100%, brands 97%, e-mail 92%, phone numbers 83%, addresses 63%, letter-by-letter spelling 52% — overall 79.0% exact (the previous regex normalizer: 52%, with 0% on money, addresses and spelling). Vehicle plates on a separate 100-clip set: 74%. Of the misses, 86% are recognizer errors (dropped digits, mis-heard letter names); the rest are normalization gaps tracked in tests/golden/itn_asr.tsv.

Safety on ordinary speech is tested the other way round: plain Turkish sentences pass through with no change other than number, ordinal, date, money and unit conversions — the phone, e-mail, plate and spelling grammars never fire on plain text, untouched words keep their casing, and normalize(normalize(x)) == normalize(x). The recognizer frequently emits written numbers ("99 lira", "saat 13.30", "40 bir" = 41); the context grammars accept those mixed forms, bare numbers are left untouched so identifiers are never regrouped.

Tests and benchmarks

pytest                          # unit + golden (TSV) + property + integration tests
python benchmarks/latency.py    # quick per-sentence latency on the shipped runtime (no pynini)
python benchmarks/bench.py --out benchmarks/results/my-machine.md   # full report, needs pynini

Golden sets live in tests/golden/*.tsv (input<TAB>expected); adding a case is a one-line change. Measured numbers are in benchmarks/results/; on a 2026 MacBook running Python under Rosetta (x86_64 conda build, single thread): ITN compile 6.4 s once / cached load 26 ms (5.3 MB FAR), p50 latency 1.1 ms (short utterance), 4.9 ms (two sentences with phone + e-mail), 86 ms (200 words); TN p50 2.2 ms; streaming update p50 1.2 ms; ≈490 MB RSS after a cold compile (less when loaded from the cache). Native arm64 or Linux builds are faster.

Languages

Turkish (tr) is the default language. Grammars live under damga/<lang>/{itn,tn}/; the engine, cache, streaming wrapper and API are language-independent. A new language is a new folder plus one registry line (damga/api.py), after which Normalizer(mode="itn", lang="en"), InverseNormalizer(lang="en") and available_languages() work — see docs/adding-a-language.md.

This release includes Turkish (tr), English (en), German (de), French (fr), Spanish (es), Italian (it) and Russian (ru), TN and ITN for each:

from damga import TextNormalizer, InverseNormalizer
TextNormalizer(lang="en").normalize("EUR 10 million on 6 December 2012")
# ten million euros on the sixth of December two thousand twelve
InverseNormalizer(lang="de").normalize("fünfundzwanzig Prozent")   # 25 Prozent

Readings follow what speakers actually say. The test lines of the languages other than Turkish still need review by native speakers.

Contributing

Grammars are plain Python files under damga/tr/itn/readers, damga/tr/itn/writers, damga/tr/tn/...; data tables are TSV files under .../data/. Failing golden lines are the best bug reports. See CONTRIBUTING.md and docs/architecture.md.

License

Apache License 2.0 — see LICENSE. Pynini and OpenFst are Apache 2.0 as well.

Metadata

Release files for damga 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for damga 1.0.1
File Size Uploaded Provenance
damga-1.0.1.tar.gz 18.3 MB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for damga 1.0.1
File
damga-1.0.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
damga-1.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
damga-1.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
damga-1.0.1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
damga-1.0.1-cp313-cp313-macosx_10_15_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.15+ x86-64 Details
damga-1.0.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
damga-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
damga-1.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
damga-1.0.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
damga-1.0.1-cp312-cp312-macosx_10_15_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.15+ x86-64 Details
damga-1.0.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
damga-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
damga-1.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
damga-1.0.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
damga-1.0.1-cp311-cp311-macosx_10_15_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.15+ x86-64 Details
damga-1.0.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
damga-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
damga-1.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
damga-1.0.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
damga-1.0.1-cp310-cp310-macosx_10_15_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.15+ x86-64 Details
damga-1.0.1-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
damga-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
damga-1.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARM64 Details
damga-1.0.1-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
damga-1.0.1-cp39-cp39-macosx_10_15_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.15+ x86-64 Details

Total release size: 486.8 MB

Release files / damga-1.0.1.tar.gz

Download URL damga-1.0.1.tar.gz
Size 18.3 MB
Tags Source
SHA-256 checksum
How to use checksums
e598d4c057d087fbcc621ded6325c258a95e3a78895c61f857b5af65373a4b0d
BLAKE2b-256 checksum
How to use checksums
85ee301cd85328151549d9e0e644a91b530ce87d9ebcc9d70bf9019fd9a1c848
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp313-cp313-win_amd64.whl

Download URL damga-1.0.1-cp313-cp313-win_amd64.whl
Size 18.6 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
2a031fd0902da6eeed9fb231de4629385883d8e19c6296e58fa7530c5854713a
BLAKE2b-256 checksum
How to use checksums
0c4fe4fa01ea07261b13ce9f82b4126cfc15b6a8d9eb1474bbfdaf1fa1855e56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.9 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ed1e9bca4f56f0c8a39552ee7164f51e63525d2fb91e7acd9d40a6e93f221865
BLAKE2b-256 checksum
How to use checksums
6c1fbefcb3754627186acdac44b1f6d7ed0c60c7daee982f0a4f0ffdda2c88aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.9 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
c7dee63d49aa998553d4a3992926c57c6ef80e093320bcaeca908b68c1cf53cd
BLAKE2b-256 checksum
How to use checksums
5bf374b6d3d3da551c4d45c805901c89d9ea06b572491e2a62ca36b972967626
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp313-cp313-macosx_11_0_arm64.whl

Download URL damga-1.0.1-cp313-cp313-macosx_11_0_arm64.whl
Size 18.7 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
243befc606864b8a3dedf008d9f022a2469b113d97a3fd15b121093a4929a532
BLAKE2b-256 checksum
How to use checksums
60e5ff5906467bce53bad4bc6fd4416660ade9056b5da622244d14b169f1cfca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp313-cp313-macosx_10_15_x86_64.whl

Download URL damga-1.0.1-cp313-cp313-macosx_10_15_x86_64.whl
Size 18.7 MB
Tags CPython 3.13 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
ed9830861ceecb371f53ca7b1825e864f1b24752d06d6b1ab973259211e00841
BLAKE2b-256 checksum
How to use checksums
0b4f914a119d8dd1a9e5a0ccdafaa24a2e0e19f9aca863b96f083b0fa3aaf22b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp312-cp312-win_amd64.whl

Download URL damga-1.0.1-cp312-cp312-win_amd64.whl
Size 18.6 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
e9da6b4abdf9b2ef103f70f15f8f047cb92348def948b68e63c284280ba78d00
BLAKE2b-256 checksum
How to use checksums
e48b228394150156fa8b3643ba8b5aaaa9bd89e571c6f3ac0f041d66221997b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.9 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3394fe495ba95f2b0d4268e84b2732ef98b9d7a664323257571da67fdb484c4f
BLAKE2b-256 checksum
How to use checksums
ff0f5271b85d631d78e0602fd0499202556666efdc31ca576c8eb414c0ad4db8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.9 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
085859428bed0290924f07af7b42ac9c933ced6e3befb7df5de14c08f31200de
BLAKE2b-256 checksum
How to use checksums
59662b4e95c21815100a4328d2696efb49667633ea7ffd24a1629ced79f67fff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL damga-1.0.1-cp312-cp312-macosx_11_0_arm64.whl
Size 18.7 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2e75d69e06b06cb225cbd42477e80c5a4503df132c30e37fa746fec7c50268f8
BLAKE2b-256 checksum
How to use checksums
0fb99117d5680aecb8fbb9799e0712cc771ee8a96969711c2be21388ef2fccad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp312-cp312-macosx_10_15_x86_64.whl

Download URL damga-1.0.1-cp312-cp312-macosx_10_15_x86_64.whl
Size 18.7 MB
Tags CPython 3.12 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
5f8e01fa1110867d183ff29abef36332809d4ce5fdf39b09ae89fbb70dc1ee6a
BLAKE2b-256 checksum
How to use checksums
b618744228c413510cda6da336057a1d8476e45a4477fa6e466b23729a576e7a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp311-cp311-win_amd64.whl

Download URL damga-1.0.1-cp311-cp311-win_amd64.whl
Size 18.6 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
48709b25e24b52dc8cfd52efba21a817d321771301f7f286d0041f0e0ef8ee8a
BLAKE2b-256 checksum
How to use checksums
e63bfec5a143b9a3f174bc7f40947d434f13b1db43943cc21f62d636971aa1f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.9 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
06dac9339c0afefeb31b2a4a243b30e094650a0683f3aa5d3214bc6ea4e68f0c
BLAKE2b-256 checksum
How to use checksums
6c6734f168c674cd0171675477d34b02cc0c7dcc71e78c19c78d9d619934bb36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.9 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
566bad50b14bb834bf5a7d0ab7f5c195f5f797dda30918b412e9a7cb86ec313e
BLAKE2b-256 checksum
How to use checksums
d191cf9a16d52c372c275a26769b84503b3f7c22ece3ccb30e815e2e93294ae5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL damga-1.0.1-cp311-cp311-macosx_11_0_arm64.whl
Size 18.7 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
41fe9b3afa3d9a270d211109c57756a6b951b28db2af1eb4c9157743ebe7438b
BLAKE2b-256 checksum
How to use checksums
c1e381a5f6599a2353a3cbd42d74113793400b245b2bca3c31a0a9387dae5ee4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp311-cp311-macosx_10_15_x86_64.whl

Download URL damga-1.0.1-cp311-cp311-macosx_10_15_x86_64.whl
Size 18.7 MB
Tags CPython 3.11 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
106ea56e14afc4320124d6c7c676a19d1590ce8dd1f0632e363ce9ac162ce791
BLAKE2b-256 checksum
How to use checksums
34574b3f8fd1464b42170711cfc3f50e8da05abb5d7136989812155be670e5e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp310-cp310-win_amd64.whl

Download URL damga-1.0.1-cp310-cp310-win_amd64.whl
Size 18.6 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
4a5282edd6377476d4ebc58ff81cd7006c92b1ebda2516988f23ea77a17c1a71
BLAKE2b-256 checksum
How to use checksums
a3607b1860f65ba438058d31204752ddc959fd6b36c9d9393e175868f5a1a7eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.9 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
0f56f926ebe345cec8379989024f3c8ebda31cf3c372edb7bd881669161c3883
BLAKE2b-256 checksum
How to use checksums
aca03820498770cfa82b07f64f4387c4b3cacbf7650c3e2ee4c5de09b1abf950
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.9 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
6475d8fb50706c415deafdfb4ce41350e395aec21f2198fae264354a53d8979c
BLAKE2b-256 checksum
How to use checksums
410a0348758f93e2343fb20fbc6f5b8e3059df8c742fb4a4274867fb1f173684
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL damga-1.0.1-cp310-cp310-macosx_11_0_arm64.whl
Size 18.7 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c24c702932714f441b6b502b943852d0e6dcb84c44174ee997038f0b958a2feb
BLAKE2b-256 checksum
How to use checksums
4247a02ee39733413d0de9add92563d93977cd357d1e14b205a1334a5d1b072c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp310-cp310-macosx_10_15_x86_64.whl

Download URL damga-1.0.1-cp310-cp310-macosx_10_15_x86_64.whl
Size 18.7 MB
Tags CPython 3.10 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
62475163946946a2f1cfb706ce9517453b4507822fdda01addfe0c61b82dfdef
BLAKE2b-256 checksum
How to use checksums
aa2501e5fca408988848e3469c4d831dfd77d78c7797e74b350a79184a8403df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp39-cp39-win_amd64.whl

Download URL damga-1.0.1-cp39-cp39-win_amd64.whl
Size 18.6 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
49509ad3f44b8e1819830c92c946f4edfa6b66b5c3009cac5aafb72b2196c96c
BLAKE2b-256 checksum
How to use checksums
ff926a1d79af078d6b9bac39c9a007cdb09dae53501fc2236cda6b5c997d7834
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL damga-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.9 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ab91c546608a7a0966deaabc6098cdbac39b3ccf50dd6acd351cfbb0d7b191f1
BLAKE2b-256 checksum
How to use checksums
947113a7c5023cd957b651c9c2baa376e810b44c1f5f16ff1bf80ca418b2e426
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL damga-1.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.9 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
049393eb61a7764cfbd217e2740cb1586b02ead66d03da5e93d76383edb30f0f
BLAKE2b-256 checksum
How to use checksums
3911c0f5fe3d5271722420c62c3a85c5d48922d8ee52a5719b615325840820b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp39-cp39-macosx_11_0_arm64.whl

Download URL damga-1.0.1-cp39-cp39-macosx_11_0_arm64.whl
Size 18.7 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
dbb7144000aa82ec9f5e8f4d85773067b7e358b61deb85f0a42a4ad0f6365449
BLAKE2b-256 checksum
How to use checksums
e7b7bd30b551b77cf78725aa1ea9585237cd507c1d453481683c2dc4bb11ed47
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / damga-1.0.1-cp39-cp39-macosx_10_15_x86_64.whl

Download URL damga-1.0.1-cp39-cp39-macosx_10_15_x86_64.whl
Size 18.7 MB
Tags CPython 3.9 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
4c3eed76e2460cca74ec91adc97237dd64b0c1ac45395e26f4ded2b0b0d29496
BLAKE2b-256 checksum
How to use checksums
69a7bf40963359d67e5a5bf5c49cd0d724ae9e7b2398767ea0a93b9916011575
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Security for damga 1.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 26 files in this release have been uploaded with provenance metadata.

Select from 26 files

Attestation for damga-1.0.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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