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.
Files changed (343) hide show
  1. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/CHANGELOG.md +40 -0
  2. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/PKG-INFO +2 -2
  3. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/installer/install.ps1 +6 -1
  4. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/installer/install.sh +6 -1
  5. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/pyproject.toml +9 -2
  6. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/__main__.py +7 -0
  7. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_installer_scripts.py +6 -2
  8. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/.gitignore +0 -0
  9. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/LICENSE +0 -0
  10. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/README.md +0 -0
  11. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/__init__.py +0 -0
  12. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/__init__.py +0 -0
  13. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/_review_md.py +0 -0
  14. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/annotate_cmd.py +0 -0
  15. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/cli/testkit_cmd.py +0 -0
  16. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/__init__.py +0 -0
  17. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/audit/__init__.py +0 -0
  18. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/audit/crash_log.py +0 -0
  19. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/audit/feedback_log.py +0 -0
  20. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/coverage/__init__.py +0 -0
  21. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/coverage/format_warnings.py +0 -0
  22. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/__init__.py +0 -0
  23. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/base.py +0 -0
  24. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/conflict_resolution.py +0 -0
  25. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/email_detector.py +0 -0
  26. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/__init__.py +0 -0
  27. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/_base.py +0 -0
  28. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/address.py +0 -0
  29. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/company_en.py +0 -0
  30. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/company_ru.py +0 -0
  31. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/person_en.py +0 -0
  32. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/ner_detectors/person_ru.py +0 -0
  33. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/phone_detector.py +0 -0
  34. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/__init__.py +0 -0
  35. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/bic_detector.py +0 -0
  36. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/bic_ru_detector.py +0 -0
  37. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/card_detector.py +0 -0
  38. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/contract_number_detector.py +0 -0
  39. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/date_detector.py +0 -0
  40. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/ein_detector.py +0 -0
  41. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/iban_detector.py +0 -0
  42. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/inn_detector.py +0 -0
  43. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/kpp_detector.py +0 -0
  44. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/ogrn_detector.py +0 -0
  45. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/passport_ru_detector.py +0 -0
  46. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/detection/regex_detectors/snils_detector.py +0 -0
  47. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/errors.py +0 -0
  48. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/__init__.py +0 -0
  49. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/base.py +0 -0
  50. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/detection.py +0 -0
  51. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/name_parsers/__init__.py +0 -0
  52. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/name_parsers/english.py +0 -0
  53. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/name_parsers/russian.py +0 -0
  54. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/__init__.py +0 -0
  55. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/__init__.py +0 -0
  56. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/cities.json +0 -0
  57. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/legal_forms.json +0 -0
  58. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/pack.py +0 -0
  59. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/english/regions.json +0 -0
  60. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/registry.py +0 -0
  61. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/__init__.py +0 -0
  62. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/cities.json +0 -0
  63. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/legal_forms.json +0 -0
  64. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/pack.py +0 -0
  65. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/packs/russian/regions.json +0 -0
  66. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/transliteration/__init__.py +0 -0
  67. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/transliteration/base.py +0 -0
  68. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/language/transliteration/ru_en.py +0 -0
  69. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/manual_mask/__init__.py +0 -0
  70. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/manual_mask/apply.py +0 -0
  71. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/manual_mask/overrides.py +0 -0
  72. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/__init__.py +0 -0
  73. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/_ooxml.py +0 -0
  74. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/base.py +0 -0
  75. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/docx_cleaner.py +0 -0
  76. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/pdf_cleaner.py +0 -0
  77. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/metadata/xlsx_cleaner.py +0 -0
  78. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/models.py +0 -0
  79. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/__init__.py +0 -0
  80. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/_docx_xml.py +0 -0
  81. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/docx_parser.py +0 -0
  82. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/format_detection.py +0 -0
  83. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/pdf_parser.py +0 -0
  84. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/parsers/xlsx_parser.py +0 -0
  85. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/pipeline.py +0 -0
  86. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/tokens/__init__.py +0 -0
  87. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/tokens/canonical.py +0 -0
  88. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/tokens/manager.py +0 -0
  89. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/__init__.py +0 -0
  90. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/_facade.py +0 -0
  91. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/docx_writer.py +0 -0
  92. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/pdf_writer.py +0 -0
  93. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/core/writers/xlsx_writer.py +0 -0
  94. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/__init__.py +0 -0
  95. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/diagnostics.py +0 -0
  96. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/feedback_loop/__init__.py +0 -0
  97. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/feedback_loop/feedback_schema.py +0 -0
  98. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/__init__.py +0 -0
  99. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/base.py +0 -0
  100. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/docx_gen.py +0 -0
  101. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/pdf_gen.py +0 -0
  102. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/generators/xlsx_gen.py +0 -0
  103. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/log_analyzer.py +0 -0
  104. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/log_analyzer_report.py +0 -0
  105. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/manifest_v2.py +0 -0
  106. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/manifest_validator.py +0 -0
  107. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/metrics.py +0 -0
  108. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/__init__.py +0 -0
  109. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/base.py +0 -0
  110. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/__init__.py +0 -0
  111. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/alice_morris.py +0 -0
  112. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/benjamin_clark.py +0 -0
  113. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/charlotte_evans.py +0 -0
  114. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/daniel_foster.py +0 -0
  115. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/emily_griffiths.py +0 -0
  116. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/frank_harris.py +0 -0
  117. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/grace_irving.py +0 -0
  118. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/henry_johnson.py +0 -0
  119. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/isabella_king.py +0 -0
  120. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/english/jane_doe.py +0 -0
  121. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/__init__.py +0 -0
  122. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/fedorova_aa.py +0 -0
  123. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/ivanov_ii.py +0 -0
  124. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/kovaleva_lm.py +0 -0
  125. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/kuznetsov_ev.py +0 -0
  126. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/morozov_dn.py +0 -0
  127. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/petrov_pp.py +0 -0
  128. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/sidorova_es.py +0 -0
  129. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/smirnov_aa.py +0 -0
  130. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/sokolova_ts.py +0 -0
  131. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/personas/russian/volkov_mo.py +0 -0
  132. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/report.py +0 -0
  133. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/runner.py +0 -0
  134. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/testkit/tier_defaults.py +0 -0
  135. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/updater.py +0 -0
  136. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/__init__.py +0 -0
  137. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/app.py +0 -0
  138. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/context.py +0 -0
  139. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/i18n/en.po +0 -0
  140. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/i18n/ru.po +0 -0
  141. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/i18n.py +0 -0
  142. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/__init__.py +0 -0
  143. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/cors.py +0 -0
  144. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/csrf.py +0 -0
  145. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/middleware/session_token.py +0 -0
  146. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/network_status.py +0 -0
  147. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/__init__.py +0 -0
  148. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/detector.py +0 -0
  149. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/download.py +0 -0
  150. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/feedback.py +0 -0
  151. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/language.py +0 -0
  152. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/manual_overrides.py +0 -0
  153. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/preview.py +0 -0
  154. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/process.py +0 -0
  155. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/processing_helpers.py +0 -0
  156. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/session.py +0 -0
  157. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/update.py +0 -0
  158. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/routes/upload.py +0 -0
  159. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/session_manager.py +0 -0
  160. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/stages.py +0 -0
  161. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/app.css +0 -0
  162. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/components.css +0 -0
  163. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/highlight-pair.js +0 -0
  164. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/htmx-sse.js +0 -0
  165. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/htmx.min.js +0 -0
  166. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/i18n-switch.js +0 -0
  167. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/layout.css +0 -0
  168. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/manual-mask.js +0 -0
  169. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/preview-busy.js +0 -0
  170. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/sync-scroll.js +0 -0
  171. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/tokens.css +0 -0
  172. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/static/tooltip.js +0 -0
  173. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_drop_zone.html +0 -0
  174. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_empty.html +0 -0
  175. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_error_block.html +0 -0
  176. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_modal_feedback.html +0 -0
  177. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_modal_settings.html +0 -0
  178. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_network_status.html +0 -0
  179. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_preview_content.html +0 -0
  180. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_preview_pane_anon.html +0 -0
  181. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_preview_pane_source.html +0 -0
  182. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_processing.html +0 -0
  183. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_sel_popup.html +0 -0
  184. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_stages.html +0 -0
  185. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_status_row.html +0 -0
  186. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_tooltip_sources.html +0 -0
  187. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_topbar.html +0 -0
  188. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_update_banner.html +0 -0
  189. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/_warning_banner.html +0 -0
  190. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/base.html +0 -0
  191. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/preview.html +0 -0
  192. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/processing.html +0 -0
  193. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/templates/upload.html +0 -0
  194. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/src/anonymizer/webapp/version.py +0 -0
  195. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/__init__.py +0 -0
  196. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/conftest.py +0 -0
  197. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/fuzz/__init__.py +0 -0
  198. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/fuzz/test_random_corpus.py +0 -0
  199. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/__init__.py +0 -0
  200. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/fixtures/golden_partial/es/01_contrato_es.docx +0 -0
  201. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/fixtures/golden_partial/it/01_contratto_it.docx +0 -0
  202. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/fixtures/golden_partial/manifests/01_contrato_es.yml +0 -0
  203. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/fixtures/golden_partial/manifests/01_contratto_it.yml +0 -0
  204. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/README.md +0 -0
  205. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/_template/input.docx +0 -0
  206. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/known_failures/_template/manifest.yml +0 -0
  207. {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
  208. {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
  209. {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
  210. {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
  211. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_annotate_roundtrip.py +0 -0
  212. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_audit_no_pii.py +0 -0
  213. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_corpus_manifests_v2.py +0 -0
  214. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_docx_digital_marketing_regression.py +0 -0
  215. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_docx_end_to_end.py +0 -0
  216. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_docx_with_full_pipeline.py +0 -0
  217. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_feedback_cycle.py +0 -0
  218. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_format_edge_cases.py +0 -0
  219. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_golden_generated.py +0 -0
  220. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_golden_partial.py +0 -0
  221. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_known_failures.py +0 -0
  222. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_no_network.py +0 -0
  223. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_pdf_end_to_end.py +0 -0
  224. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_pdf_service_agreement_regression.py +0 -0
  225. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_schema_in_sync.py +0 -0
  226. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_webapp_e2e.py +0 -0
  227. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/integration/test_xlsx_end_to_end.py +0 -0
  228. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/__init__.py +0 -0
  229. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_audit_crash.py +0 -0
  230. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_audit_feedback.py +0 -0
  231. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_bic_detector.py +0 -0
  232. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_bic_ru_detector.py +0 -0
  233. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_canonical_key.py +0 -0
  234. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_canonical_key_extended.py +0 -0
  235. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_card_detector.py +0 -0
  236. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli.py +0 -0
  237. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli_annotate_compile.py +0 -0
  238. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli_annotate_prepare.py +0 -0
  239. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli_annotate_render.py +0 -0
  240. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_cli_no_update_check.py +0 -0
  241. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_conflict_resolution.py +0 -0
  242. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_contract_number_detector.py +0 -0
  243. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_coverage_warnings_docx.py +0 -0
  244. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_coverage_warnings_pdf.py +0 -0
  245. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_coverage_warnings_xlsx.py +0 -0
  246. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_date_detector.py +0 -0
  247. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_detection_base.py +0 -0
  248. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_diagnostics.py +0 -0
  249. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_docx_generator.py +0 -0
  250. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_docx_parser.py +0 -0
  251. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_docx_writer.py +0 -0
  252. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_docx_xml_helpers.py +0 -0
  253. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ein_detector.py +0 -0
  254. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_email_detector.py +0 -0
  255. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_english_pack.py +0 -0
  256. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_errors.py +0 -0
  257. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_feedback_schema.py +0 -0
  258. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_feedback_schema_contract.py +0 -0
  259. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_format_detection.py +0 -0
  260. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_generator_base.py +0 -0
  261. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_iban_detector.py +0 -0
  262. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_inn_detector.py +0 -0
  263. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_kpp_detector.py +0 -0
  264. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_language_base.py +0 -0
  265. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_language_detection.py +0 -0
  266. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_language_registry.py +0 -0
  267. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_license.py +0 -0
  268. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_log_analyzer.py +0 -0
  269. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_log_analyzer_report.py +0 -0
  270. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manifest_v2_migrate.py +0 -0
  271. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manifest_v2_model.py +0 -0
  272. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manifest_validator.py +0 -0
  273. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manual_apply.py +0 -0
  274. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_manual_override.py +0 -0
  275. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metadata_base.py +0 -0
  276. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metadata_docx.py +0 -0
  277. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metadata_pdf.py +0 -0
  278. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metadata_xlsx.py +0 -0
  279. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metrics.py +0 -0
  280. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_metrics_corpus.py +0 -0
  281. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_models.py +0 -0
  282. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_name_parser_english.py +0 -0
  283. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_name_parser_russian.py +0 -0
  284. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_address.py +0 -0
  285. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_base.py +0 -0
  286. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_company_en.py +0 -0
  287. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_company_ru.py +0 -0
  288. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_language_guard.py +0 -0
  289. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_person_en.py +0 -0
  290. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ner_person_ru.py +0 -0
  291. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_network_status.py +0 -0
  292. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_ogrn_detector.py +0 -0
  293. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_package_imports.py +0 -0
  294. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_passport_ru_detector.py +0 -0
  295. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_pdf_generator.py +0 -0
  296. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_pdf_parser.py +0 -0
  297. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_pdf_writer.py +0 -0
  298. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_personas.py +0 -0
  299. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_phone_detector.py +0 -0
  300. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_pipeline.py +0 -0
  301. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_project_metadata.py +0 -0
  302. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_report.py +0 -0
  303. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_review_md.py +0 -0
  304. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_runner.py +0 -0
  305. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_runner_acceptance.py +0 -0
  306. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_runner_overlap_matching.py +0 -0
  307. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_russian_pack.py +0 -0
  308. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_snils_detector.py +0 -0
  309. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_testkit_cli.py +0 -0
  310. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_testkit_diff.py +0 -0
  311. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_token_manager.py +0 -0
  312. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_transliteration.py +0 -0
  313. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_update_route.py +0 -0
  314. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_updater_subprocess.py +0 -0
  315. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_app_factory.py +0 -0
  316. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_cors.py +0 -0
  317. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_csrf.py +0 -0
  318. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_detector.py +0 -0
  319. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_download.py +0 -0
  320. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_empty_state.py +0 -0
  321. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_feedback.py +0 -0
  322. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_feedback_modal.py +0 -0
  323. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_i18n.py +0 -0
  324. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_language_route.py +0 -0
  325. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_manual_mask_guess.py +0 -0
  326. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_manual_overrides.py +0 -0
  327. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_preview.py +0 -0
  328. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_preview_render.py +0 -0
  329. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_process_sse.py +0 -0
  330. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_session.py +0 -0
  331. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_session_manager.py +0 -0
  332. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_session_token.py +0 -0
  333. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_settings.py +0 -0
  334. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_stages.py +0 -0
  335. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_static_assets.py +0 -0
  336. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_templates.py +0 -0
  337. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_token_sources.py +0 -0
  338. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_topbar.py +0 -0
  339. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_unmask.py +0 -0
  340. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_webapp_upload.py +0 -0
  341. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_xlsx_generator.py +0 -0
  342. {docs_anonymizer-0.2.0 → docs_anonymizer-0.2.2}/tests/unit/test_xlsx_parser.py +0 -0
  343. {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.0
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: >=3.11
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
- uv tool install docs-anonymizer --with "en-core-web-lg @ $EnCoreWebLgUrl"
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
- uv tool install docs-anonymizer --with "en-core-web-lg @ ${EN_CORE_WEB_LG_URL}"
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.0"
3
+ version = "0.2.2"
4
4
  description = "Offline document anonymizer for legal teams"
5
5
  readme = "README.md"
6
- requires-python = ">=3.11"
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
- assert "uv tool install docs-anonymizer" in text
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