truthound 1.0.8__py3-none-any.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.
- truthound/__init__.py +162 -0
- truthound/adapters.py +100 -0
- truthound/api.py +365 -0
- truthound/audit/__init__.py +248 -0
- truthound/audit/core.py +967 -0
- truthound/audit/filters.py +620 -0
- truthound/audit/formatters.py +707 -0
- truthound/audit/logger.py +902 -0
- truthound/audit/middleware.py +571 -0
- truthound/audit/storage.py +1083 -0
- truthound/benchmark/__init__.py +123 -0
- truthound/benchmark/base.py +757 -0
- truthound/benchmark/comparison.py +635 -0
- truthound/benchmark/generators.py +706 -0
- truthound/benchmark/reporters.py +718 -0
- truthound/benchmark/runner.py +635 -0
- truthound/benchmark/scenarios.py +712 -0
- truthound/cache.py +252 -0
- truthound/checkpoint/__init__.py +136 -0
- truthound/checkpoint/actions/__init__.py +164 -0
- truthound/checkpoint/actions/base.py +324 -0
- truthound/checkpoint/actions/custom.py +234 -0
- truthound/checkpoint/actions/discord_notify.py +290 -0
- truthound/checkpoint/actions/email_notify.py +405 -0
- truthound/checkpoint/actions/github_action.py +406 -0
- truthound/checkpoint/actions/opsgenie.py +1499 -0
- truthound/checkpoint/actions/pagerduty.py +226 -0
- truthound/checkpoint/actions/slack_notify.py +233 -0
- truthound/checkpoint/actions/store_result.py +249 -0
- truthound/checkpoint/actions/teams_notify.py +1570 -0
- truthound/checkpoint/actions/telegram_notify.py +419 -0
- truthound/checkpoint/actions/update_docs.py +552 -0
- truthound/checkpoint/actions/webhook.py +293 -0
- truthound/checkpoint/analytics/__init__.py +147 -0
- truthound/checkpoint/analytics/aggregations/__init__.py +23 -0
- truthound/checkpoint/analytics/aggregations/rollup.py +481 -0
- truthound/checkpoint/analytics/aggregations/time_bucket.py +306 -0
- truthound/checkpoint/analytics/analyzers/__init__.py +17 -0
- truthound/checkpoint/analytics/analyzers/anomaly.py +386 -0
- truthound/checkpoint/analytics/analyzers/base.py +270 -0
- truthound/checkpoint/analytics/analyzers/forecast.py +421 -0
- truthound/checkpoint/analytics/analyzers/trend.py +314 -0
- truthound/checkpoint/analytics/models.py +292 -0
- truthound/checkpoint/analytics/protocols.py +549 -0
- truthound/checkpoint/analytics/service.py +718 -0
- truthound/checkpoint/analytics/stores/__init__.py +16 -0
- truthound/checkpoint/analytics/stores/base.py +306 -0
- truthound/checkpoint/analytics/stores/memory_store.py +353 -0
- truthound/checkpoint/analytics/stores/sqlite_store.py +557 -0
- truthound/checkpoint/analytics/stores/timescale_store.py +501 -0
- truthound/checkpoint/async_actions.py +794 -0
- truthound/checkpoint/async_base.py +708 -0
- truthound/checkpoint/async_checkpoint.py +617 -0
- truthound/checkpoint/async_runner.py +639 -0
- truthound/checkpoint/checkpoint.py +527 -0
- truthound/checkpoint/ci/__init__.py +61 -0
- truthound/checkpoint/ci/detector.py +355 -0
- truthound/checkpoint/ci/reporter.py +436 -0
- truthound/checkpoint/ci/templates.py +454 -0
- truthound/checkpoint/circuitbreaker/__init__.py +133 -0
- truthound/checkpoint/circuitbreaker/breaker.py +542 -0
- truthound/checkpoint/circuitbreaker/core.py +252 -0
- truthound/checkpoint/circuitbreaker/detection.py +459 -0
- truthound/checkpoint/circuitbreaker/middleware.py +389 -0
- truthound/checkpoint/circuitbreaker/registry.py +357 -0
- truthound/checkpoint/distributed/__init__.py +139 -0
- truthound/checkpoint/distributed/backends/__init__.py +35 -0
- truthound/checkpoint/distributed/backends/celery_backend.py +503 -0
- truthound/checkpoint/distributed/backends/kubernetes_backend.py +696 -0
- truthound/checkpoint/distributed/backends/local_backend.py +397 -0
- truthound/checkpoint/distributed/backends/ray_backend.py +625 -0
- truthound/checkpoint/distributed/base.py +774 -0
- truthound/checkpoint/distributed/orchestrator.py +765 -0
- truthound/checkpoint/distributed/protocols.py +842 -0
- truthound/checkpoint/distributed/registry.py +449 -0
- truthound/checkpoint/idempotency/__init__.py +120 -0
- truthound/checkpoint/idempotency/core.py +295 -0
- truthound/checkpoint/idempotency/fingerprint.py +454 -0
- truthound/checkpoint/idempotency/locking.py +604 -0
- truthound/checkpoint/idempotency/service.py +592 -0
- truthound/checkpoint/idempotency/stores.py +653 -0
- truthound/checkpoint/monitoring/__init__.py +134 -0
- truthound/checkpoint/monitoring/aggregators/__init__.py +15 -0
- truthound/checkpoint/monitoring/aggregators/base.py +372 -0
- truthound/checkpoint/monitoring/aggregators/realtime.py +300 -0
- truthound/checkpoint/monitoring/aggregators/window.py +493 -0
- truthound/checkpoint/monitoring/collectors/__init__.py +17 -0
- truthound/checkpoint/monitoring/collectors/base.py +257 -0
- truthound/checkpoint/monitoring/collectors/memory_collector.py +617 -0
- truthound/checkpoint/monitoring/collectors/prometheus_collector.py +451 -0
- truthound/checkpoint/monitoring/collectors/redis_collector.py +518 -0
- truthound/checkpoint/monitoring/events.py +410 -0
- truthound/checkpoint/monitoring/protocols.py +636 -0
- truthound/checkpoint/monitoring/service.py +578 -0
- truthound/checkpoint/monitoring/views/__init__.py +17 -0
- truthound/checkpoint/monitoring/views/base.py +172 -0
- truthound/checkpoint/monitoring/views/queue_view.py +220 -0
- truthound/checkpoint/monitoring/views/task_view.py +240 -0
- truthound/checkpoint/monitoring/views/worker_view.py +263 -0
- truthound/checkpoint/registry.py +337 -0
- truthound/checkpoint/runner.py +356 -0
- truthound/checkpoint/transaction/__init__.py +133 -0
- truthound/checkpoint/transaction/base.py +389 -0
- truthound/checkpoint/transaction/compensatable.py +537 -0
- truthound/checkpoint/transaction/coordinator.py +576 -0
- truthound/checkpoint/transaction/executor.py +622 -0
- truthound/checkpoint/transaction/idempotency.py +534 -0
- truthound/checkpoint/transaction/saga/__init__.py +143 -0
- truthound/checkpoint/transaction/saga/builder.py +584 -0
- truthound/checkpoint/transaction/saga/definition.py +515 -0
- truthound/checkpoint/transaction/saga/event_store.py +542 -0
- truthound/checkpoint/transaction/saga/patterns.py +833 -0
- truthound/checkpoint/transaction/saga/runner.py +718 -0
- truthound/checkpoint/transaction/saga/state_machine.py +793 -0
- truthound/checkpoint/transaction/saga/strategies.py +780 -0
- truthound/checkpoint/transaction/saga/testing.py +886 -0
- truthound/checkpoint/triggers/__init__.py +58 -0
- truthound/checkpoint/triggers/base.py +237 -0
- truthound/checkpoint/triggers/event.py +385 -0
- truthound/checkpoint/triggers/schedule.py +355 -0
- truthound/cli.py +2358 -0
- truthound/cli_modules/__init__.py +124 -0
- truthound/cli_modules/advanced/__init__.py +45 -0
- truthound/cli_modules/advanced/benchmark.py +343 -0
- truthound/cli_modules/advanced/docs.py +225 -0
- truthound/cli_modules/advanced/lineage.py +209 -0
- truthound/cli_modules/advanced/ml.py +320 -0
- truthound/cli_modules/advanced/realtime.py +196 -0
- truthound/cli_modules/checkpoint/__init__.py +46 -0
- truthound/cli_modules/checkpoint/init.py +114 -0
- truthound/cli_modules/checkpoint/list.py +71 -0
- truthound/cli_modules/checkpoint/run.py +159 -0
- truthound/cli_modules/checkpoint/validate.py +67 -0
- truthound/cli_modules/common/__init__.py +71 -0
- truthound/cli_modules/common/errors.py +414 -0
- truthound/cli_modules/common/options.py +419 -0
- truthound/cli_modules/common/output.py +507 -0
- truthound/cli_modules/common/protocol.py +552 -0
- truthound/cli_modules/core/__init__.py +48 -0
- truthound/cli_modules/core/check.py +123 -0
- truthound/cli_modules/core/compare.py +104 -0
- truthound/cli_modules/core/learn.py +57 -0
- truthound/cli_modules/core/mask.py +77 -0
- truthound/cli_modules/core/profile.py +65 -0
- truthound/cli_modules/core/scan.py +61 -0
- truthound/cli_modules/profiler/__init__.py +51 -0
- truthound/cli_modules/profiler/auto_profile.py +175 -0
- truthound/cli_modules/profiler/metadata.py +107 -0
- truthound/cli_modules/profiler/suite.py +283 -0
- truthound/cli_modules/registry.py +431 -0
- truthound/cli_modules/scaffolding/__init__.py +89 -0
- truthound/cli_modules/scaffolding/base.py +631 -0
- truthound/cli_modules/scaffolding/commands.py +545 -0
- truthound/cli_modules/scaffolding/plugins.py +1072 -0
- truthound/cli_modules/scaffolding/reporters.py +594 -0
- truthound/cli_modules/scaffolding/validators.py +1127 -0
- truthound/common/__init__.py +18 -0
- truthound/common/resilience/__init__.py +130 -0
- truthound/common/resilience/bulkhead.py +266 -0
- truthound/common/resilience/circuit_breaker.py +516 -0
- truthound/common/resilience/composite.py +332 -0
- truthound/common/resilience/config.py +292 -0
- truthound/common/resilience/protocols.py +217 -0
- truthound/common/resilience/rate_limiter.py +404 -0
- truthound/common/resilience/retry.py +341 -0
- truthound/datadocs/__init__.py +260 -0
- truthound/datadocs/base.py +571 -0
- truthound/datadocs/builder.py +761 -0
- truthound/datadocs/charts.py +764 -0
- truthound/datadocs/dashboard/__init__.py +63 -0
- truthound/datadocs/dashboard/app.py +576 -0
- truthound/datadocs/dashboard/components.py +584 -0
- truthound/datadocs/dashboard/state.py +240 -0
- truthound/datadocs/engine/__init__.py +46 -0
- truthound/datadocs/engine/context.py +376 -0
- truthound/datadocs/engine/pipeline.py +618 -0
- truthound/datadocs/engine/registry.py +469 -0
- truthound/datadocs/exporters/__init__.py +49 -0
- truthound/datadocs/exporters/base.py +198 -0
- truthound/datadocs/exporters/html.py +178 -0
- truthound/datadocs/exporters/json_exporter.py +253 -0
- truthound/datadocs/exporters/markdown.py +284 -0
- truthound/datadocs/exporters/pdf.py +392 -0
- truthound/datadocs/i18n/__init__.py +86 -0
- truthound/datadocs/i18n/catalog.py +960 -0
- truthound/datadocs/i18n/formatting.py +505 -0
- truthound/datadocs/i18n/loader.py +256 -0
- truthound/datadocs/i18n/plurals.py +378 -0
- truthound/datadocs/renderers/__init__.py +42 -0
- truthound/datadocs/renderers/base.py +401 -0
- truthound/datadocs/renderers/custom.py +342 -0
- truthound/datadocs/renderers/jinja.py +697 -0
- truthound/datadocs/sections.py +736 -0
- truthound/datadocs/styles.py +931 -0
- truthound/datadocs/themes/__init__.py +101 -0
- truthound/datadocs/themes/base.py +336 -0
- truthound/datadocs/themes/default.py +417 -0
- truthound/datadocs/themes/enterprise.py +419 -0
- truthound/datadocs/themes/loader.py +336 -0
- truthound/datadocs/themes.py +301 -0
- truthound/datadocs/transformers/__init__.py +57 -0
- truthound/datadocs/transformers/base.py +268 -0
- truthound/datadocs/transformers/enrichers.py +544 -0
- truthound/datadocs/transformers/filters.py +447 -0
- truthound/datadocs/transformers/i18n.py +468 -0
- truthound/datadocs/versioning/__init__.py +62 -0
- truthound/datadocs/versioning/diff.py +639 -0
- truthound/datadocs/versioning/storage.py +497 -0
- truthound/datadocs/versioning/version.py +358 -0
- truthound/datasources/__init__.py +223 -0
- truthound/datasources/_async_protocols.py +222 -0
- truthound/datasources/_protocols.py +159 -0
- truthound/datasources/adapters.py +428 -0
- truthound/datasources/async_base.py +599 -0
- truthound/datasources/async_factory.py +511 -0
- truthound/datasources/base.py +516 -0
- truthound/datasources/factory.py +433 -0
- truthound/datasources/nosql/__init__.py +47 -0
- truthound/datasources/nosql/base.py +487 -0
- truthound/datasources/nosql/elasticsearch.py +801 -0
- truthound/datasources/nosql/mongodb.py +636 -0
- truthound/datasources/pandas_optimized.py +582 -0
- truthound/datasources/pandas_source.py +216 -0
- truthound/datasources/polars_source.py +395 -0
- truthound/datasources/spark_source.py +479 -0
- truthound/datasources/sql/__init__.py +154 -0
- truthound/datasources/sql/base.py +710 -0
- truthound/datasources/sql/bigquery.py +410 -0
- truthound/datasources/sql/cloud_base.py +199 -0
- truthound/datasources/sql/databricks.py +471 -0
- truthound/datasources/sql/mysql.py +316 -0
- truthound/datasources/sql/oracle.py +427 -0
- truthound/datasources/sql/postgresql.py +321 -0
- truthound/datasources/sql/redshift.py +479 -0
- truthound/datasources/sql/snowflake.py +439 -0
- truthound/datasources/sql/sqlite.py +286 -0
- truthound/datasources/sql/sqlserver.py +437 -0
- truthound/datasources/streaming/__init__.py +47 -0
- truthound/datasources/streaming/base.py +350 -0
- truthound/datasources/streaming/kafka.py +670 -0
- truthound/decorators.py +98 -0
- truthound/docs/__init__.py +69 -0
- truthound/docs/extractor.py +971 -0
- truthound/docs/generator.py +601 -0
- truthound/docs/parser.py +1037 -0
- truthound/docs/renderer.py +999 -0
- truthound/drift/__init__.py +22 -0
- truthound/drift/compare.py +189 -0
- truthound/drift/detectors.py +464 -0
- truthound/drift/report.py +160 -0
- truthound/execution/__init__.py +65 -0
- truthound/execution/_protocols.py +324 -0
- truthound/execution/base.py +576 -0
- truthound/execution/distributed/__init__.py +179 -0
- truthound/execution/distributed/aggregations.py +731 -0
- truthound/execution/distributed/arrow_bridge.py +817 -0
- truthound/execution/distributed/base.py +550 -0
- truthound/execution/distributed/dask_engine.py +976 -0
- truthound/execution/distributed/mixins.py +766 -0
- truthound/execution/distributed/protocols.py +756 -0
- truthound/execution/distributed/ray_engine.py +1127 -0
- truthound/execution/distributed/registry.py +446 -0
- truthound/execution/distributed/spark_engine.py +1011 -0
- truthound/execution/distributed/validator_adapter.py +682 -0
- truthound/execution/pandas_engine.py +401 -0
- truthound/execution/polars_engine.py +497 -0
- truthound/execution/pushdown/__init__.py +230 -0
- truthound/execution/pushdown/ast.py +1550 -0
- truthound/execution/pushdown/builder.py +1550 -0
- truthound/execution/pushdown/dialects.py +1072 -0
- truthound/execution/pushdown/executor.py +829 -0
- truthound/execution/pushdown/optimizer.py +1041 -0
- truthound/execution/sql_engine.py +518 -0
- truthound/infrastructure/__init__.py +189 -0
- truthound/infrastructure/audit.py +1515 -0
- truthound/infrastructure/config.py +1133 -0
- truthound/infrastructure/encryption.py +1132 -0
- truthound/infrastructure/logging.py +1503 -0
- truthound/infrastructure/metrics.py +1220 -0
- truthound/lineage/__init__.py +89 -0
- truthound/lineage/base.py +746 -0
- truthound/lineage/impact_analysis.py +474 -0
- truthound/lineage/integrations/__init__.py +22 -0
- truthound/lineage/integrations/openlineage.py +548 -0
- truthound/lineage/tracker.py +512 -0
- truthound/lineage/visualization/__init__.py +33 -0
- truthound/lineage/visualization/protocols.py +145 -0
- truthound/lineage/visualization/renderers/__init__.py +20 -0
- truthound/lineage/visualization/renderers/cytoscape.py +329 -0
- truthound/lineage/visualization/renderers/d3.py +331 -0
- truthound/lineage/visualization/renderers/graphviz.py +276 -0
- truthound/lineage/visualization/renderers/mermaid.py +308 -0
- truthound/maskers.py +113 -0
- truthound/ml/__init__.py +124 -0
- truthound/ml/anomaly_models/__init__.py +31 -0
- truthound/ml/anomaly_models/ensemble.py +362 -0
- truthound/ml/anomaly_models/isolation_forest.py +444 -0
- truthound/ml/anomaly_models/statistical.py +392 -0
- truthound/ml/base.py +1178 -0
- truthound/ml/drift_detection/__init__.py +26 -0
- truthound/ml/drift_detection/concept.py +381 -0
- truthound/ml/drift_detection/distribution.py +361 -0
- truthound/ml/drift_detection/feature.py +442 -0
- truthound/ml/drift_detection/multivariate.py +495 -0
- truthound/ml/monitoring/__init__.py +88 -0
- truthound/ml/monitoring/alerting/__init__.py +33 -0
- truthound/ml/monitoring/alerting/handlers.py +427 -0
- truthound/ml/monitoring/alerting/rules.py +508 -0
- truthound/ml/monitoring/collectors/__init__.py +19 -0
- truthound/ml/monitoring/collectors/composite.py +105 -0
- truthound/ml/monitoring/collectors/drift.py +324 -0
- truthound/ml/monitoring/collectors/performance.py +179 -0
- truthound/ml/monitoring/collectors/quality.py +369 -0
- truthound/ml/monitoring/monitor.py +536 -0
- truthound/ml/monitoring/protocols.py +451 -0
- truthound/ml/monitoring/stores/__init__.py +15 -0
- truthound/ml/monitoring/stores/memory.py +201 -0
- truthound/ml/monitoring/stores/prometheus.py +296 -0
- truthound/ml/rule_learning/__init__.py +25 -0
- truthound/ml/rule_learning/constraint_miner.py +443 -0
- truthound/ml/rule_learning/pattern_learner.py +499 -0
- truthound/ml/rule_learning/profile_learner.py +462 -0
- truthound/multitenancy/__init__.py +326 -0
- truthound/multitenancy/core.py +852 -0
- truthound/multitenancy/integration.py +597 -0
- truthound/multitenancy/isolation.py +630 -0
- truthound/multitenancy/manager.py +770 -0
- truthound/multitenancy/middleware.py +765 -0
- truthound/multitenancy/quota.py +537 -0
- truthound/multitenancy/resolvers.py +603 -0
- truthound/multitenancy/storage.py +703 -0
- truthound/observability/__init__.py +307 -0
- truthound/observability/context.py +531 -0
- truthound/observability/instrumentation.py +611 -0
- truthound/observability/logging.py +887 -0
- truthound/observability/metrics.py +1157 -0
- truthound/observability/tracing/__init__.py +178 -0
- truthound/observability/tracing/baggage.py +310 -0
- truthound/observability/tracing/config.py +426 -0
- truthound/observability/tracing/exporter.py +787 -0
- truthound/observability/tracing/integration.py +1018 -0
- truthound/observability/tracing/otel/__init__.py +146 -0
- truthound/observability/tracing/otel/adapter.py +982 -0
- truthound/observability/tracing/otel/bridge.py +1177 -0
- truthound/observability/tracing/otel/compat.py +681 -0
- truthound/observability/tracing/otel/config.py +691 -0
- truthound/observability/tracing/otel/detection.py +327 -0
- truthound/observability/tracing/otel/protocols.py +426 -0
- truthound/observability/tracing/processor.py +561 -0
- truthound/observability/tracing/propagator.py +757 -0
- truthound/observability/tracing/provider.py +569 -0
- truthound/observability/tracing/resource.py +515 -0
- truthound/observability/tracing/sampler.py +487 -0
- truthound/observability/tracing/span.py +676 -0
- truthound/plugins/__init__.py +198 -0
- truthound/plugins/base.py +599 -0
- truthound/plugins/cli.py +680 -0
- truthound/plugins/dependencies/__init__.py +42 -0
- truthound/plugins/dependencies/graph.py +422 -0
- truthound/plugins/dependencies/resolver.py +417 -0
- truthound/plugins/discovery.py +379 -0
- truthound/plugins/docs/__init__.py +46 -0
- truthound/plugins/docs/extractor.py +444 -0
- truthound/plugins/docs/renderer.py +499 -0
- truthound/plugins/enterprise_manager.py +877 -0
- truthound/plugins/examples/__init__.py +19 -0
- truthound/plugins/examples/custom_validators.py +317 -0
- truthound/plugins/examples/slack_notifier.py +312 -0
- truthound/plugins/examples/xml_reporter.py +254 -0
- truthound/plugins/hooks.py +558 -0
- truthound/plugins/lifecycle/__init__.py +43 -0
- truthound/plugins/lifecycle/hot_reload.py +402 -0
- truthound/plugins/lifecycle/manager.py +371 -0
- truthound/plugins/manager.py +736 -0
- truthound/plugins/registry.py +338 -0
- truthound/plugins/security/__init__.py +93 -0
- truthound/plugins/security/exceptions.py +332 -0
- truthound/plugins/security/policies.py +348 -0
- truthound/plugins/security/protocols.py +643 -0
- truthound/plugins/security/sandbox/__init__.py +45 -0
- truthound/plugins/security/sandbox/context.py +158 -0
- truthound/plugins/security/sandbox/engines/__init__.py +19 -0
- truthound/plugins/security/sandbox/engines/container.py +379 -0
- truthound/plugins/security/sandbox/engines/noop.py +144 -0
- truthound/plugins/security/sandbox/engines/process.py +336 -0
- truthound/plugins/security/sandbox/factory.py +211 -0
- truthound/plugins/security/signing/__init__.py +57 -0
- truthound/plugins/security/signing/service.py +330 -0
- truthound/plugins/security/signing/trust_store.py +368 -0
- truthound/plugins/security/signing/verifier.py +459 -0
- truthound/plugins/versioning/__init__.py +41 -0
- truthound/plugins/versioning/constraints.py +297 -0
- truthound/plugins/versioning/resolver.py +329 -0
- truthound/profiler/__init__.py +1729 -0
- truthound/profiler/_lazy.py +452 -0
- truthound/profiler/ab_testing/__init__.py +80 -0
- truthound/profiler/ab_testing/analysis.py +449 -0
- truthound/profiler/ab_testing/base.py +257 -0
- truthound/profiler/ab_testing/experiment.py +395 -0
- truthound/profiler/ab_testing/tracking.py +368 -0
- truthound/profiler/auto_threshold.py +1170 -0
- truthound/profiler/base.py +579 -0
- truthound/profiler/cache_patterns.py +911 -0
- truthound/profiler/caching.py +1303 -0
- truthound/profiler/column_profiler.py +712 -0
- truthound/profiler/comparison.py +1007 -0
- truthound/profiler/custom_patterns.py +1170 -0
- truthound/profiler/dashboard/__init__.py +50 -0
- truthound/profiler/dashboard/app.py +476 -0
- truthound/profiler/dashboard/components.py +457 -0
- truthound/profiler/dashboard/config.py +72 -0
- truthound/profiler/distributed/__init__.py +83 -0
- truthound/profiler/distributed/base.py +281 -0
- truthound/profiler/distributed/dask_backend.py +498 -0
- truthound/profiler/distributed/local_backend.py +293 -0
- truthound/profiler/distributed/profiler.py +304 -0
- truthound/profiler/distributed/ray_backend.py +374 -0
- truthound/profiler/distributed/spark_backend.py +375 -0
- truthound/profiler/distributed.py +1366 -0
- truthound/profiler/enterprise_sampling.py +1065 -0
- truthound/profiler/errors.py +488 -0
- truthound/profiler/evolution/__init__.py +91 -0
- truthound/profiler/evolution/alerts.py +426 -0
- truthound/profiler/evolution/changes.py +206 -0
- truthound/profiler/evolution/compatibility.py +365 -0
- truthound/profiler/evolution/detector.py +372 -0
- truthound/profiler/evolution/protocols.py +121 -0
- truthound/profiler/generators/__init__.py +48 -0
- truthound/profiler/generators/base.py +384 -0
- truthound/profiler/generators/ml_rules.py +375 -0
- truthound/profiler/generators/pattern_rules.py +384 -0
- truthound/profiler/generators/schema_rules.py +267 -0
- truthound/profiler/generators/stats_rules.py +324 -0
- truthound/profiler/generators/suite_generator.py +857 -0
- truthound/profiler/i18n.py +1542 -0
- truthound/profiler/incremental.py +554 -0
- truthound/profiler/incremental_validation.py +1710 -0
- truthound/profiler/integration/__init__.py +73 -0
- truthound/profiler/integration/adapters.py +345 -0
- truthound/profiler/integration/context.py +371 -0
- truthound/profiler/integration/executor.py +527 -0
- truthound/profiler/integration/naming.py +75 -0
- truthound/profiler/integration/protocols.py +243 -0
- truthound/profiler/memory.py +1185 -0
- truthound/profiler/migration/__init__.py +60 -0
- truthound/profiler/migration/base.py +345 -0
- truthound/profiler/migration/manager.py +444 -0
- truthound/profiler/migration/v1_0_to_v1_1.py +484 -0
- truthound/profiler/ml/__init__.py +73 -0
- truthound/profiler/ml/base.py +244 -0
- truthound/profiler/ml/classifier.py +507 -0
- truthound/profiler/ml/feature_extraction.py +604 -0
- truthound/profiler/ml/pretrained.py +448 -0
- truthound/profiler/ml_inference.py +1276 -0
- truthound/profiler/native_patterns.py +815 -0
- truthound/profiler/observability.py +1184 -0
- truthound/profiler/process_timeout.py +1566 -0
- truthound/profiler/progress.py +568 -0
- truthound/profiler/progress_callbacks.py +1734 -0
- truthound/profiler/quality.py +1345 -0
- truthound/profiler/resilience.py +1180 -0
- truthound/profiler/sampled_matcher.py +794 -0
- truthound/profiler/sampling.py +1288 -0
- truthound/profiler/scheduling/__init__.py +82 -0
- truthound/profiler/scheduling/protocols.py +214 -0
- truthound/profiler/scheduling/scheduler.py +474 -0
- truthound/profiler/scheduling/storage.py +457 -0
- truthound/profiler/scheduling/triggers.py +449 -0
- truthound/profiler/schema.py +603 -0
- truthound/profiler/streaming.py +685 -0
- truthound/profiler/streaming_patterns.py +1354 -0
- truthound/profiler/suite_cli.py +625 -0
- truthound/profiler/suite_config.py +789 -0
- truthound/profiler/suite_export.py +1268 -0
- truthound/profiler/table_profiler.py +547 -0
- truthound/profiler/timeout.py +565 -0
- truthound/profiler/validation.py +1532 -0
- truthound/profiler/visualization/__init__.py +118 -0
- truthound/profiler/visualization/base.py +346 -0
- truthound/profiler/visualization/generator.py +1259 -0
- truthound/profiler/visualization/plotly_renderer.py +811 -0
- truthound/profiler/visualization/renderers.py +669 -0
- truthound/profiler/visualization/sections.py +540 -0
- truthound/profiler/visualization.py +2122 -0
- truthound/profiler/yaml_validation.py +1151 -0
- truthound/py.typed +0 -0
- truthound/ratelimit/__init__.py +248 -0
- truthound/ratelimit/algorithms.py +1108 -0
- truthound/ratelimit/core.py +573 -0
- truthound/ratelimit/integration.py +532 -0
- truthound/ratelimit/limiter.py +663 -0
- truthound/ratelimit/middleware.py +700 -0
- truthound/ratelimit/policy.py +792 -0
- truthound/ratelimit/storage.py +763 -0
- truthound/rbac/__init__.py +340 -0
- truthound/rbac/core.py +976 -0
- truthound/rbac/integration.py +760 -0
- truthound/rbac/manager.py +1052 -0
- truthound/rbac/middleware.py +842 -0
- truthound/rbac/policy.py +954 -0
- truthound/rbac/storage.py +878 -0
- truthound/realtime/__init__.py +141 -0
- truthound/realtime/adapters/__init__.py +43 -0
- truthound/realtime/adapters/base.py +533 -0
- truthound/realtime/adapters/kafka.py +487 -0
- truthound/realtime/adapters/kinesis.py +479 -0
- truthound/realtime/adapters/mock.py +243 -0
- truthound/realtime/base.py +553 -0
- truthound/realtime/factory.py +382 -0
- truthound/realtime/incremental.py +660 -0
- truthound/realtime/processing/__init__.py +67 -0
- truthound/realtime/processing/exactly_once.py +575 -0
- truthound/realtime/processing/state.py +547 -0
- truthound/realtime/processing/windows.py +647 -0
- truthound/realtime/protocols.py +569 -0
- truthound/realtime/streaming.py +605 -0
- truthound/realtime/testing/__init__.py +32 -0
- truthound/realtime/testing/containers.py +615 -0
- truthound/realtime/testing/fixtures.py +484 -0
- truthound/report.py +280 -0
- truthound/reporters/__init__.py +46 -0
- truthound/reporters/_protocols.py +30 -0
- truthound/reporters/base.py +324 -0
- truthound/reporters/ci/__init__.py +66 -0
- truthound/reporters/ci/azure.py +436 -0
- truthound/reporters/ci/base.py +509 -0
- truthound/reporters/ci/bitbucket.py +567 -0
- truthound/reporters/ci/circleci.py +547 -0
- truthound/reporters/ci/detection.py +364 -0
- truthound/reporters/ci/factory.py +182 -0
- truthound/reporters/ci/github.py +388 -0
- truthound/reporters/ci/gitlab.py +471 -0
- truthound/reporters/ci/jenkins.py +525 -0
- truthound/reporters/console_reporter.py +299 -0
- truthound/reporters/factory.py +211 -0
- truthound/reporters/html_reporter.py +524 -0
- truthound/reporters/json_reporter.py +256 -0
- truthound/reporters/markdown_reporter.py +280 -0
- truthound/reporters/sdk/__init__.py +174 -0
- truthound/reporters/sdk/builder.py +558 -0
- truthound/reporters/sdk/mixins.py +1150 -0
- truthound/reporters/sdk/schema.py +1493 -0
- truthound/reporters/sdk/templates.py +666 -0
- truthound/reporters/sdk/testing.py +968 -0
- truthound/scanners.py +170 -0
- truthound/scheduling/__init__.py +122 -0
- truthound/scheduling/cron.py +1136 -0
- truthound/scheduling/presets.py +212 -0
- truthound/schema.py +275 -0
- truthound/secrets/__init__.py +173 -0
- truthound/secrets/base.py +618 -0
- truthound/secrets/cloud.py +682 -0
- truthound/secrets/integration.py +507 -0
- truthound/secrets/manager.py +633 -0
- truthound/secrets/oidc/__init__.py +172 -0
- truthound/secrets/oidc/base.py +902 -0
- truthound/secrets/oidc/credential_provider.py +623 -0
- truthound/secrets/oidc/exchangers.py +1001 -0
- truthound/secrets/oidc/github/__init__.py +110 -0
- truthound/secrets/oidc/github/claims.py +718 -0
- truthound/secrets/oidc/github/enhanced_provider.py +693 -0
- truthound/secrets/oidc/github/trust_policy.py +742 -0
- truthound/secrets/oidc/github/verification.py +723 -0
- truthound/secrets/oidc/github/workflow.py +691 -0
- truthound/secrets/oidc/providers.py +825 -0
- truthound/secrets/providers.py +506 -0
- truthound/secrets/resolver.py +495 -0
- truthound/stores/__init__.py +177 -0
- truthound/stores/backends/__init__.py +18 -0
- truthound/stores/backends/_protocols.py +340 -0
- truthound/stores/backends/azure_blob.py +530 -0
- truthound/stores/backends/concurrent_filesystem.py +915 -0
- truthound/stores/backends/connection_pool.py +1365 -0
- truthound/stores/backends/database.py +743 -0
- truthound/stores/backends/filesystem.py +538 -0
- truthound/stores/backends/gcs.py +399 -0
- truthound/stores/backends/memory.py +354 -0
- truthound/stores/backends/s3.py +434 -0
- truthound/stores/backpressure/__init__.py +84 -0
- truthound/stores/backpressure/base.py +375 -0
- truthound/stores/backpressure/circuit_breaker.py +434 -0
- truthound/stores/backpressure/monitor.py +376 -0
- truthound/stores/backpressure/strategies.py +677 -0
- truthound/stores/base.py +551 -0
- truthound/stores/batching/__init__.py +65 -0
- truthound/stores/batching/base.py +305 -0
- truthound/stores/batching/buffer.py +370 -0
- truthound/stores/batching/store.py +248 -0
- truthound/stores/batching/writer.py +521 -0
- truthound/stores/caching/__init__.py +60 -0
- truthound/stores/caching/backends.py +684 -0
- truthound/stores/caching/base.py +356 -0
- truthound/stores/caching/store.py +305 -0
- truthound/stores/compression/__init__.py +193 -0
- truthound/stores/compression/adaptive.py +694 -0
- truthound/stores/compression/base.py +514 -0
- truthound/stores/compression/pipeline.py +868 -0
- truthound/stores/compression/providers.py +672 -0
- truthound/stores/compression/streaming.py +832 -0
- truthound/stores/concurrency/__init__.py +81 -0
- truthound/stores/concurrency/atomic.py +556 -0
- truthound/stores/concurrency/index.py +775 -0
- truthound/stores/concurrency/locks.py +576 -0
- truthound/stores/concurrency/manager.py +482 -0
- truthound/stores/encryption/__init__.py +297 -0
- truthound/stores/encryption/base.py +952 -0
- truthound/stores/encryption/keys.py +1191 -0
- truthound/stores/encryption/pipeline.py +903 -0
- truthound/stores/encryption/providers.py +953 -0
- truthound/stores/encryption/streaming.py +950 -0
- truthound/stores/expectations.py +227 -0
- truthound/stores/factory.py +246 -0
- truthound/stores/migration/__init__.py +75 -0
- truthound/stores/migration/base.py +480 -0
- truthound/stores/migration/manager.py +347 -0
- truthound/stores/migration/registry.py +382 -0
- truthound/stores/migration/store.py +559 -0
- truthound/stores/observability/__init__.py +106 -0
- truthound/stores/observability/audit.py +718 -0
- truthound/stores/observability/config.py +270 -0
- truthound/stores/observability/factory.py +208 -0
- truthound/stores/observability/metrics.py +636 -0
- truthound/stores/observability/protocols.py +410 -0
- truthound/stores/observability/store.py +570 -0
- truthound/stores/observability/tracing.py +784 -0
- truthound/stores/replication/__init__.py +76 -0
- truthound/stores/replication/base.py +260 -0
- truthound/stores/replication/monitor.py +269 -0
- truthound/stores/replication/store.py +439 -0
- truthound/stores/replication/syncer.py +391 -0
- truthound/stores/results.py +359 -0
- truthound/stores/retention/__init__.py +77 -0
- truthound/stores/retention/base.py +378 -0
- truthound/stores/retention/policies.py +621 -0
- truthound/stores/retention/scheduler.py +279 -0
- truthound/stores/retention/store.py +526 -0
- truthound/stores/streaming/__init__.py +138 -0
- truthound/stores/streaming/base.py +801 -0
- truthound/stores/streaming/database.py +984 -0
- truthound/stores/streaming/filesystem.py +719 -0
- truthound/stores/streaming/reader.py +629 -0
- truthound/stores/streaming/s3.py +843 -0
- truthound/stores/streaming/writer.py +790 -0
- truthound/stores/tiering/__init__.py +108 -0
- truthound/stores/tiering/base.py +462 -0
- truthound/stores/tiering/manager.py +249 -0
- truthound/stores/tiering/policies.py +692 -0
- truthound/stores/tiering/store.py +526 -0
- truthound/stores/versioning/__init__.py +56 -0
- truthound/stores/versioning/base.py +376 -0
- truthound/stores/versioning/store.py +660 -0
- truthound/stores/versioning/strategies.py +353 -0
- truthound/types.py +56 -0
- truthound/validators/__init__.py +774 -0
- truthound/validators/aggregate/__init__.py +27 -0
- truthound/validators/aggregate/central.py +116 -0
- truthound/validators/aggregate/extremes.py +116 -0
- truthound/validators/aggregate/spread.py +118 -0
- truthound/validators/aggregate/sum.py +64 -0
- truthound/validators/aggregate/type.py +78 -0
- truthound/validators/anomaly/__init__.py +93 -0
- truthound/validators/anomaly/base.py +431 -0
- truthound/validators/anomaly/ml_based.py +1190 -0
- truthound/validators/anomaly/multivariate.py +647 -0
- truthound/validators/anomaly/statistical.py +599 -0
- truthound/validators/base.py +1089 -0
- truthound/validators/business_rule/__init__.py +46 -0
- truthound/validators/business_rule/base.py +147 -0
- truthound/validators/business_rule/checksum.py +509 -0
- truthound/validators/business_rule/financial.py +526 -0
- truthound/validators/cache.py +733 -0
- truthound/validators/completeness/__init__.py +39 -0
- truthound/validators/completeness/conditional.py +73 -0
- truthound/validators/completeness/default.py +98 -0
- truthound/validators/completeness/empty.py +103 -0
- truthound/validators/completeness/nan.py +337 -0
- truthound/validators/completeness/null.py +152 -0
- truthound/validators/cross_table/__init__.py +17 -0
- truthound/validators/cross_table/aggregate.py +333 -0
- truthound/validators/cross_table/row_count.py +122 -0
- truthound/validators/datetime/__init__.py +29 -0
- truthound/validators/datetime/format.py +78 -0
- truthound/validators/datetime/freshness.py +269 -0
- truthound/validators/datetime/order.py +73 -0
- truthound/validators/datetime/parseable.py +185 -0
- truthound/validators/datetime/range.py +202 -0
- truthound/validators/datetime/timezone.py +69 -0
- truthound/validators/distribution/__init__.py +49 -0
- truthound/validators/distribution/distribution.py +128 -0
- truthound/validators/distribution/monotonic.py +119 -0
- truthound/validators/distribution/outlier.py +178 -0
- truthound/validators/distribution/quantile.py +80 -0
- truthound/validators/distribution/range.py +254 -0
- truthound/validators/distribution/set.py +125 -0
- truthound/validators/distribution/statistical.py +459 -0
- truthound/validators/drift/__init__.py +79 -0
- truthound/validators/drift/base.py +427 -0
- truthound/validators/drift/multi_feature.py +401 -0
- truthound/validators/drift/numeric.py +395 -0
- truthound/validators/drift/psi.py +446 -0
- truthound/validators/drift/statistical.py +510 -0
- truthound/validators/enterprise.py +1658 -0
- truthound/validators/geospatial/__init__.py +80 -0
- truthound/validators/geospatial/base.py +97 -0
- truthound/validators/geospatial/boundary.py +238 -0
- truthound/validators/geospatial/coordinate.py +351 -0
- truthound/validators/geospatial/distance.py +399 -0
- truthound/validators/geospatial/polygon.py +665 -0
- truthound/validators/i18n/__init__.py +308 -0
- truthound/validators/i18n/bidi.py +571 -0
- truthound/validators/i18n/catalogs.py +570 -0
- truthound/validators/i18n/dialects.py +763 -0
- truthound/validators/i18n/extended_catalogs.py +549 -0
- truthound/validators/i18n/formatting.py +1434 -0
- truthound/validators/i18n/loader.py +1020 -0
- truthound/validators/i18n/messages.py +521 -0
- truthound/validators/i18n/plural.py +683 -0
- truthound/validators/i18n/protocols.py +855 -0
- truthound/validators/i18n/tms.py +1162 -0
- truthound/validators/localization/__init__.py +53 -0
- truthound/validators/localization/base.py +122 -0
- truthound/validators/localization/chinese.py +362 -0
- truthound/validators/localization/japanese.py +275 -0
- truthound/validators/localization/korean.py +524 -0
- truthound/validators/memory/__init__.py +94 -0
- truthound/validators/memory/approximate_knn.py +506 -0
- truthound/validators/memory/base.py +547 -0
- truthound/validators/memory/sgd_online.py +719 -0
- truthound/validators/memory/streaming_ecdf.py +753 -0
- truthound/validators/ml_feature/__init__.py +54 -0
- truthound/validators/ml_feature/base.py +249 -0
- truthound/validators/ml_feature/correlation.py +299 -0
- truthound/validators/ml_feature/leakage.py +344 -0
- truthound/validators/ml_feature/null_impact.py +270 -0
- truthound/validators/ml_feature/scale.py +264 -0
- truthound/validators/multi_column/__init__.py +89 -0
- truthound/validators/multi_column/arithmetic.py +284 -0
- truthound/validators/multi_column/base.py +231 -0
- truthound/validators/multi_column/comparison.py +273 -0
- truthound/validators/multi_column/consistency.py +312 -0
- truthound/validators/multi_column/statistical.py +299 -0
- truthound/validators/optimization/__init__.py +164 -0
- truthound/validators/optimization/aggregation.py +563 -0
- truthound/validators/optimization/covariance.py +556 -0
- truthound/validators/optimization/geo.py +626 -0
- truthound/validators/optimization/graph.py +587 -0
- truthound/validators/optimization/orchestrator.py +970 -0
- truthound/validators/optimization/profiling.py +1312 -0
- truthound/validators/privacy/__init__.py +223 -0
- truthound/validators/privacy/base.py +635 -0
- truthound/validators/privacy/ccpa.py +670 -0
- truthound/validators/privacy/gdpr.py +728 -0
- truthound/validators/privacy/global_patterns.py +604 -0
- truthound/validators/privacy/plugins.py +867 -0
- truthound/validators/profiling/__init__.py +52 -0
- truthound/validators/profiling/base.py +175 -0
- truthound/validators/profiling/cardinality.py +312 -0
- truthound/validators/profiling/entropy.py +391 -0
- truthound/validators/profiling/frequency.py +455 -0
- truthound/validators/pushdown_support.py +660 -0
- truthound/validators/query/__init__.py +91 -0
- truthound/validators/query/aggregate.py +346 -0
- truthound/validators/query/base.py +246 -0
- truthound/validators/query/column.py +249 -0
- truthound/validators/query/expression.py +274 -0
- truthound/validators/query/result.py +323 -0
- truthound/validators/query/row_count.py +264 -0
- truthound/validators/referential/__init__.py +80 -0
- truthound/validators/referential/base.py +395 -0
- truthound/validators/referential/cascade.py +391 -0
- truthound/validators/referential/circular.py +563 -0
- truthound/validators/referential/foreign_key.py +624 -0
- truthound/validators/referential/orphan.py +485 -0
- truthound/validators/registry.py +112 -0
- truthound/validators/schema/__init__.py +41 -0
- truthound/validators/schema/column_count.py +142 -0
- truthound/validators/schema/column_exists.py +80 -0
- truthound/validators/schema/column_order.py +82 -0
- truthound/validators/schema/column_pair.py +85 -0
- truthound/validators/schema/column_pair_set.py +195 -0
- truthound/validators/schema/column_type.py +94 -0
- truthound/validators/schema/multi_column.py +53 -0
- truthound/validators/schema/multi_column_aggregate.py +175 -0
- truthound/validators/schema/referential.py +274 -0
- truthound/validators/schema/table_schema.py +91 -0
- truthound/validators/schema_validator.py +219 -0
- truthound/validators/sdk/__init__.py +250 -0
- truthound/validators/sdk/builder.py +680 -0
- truthound/validators/sdk/decorators.py +474 -0
- truthound/validators/sdk/enterprise/__init__.py +211 -0
- truthound/validators/sdk/enterprise/docs.py +725 -0
- truthound/validators/sdk/enterprise/fuzzing.py +659 -0
- truthound/validators/sdk/enterprise/licensing.py +709 -0
- truthound/validators/sdk/enterprise/manager.py +543 -0
- truthound/validators/sdk/enterprise/resources.py +628 -0
- truthound/validators/sdk/enterprise/sandbox.py +766 -0
- truthound/validators/sdk/enterprise/signing.py +603 -0
- truthound/validators/sdk/enterprise/templates.py +865 -0
- truthound/validators/sdk/enterprise/versioning.py +659 -0
- truthound/validators/sdk/templates.py +757 -0
- truthound/validators/sdk/testing.py +807 -0
- truthound/validators/security/__init__.py +181 -0
- truthound/validators/security/redos/__init__.py +182 -0
- truthound/validators/security/redos/core.py +861 -0
- truthound/validators/security/redos/cpu_monitor.py +593 -0
- truthound/validators/security/redos/cve_database.py +791 -0
- truthound/validators/security/redos/ml/__init__.py +155 -0
- truthound/validators/security/redos/ml/base.py +785 -0
- truthound/validators/security/redos/ml/datasets.py +618 -0
- truthound/validators/security/redos/ml/features.py +359 -0
- truthound/validators/security/redos/ml/models.py +1000 -0
- truthound/validators/security/redos/ml/predictor.py +507 -0
- truthound/validators/security/redos/ml/storage.py +632 -0
- truthound/validators/security/redos/ml/training.py +571 -0
- truthound/validators/security/redos/ml_analyzer.py +937 -0
- truthound/validators/security/redos/optimizer.py +674 -0
- truthound/validators/security/redos/profiler.py +682 -0
- truthound/validators/security/redos/re2_engine.py +709 -0
- truthound/validators/security/redos.py +886 -0
- truthound/validators/security/sql_security.py +1247 -0
- truthound/validators/streaming/__init__.py +126 -0
- truthound/validators/streaming/base.py +292 -0
- truthound/validators/streaming/completeness.py +210 -0
- truthound/validators/streaming/mixin.py +575 -0
- truthound/validators/streaming/range.py +308 -0
- truthound/validators/streaming/sources.py +846 -0
- truthound/validators/string/__init__.py +57 -0
- truthound/validators/string/casing.py +158 -0
- truthound/validators/string/charset.py +96 -0
- truthound/validators/string/format.py +501 -0
- truthound/validators/string/json.py +77 -0
- truthound/validators/string/json_schema.py +184 -0
- truthound/validators/string/length.py +104 -0
- truthound/validators/string/like_pattern.py +237 -0
- truthound/validators/string/regex.py +202 -0
- truthound/validators/string/regex_extended.py +435 -0
- truthound/validators/table/__init__.py +88 -0
- truthound/validators/table/base.py +78 -0
- truthound/validators/table/column_count.py +198 -0
- truthound/validators/table/freshness.py +362 -0
- truthound/validators/table/row_count.py +251 -0
- truthound/validators/table/schema.py +333 -0
- truthound/validators/table/size.py +285 -0
- truthound/validators/timeout/__init__.py +102 -0
- truthound/validators/timeout/advanced/__init__.py +247 -0
- truthound/validators/timeout/advanced/circuit_breaker.py +675 -0
- truthound/validators/timeout/advanced/prediction.py +773 -0
- truthound/validators/timeout/advanced/priority.py +618 -0
- truthound/validators/timeout/advanced/redis_backend.py +770 -0
- truthound/validators/timeout/advanced/retry.py +721 -0
- truthound/validators/timeout/advanced/sampling.py +788 -0
- truthound/validators/timeout/advanced/sla.py +661 -0
- truthound/validators/timeout/advanced/telemetry.py +804 -0
- truthound/validators/timeout/cascade.py +477 -0
- truthound/validators/timeout/deadline.py +657 -0
- truthound/validators/timeout/degradation.py +525 -0
- truthound/validators/timeout/distributed.py +597 -0
- truthound/validators/timeseries/__init__.py +89 -0
- truthound/validators/timeseries/base.py +326 -0
- truthound/validators/timeseries/completeness.py +617 -0
- truthound/validators/timeseries/gap.py +485 -0
- truthound/validators/timeseries/monotonic.py +310 -0
- truthound/validators/timeseries/seasonality.py +422 -0
- truthound/validators/timeseries/trend.py +510 -0
- truthound/validators/uniqueness/__init__.py +59 -0
- truthound/validators/uniqueness/approximate.py +475 -0
- truthound/validators/uniqueness/distinct_values.py +253 -0
- truthound/validators/uniqueness/duplicate.py +118 -0
- truthound/validators/uniqueness/primary_key.py +140 -0
- truthound/validators/uniqueness/unique.py +191 -0
- truthound/validators/uniqueness/within_record.py +599 -0
- truthound/validators/utils.py +756 -0
- truthound-1.0.8.dist-info/METADATA +474 -0
- truthound-1.0.8.dist-info/RECORD +877 -0
- truthound-1.0.8.dist-info/WHEEL +4 -0
- truthound-1.0.8.dist-info/entry_points.txt +2 -0
- truthound-1.0.8.dist-info/licenses/LICENSE +190 -0
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
"""Extended Language Catalogs.
|
|
2
|
+
|
|
3
|
+
This module provides complete message catalogs for additional languages:
|
|
4
|
+
- Portuguese (pt) - with Brazilian and European variants
|
|
5
|
+
- Italian (it)
|
|
6
|
+
- Russian (ru)
|
|
7
|
+
|
|
8
|
+
These catalogs are complete translations of all validator messages,
|
|
9
|
+
ready for enterprise deployment.
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
from truthound.validators.i18n.extended_catalogs import (
|
|
13
|
+
get_portuguese_messages,
|
|
14
|
+
get_italian_messages,
|
|
15
|
+
get_russian_messages,
|
|
16
|
+
get_arabic_messages,
|
|
17
|
+
get_hebrew_messages,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
# Get Russian catalog
|
|
21
|
+
catalog = get_russian_messages()
|
|
22
|
+
print(catalog.get("null.values_found"))
|
|
23
|
+
# -> "Обнаружено {count} пустых значений в столбце '{column}'"
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
from truthound.validators.i18n.catalogs import ValidatorMessageCatalog
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# ==============================================================================
|
|
32
|
+
# Portuguese Messages (Complete)
|
|
33
|
+
# ==============================================================================
|
|
34
|
+
|
|
35
|
+
_PORTUGUESE_MESSAGES: dict[str, str] = {
|
|
36
|
+
# Null/Completeness
|
|
37
|
+
"null.values_found": "Encontrados {count} valores nulos na coluna '{column}'",
|
|
38
|
+
"null.column_empty": "A coluna '{column}' está completamente vazia",
|
|
39
|
+
"null.above_threshold": "A taxa de nulos ({ratio:.1%}) excede o limite ({threshold:.1%}) na coluna '{column}'",
|
|
40
|
+
|
|
41
|
+
# Uniqueness
|
|
42
|
+
"unique.duplicates_found": "Encontrados {count} valores duplicados na coluna '{column}'",
|
|
43
|
+
"unique.composite_duplicates": "Encontradas {count} combinações duplicadas para as colunas {columns}",
|
|
44
|
+
"unique.key_violation": "Violação de chave primária: {count} chaves duplicadas em '{column}'",
|
|
45
|
+
|
|
46
|
+
# Type
|
|
47
|
+
"type.mismatch": "Incompatibilidade de tipo na coluna '{column}': esperado {expected}, encontrado {actual}",
|
|
48
|
+
"type.coercion_failed": "Não foi possível converter {count} valores na coluna '{column}' para {target_type}",
|
|
49
|
+
"type.inference_failed": "Não foi possível inferir o tipo da coluna '{column}'",
|
|
50
|
+
|
|
51
|
+
# Format
|
|
52
|
+
"format.invalid_email": "Encontrados {count} endereços de email inválidos na coluna '{column}'",
|
|
53
|
+
"format.invalid_phone": "Encontrados {count} números de telefone inválidos na coluna '{column}'",
|
|
54
|
+
"format.invalid_date": "Encontradas {count} datas inválidas na coluna '{column}'",
|
|
55
|
+
"format.invalid_url": "Encontrados {count} URLs inválidos na coluna '{column}'",
|
|
56
|
+
"format.pattern_mismatch": "Encontrados {count} valores que não correspondem ao padrão '{pattern}' na coluna '{column}'",
|
|
57
|
+
"format.regex_failed": "Validação de regex falhou para a coluna '{column}': {count} valores não correspondentes",
|
|
58
|
+
|
|
59
|
+
# Range
|
|
60
|
+
"range.out_of_bounds": "Encontrados {count} valores fora do intervalo [{min}, {max}] na coluna '{column}'",
|
|
61
|
+
"range.below_minimum": "Encontrados {count} valores abaixo do mínimo ({min}) na coluna '{column}'",
|
|
62
|
+
"range.above_maximum": "Encontrados {count} valores acima do máximo ({max}) na coluna '{column}'",
|
|
63
|
+
"range.outlier_detected": "Detectados {count} outliers estatísticos na coluna '{column}'",
|
|
64
|
+
|
|
65
|
+
# Referential
|
|
66
|
+
"ref.foreign_key_violation": "Encontradas {count} violações de chave estrangeira na coluna '{column}'",
|
|
67
|
+
"ref.missing_reference": "Encontrados {count} valores em '{column}' não presentes na coluna de referência '{ref_column}'",
|
|
68
|
+
"ref.orphan_records": "Encontrados {count} registros órfãos sem correspondência na coluna '{column}'",
|
|
69
|
+
|
|
70
|
+
# Statistical
|
|
71
|
+
"stat.distribution_anomaly": "Anomalia de distribuição detectada na coluna '{column}': {details}",
|
|
72
|
+
"stat.mean_out_of_range": "O valor médio ({mean:.2f}) está fora do intervalo esperado [{min}, {max}] para a coluna '{column}'",
|
|
73
|
+
"stat.variance_anomaly": "Variância incomum ({variance:.2f}) detectada na coluna '{column}'",
|
|
74
|
+
"stat.skewness_anomaly": "Assimetria ({skewness:.2f}) indica distribuição não normal na coluna '{column}'",
|
|
75
|
+
|
|
76
|
+
# Schema
|
|
77
|
+
"schema.column_missing": "A coluna esperada '{column}' está faltando no conjunto de dados",
|
|
78
|
+
"schema.column_extra": "Coluna inesperada '{column}' encontrada no conjunto de dados",
|
|
79
|
+
"schema.type_mismatch": "A coluna '{column}' tem tipo {actual}, esperado {expected}",
|
|
80
|
+
"schema.constraint_violated": "Restrição '{constraint}' violada para a coluna '{column}'",
|
|
81
|
+
|
|
82
|
+
# Cross-table
|
|
83
|
+
"cross.column_mismatch": "Valores na coluna '{column1}' não correspondem à coluna '{column2}'",
|
|
84
|
+
"cross.consistency_failed": "Verificação de consistência entre colunas falhou: {details}",
|
|
85
|
+
|
|
86
|
+
# Timeout
|
|
87
|
+
"timeout.exceeded": "A validação expirou após {seconds}s para '{operation}'",
|
|
88
|
+
"timeout.partial_result": "Resultados parciais retornados devido ao tempo limite: {validated}% dos dados validados",
|
|
89
|
+
|
|
90
|
+
# General
|
|
91
|
+
"validation.failed": "Validação falhou para a coluna '{column}': {reason}",
|
|
92
|
+
"validation.skipped": "Validação ignorada para a coluna '{column}': {reason}",
|
|
93
|
+
"validation.error": "Erro durante a validação: {error}",
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# Brazilian Portuguese specific overrides
|
|
98
|
+
_PORTUGUESE_BR_MESSAGES: dict[str, str] = {
|
|
99
|
+
"format.invalid_phone": "Encontrados {count} números de celular inválidos na coluna '{column}'",
|
|
100
|
+
"null.column_empty": "A coluna '{column}' tá completamente vazia",
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
# European Portuguese specific overrides
|
|
105
|
+
_PORTUGUESE_PT_MESSAGES: dict[str, str] = {
|
|
106
|
+
"format.invalid_phone": "Encontrados {count} números de telemóvel inválidos na coluna '{column}'",
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# ==============================================================================
|
|
111
|
+
# Italian Messages (Complete)
|
|
112
|
+
# ==============================================================================
|
|
113
|
+
|
|
114
|
+
_ITALIAN_MESSAGES: dict[str, str] = {
|
|
115
|
+
# Null/Completeness
|
|
116
|
+
"null.values_found": "Trovati {count} valori nulli nella colonna '{column}'",
|
|
117
|
+
"null.column_empty": "La colonna '{column}' è completamente vuota",
|
|
118
|
+
"null.above_threshold": "Il rapporto nulli ({ratio:.1%}) supera la soglia ({threshold:.1%}) nella colonna '{column}'",
|
|
119
|
+
|
|
120
|
+
# Uniqueness
|
|
121
|
+
"unique.duplicates_found": "Trovati {count} valori duplicati nella colonna '{column}'",
|
|
122
|
+
"unique.composite_duplicates": "Trovate {count} combinazioni duplicate per le colonne {columns}",
|
|
123
|
+
"unique.key_violation": "Violazione chiave primaria: {count} chiavi duplicate in '{column}'",
|
|
124
|
+
|
|
125
|
+
# Type
|
|
126
|
+
"type.mismatch": "Tipo non corrispondente nella colonna '{column}': previsto {expected}, trovato {actual}",
|
|
127
|
+
"type.coercion_failed": "Impossibile convertire {count} valori nella colonna '{column}' in {target_type}",
|
|
128
|
+
"type.inference_failed": "Impossibile dedurre il tipo della colonna '{column}'",
|
|
129
|
+
|
|
130
|
+
# Format
|
|
131
|
+
"format.invalid_email": "Trovati {count} indirizzi email non validi nella colonna '{column}'",
|
|
132
|
+
"format.invalid_phone": "Trovati {count} numeri di telefono non validi nella colonna '{column}'",
|
|
133
|
+
"format.invalid_date": "Trovate {count} date non valide nella colonna '{column}'",
|
|
134
|
+
"format.invalid_url": "Trovati {count} URL non validi nella colonna '{column}'",
|
|
135
|
+
"format.pattern_mismatch": "Trovati {count} valori che non corrispondono al pattern '{pattern}' nella colonna '{column}'",
|
|
136
|
+
"format.regex_failed": "Validazione regex fallita per la colonna '{column}': {count} valori non corrispondenti",
|
|
137
|
+
|
|
138
|
+
# Range
|
|
139
|
+
"range.out_of_bounds": "Trovati {count} valori fuori dall'intervallo [{min}, {max}] nella colonna '{column}'",
|
|
140
|
+
"range.below_minimum": "Trovati {count} valori sotto il minimo ({min}) nella colonna '{column}'",
|
|
141
|
+
"range.above_maximum": "Trovati {count} valori sopra il massimo ({max}) nella colonna '{column}'",
|
|
142
|
+
"range.outlier_detected": "Rilevati {count} outlier statistici nella colonna '{column}'",
|
|
143
|
+
|
|
144
|
+
# Referential
|
|
145
|
+
"ref.foreign_key_violation": "Trovate {count} violazioni di chiave esterna nella colonna '{column}'",
|
|
146
|
+
"ref.missing_reference": "Trovati {count} valori in '{column}' non presenti nella colonna di riferimento '{ref_column}'",
|
|
147
|
+
"ref.orphan_records": "Trovati {count} record orfani senza corrispondenza in '{column}'",
|
|
148
|
+
|
|
149
|
+
# Statistical
|
|
150
|
+
"stat.distribution_anomaly": "Anomalia di distribuzione rilevata nella colonna '{column}': {details}",
|
|
151
|
+
"stat.mean_out_of_range": "Il valore medio ({mean:.2f}) è fuori dall'intervallo previsto [{min}, {max}] per la colonna '{column}'",
|
|
152
|
+
"stat.variance_anomaly": "Varianza insolita ({variance:.2f}) rilevata nella colonna '{column}'",
|
|
153
|
+
"stat.skewness_anomaly": "L'asimmetria ({skewness:.2f}) indica una distribuzione non normale nella colonna '{column}'",
|
|
154
|
+
|
|
155
|
+
# Schema
|
|
156
|
+
"schema.column_missing": "La colonna prevista '{column}' manca nel dataset",
|
|
157
|
+
"schema.column_extra": "Colonna inaspettata '{column}' trovata nel dataset",
|
|
158
|
+
"schema.type_mismatch": "La colonna '{column}' ha tipo {actual}, previsto {expected}",
|
|
159
|
+
"schema.constraint_violated": "Vincolo '{constraint}' violato per la colonna '{column}'",
|
|
160
|
+
|
|
161
|
+
# Cross-table
|
|
162
|
+
"cross.column_mismatch": "I valori nella colonna '{column1}' non corrispondono alla colonna '{column2}'",
|
|
163
|
+
"cross.consistency_failed": "Controllo di coerenza tra colonne fallito: {details}",
|
|
164
|
+
|
|
165
|
+
# Timeout
|
|
166
|
+
"timeout.exceeded": "La validazione è scaduta dopo {seconds}s per '{operation}'",
|
|
167
|
+
"timeout.partial_result": "Risultati parziali restituiti a causa del timeout: {validated}% dei dati validati",
|
|
168
|
+
|
|
169
|
+
# General
|
|
170
|
+
"validation.failed": "Validazione fallita per la colonna '{column}': {reason}",
|
|
171
|
+
"validation.skipped": "Validazione saltata per la colonna '{column}': {reason}",
|
|
172
|
+
"validation.error": "Errore durante la validazione: {error}",
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
# ==============================================================================
|
|
177
|
+
# Russian Messages (Complete)
|
|
178
|
+
# ==============================================================================
|
|
179
|
+
|
|
180
|
+
_RUSSIAN_MESSAGES: dict[str, str] = {
|
|
181
|
+
# Null/Completeness
|
|
182
|
+
"null.values_found": "Обнаружено {count} пустых значений в столбце '{column}'",
|
|
183
|
+
"null.column_empty": "Столбец '{column}' полностью пуст",
|
|
184
|
+
"null.above_threshold": "Доля пустых значений ({ratio:.1%}) превышает порог ({threshold:.1%}) в столбце '{column}'",
|
|
185
|
+
|
|
186
|
+
# Uniqueness
|
|
187
|
+
"unique.duplicates_found": "Обнаружено {count} дублирующихся значений в столбце '{column}'",
|
|
188
|
+
"unique.composite_duplicates": "Обнаружено {count} дублирующихся комбинаций для столбцов {columns}",
|
|
189
|
+
"unique.key_violation": "Нарушение первичного ключа: {count} дублирующихся ключей в '{column}'",
|
|
190
|
+
|
|
191
|
+
# Type
|
|
192
|
+
"type.mismatch": "Несоответствие типа в столбце '{column}': ожидался {expected}, найден {actual}",
|
|
193
|
+
"type.coercion_failed": "Не удалось преобразовать {count} значений в столбце '{column}' в {target_type}",
|
|
194
|
+
"type.inference_failed": "Не удалось определить тип столбца '{column}'",
|
|
195
|
+
|
|
196
|
+
# Format
|
|
197
|
+
"format.invalid_email": "Обнаружено {count} недействительных email-адресов в столбце '{column}'",
|
|
198
|
+
"format.invalid_phone": "Обнаружено {count} недействительных номеров телефона в столбце '{column}'",
|
|
199
|
+
"format.invalid_date": "Обнаружено {count} недействительных дат в столбце '{column}'",
|
|
200
|
+
"format.invalid_url": "Обнаружено {count} недействительных URL в столбце '{column}'",
|
|
201
|
+
"format.pattern_mismatch": "Обнаружено {count} значений, не соответствующих шаблону '{pattern}' в столбце '{column}'",
|
|
202
|
+
"format.regex_failed": "Проверка регулярного выражения не прошла для столбца '{column}': {count} несоответствующих значений",
|
|
203
|
+
|
|
204
|
+
# Range
|
|
205
|
+
"range.out_of_bounds": "Обнаружено {count} значений вне диапазона [{min}, {max}] в столбце '{column}'",
|
|
206
|
+
"range.below_minimum": "Обнаружено {count} значений ниже минимума ({min}) в столбце '{column}'",
|
|
207
|
+
"range.above_maximum": "Обнаружено {count} значений выше максимума ({max}) в столбце '{column}'",
|
|
208
|
+
"range.outlier_detected": "Обнаружено {count} статистических выбросов в столбце '{column}'",
|
|
209
|
+
|
|
210
|
+
# Referential
|
|
211
|
+
"ref.foreign_key_violation": "Обнаружено {count} нарушений внешнего ключа в столбце '{column}'",
|
|
212
|
+
"ref.missing_reference": "Обнаружено {count} значений в '{column}', отсутствующих в ссылочном столбце '{ref_column}'",
|
|
213
|
+
"ref.orphan_records": "Обнаружено {count} сиротских записей без соответствия в '{column}'",
|
|
214
|
+
|
|
215
|
+
# Statistical
|
|
216
|
+
"stat.distribution_anomaly": "Обнаружена аномалия распределения в столбце '{column}': {details}",
|
|
217
|
+
"stat.mean_out_of_range": "Среднее значение ({mean:.2f}) выходит за ожидаемый диапазон [{min}, {max}] для столбца '{column}'",
|
|
218
|
+
"stat.variance_anomaly": "Необычная дисперсия ({variance:.2f}) обнаружена в столбце '{column}'",
|
|
219
|
+
"stat.skewness_anomaly": "Асимметрия ({skewness:.2f}) указывает на ненормальное распределение в столбце '{column}'",
|
|
220
|
+
|
|
221
|
+
# Schema
|
|
222
|
+
"schema.column_missing": "Ожидаемый столбец '{column}' отсутствует в наборе данных",
|
|
223
|
+
"schema.column_extra": "Неожиданный столбец '{column}' найден в наборе данных",
|
|
224
|
+
"schema.type_mismatch": "Столбец '{column}' имеет тип {actual}, ожидался {expected}",
|
|
225
|
+
"schema.constraint_violated": "Ограничение '{constraint}' нарушено для столбца '{column}'",
|
|
226
|
+
|
|
227
|
+
# Cross-table
|
|
228
|
+
"cross.column_mismatch": "Значения в столбце '{column1}' не соответствуют столбцу '{column2}'",
|
|
229
|
+
"cross.consistency_failed": "Проверка согласованности между столбцами не прошла: {details}",
|
|
230
|
+
|
|
231
|
+
# Timeout
|
|
232
|
+
"timeout.exceeded": "Время валидации истекло после {seconds}с для '{operation}'",
|
|
233
|
+
"timeout.partial_result": "Частичные результаты возвращены из-за тайм-аута: {validated}% данных проверено",
|
|
234
|
+
|
|
235
|
+
# General
|
|
236
|
+
"validation.failed": "Валидация не прошла для столбца '{column}': {reason}",
|
|
237
|
+
"validation.skipped": "Валидация пропущена для столбца '{column}': {reason}",
|
|
238
|
+
"validation.error": "Ошибка во время валидации: {error}",
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
# ==============================================================================
|
|
243
|
+
# Arabic Messages (Complete)
|
|
244
|
+
# ==============================================================================
|
|
245
|
+
|
|
246
|
+
_ARABIC_MESSAGES: dict[str, str] = {
|
|
247
|
+
# Null/Completeness
|
|
248
|
+
"null.values_found": "تم العثور على {count} قيمة فارغة في العمود '{column}'",
|
|
249
|
+
"null.column_empty": "العمود '{column}' فارغ تماماً",
|
|
250
|
+
"null.above_threshold": "نسبة القيم الفارغة ({ratio:.1%}) تتجاوز الحد ({threshold:.1%}) في العمود '{column}'",
|
|
251
|
+
|
|
252
|
+
# Uniqueness
|
|
253
|
+
"unique.duplicates_found": "تم العثور على {count} قيمة مكررة في العمود '{column}'",
|
|
254
|
+
"unique.composite_duplicates": "تم العثور على {count} تركيبة مكررة للأعمدة {columns}",
|
|
255
|
+
"unique.key_violation": "انتهاك المفتاح الأساسي: {count} مفتاح مكرر في '{column}'",
|
|
256
|
+
|
|
257
|
+
# Type
|
|
258
|
+
"type.mismatch": "عدم تطابق النوع في العمود '{column}': متوقع {expected}، وُجد {actual}",
|
|
259
|
+
"type.coercion_failed": "تعذر تحويل {count} قيمة في العمود '{column}' إلى {target_type}",
|
|
260
|
+
"type.inference_failed": "تعذر استنتاج نوع العمود '{column}'",
|
|
261
|
+
|
|
262
|
+
# Format
|
|
263
|
+
"format.invalid_email": "تم العثور على {count} عنوان بريد إلكتروني غير صالح في العمود '{column}'",
|
|
264
|
+
"format.invalid_phone": "تم العثور على {count} رقم هاتف غير صالح في العمود '{column}'",
|
|
265
|
+
"format.invalid_date": "تم العثور على {count} تاريخ غير صالح في العمود '{column}'",
|
|
266
|
+
"format.invalid_url": "تم العثور على {count} عنوان URL غير صالح في العمود '{column}'",
|
|
267
|
+
"format.pattern_mismatch": "تم العثور على {count} قيمة لا تطابق النمط '{pattern}' في العمود '{column}'",
|
|
268
|
+
"format.regex_failed": "فشل التحقق من التعبير النمطي للعمود '{column}': {count} قيمة غير مطابقة",
|
|
269
|
+
|
|
270
|
+
# Range
|
|
271
|
+
"range.out_of_bounds": "تم العثور على {count} قيمة خارج النطاق [{min}, {max}] في العمود '{column}'",
|
|
272
|
+
"range.below_minimum": "تم العثور على {count} قيمة أقل من الحد الأدنى ({min}) في العمود '{column}'",
|
|
273
|
+
"range.above_maximum": "تم العثور على {count} قيمة أعلى من الحد الأقصى ({max}) في العمود '{column}'",
|
|
274
|
+
"range.outlier_detected": "تم اكتشاف {count} قيمة شاذة إحصائياً في العمود '{column}'",
|
|
275
|
+
|
|
276
|
+
# Referential
|
|
277
|
+
"ref.foreign_key_violation": "تم العثور على {count} انتهاك للمفتاح الخارجي في العمود '{column}'",
|
|
278
|
+
"ref.missing_reference": "تم العثور على {count} قيمة في '{column}' غير موجودة في العمود المرجعي '{ref_column}'",
|
|
279
|
+
"ref.orphan_records": "تم العثور على {count} سجل يتيم بدون تطابق في '{column}'",
|
|
280
|
+
|
|
281
|
+
# Statistical
|
|
282
|
+
"stat.distribution_anomaly": "تم اكتشاف شذوذ في التوزيع في العمود '{column}': {details}",
|
|
283
|
+
"stat.mean_out_of_range": "القيمة المتوسطة ({mean:.2f}) خارج النطاق المتوقع [{min}, {max}] للعمود '{column}'",
|
|
284
|
+
"stat.variance_anomaly": "تباين غير عادي ({variance:.2f}) تم اكتشافه في العمود '{column}'",
|
|
285
|
+
"stat.skewness_anomaly": "الالتواء ({skewness:.2f}) يشير إلى توزيع غير طبيعي في العمود '{column}'",
|
|
286
|
+
|
|
287
|
+
# Schema
|
|
288
|
+
"schema.column_missing": "العمود المتوقع '{column}' مفقود من مجموعة البيانات",
|
|
289
|
+
"schema.column_extra": "تم العثور على عمود غير متوقع '{column}' في مجموعة البيانات",
|
|
290
|
+
"schema.type_mismatch": "العمود '{column}' له النوع {actual}، المتوقع {expected}",
|
|
291
|
+
"schema.constraint_violated": "تم انتهاك القيد '{constraint}' للعمود '{column}'",
|
|
292
|
+
|
|
293
|
+
# Cross-table
|
|
294
|
+
"cross.column_mismatch": "القيم في العمود '{column1}' لا تتطابق مع العمود '{column2}'",
|
|
295
|
+
"cross.consistency_failed": "فشل التحقق من الاتساق بين الأعمدة: {details}",
|
|
296
|
+
|
|
297
|
+
# Timeout
|
|
298
|
+
"timeout.exceeded": "انتهت مهلة التحقق بعد {seconds} ثانية لـ '{operation}'",
|
|
299
|
+
"timeout.partial_result": "تم إرجاع نتائج جزئية بسبب انتهاء المهلة: تم التحقق من {validated}% من البيانات",
|
|
300
|
+
|
|
301
|
+
# General
|
|
302
|
+
"validation.failed": "فشل التحقق للعمود '{column}': {reason}",
|
|
303
|
+
"validation.skipped": "تم تخطي التحقق للعمود '{column}': {reason}",
|
|
304
|
+
"validation.error": "خطأ أثناء التحقق: {error}",
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
# ==============================================================================
|
|
309
|
+
# Hebrew Messages (Complete)
|
|
310
|
+
# ==============================================================================
|
|
311
|
+
|
|
312
|
+
_HEBREW_MESSAGES: dict[str, str] = {
|
|
313
|
+
# Null/Completeness
|
|
314
|
+
"null.values_found": "נמצאו {count} ערכים ריקים בעמודה '{column}'",
|
|
315
|
+
"null.column_empty": "העמודה '{column}' ריקה לחלוטין",
|
|
316
|
+
"null.above_threshold": "יחס הערכים הריקים ({ratio:.1%}) חורג מהסף ({threshold:.1%}) בעמודה '{column}'",
|
|
317
|
+
|
|
318
|
+
# Uniqueness
|
|
319
|
+
"unique.duplicates_found": "נמצאו {count} ערכים כפולים בעמודה '{column}'",
|
|
320
|
+
"unique.composite_duplicates": "נמצאו {count} שילובים כפולים עבור העמודות {columns}",
|
|
321
|
+
"unique.key_violation": "הפרת מפתח ראשי: {count} מפתחות כפולים ב-'{column}'",
|
|
322
|
+
|
|
323
|
+
# Type
|
|
324
|
+
"type.mismatch": "אי התאמת סוג בעמודה '{column}': צפוי {expected}, נמצא {actual}",
|
|
325
|
+
"type.coercion_failed": "לא ניתן להמיר {count} ערכים בעמודה '{column}' ל-{target_type}",
|
|
326
|
+
"type.inference_failed": "לא ניתן להסיק את הסוג של העמודה '{column}'",
|
|
327
|
+
|
|
328
|
+
# Format
|
|
329
|
+
"format.invalid_email": "נמצאו {count} כתובות דוא\"ל לא תקינות בעמודה '{column}'",
|
|
330
|
+
"format.invalid_phone": "נמצאו {count} מספרי טלפון לא תקינים בעמודה '{column}'",
|
|
331
|
+
"format.invalid_date": "נמצאו {count} תאריכים לא תקינים בעמודה '{column}'",
|
|
332
|
+
"format.invalid_url": "נמצאו {count} כתובות URL לא תקינות בעמודה '{column}'",
|
|
333
|
+
"format.pattern_mismatch": "נמצאו {count} ערכים שאינם תואמים לתבנית '{pattern}' בעמודה '{column}'",
|
|
334
|
+
"format.regex_failed": "אימות ביטוי רגולרי נכשל עבור העמודה '{column}': {count} ערכים לא תואמים",
|
|
335
|
+
|
|
336
|
+
# Range
|
|
337
|
+
"range.out_of_bounds": "נמצאו {count} ערכים מחוץ לטווח [{min}, {max}] בעמודה '{column}'",
|
|
338
|
+
"range.below_minimum": "נמצאו {count} ערכים מתחת למינימום ({min}) בעמודה '{column}'",
|
|
339
|
+
"range.above_maximum": "נמצאו {count} ערכים מעל המקסימום ({max}) בעמודה '{column}'",
|
|
340
|
+
"range.outlier_detected": "זוהו {count} חריגים סטטיסטיים בעמודה '{column}'",
|
|
341
|
+
|
|
342
|
+
# Referential
|
|
343
|
+
"ref.foreign_key_violation": "נמצאו {count} הפרות מפתח זר בעמודה '{column}'",
|
|
344
|
+
"ref.missing_reference": "נמצאו {count} ערכים ב-'{column}' שאינם קיימים בעמודת ההפניה '{ref_column}'",
|
|
345
|
+
"ref.orphan_records": "נמצאו {count} רשומות יתומות ללא התאמה ב-'{column}'",
|
|
346
|
+
|
|
347
|
+
# Statistical
|
|
348
|
+
"stat.distribution_anomaly": "זוהתה חריגה בהתפלגות בעמודה '{column}': {details}",
|
|
349
|
+
"stat.mean_out_of_range": "הערך הממוצע ({mean:.2f}) מחוץ לטווח הצפוי [{min}, {max}] עבור העמודה '{column}'",
|
|
350
|
+
"stat.variance_anomaly": "שונות חריגה ({variance:.2f}) זוהתה בעמודה '{column}'",
|
|
351
|
+
"stat.skewness_anomaly": "העיוות ({skewness:.2f}) מצביע על התפלגות לא נורמלית בעמודה '{column}'",
|
|
352
|
+
|
|
353
|
+
# Schema
|
|
354
|
+
"schema.column_missing": "העמודה הצפויה '{column}' חסרה ממערך הנתונים",
|
|
355
|
+
"schema.column_extra": "נמצאה עמודה לא צפויה '{column}' במערך הנתונים",
|
|
356
|
+
"schema.type_mismatch": "לעמודה '{column}' יש סוג {actual}, צפוי {expected}",
|
|
357
|
+
"schema.constraint_violated": "האילוץ '{constraint}' הופר עבור העמודה '{column}'",
|
|
358
|
+
|
|
359
|
+
# Cross-table
|
|
360
|
+
"cross.column_mismatch": "הערכים בעמודה '{column1}' אינם תואמים לעמודה '{column2}'",
|
|
361
|
+
"cross.consistency_failed": "בדיקת העקביות בין העמודות נכשלה: {details}",
|
|
362
|
+
|
|
363
|
+
# Timeout
|
|
364
|
+
"timeout.exceeded": "האימות פג תוקף לאחר {seconds} שניות עבור '{operation}'",
|
|
365
|
+
"timeout.partial_result": "תוצאות חלקיות הוחזרו עקב פג תוקף: {validated}% מהנתונים אומתו",
|
|
366
|
+
|
|
367
|
+
# General
|
|
368
|
+
"validation.failed": "האימות נכשל עבור העמודה '{column}': {reason}",
|
|
369
|
+
"validation.skipped": "האימות דולג עבור העמודה '{column}': {reason}",
|
|
370
|
+
"validation.error": "שגיאה במהלך האימות: {error}",
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
# ==============================================================================
|
|
375
|
+
# Persian/Farsi Messages (Complete)
|
|
376
|
+
# ==============================================================================
|
|
377
|
+
|
|
378
|
+
_PERSIAN_MESSAGES: dict[str, str] = {
|
|
379
|
+
# Null/Completeness
|
|
380
|
+
"null.values_found": "{count} مقدار تهی در ستون '{column}' یافت شد",
|
|
381
|
+
"null.column_empty": "ستون '{column}' کاملاً خالی است",
|
|
382
|
+
"null.above_threshold": "نسبت مقادیر تهی ({ratio:.1%}) از آستانه ({threshold:.1%}) در ستون '{column}' فراتر رفته است",
|
|
383
|
+
|
|
384
|
+
# Uniqueness
|
|
385
|
+
"unique.duplicates_found": "{count} مقدار تکراری در ستون '{column}' یافت شد",
|
|
386
|
+
"unique.composite_duplicates": "{count} ترکیب تکراری برای ستونهای {columns} یافت شد",
|
|
387
|
+
"unique.key_violation": "نقض کلید اصلی: {count} کلید تکراری در '{column}'",
|
|
388
|
+
|
|
389
|
+
# Type
|
|
390
|
+
"type.mismatch": "عدم تطابق نوع در ستون '{column}': انتظار {expected}، یافت شده {actual}",
|
|
391
|
+
"type.coercion_failed": "امکان تبدیل {count} مقدار در ستون '{column}' به {target_type} وجود ندارد",
|
|
392
|
+
"type.inference_failed": "امکان استنتاج نوع ستون '{column}' وجود ندارد",
|
|
393
|
+
|
|
394
|
+
# Format
|
|
395
|
+
"format.invalid_email": "{count} آدرس ایمیل نامعتبر در ستون '{column}' یافت شد",
|
|
396
|
+
"format.invalid_phone": "{count} شماره تلفن نامعتبر در ستون '{column}' یافت شد",
|
|
397
|
+
"format.invalid_date": "{count} تاریخ نامعتبر در ستون '{column}' یافت شد",
|
|
398
|
+
"format.invalid_url": "{count} آدرس URL نامعتبر در ستون '{column}' یافت شد",
|
|
399
|
+
"format.pattern_mismatch": "{count} مقدار که با الگوی '{pattern}' مطابقت ندارند در ستون '{column}' یافت شد",
|
|
400
|
+
"format.regex_failed": "اعتبارسنجی regex برای ستون '{column}' ناموفق بود: {count} مقدار نامطابق",
|
|
401
|
+
|
|
402
|
+
# Range
|
|
403
|
+
"range.out_of_bounds": "{count} مقدار خارج از محدوده [{min}, {max}] در ستون '{column}' یافت شد",
|
|
404
|
+
"range.below_minimum": "{count} مقدار کمتر از حداقل ({min}) در ستون '{column}' یافت شد",
|
|
405
|
+
"range.above_maximum": "{count} مقدار بیشتر از حداکثر ({max}) در ستون '{column}' یافت شد",
|
|
406
|
+
"range.outlier_detected": "{count} داده پرت آماری در ستون '{column}' شناسایی شد",
|
|
407
|
+
|
|
408
|
+
# General
|
|
409
|
+
"validation.failed": "اعتبارسنجی برای ستون '{column}' ناموفق بود: {reason}",
|
|
410
|
+
"validation.skipped": "اعتبارسنجی برای ستون '{column}' نادیده گرفته شد: {reason}",
|
|
411
|
+
"validation.error": "خطا در حین اعتبارسنجی: {error}",
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
# ==============================================================================
|
|
416
|
+
# Catalog Accessor Functions
|
|
417
|
+
# ==============================================================================
|
|
418
|
+
|
|
419
|
+
def get_portuguese_messages() -> ValidatorMessageCatalog:
|
|
420
|
+
"""Get Portuguese message catalog.
|
|
421
|
+
|
|
422
|
+
Returns:
|
|
423
|
+
Portuguese message catalog
|
|
424
|
+
"""
|
|
425
|
+
return ValidatorMessageCatalog.from_dict(
|
|
426
|
+
"pt",
|
|
427
|
+
_PORTUGUESE_MESSAGES,
|
|
428
|
+
metadata={"name": "Português", "complete": True},
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
def get_portuguese_br_messages() -> ValidatorMessageCatalog:
|
|
433
|
+
"""Get Brazilian Portuguese message catalog.
|
|
434
|
+
|
|
435
|
+
Returns:
|
|
436
|
+
Brazilian Portuguese message catalog
|
|
437
|
+
"""
|
|
438
|
+
messages = {**_PORTUGUESE_MESSAGES, **_PORTUGUESE_BR_MESSAGES}
|
|
439
|
+
return ValidatorMessageCatalog.from_dict(
|
|
440
|
+
"pt-BR",
|
|
441
|
+
messages,
|
|
442
|
+
metadata={"name": "Português Brasileiro", "complete": True, "base": "pt"},
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
def get_portuguese_pt_messages() -> ValidatorMessageCatalog:
|
|
447
|
+
"""Get European Portuguese message catalog.
|
|
448
|
+
|
|
449
|
+
Returns:
|
|
450
|
+
European Portuguese message catalog
|
|
451
|
+
"""
|
|
452
|
+
messages = {**_PORTUGUESE_MESSAGES, **_PORTUGUESE_PT_MESSAGES}
|
|
453
|
+
return ValidatorMessageCatalog.from_dict(
|
|
454
|
+
"pt-PT",
|
|
455
|
+
messages,
|
|
456
|
+
metadata={"name": "Português Europeu", "complete": True, "base": "pt"},
|
|
457
|
+
)
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
def get_italian_messages() -> ValidatorMessageCatalog:
|
|
461
|
+
"""Get Italian message catalog.
|
|
462
|
+
|
|
463
|
+
Returns:
|
|
464
|
+
Italian message catalog
|
|
465
|
+
"""
|
|
466
|
+
return ValidatorMessageCatalog.from_dict(
|
|
467
|
+
"it",
|
|
468
|
+
_ITALIAN_MESSAGES,
|
|
469
|
+
metadata={"name": "Italiano", "complete": True},
|
|
470
|
+
)
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
def get_russian_messages() -> ValidatorMessageCatalog:
|
|
474
|
+
"""Get Russian message catalog.
|
|
475
|
+
|
|
476
|
+
Returns:
|
|
477
|
+
Russian message catalog
|
|
478
|
+
"""
|
|
479
|
+
return ValidatorMessageCatalog.from_dict(
|
|
480
|
+
"ru",
|
|
481
|
+
_RUSSIAN_MESSAGES,
|
|
482
|
+
metadata={"name": "Русский", "complete": True},
|
|
483
|
+
)
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
def get_arabic_messages() -> ValidatorMessageCatalog:
|
|
487
|
+
"""Get Arabic message catalog.
|
|
488
|
+
|
|
489
|
+
Returns:
|
|
490
|
+
Arabic message catalog (RTL)
|
|
491
|
+
"""
|
|
492
|
+
return ValidatorMessageCatalog.from_dict(
|
|
493
|
+
"ar",
|
|
494
|
+
_ARABIC_MESSAGES,
|
|
495
|
+
metadata={"name": "العربية", "complete": True, "direction": "rtl"},
|
|
496
|
+
)
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
def get_hebrew_messages() -> ValidatorMessageCatalog:
|
|
500
|
+
"""Get Hebrew message catalog.
|
|
501
|
+
|
|
502
|
+
Returns:
|
|
503
|
+
Hebrew message catalog (RTL)
|
|
504
|
+
"""
|
|
505
|
+
return ValidatorMessageCatalog.from_dict(
|
|
506
|
+
"he",
|
|
507
|
+
_HEBREW_MESSAGES,
|
|
508
|
+
metadata={"name": "עברית", "complete": True, "direction": "rtl"},
|
|
509
|
+
)
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
def get_persian_messages() -> ValidatorMessageCatalog:
|
|
513
|
+
"""Get Persian/Farsi message catalog.
|
|
514
|
+
|
|
515
|
+
Returns:
|
|
516
|
+
Persian message catalog (RTL)
|
|
517
|
+
"""
|
|
518
|
+
return ValidatorMessageCatalog.from_dict(
|
|
519
|
+
"fa",
|
|
520
|
+
_PERSIAN_MESSAGES,
|
|
521
|
+
metadata={"name": "فارسی", "complete": False, "direction": "rtl"},
|
|
522
|
+
)
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
def get_all_extended_catalogs() -> dict[str, ValidatorMessageCatalog]:
|
|
526
|
+
"""Get all extended catalogs.
|
|
527
|
+
|
|
528
|
+
Returns:
|
|
529
|
+
Dictionary of locale code to catalog
|
|
530
|
+
"""
|
|
531
|
+
return {
|
|
532
|
+
"pt": get_portuguese_messages(),
|
|
533
|
+
"pt-BR": get_portuguese_br_messages(),
|
|
534
|
+
"pt-PT": get_portuguese_pt_messages(),
|
|
535
|
+
"it": get_italian_messages(),
|
|
536
|
+
"ru": get_russian_messages(),
|
|
537
|
+
"ar": get_arabic_messages(),
|
|
538
|
+
"he": get_hebrew_messages(),
|
|
539
|
+
"fa": get_persian_messages(),
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
def get_extended_supported_locales() -> list[str]:
|
|
544
|
+
"""Get list of extended supported locales.
|
|
545
|
+
|
|
546
|
+
Returns:
|
|
547
|
+
List of locale codes
|
|
548
|
+
"""
|
|
549
|
+
return ["pt", "pt-BR", "pt-PT", "it", "ru", "ar", "he", "fa"]
|