fraiseql-confiture 0.3.7__cp311-cp311-macosx_11_0_arm64.whl

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 (124) hide show
  1. confiture/__init__.py +48 -0
  2. confiture/_core.cpython-311-darwin.so +0 -0
  3. confiture/cli/__init__.py +0 -0
  4. confiture/cli/dry_run.py +116 -0
  5. confiture/cli/lint_formatter.py +193 -0
  6. confiture/cli/main.py +1893 -0
  7. confiture/config/__init__.py +0 -0
  8. confiture/config/environment.py +263 -0
  9. confiture/core/__init__.py +51 -0
  10. confiture/core/anonymization/__init__.py +0 -0
  11. confiture/core/anonymization/audit.py +485 -0
  12. confiture/core/anonymization/benchmarking.py +372 -0
  13. confiture/core/anonymization/breach_notification.py +652 -0
  14. confiture/core/anonymization/compliance.py +617 -0
  15. confiture/core/anonymization/composer.py +298 -0
  16. confiture/core/anonymization/data_subject_rights.py +669 -0
  17. confiture/core/anonymization/factory.py +319 -0
  18. confiture/core/anonymization/governance.py +737 -0
  19. confiture/core/anonymization/performance.py +1092 -0
  20. confiture/core/anonymization/profile.py +284 -0
  21. confiture/core/anonymization/registry.py +195 -0
  22. confiture/core/anonymization/security/kms_manager.py +547 -0
  23. confiture/core/anonymization/security/lineage.py +888 -0
  24. confiture/core/anonymization/security/token_store.py +686 -0
  25. confiture/core/anonymization/strategies/__init__.py +41 -0
  26. confiture/core/anonymization/strategies/address.py +359 -0
  27. confiture/core/anonymization/strategies/credit_card.py +374 -0
  28. confiture/core/anonymization/strategies/custom.py +161 -0
  29. confiture/core/anonymization/strategies/date.py +218 -0
  30. confiture/core/anonymization/strategies/differential_privacy.py +398 -0
  31. confiture/core/anonymization/strategies/email.py +141 -0
  32. confiture/core/anonymization/strategies/format_preserving_encryption.py +310 -0
  33. confiture/core/anonymization/strategies/hash.py +150 -0
  34. confiture/core/anonymization/strategies/ip_address.py +235 -0
  35. confiture/core/anonymization/strategies/masking_retention.py +252 -0
  36. confiture/core/anonymization/strategies/name.py +298 -0
  37. confiture/core/anonymization/strategies/phone.py +119 -0
  38. confiture/core/anonymization/strategies/preserve.py +85 -0
  39. confiture/core/anonymization/strategies/redact.py +101 -0
  40. confiture/core/anonymization/strategies/salted_hashing.py +322 -0
  41. confiture/core/anonymization/strategies/text_redaction.py +183 -0
  42. confiture/core/anonymization/strategies/tokenization.py +334 -0
  43. confiture/core/anonymization/strategy.py +241 -0
  44. confiture/core/anonymization/syncer_audit.py +357 -0
  45. confiture/core/blue_green.py +683 -0
  46. confiture/core/builder.py +500 -0
  47. confiture/core/checksum.py +358 -0
  48. confiture/core/connection.py +184 -0
  49. confiture/core/differ.py +522 -0
  50. confiture/core/drift.py +564 -0
  51. confiture/core/dry_run.py +182 -0
  52. confiture/core/health.py +313 -0
  53. confiture/core/hooks/__init__.py +87 -0
  54. confiture/core/hooks/base.py +232 -0
  55. confiture/core/hooks/context.py +146 -0
  56. confiture/core/hooks/execution_strategies.py +57 -0
  57. confiture/core/hooks/observability.py +220 -0
  58. confiture/core/hooks/phases.py +53 -0
  59. confiture/core/hooks/registry.py +295 -0
  60. confiture/core/large_tables.py +775 -0
  61. confiture/core/linting/__init__.py +70 -0
  62. confiture/core/linting/composer.py +192 -0
  63. confiture/core/linting/libraries/__init__.py +17 -0
  64. confiture/core/linting/libraries/gdpr.py +168 -0
  65. confiture/core/linting/libraries/general.py +184 -0
  66. confiture/core/linting/libraries/hipaa.py +144 -0
  67. confiture/core/linting/libraries/pci_dss.py +104 -0
  68. confiture/core/linting/libraries/sox.py +120 -0
  69. confiture/core/linting/schema_linter.py +491 -0
  70. confiture/core/linting/versioning.py +151 -0
  71. confiture/core/locking.py +389 -0
  72. confiture/core/migration_generator.py +298 -0
  73. confiture/core/migrator.py +882 -0
  74. confiture/core/observability/__init__.py +44 -0
  75. confiture/core/observability/audit.py +323 -0
  76. confiture/core/observability/logging.py +187 -0
  77. confiture/core/observability/metrics.py +174 -0
  78. confiture/core/observability/tracing.py +192 -0
  79. confiture/core/pg_version.py +418 -0
  80. confiture/core/pool.py +406 -0
  81. confiture/core/risk/__init__.py +39 -0
  82. confiture/core/risk/predictor.py +188 -0
  83. confiture/core/risk/scoring.py +248 -0
  84. confiture/core/rollback_generator.py +388 -0
  85. confiture/core/schema_analyzer.py +769 -0
  86. confiture/core/schema_to_schema.py +590 -0
  87. confiture/core/security/__init__.py +32 -0
  88. confiture/core/security/logging.py +201 -0
  89. confiture/core/security/validation.py +416 -0
  90. confiture/core/signals.py +371 -0
  91. confiture/core/syncer.py +540 -0
  92. confiture/exceptions.py +192 -0
  93. confiture/integrations/__init__.py +0 -0
  94. confiture/models/__init__.py +24 -0
  95. confiture/models/lint.py +193 -0
  96. confiture/models/migration.py +265 -0
  97. confiture/models/schema.py +203 -0
  98. confiture/models/sql_file_migration.py +225 -0
  99. confiture/scenarios/__init__.py +36 -0
  100. confiture/scenarios/compliance.py +586 -0
  101. confiture/scenarios/ecommerce.py +199 -0
  102. confiture/scenarios/financial.py +253 -0
  103. confiture/scenarios/healthcare.py +315 -0
  104. confiture/scenarios/multi_tenant.py +340 -0
  105. confiture/scenarios/saas.py +295 -0
  106. confiture/testing/FRAMEWORK_API.md +722 -0
  107. confiture/testing/__init__.py +100 -0
  108. confiture/testing/fixtures/__init__.py +11 -0
  109. confiture/testing/fixtures/data_validator.py +229 -0
  110. confiture/testing/fixtures/migration_runner.py +167 -0
  111. confiture/testing/fixtures/schema_snapshotter.py +352 -0
  112. confiture/testing/frameworks/__init__.py +10 -0
  113. confiture/testing/frameworks/mutation.py +587 -0
  114. confiture/testing/frameworks/performance.py +479 -0
  115. confiture/testing/loader.py +225 -0
  116. confiture/testing/pytest/__init__.py +38 -0
  117. confiture/testing/pytest_plugin.py +190 -0
  118. confiture/testing/sandbox.py +304 -0
  119. confiture/testing/utils/__init__.py +0 -0
  120. fraiseql_confiture-0.3.7.dist-info/METADATA +438 -0
  121. fraiseql_confiture-0.3.7.dist-info/RECORD +124 -0
  122. fraiseql_confiture-0.3.7.dist-info/WHEEL +4 -0
  123. fraiseql_confiture-0.3.7.dist-info/entry_points.txt +4 -0
  124. fraiseql_confiture-0.3.7.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,144 @@
1
+ """HIPAA compliance rule library."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from ..composer import RuleLibrary
6
+ from ..versioning import LintSeverity, Rule, RuleVersion
7
+
8
+
9
+ class HIPAALibrary(RuleLibrary):
10
+ """HIPAA compliance rule library (15 rules)."""
11
+
12
+ def __init__(self):
13
+ rules = [
14
+ Rule(
15
+ rule_id="hipaa_001",
16
+ name="encrypt_phi",
17
+ description="All PII/PHI columns must be encrypted at rest",
18
+ version=RuleVersion(1, 0, 0),
19
+ severity=LintSeverity.CRITICAL,
20
+ enabled_by_default=True,
21
+ ),
22
+ Rule(
23
+ rule_id="hipaa_002",
24
+ name="audit_log_retention",
25
+ description="Maintain audit logs for minimum 6 years",
26
+ version=RuleVersion(1, 0, 0),
27
+ severity=LintSeverity.CRITICAL,
28
+ enabled_by_default=True,
29
+ ),
30
+ Rule(
31
+ rule_id="hipaa_003",
32
+ name="access_control_logs",
33
+ description="Log all database access and modifications",
34
+ version=RuleVersion(1, 0, 0),
35
+ severity=LintSeverity.CRITICAL,
36
+ enabled_by_default=True,
37
+ ),
38
+ Rule(
39
+ rule_id="hipaa_004",
40
+ name="no_plaintext_phi",
41
+ description="PHI must never be stored in plaintext",
42
+ version=RuleVersion(1, 0, 0),
43
+ severity=LintSeverity.CRITICAL,
44
+ enabled_by_default=True,
45
+ ),
46
+ Rule(
47
+ rule_id="hipaa_005",
48
+ name="encryption_key_rotation",
49
+ description="Encryption keys must be rotated regularly",
50
+ version=RuleVersion(1, 0, 0),
51
+ severity=LintSeverity.ERROR,
52
+ enabled_by_default=True,
53
+ ),
54
+ Rule(
55
+ rule_id="hipaa_006",
56
+ name="breach_notification",
57
+ description="Implement breach notification protocol",
58
+ version=RuleVersion(1, 0, 0),
59
+ severity=LintSeverity.ERROR,
60
+ enabled_by_default=True,
61
+ ),
62
+ Rule(
63
+ rule_id="hipaa_007",
64
+ name="user_authentication",
65
+ description="Multi-factor authentication required for access",
66
+ version=RuleVersion(1, 0, 0),
67
+ severity=LintSeverity.ERROR,
68
+ enabled_by_default=True,
69
+ ),
70
+ Rule(
71
+ rule_id="hipaa_008",
72
+ name="session_timeout",
73
+ description="Sessions must timeout after inactivity period",
74
+ version=RuleVersion(1, 0, 0),
75
+ severity=LintSeverity.WARNING,
76
+ enabled_by_default=True,
77
+ ),
78
+ Rule(
79
+ rule_id="hipaa_009",
80
+ name="data_segregation",
81
+ description="Patient data must be properly segregated",
82
+ version=RuleVersion(1, 0, 0),
83
+ severity=LintSeverity.ERROR,
84
+ enabled_by_default=True,
85
+ ),
86
+ Rule(
87
+ rule_id="hipaa_010",
88
+ name="backup_encryption",
89
+ description="All backups must be encrypted",
90
+ version=RuleVersion(1, 0, 0),
91
+ severity=LintSeverity.CRITICAL,
92
+ enabled_by_default=True,
93
+ ),
94
+ Rule(
95
+ rule_id="hipaa_011",
96
+ name="disaster_recovery",
97
+ description="Disaster recovery plan must be documented",
98
+ version=RuleVersion(1, 0, 0),
99
+ severity=LintSeverity.ERROR,
100
+ enabled_by_default=True,
101
+ ),
102
+ Rule(
103
+ rule_id="hipaa_012",
104
+ name="integrity_verification",
105
+ description="Implement data integrity verification",
106
+ version=RuleVersion(1, 0, 0),
107
+ severity=LintSeverity.ERROR,
108
+ enabled_by_default=True,
109
+ ),
110
+ Rule(
111
+ rule_id="hipaa_013",
112
+ name="transmission_encryption",
113
+ description="All data transmission must be encrypted",
114
+ version=RuleVersion(1, 0, 0),
115
+ severity=LintSeverity.CRITICAL,
116
+ enabled_by_default=True,
117
+ ),
118
+ Rule(
119
+ rule_id="hipaa_014",
120
+ name="authorization_control",
121
+ description="Implement role-based access control",
122
+ version=RuleVersion(1, 0, 0),
123
+ severity=LintSeverity.ERROR,
124
+ enabled_by_default=True,
125
+ ),
126
+ Rule(
127
+ rule_id="hipaa_015",
128
+ name="audit_controls",
129
+ description="Implement comprehensive audit controls",
130
+ version=RuleVersion(1, 0, 0),
131
+ severity=LintSeverity.ERROR,
132
+ enabled_by_default=True,
133
+ ),
134
+ ]
135
+
136
+ # Verify rule count matches docstring
137
+ assert len(rules) == 15, f"Expected 15 rules in HIPAALibrary, got {len(rules)}"
138
+
139
+ super().__init__(
140
+ name="HIPAA",
141
+ version=RuleVersion(major=1, minor=0, patch=0),
142
+ rules=rules,
143
+ tags=["healthcare", "compliance", "phi", "hipaa"],
144
+ )
@@ -0,0 +1,104 @@
1
+ """PCI-DSS compliance rule library."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from ..composer import RuleLibrary
6
+ from ..versioning import LintSeverity, Rule, RuleVersion
7
+
8
+
9
+ class PCI_DSSLibrary(RuleLibrary):
10
+ """PCI-DSS compliance rule library (10 rules)."""
11
+
12
+ def __init__(self):
13
+ rules = [
14
+ Rule(
15
+ rule_id="pci_dss_001",
16
+ name="cardholder_data_encryption",
17
+ description="Cardholder data must be encrypted at rest and in transit",
18
+ version=RuleVersion(1, 0, 0),
19
+ severity=LintSeverity.CRITICAL,
20
+ enabled_by_default=True,
21
+ ),
22
+ Rule(
23
+ rule_id="pci_dss_002",
24
+ name="no_default_credentials",
25
+ description="No default credentials allowed in database",
26
+ version=RuleVersion(1, 0, 0),
27
+ severity=LintSeverity.CRITICAL,
28
+ enabled_by_default=True,
29
+ ),
30
+ Rule(
31
+ rule_id="pci_dss_003",
32
+ name="no_plaintext_cardholder_data",
33
+ description="Cardholder data must never be stored in plaintext",
34
+ version=RuleVersion(1, 0, 0),
35
+ severity=LintSeverity.CRITICAL,
36
+ enabled_by_default=True,
37
+ ),
38
+ Rule(
39
+ rule_id="pci_dss_004",
40
+ name="access_control",
41
+ description="Implement strong access control (need-to-know basis)",
42
+ version=RuleVersion(1, 0, 0),
43
+ severity=LintSeverity.ERROR,
44
+ enabled_by_default=True,
45
+ ),
46
+ Rule(
47
+ rule_id="pci_dss_005",
48
+ name="vulnerability_scanning",
49
+ description="Regular vulnerability scanning required",
50
+ version=RuleVersion(1, 0, 0),
51
+ severity=LintSeverity.WARNING,
52
+ enabled_by_default=True,
53
+ ),
54
+ Rule(
55
+ rule_id="pci_dss_006",
56
+ name="firewall_configuration",
57
+ description="Maintain firewall configuration standards",
58
+ version=RuleVersion(1, 0, 0),
59
+ severity=LintSeverity.WARNING,
60
+ enabled_by_default=True,
61
+ ),
62
+ Rule(
63
+ rule_id="pci_dss_007",
64
+ name="audit_trail",
65
+ description="Maintain audit trail of all access to cardholder data",
66
+ version=RuleVersion(1, 0, 0),
67
+ severity=LintSeverity.CRITICAL,
68
+ enabled_by_default=True,
69
+ ),
70
+ Rule(
71
+ rule_id="pci_dss_008",
72
+ name="secure_deletion",
73
+ description="Implement secure deletion for sensitive data",
74
+ version=RuleVersion(1, 0, 0),
75
+ severity=LintSeverity.ERROR,
76
+ enabled_by_default=True,
77
+ ),
78
+ Rule(
79
+ rule_id="pci_dss_009",
80
+ name="key_management",
81
+ description="Implement encryption key management procedures",
82
+ version=RuleVersion(1, 0, 0),
83
+ severity=LintSeverity.CRITICAL,
84
+ enabled_by_default=True,
85
+ ),
86
+ Rule(
87
+ rule_id="pci_dss_010",
88
+ name="security_testing",
89
+ description="Regular security testing and assessment required",
90
+ version=RuleVersion(1, 0, 0),
91
+ severity=LintSeverity.WARNING,
92
+ enabled_by_default=True,
93
+ ),
94
+ ]
95
+
96
+ # Verify rule count matches docstring
97
+ assert len(rules) == 10, f"Expected 10 rules in PCI_DSSLibrary, got {len(rules)}"
98
+
99
+ super().__init__(
100
+ name="PCI-DSS",
101
+ version=RuleVersion(major=1, minor=0, patch=0),
102
+ rules=rules,
103
+ tags=["payment", "compliance", "pci-dss", "security"],
104
+ )
@@ -0,0 +1,120 @@
1
+ """SOX (Sarbanes-Oxley) compliance rule library."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from ..composer import RuleLibrary
6
+ from ..versioning import LintSeverity, Rule, RuleVersion
7
+
8
+
9
+ class SOXLibrary(RuleLibrary):
10
+ """SOX compliance rule library (12 rules)."""
11
+
12
+ def __init__(self):
13
+ rules = [
14
+ Rule(
15
+ rule_id="sox_001",
16
+ name="financial_data_integrity",
17
+ description="Financial data integrity must be maintained",
18
+ version=RuleVersion(1, 0, 0),
19
+ severity=LintSeverity.CRITICAL,
20
+ enabled_by_default=True,
21
+ ),
22
+ Rule(
23
+ rule_id="sox_002",
24
+ name="audit_trail_required",
25
+ description="Complete audit trail of all changes required",
26
+ version=RuleVersion(1, 0, 0),
27
+ severity=LintSeverity.CRITICAL,
28
+ enabled_by_default=True,
29
+ ),
30
+ Rule(
31
+ rule_id="sox_003",
32
+ name="change_authorization",
33
+ description="All database changes must be authorized",
34
+ version=RuleVersion(1, 0, 0),
35
+ severity=LintSeverity.ERROR,
36
+ enabled_by_default=True,
37
+ ),
38
+ Rule(
39
+ rule_id="sox_004",
40
+ name="segregation_of_duties",
41
+ description="Segregation of duties must be enforced",
42
+ version=RuleVersion(1, 0, 0),
43
+ severity=LintSeverity.ERROR,
44
+ enabled_by_default=True,
45
+ ),
46
+ Rule(
47
+ rule_id="sox_005",
48
+ name="access_logging",
49
+ description="All database access must be logged",
50
+ version=RuleVersion(1, 0, 0),
51
+ severity=LintSeverity.CRITICAL,
52
+ enabled_by_default=True,
53
+ ),
54
+ Rule(
55
+ rule_id="sox_006",
56
+ name="retention_policy",
57
+ description="Data retention policy must be documented",
58
+ version=RuleVersion(1, 0, 0),
59
+ severity=LintSeverity.ERROR,
60
+ enabled_by_default=True,
61
+ ),
62
+ Rule(
63
+ rule_id="sox_007",
64
+ name="backup_integrity",
65
+ description="Backups must maintain data integrity",
66
+ version=RuleVersion(1, 0, 0),
67
+ severity=LintSeverity.ERROR,
68
+ enabled_by_default=True,
69
+ ),
70
+ Rule(
71
+ rule_id="sox_008",
72
+ name="disaster_recovery_testing",
73
+ description="Disaster recovery must be tested regularly",
74
+ version=RuleVersion(1, 0, 0),
75
+ severity=LintSeverity.WARNING,
76
+ enabled_by_default=True,
77
+ ),
78
+ Rule(
79
+ rule_id="sox_009",
80
+ name="change_tracking",
81
+ description="Track who made what changes and when",
82
+ version=RuleVersion(1, 0, 0),
83
+ severity=LintSeverity.ERROR,
84
+ enabled_by_default=True,
85
+ ),
86
+ Rule(
87
+ rule_id="sox_010",
88
+ name="reconciliation",
89
+ description="Regular reconciliation of accounts required",
90
+ version=RuleVersion(1, 0, 0),
91
+ severity=LintSeverity.WARNING,
92
+ enabled_by_default=True,
93
+ ),
94
+ Rule(
95
+ rule_id="sox_011",
96
+ name="control_testing",
97
+ description="Controls must be tested regularly",
98
+ version=RuleVersion(1, 0, 0),
99
+ severity=LintSeverity.WARNING,
100
+ enabled_by_default=True,
101
+ ),
102
+ Rule(
103
+ rule_id="sox_012",
104
+ name="documentation_requirement",
105
+ description="All migrations must be thoroughly documented",
106
+ version=RuleVersion(1, 0, 0),
107
+ severity=LintSeverity.ERROR,
108
+ enabled_by_default=True,
109
+ ),
110
+ ]
111
+
112
+ # Verify rule count matches docstring
113
+ assert len(rules) == 12, f"Expected 12 rules in SOXLibrary, got {len(rules)}"
114
+
115
+ super().__init__(
116
+ name="SOX",
117
+ version=RuleVersion(major=1, minor=0, patch=0),
118
+ rules=rules,
119
+ tags=["finance", "compliance", "sox", "auditing"],
120
+ )