docs-anonymizer 0.2.0__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/CHANGELOG.md +40 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/PKG-INFO +2 -2
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/installer/install.ps1 +6 -1
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/installer/install.sh +6 -1
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/pyproject.toml +9 -2
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/__main__.py +7 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_installer_scripts.py +6 -2
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/.gitignore +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/LICENSE +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/README.md +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/_review_md.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/annotate_cmd.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/testkit_cmd.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/audit/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/audit/crash_log.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/audit/feedback_log.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/coverage/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/coverage/format_warnings.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/conflict_resolution.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/email_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/_base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/address.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/company_en.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/company_ru.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/person_en.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/person_ru.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/phone_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/bic_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/bic_ru_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/card_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/contract_number_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/date_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/ein_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/iban_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/inn_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/kpp_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/ogrn_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/passport_ru_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/snils_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/errors.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/detection.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/name_parsers/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/name_parsers/english.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/name_parsers/russian.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/cities.json +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/legal_forms.json +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/pack.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/regions.json +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/registry.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/cities.json +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/legal_forms.json +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/pack.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/regions.json +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/transliteration/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/transliteration/base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/transliteration/ru_en.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/manual_mask/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/manual_mask/apply.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/manual_mask/overrides.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/_ooxml.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/docx_cleaner.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/pdf_cleaner.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/xlsx_cleaner.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/models.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/_docx_xml.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/docx_parser.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/format_detection.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/pdf_parser.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/xlsx_parser.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/pipeline.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/tokens/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/tokens/canonical.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/tokens/manager.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/_facade.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/docx_writer.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/pdf_writer.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/xlsx_writer.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/diagnostics.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/feedback_loop/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/feedback_loop/feedback_schema.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/docx_gen.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/pdf_gen.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/xlsx_gen.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/log_analyzer.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/log_analyzer_report.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/manifest_v2.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/manifest_validator.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/metrics.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/alice_morris.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/benjamin_clark.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/charlotte_evans.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/daniel_foster.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/emily_griffiths.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/frank_harris.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/grace_irving.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/henry_johnson.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/isabella_king.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/jane_doe.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/fedorova_aa.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/ivanov_ii.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/kovaleva_lm.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/kuznetsov_ev.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/morozov_dn.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/petrov_pp.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/sidorova_es.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/smirnov_aa.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/sokolova_ts.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/volkov_mo.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/report.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/runner.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/tier_defaults.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/updater.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/app.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/context.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/i18n/en.po +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/i18n/ru.po +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/i18n.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/cors.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/csrf.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/session_token.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/network_status.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/download.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/feedback.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/language.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/manual_overrides.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/preview.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/process.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/processing_helpers.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/session.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/update.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/upload.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/session_manager.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/stages.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/app.css +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/components.css +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/highlight-pair.js +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/htmx-sse.js +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/htmx.min.js +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/i18n-switch.js +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/layout.css +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/manual-mask.js +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/preview-busy.js +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/sync-scroll.js +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/tokens.css +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/tooltip.js +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_drop_zone.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_empty.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_error_block.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_modal_feedback.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_modal_settings.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_network_status.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_preview_content.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_preview_pane_anon.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_preview_pane_source.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_processing.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_sel_popup.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_stages.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_status_row.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_tooltip_sources.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_topbar.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_update_banner.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_warning_banner.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/base.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/preview.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/processing.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/upload.html +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/version.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/conftest.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/fuzz/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/fuzz/test_random_corpus.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/fixtures/golden_partial/es/01_contrato_es.docx +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/fixtures/golden_partial/it/01_contratto_it.docx +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/fixtures/golden_partial/manifests/01_contrato_es.yml +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/fixtures/golden_partial/manifests/01_contratto_it.yml +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/README.md +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/_template/input.docx +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/_template/manifest.yml +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/kf-0001-passport-ru-with-no-sign/input.docx +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/kf-0001-passport-ru-with-no-sign/manifest.yml +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/kf-0002-address-uk-format-not-recognized/input.docx +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/kf-0002-address-uk-format-not-recognized/manifest.yml +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_annotate_roundtrip.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_audit_no_pii.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_corpus_manifests_v2.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_docx_digital_marketing_regression.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_docx_end_to_end.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_docx_with_full_pipeline.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_feedback_cycle.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_format_edge_cases.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_golden_generated.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_golden_partial.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_known_failures.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_no_network.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_pdf_end_to_end.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_pdf_service_agreement_regression.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_schema_in_sync.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_webapp_e2e.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_xlsx_end_to_end.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/__init__.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_audit_crash.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_audit_feedback.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_bic_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_bic_ru_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_canonical_key.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_canonical_key_extended.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_card_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli_annotate_compile.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli_annotate_prepare.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli_annotate_render.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli_no_update_check.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_conflict_resolution.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_contract_number_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_coverage_warnings_docx.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_coverage_warnings_pdf.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_coverage_warnings_xlsx.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_date_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_detection_base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_diagnostics.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_docx_generator.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_docx_parser.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_docx_writer.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_docx_xml_helpers.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ein_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_email_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_english_pack.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_errors.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_feedback_schema.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_feedback_schema_contract.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_format_detection.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_generator_base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_iban_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_inn_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_kpp_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_language_base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_language_detection.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_language_registry.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_license.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_log_analyzer.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_log_analyzer_report.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manifest_v2_migrate.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manifest_v2_model.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manifest_validator.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manual_apply.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manual_override.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metadata_base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metadata_docx.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metadata_pdf.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metadata_xlsx.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metrics.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metrics_corpus.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_models.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_name_parser_english.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_name_parser_russian.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_address.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_base.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_company_en.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_company_ru.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_language_guard.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_person_en.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_person_ru.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_network_status.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ogrn_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_package_imports.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_passport_ru_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_pdf_generator.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_pdf_parser.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_pdf_writer.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_personas.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_phone_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_pipeline.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_project_metadata.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_report.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_review_md.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_runner.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_runner_acceptance.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_runner_overlap_matching.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_russian_pack.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_snils_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_testkit_cli.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_testkit_diff.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_token_manager.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_transliteration.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_update_route.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_updater_subprocess.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_app_factory.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_cors.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_csrf.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_detector.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_download.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_empty_state.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_feedback.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_feedback_modal.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_i18n.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_language_route.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_manual_mask_guess.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_manual_overrides.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_preview.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_preview_render.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_process_sse.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_session.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_session_manager.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_session_token.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_settings.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_stages.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_static_assets.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_templates.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_token_sources.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_topbar.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_unmask.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_upload.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_xlsx_generator.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_xlsx_parser.py +0 -0
- {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_xlsx_writer.py +0 -0
|
@@ -11,6 +11,46 @@ static release metadata, and posts the release notification.
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [0.2.2] - 2026-05-19
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- ``anonymize --version`` (and ``anonymize -V``) flag that prints
|
|
19
|
+
``anonymize <version>`` and exits. Previously the installer scripts'
|
|
20
|
+
post-install ``anonymize --version`` smoke check failed because the
|
|
21
|
+
flag did not exist.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Installer scripts (``installer/install.sh``, ``installer/install.ps1``,
|
|
26
|
+
and the same pair hosted on ``anonymizer.site``) now pin the tool
|
|
27
|
+
environment to Python 3.12 via ``uv tool install --python 3.12``.
|
|
28
|
+
Without the pin uv used the user's default interpreter, which on a
|
|
29
|
+
fresh macOS / Linux box with uv 0.9.x is 3.14 — the upper bound
|
|
30
|
+
``requires-python = ">=3.11,<3.13"`` added in 0.2.1 was not enough
|
|
31
|
+
because ``uv tool install`` selects the interpreter before resolving
|
|
32
|
+
the package and only validates the bound at resolve time, which is
|
|
33
|
+
too late: a tool environment built on 3.14 still attempts to compile
|
|
34
|
+
``blis 0.7.11`` from sdist (no cp313/cp314 wheels) and fails on the
|
|
35
|
+
removed CPython internals.
|
|
36
|
+
- ``docs/installation.md`` recovery command updated to include the
|
|
37
|
+
``--python 3.12`` pin and the ``--with`` model URL.
|
|
38
|
+
|
|
39
|
+
## [0.2.1] - 2026-05-19
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- ``requires-python`` constrained to ``>=3.11,<3.13``. ``blis 0.7.11``
|
|
44
|
+
(transitive via ``spacy 3.7`` → ``thinc 8.2``) only publishes wheels
|
|
45
|
+
for cp310..cp312; on Python 3.13 / 3.14 ``uv tool install
|
|
46
|
+
docs-anonymizer`` previously fell back to building ``blis`` from
|
|
47
|
+
sdist and crashed against the CPython 3.14 C API (deleted
|
|
48
|
+
``_PyDict_SetItem_KnownHash``, new ``_PyLong_AsByteArray`` signature,
|
|
49
|
+
etc.). Reported during pilot install on a machine where uv picked
|
|
50
|
+
up its uv-managed Python 3.14. Lifting the upper bound requires a
|
|
51
|
+
coordinated bump to ``spacy >= 3.8`` and a refreshed
|
|
52
|
+
``en_core_web_lg`` model wheel.
|
|
53
|
+
|
|
14
54
|
## [0.2.0] - 2026-05-19
|
|
15
55
|
|
|
16
56
|
First public release on PyPI under the neutral distribution name
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docs-anonymizer
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Offline document anonymizer for legal teams
|
|
5
5
|
Project-URL: Homepage, https://anonymizer.site
|
|
6
6
|
License-Expression: AGPL-3.0
|
|
@@ -13,7 +13,7 @@ Classifier: Operating System :: Microsoft :: Windows
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Classifier: Topic :: Office/Business
|
|
16
|
-
Requires-Python:
|
|
16
|
+
Requires-Python: <3.13,>=3.11
|
|
17
17
|
Requires-Dist: babel>=2.14
|
|
18
18
|
Requires-Dist: dateparser>=1.2
|
|
19
19
|
Requires-Dist: en-core-web-lg
|
|
@@ -15,5 +15,10 @@ if (-not (Get-Command uv -ErrorAction SilentlyContinue)) {
|
|
|
15
15
|
# of direct references (which public PyPI rejects).
|
|
16
16
|
$EnCoreWebLgUrl = "https://github.com/explosion/spacy-models/releases/download/en_core_web_lg-3.7.1/en_core_web_lg-3.7.1-py3-none-any.whl"
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
# Pin the tool-environment Python to 3.12. ``blis 0.7.11`` (transitive
|
|
19
|
+
# via ``spacy 3.7`` -> ``thinc 8.2``) only ships pre-built wheels for
|
|
20
|
+
# cp310..cp312; on later interpreters uv falls back to building blis
|
|
21
|
+
# from sdist and the build fails against the CPython 3.13/3.14 C ABI.
|
|
22
|
+
# uv downloads a managed Python 3.12 if one is not already available.
|
|
23
|
+
uv tool install --python 3.12 docs-anonymizer --with "en-core-web-lg @ $EnCoreWebLgUrl"
|
|
19
24
|
anonymize --version
|
|
@@ -18,5 +18,10 @@ fi
|
|
|
18
18
|
# of direct references (which public PyPI rejects).
|
|
19
19
|
EN_CORE_WEB_LG_URL="https://github.com/explosion/spacy-models/releases/download/en_core_web_lg-3.7.1/en_core_web_lg-3.7.1-py3-none-any.whl"
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
# Pin the tool-environment Python to 3.12. ``blis 0.7.11`` (transitive
|
|
22
|
+
# via ``spacy 3.7`` → ``thinc 8.2``) only ships pre-built wheels for
|
|
23
|
+
# cp310..cp312; on later interpreters uv falls back to building blis
|
|
24
|
+
# from sdist and the build fails against the CPython 3.13/3.14 C ABI.
|
|
25
|
+
# uv downloads a managed Python 3.12 if one is not already available.
|
|
26
|
+
uv tool install --python 3.12 docs-anonymizer --with "en-core-web-lg @ ${EN_CORE_WEB_LG_URL}"
|
|
22
27
|
anonymize --version
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "docs-anonymizer"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.2"
|
|
4
4
|
description = "Offline document anonymizer for legal teams"
|
|
5
5
|
readme = "README.md"
|
|
6
|
-
|
|
6
|
+
# Upper bound: ``blis 0.7.11`` (pulled in transitively via ``spacy 3.7`` →
|
|
7
|
+
# ``thinc 8.2`` → ``blis``) only publishes pre-built wheels for cp310..cp312.
|
|
8
|
+
# On Python 3.13 / 3.14 uv falls back to compiling from sdist and the build
|
|
9
|
+
# fails against the CPython 3.14 C API (deleted ``_PyDict_SetItem_KnownHash``,
|
|
10
|
+
# new signature for ``_PyLong_AsByteArray``, etc.). Lifting the bound requires
|
|
11
|
+
# updating to ``spacy >= 3.8`` which in turn invalidates the locked
|
|
12
|
+
# ``en_core_web_lg-3.7.1`` model URL we ship via the installer ``--with``.
|
|
13
|
+
requires-python = ">=3.11,<3.13"
|
|
7
14
|
license = "AGPL-3.0"
|
|
8
15
|
license-files = ["LICENSE"]
|
|
9
16
|
keywords = ["anonymization", "pii", "redaction", "legal"]
|
|
@@ -15,6 +15,7 @@ import webbrowser
|
|
|
15
15
|
from pathlib import Path
|
|
16
16
|
from typing import Any
|
|
17
17
|
|
|
18
|
+
import anonymizer
|
|
18
19
|
from anonymizer.core.errors import AnonymizerError
|
|
19
20
|
from anonymizer.core.models import AnonymizerConfig, Session
|
|
20
21
|
from anonymizer.core.pipeline import process_document
|
|
@@ -27,6 +28,12 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
27
28
|
prog="anonymize",
|
|
28
29
|
description="Offline document anonymizer.",
|
|
29
30
|
)
|
|
31
|
+
parser.add_argument(
|
|
32
|
+
"-V",
|
|
33
|
+
"--version",
|
|
34
|
+
action="version",
|
|
35
|
+
version=f"%(prog)s {anonymizer.__version__}",
|
|
36
|
+
)
|
|
30
37
|
parser.add_argument(
|
|
31
38
|
"--strict",
|
|
32
39
|
action="store_true",
|
|
@@ -9,7 +9,10 @@ def test_posix_installer_uses_uv_tool_install() -> None:
|
|
|
9
9
|
text = Path("installer/install.sh").read_text(encoding="utf-8")
|
|
10
10
|
|
|
11
11
|
assert "curl -LsSf https://astral.sh/uv/install.sh | sh" in text
|
|
12
|
-
|
|
12
|
+
# ``--python 3.12`` pin avoids blis sdist build on 3.13/3.14 (kf #0.2.2).
|
|
13
|
+
assert "uv tool install --python 3.12 docs-anonymizer" in text
|
|
14
|
+
# spaCy model wheel injected at install time, not in PyPI metadata.
|
|
15
|
+
assert "en-core-web-lg @" in text
|
|
13
16
|
assert "anonymize --version" in text
|
|
14
17
|
assert "MVP-0 is not yet released" not in text
|
|
15
18
|
|
|
@@ -18,6 +21,7 @@ def test_windows_installer_uses_uv_tool_install() -> None:
|
|
|
18
21
|
text = Path("installer/install.ps1").read_text(encoding="utf-8")
|
|
19
22
|
|
|
20
23
|
assert "irm https://astral.sh/uv/install.ps1 | iex" in text
|
|
21
|
-
assert "uv tool install docs-anonymizer" in text
|
|
24
|
+
assert "uv tool install --python 3.12 docs-anonymizer" in text
|
|
25
|
+
assert "en-core-web-lg @" in text
|
|
22
26
|
assert "anonymize --version" in text
|
|
23
27
|
assert "MVP-0 is not yet released" not in text
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/coverage/format_warnings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/conflict_resolution.py
RENAMED
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/email_detector.py
RENAMED
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/phone_detector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/name_parsers/english.py
RENAMED
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/name_parsers/russian.py
RENAMED
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/pack.py
RENAMED
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/pack.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/transliteration/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/manual_mask/overrides.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/docx_cleaner.py
RENAMED
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/xlsx_cleaner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/format_detection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/feedback_loop/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/docx_gen.py
RENAMED
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/pdf_gen.py
RENAMED
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/xlsx_gen.py
RENAMED
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/log_analyzer_report.py
RENAMED
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/manifest_validator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/jane_doe.py
RENAMED
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/ivanov_ii.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/petrov_pp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/volkov_mo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/session_token.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/manual_overrides.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/processing_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/highlight-pair.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/preview-busy.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_drop_zone.html
RENAMED
|
File without changes
|
|
File without changes
|