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.
- datalock-1.0.0/CHANGELOG.md +88 -0
- datalock-1.0.0/LICENSE +632 -0
- datalock-1.0.0/MANIFEST.in +4 -0
- datalock-1.0.0/PKG-INFO +1004 -0
- datalock-1.0.0/README.md +942 -0
- datalock-1.0.0/datalock.egg-info/PKG-INFO +1004 -0
- datalock-1.0.0/datalock.egg-info/SOURCES.txt +65 -0
- datalock-1.0.0/datalock.egg-info/dependency_links.txt +1 -0
- datalock-1.0.0/datalock.egg-info/entry_points.txt +2 -0
- datalock-1.0.0/datalock.egg-info/requires.txt +31 -0
- datalock-1.0.0/datalock.egg-info/top_level.txt +1 -0
- datalock-1.0.0/logus/__init__.py +1967 -0
- datalock-1.0.0/logus/_defaults.py +6 -0
- datalock-1.0.0/logus/adapters/__init__.py +17 -0
- datalock-1.0.0/logus/adapters/db_adapter.py +831 -0
- datalock-1.0.0/logus/adapters/pandas_adapter.py +496 -0
- datalock-1.0.0/logus/adapters/polars_adapter.py +849 -0
- datalock-1.0.0/logus/adapters/sql_adapter.py +655 -0
- datalock-1.0.0/logus/analytics.py +1119 -0
- datalock-1.0.0/logus/asymmetric.py +335 -0
- datalock-1.0.0/logus/check.py +188 -0
- datalock-1.0.0/logus/cli.py +232 -0
- datalock-1.0.0/logus/contract.py +711 -0
- datalock-1.0.0/logus/core.py +516 -0
- datalock-1.0.0/logus/detectors/__init__.py +19 -0
- datalock-1.0.0/logus/detectors/fast_scan.py +431 -0
- datalock-1.0.0/logus/detectors/pii_detector.py +687 -0
- datalock-1.0.0/logus/detectors/sensitive_detector.py +369 -0
- datalock-1.0.0/logus/detectors/text_detector.py +183 -0
- datalock-1.0.0/logus/expr.py +429 -0
- datalock-1.0.0/logus/generators/__init__.py +21 -0
- datalock-1.0.0/logus/generators/identity_mocker.py +291 -0
- datalock-1.0.0/logus/generators/tabular_generative.py +620 -0
- datalock-1.0.0/logus/io_big.py +939 -0
- datalock-1.0.0/logus/lgs.py +280 -0
- datalock-1.0.0/logus/lineage.py +463 -0
- datalock-1.0.0/logus/link.py +121 -0
- datalock-1.0.0/logus/maskers/__init__.py +14 -0
- datalock-1.0.0/logus/maskers/date_masker.py +158 -0
- datalock-1.0.0/logus/maskers/hashing.py +229 -0
- datalock-1.0.0/logus/maskers/text_masker.py +140 -0
- datalock-1.0.0/logus/maskers/truncation.py +203 -0
- datalock-1.0.0/logus/metrics/__init__.py +63 -0
- datalock-1.0.0/logus/metrics/differential_privacy.py +666 -0
- datalock-1.0.0/logus/metrics/fidelity.py +600 -0
- datalock-1.0.0/logus/metrics/kanonymity.py +486 -0
- datalock-1.0.0/logus/metrics/risk_score.py +351 -0
- datalock-1.0.0/logus/metrics/tcloseness.py +387 -0
- datalock-1.0.0/logus/metrics/utility.py +440 -0
- datalock-1.0.0/logus/mockers/__init__.py +6 -0
- datalock-1.0.0/logus/mockers/category_mocker.py +181 -0
- datalock-1.0.0/logus/mockers/numeric_mocker.py +217 -0
- datalock-1.0.0/logus/privacy_score.py +255 -0
- datalock-1.0.0/logus/processor.py +386 -0
- datalock-1.0.0/logus/py.typed +0 -0
- datalock-1.0.0/logus/reports/__init__.py +5 -0
- datalock-1.0.0/logus/reports/audit_report.py +256 -0
- datalock-1.0.0/logus/reports/compliance_report.py +331 -0
- datalock-1.0.0/logus/secure_file.py +1850 -0
- datalock-1.0.0/logus/sql_transpiler.py +390 -0
- datalock-1.0.0/logus/utils/__init__.py +8 -0
- datalock-1.0.0/logus/utils/frames.py +51 -0
- datalock-1.0.0/logus/utils/salt.py +118 -0
- datalock-1.0.0/logus/utils/secret_str.py +84 -0
- datalock-1.0.0/logus/validate.py +594 -0
- datalock-1.0.0/pyproject.toml +99 -0
- 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
|