datalock 1.0.0__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 (67) hide show
  1. datalock-1.0.0/CHANGELOG.md +88 -0
  2. datalock-1.0.0/LICENSE +632 -0
  3. datalock-1.0.0/MANIFEST.in +4 -0
  4. datalock-1.0.0/PKG-INFO +1004 -0
  5. datalock-1.0.0/README.md +942 -0
  6. datalock-1.0.0/datalock.egg-info/PKG-INFO +1004 -0
  7. datalock-1.0.0/datalock.egg-info/SOURCES.txt +65 -0
  8. datalock-1.0.0/datalock.egg-info/dependency_links.txt +1 -0
  9. datalock-1.0.0/datalock.egg-info/entry_points.txt +2 -0
  10. datalock-1.0.0/datalock.egg-info/requires.txt +31 -0
  11. datalock-1.0.0/datalock.egg-info/top_level.txt +1 -0
  12. datalock-1.0.0/logus/__init__.py +1967 -0
  13. datalock-1.0.0/logus/_defaults.py +6 -0
  14. datalock-1.0.0/logus/adapters/__init__.py +17 -0
  15. datalock-1.0.0/logus/adapters/db_adapter.py +831 -0
  16. datalock-1.0.0/logus/adapters/pandas_adapter.py +496 -0
  17. datalock-1.0.0/logus/adapters/polars_adapter.py +849 -0
  18. datalock-1.0.0/logus/adapters/sql_adapter.py +655 -0
  19. datalock-1.0.0/logus/analytics.py +1119 -0
  20. datalock-1.0.0/logus/asymmetric.py +335 -0
  21. datalock-1.0.0/logus/check.py +188 -0
  22. datalock-1.0.0/logus/cli.py +232 -0
  23. datalock-1.0.0/logus/contract.py +711 -0
  24. datalock-1.0.0/logus/core.py +516 -0
  25. datalock-1.0.0/logus/detectors/__init__.py +19 -0
  26. datalock-1.0.0/logus/detectors/fast_scan.py +431 -0
  27. datalock-1.0.0/logus/detectors/pii_detector.py +687 -0
  28. datalock-1.0.0/logus/detectors/sensitive_detector.py +369 -0
  29. datalock-1.0.0/logus/detectors/text_detector.py +183 -0
  30. datalock-1.0.0/logus/expr.py +429 -0
  31. datalock-1.0.0/logus/generators/__init__.py +21 -0
  32. datalock-1.0.0/logus/generators/identity_mocker.py +291 -0
  33. datalock-1.0.0/logus/generators/tabular_generative.py +620 -0
  34. datalock-1.0.0/logus/io_big.py +939 -0
  35. datalock-1.0.0/logus/lgs.py +280 -0
  36. datalock-1.0.0/logus/lineage.py +463 -0
  37. datalock-1.0.0/logus/link.py +121 -0
  38. datalock-1.0.0/logus/maskers/__init__.py +14 -0
  39. datalock-1.0.0/logus/maskers/date_masker.py +158 -0
  40. datalock-1.0.0/logus/maskers/hashing.py +229 -0
  41. datalock-1.0.0/logus/maskers/text_masker.py +140 -0
  42. datalock-1.0.0/logus/maskers/truncation.py +203 -0
  43. datalock-1.0.0/logus/metrics/__init__.py +63 -0
  44. datalock-1.0.0/logus/metrics/differential_privacy.py +666 -0
  45. datalock-1.0.0/logus/metrics/fidelity.py +600 -0
  46. datalock-1.0.0/logus/metrics/kanonymity.py +486 -0
  47. datalock-1.0.0/logus/metrics/risk_score.py +351 -0
  48. datalock-1.0.0/logus/metrics/tcloseness.py +387 -0
  49. datalock-1.0.0/logus/metrics/utility.py +440 -0
  50. datalock-1.0.0/logus/mockers/__init__.py +6 -0
  51. datalock-1.0.0/logus/mockers/category_mocker.py +181 -0
  52. datalock-1.0.0/logus/mockers/numeric_mocker.py +217 -0
  53. datalock-1.0.0/logus/privacy_score.py +255 -0
  54. datalock-1.0.0/logus/processor.py +386 -0
  55. datalock-1.0.0/logus/py.typed +0 -0
  56. datalock-1.0.0/logus/reports/__init__.py +5 -0
  57. datalock-1.0.0/logus/reports/audit_report.py +256 -0
  58. datalock-1.0.0/logus/reports/compliance_report.py +331 -0
  59. datalock-1.0.0/logus/secure_file.py +1850 -0
  60. datalock-1.0.0/logus/sql_transpiler.py +390 -0
  61. datalock-1.0.0/logus/utils/__init__.py +8 -0
  62. datalock-1.0.0/logus/utils/frames.py +51 -0
  63. datalock-1.0.0/logus/utils/salt.py +118 -0
  64. datalock-1.0.0/logus/utils/secret_str.py +84 -0
  65. datalock-1.0.0/logus/validate.py +594 -0
  66. datalock-1.0.0/pyproject.toml +99 -0
  67. datalock-1.0.0/setup.cfg +4 -0
@@ -0,0 +1,88 @@
1
+ # Changelog — logus-lgpd
2
+
3
+ ## v1.0.5 (2026-05)
4
+
5
+ ### 10 novas features
6
+
7
+ **1. `lg.contract()` — Data Contract**
8
+ Unifica tipos, validação de qualidade, detecção PII e estratégia de mascaramento em uma única
9
+ declaração versionável. Métodos: `validate()`, `mask()`, `apply()`, `diff()`,
10
+ `to_json_schema()`, `save()`, `load()`. `ContractDiff.has_breaking_changes` detecta
11
+ incompatibilidades entre versões.
12
+
13
+ **2. Padrões PII customizados**
14
+ `FastPIIScanner(custom_patterns={"contrato": r"^CTR-[0-9]{8}$"})` e
15
+ `lg.scan(df, custom_patterns={...})` permitem registrar identificadores proprietários.
16
+
17
+ **3. Criptografia assimétrica no `.lgs`**
18
+ `lg.generate_keypair("ec"|"rsa")`, `lg.store(df, key, public_key=pub)`,
19
+ `lg.read(f, private_key=priv)`. Multi-recipient via `encrypt_dek_multi()`.
20
+ Mecanismo: ECIES (EC) e RSA-OAEP (RSA).
21
+
22
+ **4. Expiração de arquivo** (`expires_at=`)
23
+ `lg.store(df, "f.lgs", key=KEY, expires_at="2025-12-31")`. Levanta `ExpiredFileError`
24
+ após a data. Verificado no header antes de decriptar. Baseado no Art. 16 LGPD.
25
+
26
+ **5. PII em dados aninhados** (`pl.Struct` e `pl.List`)
27
+ `FastPIIScanner` desaninha colunas estruturadas via `.struct.unnest()` e listas via
28
+ `.explode()` antes de varrer. Colunas reportadas como `"pessoa.cpf"` e `"emails[]"`.
29
+
30
+ **6. Auto-detecção de `.env`**
31
+ `lg.configure(load_dotenv=True)` carrega `LOGUS_SALT` e `LOGUS_KEY` automaticamente
32
+ via `python-dotenv`. Fallback com `UserWarning` se não instalado.
33
+
34
+ **7. `banco.create_table()` e `banco.upsert()`**
35
+ `banco.create_table(df, "tabela", if_exists="replace")` cria tabela a partir do schema
36
+ do DataFrame. `banco.upsert(df, "tabela", on="cpf")` faz INSERT OR REPLACE (SQLite) /
37
+ INSERT ON CONFLICT UPDATE (PostgreSQL) / fallback DELETE+INSERT.
38
+
39
+ **8. `lg.compliance_report()` — Relatório LGPD**
40
+ Gera documento HTML (e PDF com weasyprint) com inventário de PII (Art. 37),
41
+ privacy score, trilha de auditoria (Art. 50). Métodos: `to_html()`, `to_pdf()`,
42
+ `to_text()`, `to_json()`.
43
+
44
+ **9. `lg.validate_schema()` + `lg.save_rules()` / `lg.load_rules()`**
45
+ Valida estrutura do DataFrame (colunas obrigatórias, proibidas, exatas, min/max linhas).
46
+ Salva e carrega conjuntos de regras como JSON versionável.
47
+
48
+ **10. `lg.shift()`, `lg.lag()`, `lg.lead()`, `lg.explode()`**
49
+ `shift(df, n)` desloca valores N períodos (positivo=lag, negativo=lead).
50
+ `lag(df, n)` e `lead(df, n)` são aliases descritivos. `explode(df, "col")` expande
51
+ colunas de listas em múltiplas linhas. Todos preservam tipo pd/pl.
52
+
53
+ ---
54
+
55
+ ## v1.0.5 (2026-05)
56
+
57
+ - `lg.read()` big-data: `header_only`, `head`, `tail`, `sample`, `n_chunks/chunks`, `iter_chunks`
58
+ - `lg.db()` — objeto de conexão reutilizável com ConnectorX + TABLESAMPLE
59
+ - `lg.read(banco, "tabela")` — API unificada para DataFrame e banco
60
+ - `lg.write(df, banco, "tabela")` — escrita unificada
61
+ - CSV sidecar index (`.csv.logus_idx`) via mmap — 201× mais rápido no segundo acesso
62
+ - `lg.mask(pl.LazyFrame)` — permanece lazy até `.collect()`
63
+ - `lg.stream()` via `pl.scan_csv().collect_batches()` — sem OOM
64
+ - `mock_cat/num` determinístico — seed por coluna, categorias ordenadas
65
+ - 95 novos testes (199 total)
66
+
67
+ ---
68
+
69
+ ## v1.2.0 / v1.1.0 (2026-04)
70
+
71
+ - `lg.process()` — pipeline completo em uma chamada (`ProcessResult`)
72
+ - `lg.validate()` + `lg.expect()` — Data Quality integrado
73
+ - `lg.mask_sql()` + `lg.generate_view()` — SQL Transpiler (6 dialetos)
74
+ - Privacy Score em `lg.profile()` (0–100, grade A–F)
75
+ - `lg.lineage` — rastreamento OpenLineage-inspired
76
+ - FastPIIScanner — 9× mais rápido (sample-once + Polars-native regex)
77
+ - `lg.read(path, columns=)` — column pruning em `.lgs`
78
+ - Metadata index v2.1 no header `.lgs` (column_stats legíveis sem decriptar)
79
+
80
+ ---
81
+
82
+ ## v1.0.4 (2026-03)
83
+
84
+ - Polars ≥ 1.0.0 obrigatório
85
+ - `__all__` unificado (100+ símbolos)
86
+ - `lg.check` namespace (kanon, risk, utility, dp, tcloseness)
87
+ - `.lgs` v2: header cifrado, cipher negociado (AES-256-GCM ou ChaCha20-Poly1305)
88
+ - `lg.rekey()` — rotação de chave sem expor dados