truthound-dashboard 1.3.1__py3-none-any.whl → 1.4.0__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_dashboard/api/alerts.py +258 -0
- truthound_dashboard/api/anomaly.py +1302 -0
- truthound_dashboard/api/cross_alerts.py +352 -0
- truthound_dashboard/api/deps.py +143 -0
- truthound_dashboard/api/drift_monitor.py +540 -0
- truthound_dashboard/api/lineage.py +1151 -0
- truthound_dashboard/api/maintenance.py +363 -0
- truthound_dashboard/api/middleware.py +373 -1
- truthound_dashboard/api/model_monitoring.py +805 -0
- truthound_dashboard/api/notifications_advanced.py +2452 -0
- truthound_dashboard/api/plugins.py +2096 -0
- truthound_dashboard/api/profile.py +211 -14
- truthound_dashboard/api/reports.py +853 -0
- truthound_dashboard/api/router.py +147 -0
- truthound_dashboard/api/rule_suggestions.py +310 -0
- truthound_dashboard/api/schema_evolution.py +231 -0
- truthound_dashboard/api/sources.py +47 -3
- truthound_dashboard/api/triggers.py +190 -0
- truthound_dashboard/api/validations.py +13 -0
- truthound_dashboard/api/validators.py +333 -4
- truthound_dashboard/api/versioning.py +309 -0
- truthound_dashboard/api/websocket.py +301 -0
- truthound_dashboard/core/__init__.py +27 -0
- truthound_dashboard/core/anomaly.py +1395 -0
- truthound_dashboard/core/anomaly_explainer.py +633 -0
- truthound_dashboard/core/cache.py +206 -0
- truthound_dashboard/core/cached_services.py +422 -0
- truthound_dashboard/core/charts.py +352 -0
- truthound_dashboard/core/connections.py +1069 -42
- truthound_dashboard/core/cross_alerts.py +837 -0
- truthound_dashboard/core/drift_monitor.py +1477 -0
- truthound_dashboard/core/drift_sampling.py +669 -0
- truthound_dashboard/core/i18n/__init__.py +42 -0
- truthound_dashboard/core/i18n/detector.py +173 -0
- truthound_dashboard/core/i18n/messages.py +564 -0
- truthound_dashboard/core/lineage.py +971 -0
- truthound_dashboard/core/maintenance.py +443 -5
- truthound_dashboard/core/model_monitoring.py +1043 -0
- truthound_dashboard/core/notifications/channels.py +1020 -1
- truthound_dashboard/core/notifications/deduplication/__init__.py +143 -0
- truthound_dashboard/core/notifications/deduplication/policies.py +274 -0
- truthound_dashboard/core/notifications/deduplication/service.py +400 -0
- truthound_dashboard/core/notifications/deduplication/stores.py +2365 -0
- truthound_dashboard/core/notifications/deduplication/strategies.py +422 -0
- truthound_dashboard/core/notifications/dispatcher.py +43 -0
- truthound_dashboard/core/notifications/escalation/__init__.py +149 -0
- truthound_dashboard/core/notifications/escalation/backends.py +1384 -0
- truthound_dashboard/core/notifications/escalation/engine.py +429 -0
- truthound_dashboard/core/notifications/escalation/models.py +336 -0
- truthound_dashboard/core/notifications/escalation/scheduler.py +1187 -0
- truthound_dashboard/core/notifications/escalation/state_machine.py +330 -0
- truthound_dashboard/core/notifications/escalation/stores.py +2896 -0
- truthound_dashboard/core/notifications/events.py +49 -0
- truthound_dashboard/core/notifications/metrics/__init__.py +115 -0
- truthound_dashboard/core/notifications/metrics/base.py +528 -0
- truthound_dashboard/core/notifications/metrics/collectors.py +583 -0
- truthound_dashboard/core/notifications/routing/__init__.py +169 -0
- truthound_dashboard/core/notifications/routing/combinators.py +184 -0
- truthound_dashboard/core/notifications/routing/config.py +375 -0
- truthound_dashboard/core/notifications/routing/config_parser.py +867 -0
- truthound_dashboard/core/notifications/routing/engine.py +382 -0
- truthound_dashboard/core/notifications/routing/expression_engine.py +1269 -0
- truthound_dashboard/core/notifications/routing/jinja2_engine.py +774 -0
- truthound_dashboard/core/notifications/routing/rules.py +625 -0
- truthound_dashboard/core/notifications/routing/validator.py +678 -0
- truthound_dashboard/core/notifications/service.py +2 -0
- truthound_dashboard/core/notifications/stats_aggregator.py +850 -0
- truthound_dashboard/core/notifications/throttling/__init__.py +83 -0
- truthound_dashboard/core/notifications/throttling/builder.py +311 -0
- truthound_dashboard/core/notifications/throttling/stores.py +1859 -0
- truthound_dashboard/core/notifications/throttling/throttlers.py +633 -0
- truthound_dashboard/core/openlineage.py +1028 -0
- truthound_dashboard/core/plugins/__init__.py +39 -0
- truthound_dashboard/core/plugins/docs/__init__.py +39 -0
- truthound_dashboard/core/plugins/docs/extractor.py +703 -0
- truthound_dashboard/core/plugins/docs/renderers.py +804 -0
- truthound_dashboard/core/plugins/hooks/__init__.py +63 -0
- truthound_dashboard/core/plugins/hooks/decorators.py +367 -0
- truthound_dashboard/core/plugins/hooks/manager.py +403 -0
- truthound_dashboard/core/plugins/hooks/protocols.py +265 -0
- truthound_dashboard/core/plugins/lifecycle/__init__.py +41 -0
- truthound_dashboard/core/plugins/lifecycle/hot_reload.py +584 -0
- truthound_dashboard/core/plugins/lifecycle/machine.py +419 -0
- truthound_dashboard/core/plugins/lifecycle/states.py +266 -0
- truthound_dashboard/core/plugins/loader.py +504 -0
- truthound_dashboard/core/plugins/registry.py +810 -0
- truthound_dashboard/core/plugins/reporter_executor.py +588 -0
- truthound_dashboard/core/plugins/sandbox/__init__.py +59 -0
- truthound_dashboard/core/plugins/sandbox/code_validator.py +243 -0
- truthound_dashboard/core/plugins/sandbox/engines.py +770 -0
- truthound_dashboard/core/plugins/sandbox/protocols.py +194 -0
- truthound_dashboard/core/plugins/sandbox.py +617 -0
- truthound_dashboard/core/plugins/security/__init__.py +68 -0
- truthound_dashboard/core/plugins/security/analyzer.py +535 -0
- truthound_dashboard/core/plugins/security/policies.py +311 -0
- truthound_dashboard/core/plugins/security/protocols.py +296 -0
- truthound_dashboard/core/plugins/security/signing.py +842 -0
- truthound_dashboard/core/plugins/security.py +446 -0
- truthound_dashboard/core/plugins/validator_executor.py +401 -0
- truthound_dashboard/core/plugins/versioning/__init__.py +51 -0
- truthound_dashboard/core/plugins/versioning/constraints.py +377 -0
- truthound_dashboard/core/plugins/versioning/dependencies.py +541 -0
- truthound_dashboard/core/plugins/versioning/semver.py +266 -0
- truthound_dashboard/core/profile_comparison.py +601 -0
- truthound_dashboard/core/report_history.py +570 -0
- truthound_dashboard/core/reporters/__init__.py +57 -0
- truthound_dashboard/core/reporters/base.py +296 -0
- truthound_dashboard/core/reporters/csv_reporter.py +155 -0
- truthound_dashboard/core/reporters/html_reporter.py +598 -0
- truthound_dashboard/core/reporters/i18n/__init__.py +65 -0
- truthound_dashboard/core/reporters/i18n/base.py +494 -0
- truthound_dashboard/core/reporters/i18n/catalogs.py +930 -0
- truthound_dashboard/core/reporters/json_reporter.py +160 -0
- truthound_dashboard/core/reporters/junit_reporter.py +233 -0
- truthound_dashboard/core/reporters/markdown_reporter.py +207 -0
- truthound_dashboard/core/reporters/pdf_reporter.py +209 -0
- truthound_dashboard/core/reporters/registry.py +272 -0
- truthound_dashboard/core/rule_generator.py +2088 -0
- truthound_dashboard/core/scheduler.py +822 -12
- truthound_dashboard/core/schema_evolution.py +858 -0
- truthound_dashboard/core/services.py +152 -9
- truthound_dashboard/core/statistics.py +718 -0
- truthound_dashboard/core/streaming_anomaly.py +883 -0
- truthound_dashboard/core/triggers/__init__.py +45 -0
- truthound_dashboard/core/triggers/base.py +226 -0
- truthound_dashboard/core/triggers/evaluators.py +609 -0
- truthound_dashboard/core/triggers/factory.py +363 -0
- truthound_dashboard/core/unified_alerts.py +870 -0
- truthound_dashboard/core/validation_limits.py +509 -0
- truthound_dashboard/core/versioning.py +709 -0
- truthound_dashboard/core/websocket/__init__.py +59 -0
- truthound_dashboard/core/websocket/manager.py +512 -0
- truthound_dashboard/core/websocket/messages.py +130 -0
- truthound_dashboard/db/__init__.py +30 -0
- truthound_dashboard/db/models.py +3375 -3
- truthound_dashboard/main.py +22 -0
- truthound_dashboard/schemas/__init__.py +396 -1
- truthound_dashboard/schemas/anomaly.py +1258 -0
- truthound_dashboard/schemas/base.py +4 -0
- truthound_dashboard/schemas/cross_alerts.py +334 -0
- truthound_dashboard/schemas/drift_monitor.py +890 -0
- truthound_dashboard/schemas/lineage.py +428 -0
- truthound_dashboard/schemas/maintenance.py +154 -0
- truthound_dashboard/schemas/model_monitoring.py +374 -0
- truthound_dashboard/schemas/notifications_advanced.py +1363 -0
- truthound_dashboard/schemas/openlineage.py +704 -0
- truthound_dashboard/schemas/plugins.py +1293 -0
- truthound_dashboard/schemas/profile.py +420 -34
- truthound_dashboard/schemas/profile_comparison.py +242 -0
- truthound_dashboard/schemas/reports.py +285 -0
- truthound_dashboard/schemas/rule_suggestion.py +434 -0
- truthound_dashboard/schemas/schema_evolution.py +164 -0
- truthound_dashboard/schemas/source.py +117 -2
- truthound_dashboard/schemas/triggers.py +511 -0
- truthound_dashboard/schemas/unified_alerts.py +223 -0
- truthound_dashboard/schemas/validation.py +25 -1
- truthound_dashboard/schemas/validators/__init__.py +11 -0
- truthound_dashboard/schemas/validators/base.py +151 -0
- truthound_dashboard/schemas/versioning.py +152 -0
- truthound_dashboard/static/index.html +2 -2
- {truthound_dashboard-1.3.1.dist-info → truthound_dashboard-1.4.0.dist-info}/METADATA +142 -22
- truthound_dashboard-1.4.0.dist-info/RECORD +239 -0
- truthound_dashboard/static/assets/index-BZG20KuF.js +0 -586
- truthound_dashboard/static/assets/index-D_HyZ3pb.css +0 -1
- truthound_dashboard/static/assets/unmerged_dictionaries-CtpqQBm0.js +0 -1
- truthound_dashboard-1.3.1.dist-info/RECORD +0 -110
- {truthound_dashboard-1.3.1.dist-info → truthound_dashboard-1.4.0.dist-info}/WHEEL +0 -0
- {truthound_dashboard-1.3.1.dist-info → truthound_dashboard-1.4.0.dist-info}/entry_points.txt +0 -0
- {truthound_dashboard-1.3.1.dist-info → truthound_dashboard-1.4.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: truthound-dashboard
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Summary: Open-source data quality dashboard - GX Cloud alternative
|
|
5
5
|
Author-email: Truthound Team <team@truthound.dev>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -23,6 +23,7 @@ Requires-Dist: apscheduler>=3.10.0
|
|
|
23
23
|
Requires-Dist: cryptography>=41.0.0
|
|
24
24
|
Requires-Dist: fastapi>=0.110.0
|
|
25
25
|
Requires-Dist: httpx>=0.26.0
|
|
26
|
+
Requires-Dist: jinja2>=3.1.0
|
|
26
27
|
Requires-Dist: polars>=0.20.0
|
|
27
28
|
Requires-Dist: pydantic-settings>=2.1.0
|
|
28
29
|
Requires-Dist: pydantic>=2.5.0
|
|
@@ -40,6 +41,8 @@ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
|
|
|
40
41
|
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
|
|
41
42
|
Requires-Dist: pytest>=7.4.0; extra == 'dev'
|
|
42
43
|
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
44
|
+
Provides-Extra: redis
|
|
45
|
+
Requires-Dist: redis>=5.0.0; extra == 'redis'
|
|
43
46
|
Provides-Extra: translate
|
|
44
47
|
Description-Content-Type: text/markdown
|
|
45
48
|
|
|
@@ -48,10 +51,6 @@ Description-Content-Type: text/markdown
|
|
|
48
51
|
|
|
49
52
|
# truthound-dashboard
|
|
50
53
|
|
|
51
|
-
> **⚠️ Under Active Development**
|
|
52
|
-
>
|
|
53
|
-
> The [truthound](https://github.com/seadonggyun4/truthound) core library has recently undergone significant API improvements and feature enhancements. This dashboard project is currently being updated to fully support these changes. Some features may not yet reflect the latest truthound capabilities. We appreciate your patience as we work to bring full compatibility.
|
|
54
|
-
|
|
55
54
|
[](https://pypi.org/project/truthound-dashboard/)
|
|
56
55
|
[](https://www.python.org/downloads/)
|
|
57
56
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
@@ -80,14 +79,18 @@ truthound-dashboard provides a graphical interface for managing data sources, ex
|
|
|
80
79
|
| Slack Notifications | Available | Available |
|
|
81
80
|
| Email Notifications | Available | Available |
|
|
82
81
|
| Webhook Notifications | Available | Available |
|
|
83
|
-
| Drift Detection | Available | Available (
|
|
82
|
+
| Drift Detection | Available | Available (5 methods) |
|
|
84
83
|
| Data Profiling | Available | Available |
|
|
85
84
|
| PII Scan | Available | Available (GDPR/CCPA/LGPD) |
|
|
86
85
|
| Data Masking | Available | Available (redact/hash/fake) |
|
|
87
|
-
|
|
|
88
|
-
| Data
|
|
86
|
+
| Anomaly Detection | Limited | Available (6 algorithms) |
|
|
87
|
+
| Data Lineage | Available | Available (3 viz options) |
|
|
88
|
+
| Model Monitoring | Available | Available |
|
|
89
|
+
| Reports & Export | Available | Available (6 formats) |
|
|
90
|
+
| Plugins Marketplace | Not Available | Available |
|
|
91
|
+
| Maintenance Tools | Limited | Available |
|
|
89
92
|
| Dark Mode | Available | Available |
|
|
90
|
-
| Multi-language (en
|
|
93
|
+
| Multi-language | Limited | 2 languages (en, ko) + AI translation CLI |
|
|
91
94
|
| License | Commercial | Apache 2.0 |
|
|
92
95
|
|
|
93
96
|
## Requirements
|
|
@@ -124,9 +127,10 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
124
127
|
## Implemented Features
|
|
125
128
|
|
|
126
129
|
### Data Source Management
|
|
127
|
-
- Supported file formats: CSV, Parquet
|
|
128
|
-
- Supported databases: PostgreSQL, MySQL, Snowflake,
|
|
129
|
-
- Connection validation
|
|
130
|
+
- Supported file formats: CSV, Parquet, JSON
|
|
131
|
+
- Supported databases (13 connectors): PostgreSQL, MySQL, SQLite, BigQuery, Snowflake, Redshift, Databricks, Oracle, SQL Server, Spark
|
|
132
|
+
- Connection validation and management UI
|
|
133
|
+
- Dynamic configuration forms per source type
|
|
130
134
|
|
|
131
135
|
### Schema Management
|
|
132
136
|
- Automated schema generation using `th.learn`
|
|
@@ -139,10 +143,82 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
139
143
|
- Persistent storage of validation results
|
|
140
144
|
- Issue classification by severity (Critical, High, Medium, Low)
|
|
141
145
|
- Advanced options: column filtering, min_severity, parallel execution, SQL pushdown
|
|
146
|
+
- ML-based caching layer for expensive operations
|
|
147
|
+
|
|
148
|
+
### Anomaly Detection
|
|
149
|
+
- 6 ML algorithms: IsolationForest, LocalOutlierFactor, DBSCAN, OneClassSVM, EllipticEnvelope, Ensemble
|
|
150
|
+
- Streaming anomaly detection support
|
|
151
|
+
- Explainability with feature contribution analysis
|
|
152
|
+
- Batch detection with progress tracking
|
|
153
|
+
- Algorithm comparison and agreement scoring
|
|
154
|
+
|
|
155
|
+
### Drift Monitoring
|
|
156
|
+
- 5 detection methods: Kolmogorov-Smirnov, Population Stability Index (PSI), Chi-Square, Jensen-Shannon, Auto
|
|
157
|
+
- 4 sampling strategies: Random, Stratified, Reservoir, Systematic
|
|
158
|
+
- Column-level distribution comparison
|
|
159
|
+
- Drift trend visualization and alerting
|
|
160
|
+
- Root cause analysis and remediation suggestions
|
|
161
|
+
|
|
162
|
+
### Data Lineage
|
|
163
|
+
- Interactive lineage graph visualization (D3.js/Mermaid/Cytoscape)
|
|
164
|
+
- Column-level lineage tracking
|
|
165
|
+
- Impact analysis (upstream/downstream)
|
|
166
|
+
- OpenLineage standard integration
|
|
167
|
+
- Webhook support for lineage events
|
|
168
|
+
- Performance optimization with lazy loading and virtualization
|
|
169
|
+
|
|
170
|
+
### Schema Evolution
|
|
171
|
+
- Automatic schema change detection
|
|
172
|
+
- Breaking vs non-breaking change classification
|
|
173
|
+
- Version timeline and comparison
|
|
174
|
+
- Change notification support
|
|
175
|
+
|
|
176
|
+
### Profile Comparison
|
|
177
|
+
- Profile-to-profile comparison
|
|
178
|
+
- Time-series trend analysis
|
|
179
|
+
- Quality metric visualization (null%, unique%)
|
|
180
|
+
- Historical profile snapshots
|
|
181
|
+
|
|
182
|
+
### Rule Suggestions
|
|
183
|
+
- Profile-based automatic rule generation
|
|
184
|
+
- Confidence scoring (high/medium/low)
|
|
185
|
+
- Bulk rule application
|
|
186
|
+
- Category-based filtering (completeness, uniqueness, distribution, string, datetime)
|
|
187
|
+
|
|
188
|
+
### Reports & Export
|
|
189
|
+
- 6 formats: HTML, PDF, CSV, JSON, Excel, Markdown
|
|
190
|
+
- Customizable themes for HTML/PDF reports
|
|
191
|
+
- Statistics dashboard (total reports, size, downloads, avg generation time)
|
|
192
|
+
- Search and filtering (by name, format, status)
|
|
193
|
+
- Report lifecycle management with automatic expiration
|
|
194
|
+
- Download tracking and batch cleanup
|
|
195
|
+
- Integration with validation schedules and notifications
|
|
196
|
+
|
|
197
|
+
### Plugins & Extensions
|
|
198
|
+
- Plugin marketplace for community extensions
|
|
199
|
+
- 4 plugin types: Validators, Reporters, Connectors, Transformers
|
|
200
|
+
- 4 security levels: Trusted, Verified, Unverified, Sandboxed
|
|
201
|
+
- Custom validator creation with UI (severity, category, parameters)
|
|
202
|
+
- Custom reporter creation with template support
|
|
203
|
+
- Plugin lifecycle management (install, enable, disable, uninstall)
|
|
204
|
+
- Filter by type and status
|
|
205
|
+
|
|
206
|
+
### Maintenance & System Health
|
|
207
|
+
- Auto maintenance scheduling with enable/disable toggle
|
|
208
|
+
- Retention policies with configurable ranges:
|
|
209
|
+
- Validation history: 1-365 days
|
|
210
|
+
- Profile snapshots: 1-100 per source
|
|
211
|
+
- Notification logs: 1-365 days
|
|
212
|
+
- Manual operations: cleanup, vacuum, cache clear
|
|
213
|
+
- Cache statistics monitoring (total, valid, expired entries, hit rate)
|
|
214
|
+
- Database optimization (VACUUM/ANALYZE)
|
|
215
|
+
- Real-time configuration updates
|
|
142
216
|
|
|
143
217
|
### Validation History
|
|
144
218
|
- Historical record of validation results
|
|
145
219
|
- Trend visualization
|
|
220
|
+
- Result versioning with 4 strategies (Incremental, Semantic, Timestamp, GitLike)
|
|
221
|
+
- Version comparison and rollback support
|
|
146
222
|
|
|
147
223
|
### Scheduling
|
|
148
224
|
- Cron-based scheduling using APScheduler
|
|
@@ -153,11 +229,47 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
153
229
|
- Configurable notification rules based on validation outcomes
|
|
154
230
|
- Notification delivery logs
|
|
155
231
|
|
|
232
|
+
### Advanced Notifications
|
|
233
|
+
- 9 provider channels: Slack, Email, Webhook, Discord, Telegram, PagerDuty, OpsGenie, Microsoft Teams, GitHub
|
|
234
|
+
- Rule-based routing with 11+ rule types (severity, issue count, pass rate, time window, tag, data asset, metadata, status, error)
|
|
235
|
+
- Deduplication: 4 window strategies (Sliding, Tumbling, Session, Adaptive), 6 policies
|
|
236
|
+
- Throttling: 5 methods (TokenBucket, LeakyBucket, FixedWindow, SlidingWindow, Adaptive)
|
|
237
|
+
- Multi-level escalation with state machine
|
|
238
|
+
- Incident management and acknowledgment
|
|
239
|
+
|
|
240
|
+
### Unified Alerts
|
|
241
|
+
- Cross-feature alert aggregation (validation, drift, anomaly, schema changes)
|
|
242
|
+
- Severity-based filtering (Critical, High, Medium, Low)
|
|
243
|
+
- Alert correlation and grouping
|
|
244
|
+
- Action tracking (acknowledged, resolved)
|
|
245
|
+
|
|
246
|
+
### Cross-Table Validation
|
|
247
|
+
- Referential integrity checks
|
|
248
|
+
- Foreign key validation
|
|
249
|
+
- SQL-based cross-table queries
|
|
250
|
+
- Automated trigger configuration
|
|
251
|
+
|
|
252
|
+
### Model Monitoring
|
|
253
|
+
- ML model performance tracking
|
|
254
|
+
- Metric monitoring (accuracy, precision, recall, F1, AUC-ROC)
|
|
255
|
+
- Alert rules for model degradation
|
|
256
|
+
- Model registration and versioning
|
|
257
|
+
|
|
258
|
+
### Automated Triggers
|
|
259
|
+
- Data change detection triggers
|
|
260
|
+
- Composite triggers (AND/OR combinations)
|
|
261
|
+
- Cron-based scheduling
|
|
262
|
+
- Interval-based execution
|
|
263
|
+
- Preview and testing support
|
|
264
|
+
|
|
156
265
|
### Drift Detection
|
|
157
266
|
- Dataset comparison using `th.compare`
|
|
158
|
-
-
|
|
159
|
-
-
|
|
160
|
-
- Column-level
|
|
267
|
+
- 5 detection methods: Kolmogorov-Smirnov (KS), Population Stability Index (PSI), Chi-Square, Jensen-Shannon (JS), Auto
|
|
268
|
+
- 4 sampling strategies: Random, Stratified, Reservoir, Systematic
|
|
269
|
+
- Column-level distribution comparison with visualizations
|
|
270
|
+
- Drift trend monitoring and alerting
|
|
271
|
+
- Root cause analysis and remediation suggestions
|
|
272
|
+
- Large dataset support with chunked processing
|
|
161
273
|
|
|
162
274
|
### Data Profiling
|
|
163
275
|
- Statistical profiling using `th.profile`
|
|
@@ -195,21 +307,29 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
195
307
|
- Activity feed for tracking changes
|
|
196
308
|
|
|
197
309
|
### User Interface
|
|
198
|
-
- Light and dark theme support
|
|
199
|
-
- Internationalization: English, Korean
|
|
200
|
-
- AI-powered translation
|
|
310
|
+
- Light and dark theme support with system preference detection
|
|
311
|
+
- Internationalization: 2 built-in languages (English, Korean)
|
|
312
|
+
- AI-powered translation CLI to expand to 15+ languages (OpenAI, Anthropic, Mistral, Ollama)
|
|
313
|
+
- Type-safe translations using Intlayer framework
|
|
314
|
+
- Comprehensive E2E test coverage (197+ tests) for all features
|
|
201
315
|
|
|
202
316
|
## Internationalization
|
|
203
317
|
|
|
204
|
-
truthound-dashboard implements internationalization using [Intlayer](https://intlayer.org), a modern i18n framework that provides type-safe translations with component-level content declaration.
|
|
318
|
+
truthound-dashboard implements internationalization using [Intlayer](https://intlayer.org), a modern i18n framework that provides type-safe translations with component-level content declaration.
|
|
205
319
|
|
|
206
|
-
###
|
|
320
|
+
### Built-in Languages
|
|
207
321
|
|
|
208
|
-
The
|
|
322
|
+
The dashboard ships with **2 fully translated languages**:
|
|
323
|
+
- **English (en)** - Complete UI translation
|
|
324
|
+
- **Korean (ko)** - Complete UI translation
|
|
325
|
+
|
|
326
|
+
These languages are immediately available without additional configuration or setup.
|
|
209
327
|
|
|
210
328
|
### Extending Language Support
|
|
211
329
|
|
|
212
|
-
|
|
330
|
+
The dashboard can be extended to support 15+ additional languages using the AI-powered `translate` command. This CLI tool translates all UI content files from the built-in English and Korean to your target language.
|
|
331
|
+
|
|
332
|
+
**Note:** Additional languages are not included in the default installation and must be generated using the translation CLI before deployment.
|
|
213
333
|
|
|
214
334
|
#### Supported AI Providers
|
|
215
335
|
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
truthound_dashboard/__init__.py,sha256=bzN84Y01SlEh5F8KkV-fGqPR82_tA0leAP6PyCXk8PY,504
|
|
2
|
+
truthound_dashboard/__main__.py,sha256=Zq98OmYZm4NJ7n2yG5Qr07fkSiwMEQQE20gG1fpW7wo,133
|
|
3
|
+
truthound_dashboard/cli.py,sha256=1x7AN2g9H5pZ4sG2PakCpSdBYnviknJv7LRIauAPzgU,19348
|
|
4
|
+
truthound_dashboard/config.py,sha256=fBSxoGitTe-9SeKkkQHtqNTcVxws5fvJ0YhF0EMuqG4,4089
|
|
5
|
+
truthound_dashboard/main.py,sha256=CuKB0Fueca4hfXLD8ONcDg6xnie71GToy0LjDiFZJrw,8847
|
|
6
|
+
truthound_dashboard/api/__init__.py,sha256=rnbuYRDgh0GcqkR-d9Trkc8L0O34K4tMH6flyeQ9U98,361
|
|
7
|
+
truthound_dashboard/api/alerts.py,sha256=uqrJJbQZZsjI7J3KYGANJDjhyAZP3v6nUhDR-UsU02o,7788
|
|
8
|
+
truthound_dashboard/api/anomaly.py,sha256=Isf3aoyoiLeZWjc-opPaMI0yG6WCehlfZita-jRsrjU,41482
|
|
9
|
+
truthound_dashboard/api/catalog.py,sha256=qQlsM4ubzjvI6rXwSY5214C-W93Ai-Xu1YjGVs1OoxE,10928
|
|
10
|
+
truthound_dashboard/api/collaboration.py,sha256=DxfpdUl_e8NfvDzv6-uwR32NN3Us7lLkzcif8RhvKyg,4720
|
|
11
|
+
truthound_dashboard/api/cross_alerts.py,sha256=e4HbJQbPKi6syaXqNGa4a9s0ATqtIUy36q59gq_aimk,9869
|
|
12
|
+
truthound_dashboard/api/deps.py,sha256=8rkHfe4zWEyv6CJCmXVn41t2zJNdS0KUvPeNoJEZ_80,8544
|
|
13
|
+
truthound_dashboard/api/drift.py,sha256=BYr_Iw2beKY0DNakoWTiLSEeXOnBUhmvBVvAsuewPWA,5725
|
|
14
|
+
truthound_dashboard/api/drift_monitor.py,sha256=BxaemeJFa4v1Q-fhmkKza9FcrX3gtuLYudZH6lVBABA,17235
|
|
15
|
+
truthound_dashboard/api/error_handlers.py,sha256=agovu0-CgMevgSvHh2aQnPjFpu1Wul_e67Vh9FAX_vM,8682
|
|
16
|
+
truthound_dashboard/api/glossary.py,sha256=Zdks7iHC9OLovgMJ28TELaET74OTQmUjP2TEwRLC8K4,10705
|
|
17
|
+
truthound_dashboard/api/health.py,sha256=84UPWmnS-9Fqs39SyRD2gu4QPE3ZJkaqkp5qCHkizsw,1927
|
|
18
|
+
truthound_dashboard/api/history.py,sha256=b6fy1pZfuwBqk3Yfeqnu8kaQcdNgWFMT7-0_29jLGOI,1792
|
|
19
|
+
truthound_dashboard/api/lineage.py,sha256=A8aq9zH7pDyucEstbwttyYrrbl--EWfNrUeOgqZVNtc,34982
|
|
20
|
+
truthound_dashboard/api/maintenance.py,sha256=amZEIGndy9bQRLaB_cPsFhfZFdaj5HzfpCnGxQU_UvM,10925
|
|
21
|
+
truthound_dashboard/api/mask.py,sha256=vIxTRI0LGYu49krwUS0iT4Y3maFJ6jo1QUerOdRr7LQ,4269
|
|
22
|
+
truthound_dashboard/api/middleware.py,sha256=JukJWCv1aCgDmkbiv8d9vlBZ1Ii_ETI_bjnCa-scnqE,32331
|
|
23
|
+
truthound_dashboard/api/model_monitoring.py,sha256=rIoFyg78Hnac0OXQ2fAN56WsNeFBfBKdZVaSNXPjHUs,26604
|
|
24
|
+
truthound_dashboard/api/notifications.py,sha256=U1_VvgzAI3x5aKRg3zces1UwpbN9g-Tt6WFaOJziNfc,16800
|
|
25
|
+
truthound_dashboard/api/notifications_advanced.py,sha256=sXsjrL2TJ1rAdFeo9jJb9bS9yU0KJPM1Kr-xr3uGFvc,86681
|
|
26
|
+
truthound_dashboard/api/plugins.py,sha256=VqzKtwHXac8D7hwwiR732fbs9r5kZVKE2E5Uy_xCBeI,64457
|
|
27
|
+
truthound_dashboard/api/profile.py,sha256=v422ArP9fSemE1TJZ0RaUeHUARHZp1dOYT_gqMuAbI8,8814
|
|
28
|
+
truthound_dashboard/api/reports.py,sha256=JgIyVPMHydIw4gO8rmAEPB6KKIqpdM84krs5udLNy-8,26526
|
|
29
|
+
truthound_dashboard/api/router.py,sha256=78K1oCCj2i7yO36u6yLaFv7CahrEKOuPbppPgeR1BUM,6395
|
|
30
|
+
truthound_dashboard/api/rule_suggestions.py,sha256=BzvMRSbuDdBAyXOZ59WJTzG3pfqEeK-emByM_LMCF78,9376
|
|
31
|
+
truthound_dashboard/api/rules.py,sha256=6xcE5g7w9e_mt4M_XS7egIa16zcynYmXctmyayAKICs,7453
|
|
32
|
+
truthound_dashboard/api/scan.py,sha256=ew2NYqq_lpl0mMA6CE9ajqViUSgjLiR1oGtRQsyvFTw,4827
|
|
33
|
+
truthound_dashboard/api/schedules.py,sha256=NMLU0szgZ2lGvVGuSJuEACZvc2qoeN65H-d2ANprj6E,8716
|
|
34
|
+
truthound_dashboard/api/schema_evolution.py,sha256=CR0l28KcU6jq9rlxRak-huDFmdNoTtJkxjsMZtnjzv4,6292
|
|
35
|
+
truthound_dashboard/api/schemas.py,sha256=vo9_X9nW2mn1NQKVu5-UZWV6T9STz5y4XIiJzSeyl1Y,4389
|
|
36
|
+
truthound_dashboard/api/sources.py,sha256=MNE2_ip-gdqbuwxKBe0AyQWGufimaS-pm2ljnr9u9xo,7171
|
|
37
|
+
truthound_dashboard/api/triggers.py,sha256=WA1mVOC7MyZEqR2ef6k-gRciwBFpMOK7L4BL0rT188o,5347
|
|
38
|
+
truthound_dashboard/api/validations.py,sha256=SKh4JmCwnIstrGWRyF0vk_atkoESd1t-oM5a5Wr-nU0,5375
|
|
39
|
+
truthound_dashboard/api/validators.py,sha256=gtiNGXhdIDpx0yUuZ0eED0INATNLio-_J4vv8J6A-PM,13246
|
|
40
|
+
truthound_dashboard/api/versioning.py,sha256=OpONUqKtbR13taFD0kQ4rZevcWLpe1-mdTL_27dUCiI,9951
|
|
41
|
+
truthound_dashboard/api/websocket.py,sha256=juc16AH9ZgG39IG8doYMBN5l_3ighlJ1L2RQIXNjMg0,8813
|
|
42
|
+
truthound_dashboard/core/__init__.py,sha256=Pw3Ldnu1Okaztp7G0yZq5sbJaouiG_DOhMA1dhEAUbs,7693
|
|
43
|
+
truthound_dashboard/core/anomaly.py,sha256=RRHN6D1xB-Gi8TluftLlZ_YwEtVFy2Vz5mONcBAjraA,46743
|
|
44
|
+
truthound_dashboard/core/anomaly_explainer.py,sha256=VDU7zGH4I59g1jZEgZ8opNMMmW5Cy_GLEHmE4NmJ9oU,22637
|
|
45
|
+
truthound_dashboard/core/base.py,sha256=Jp2NFNCacIt2DStGOSvyUYnx1wV-FqDkX9gLroCbo5I,5293
|
|
46
|
+
truthound_dashboard/core/cache.py,sha256=6LBvu-gdDoGylE2H7_-i-JvlXoQuKPwbXmcdGdAGfmk,21007
|
|
47
|
+
truthound_dashboard/core/cached_services.py,sha256=VwZ9qbg5ljyIbF3Ql7fpV6T3waWzYxATPmtC1dQQ7qk,11729
|
|
48
|
+
truthound_dashboard/core/charts.py,sha256=JzhVVMowR4znoXLqKglLBYiwEdUbKGDQ8HFV5PKbv-Q,10226
|
|
49
|
+
truthound_dashboard/core/connections.py,sha256=3Fg3IKy64pyzJPrljMl12UjAPVh7DiUci6Krnm0dvB4,47311
|
|
50
|
+
truthound_dashboard/core/cross_alerts.py,sha256=JB6aHIsfG4QczkdjIJ9CuITbH5J07-9lOfx789hsHW4,28666
|
|
51
|
+
truthound_dashboard/core/drift_monitor.py,sha256=dTXq9UqFxMcE2vTzVcwTufTtB4iU2AYUZVhLL1W3dao,54592
|
|
52
|
+
truthound_dashboard/core/drift_sampling.py,sha256=gLnFxmZjh7lwm_EATWcg0YE9iLq4MttyZcegufqUjxM,21835
|
|
53
|
+
truthound_dashboard/core/encryption.py,sha256=QMSbCPLtl9Vz2Cuxi8mZhEM_PlHzAxflGGEMRAXiByg,11130
|
|
54
|
+
truthound_dashboard/core/exceptions.py,sha256=VibhsFV9rtmT9VZ7gs63sZlsEGPTLP0CjxizglFUoHg,19336
|
|
55
|
+
truthound_dashboard/core/lineage.py,sha256=cpMI3N_Wm092Kgi3H2ADd1t86PlNMn3ZgdeIyUcx0_g,31085
|
|
56
|
+
truthound_dashboard/core/logging.py,sha256=Vom2C8ras6-3n7DYurKMyOqqv1L4ELq7iMTBOz_Rfyo,13392
|
|
57
|
+
truthound_dashboard/core/maintenance.py,sha256=bMXVJwu__KoEQJa_ti3nDxkwm0K3mYeQ1saDbq4EfyQ,33809
|
|
58
|
+
truthound_dashboard/core/model_monitoring.py,sha256=B5GCKsdSVzVOCIibp4aj8OYNe_TQaXcwkWR3mh73Ghw,33279
|
|
59
|
+
truthound_dashboard/core/openlineage.py,sha256=YFbG6NCQaLtJbydfuDZhrcFBJGafjcyB51fXHCh05yw,33136
|
|
60
|
+
truthound_dashboard/core/profile_comparison.py,sha256=H3ruQA0qcDBuELRyjn-U_E0Lb6p5K4sEMFKtajb_vtc,21919
|
|
61
|
+
truthound_dashboard/core/report_history.py,sha256=BBIQPEA68Gel8lFoh45UIA-lZUGSf3s0i17Fy_CFU3c,17534
|
|
62
|
+
truthound_dashboard/core/rule_generator.py,sha256=YAKU27k3U3D9j1dB1cshQNKZ6iFzgb2nsms8ugbBrvQ,80445
|
|
63
|
+
truthound_dashboard/core/sampling.py,sha256=K1GMFiHSDCvj1_xXVNG5Zl9rs0RfYry9Ew6u1FOHkJo,18445
|
|
64
|
+
truthound_dashboard/core/scheduler.py,sha256=4VZpvVnWBC9xoSd2_K-Y2GV_E-5wTzne64SVryKXVzI,40104
|
|
65
|
+
truthound_dashboard/core/schema_evolution.py,sha256=WhT4IrZTKcN3JWvKM3pDAWyyYaOcGxu50cd4fCrHn3w,27883
|
|
66
|
+
truthound_dashboard/core/services.py,sha256=QIVoV5VCGXKPj7j2UCrqTg82QgVs-IeOFnR1LrByAFA,62907
|
|
67
|
+
truthound_dashboard/core/statistics.py,sha256=wKTbyJJ-dDjRHrLFku6d1O-xYs7iGh_CksSiwiXFiIc,20918
|
|
68
|
+
truthound_dashboard/core/streaming_anomaly.py,sha256=u8G3Tb23DXVmDqjjXpRXq7w1G2g6hgb8hVOY_owPs6c,27349
|
|
69
|
+
truthound_dashboard/core/truthound_adapter.py,sha256=2eMuxxs1_VDLTCeajEiL6gCEXNXp3IxqZ7dJesa5aAM,36229
|
|
70
|
+
truthound_dashboard/core/unified_alerts.py,sha256=D0wH1KOeISvUbBLETA6mfyV3tHAkusXspUGWCKqM81w,30243
|
|
71
|
+
truthound_dashboard/core/validation_limits.py,sha256=ZtLp838kyV0vu3UnyBjS_jWM4_aLG5OpZorXhG-s-5o,17199
|
|
72
|
+
truthound_dashboard/core/versioning.py,sha256=igy-FfqeBCIc2V4SCZCWeONNOhLRTZZOwciNlkBroo4,22777
|
|
73
|
+
truthound_dashboard/core/i18n/__init__.py,sha256=tHatypmhKKc0Y4PQ2BWDnLLX4lWu_S1XdXkn0WX-3zw,1079
|
|
74
|
+
truthound_dashboard/core/i18n/detector.py,sha256=tcybGMRWuAaFwJhQ2IBoYtp3Knj8dnXttCfWywt_too,4856
|
|
75
|
+
truthound_dashboard/core/i18n/messages.py,sha256=dwEURuNvRwxpzbUc81aw57prEs3LXsyjRbN_OcE1gjk,24239
|
|
76
|
+
truthound_dashboard/core/notifications/__init__.py,sha256=zWE_fEKM-9KRxHtc68YCy9cKJLBQl1KxDrsfm6vazHM,1579
|
|
77
|
+
truthound_dashboard/core/notifications/base.py,sha256=9XoNRoECeFGq5bkJkorZefQ-pmwmgJxpZcWZg_PlaDc,12128
|
|
78
|
+
truthound_dashboard/core/notifications/channels.py,sha256=Yu3Tn8QxADxLy1DBvtrD-jwlcW-nrCb1tTX-P5MiFLw,53821
|
|
79
|
+
truthound_dashboard/core/notifications/dispatcher.py,sha256=U3j-3k9qsWh-ttgQaPEKXWRwWV4U5x9qWJbTr3sg4FI,15602
|
|
80
|
+
truthound_dashboard/core/notifications/events.py,sha256=7MiZX6V1k5F4_ub19lK3rd9G5NAWKFMUYuYxhEgTVt8,6501
|
|
81
|
+
truthound_dashboard/core/notifications/service.py,sha256=6QY7VOjeCgXkIIQZPmP4Yad7cw79Z9L8NSA4CnLTFkk,21229
|
|
82
|
+
truthound_dashboard/core/notifications/stats_aggregator.py,sha256=9DcxKgZ8xpXjyjQ1xi0JW4Q7PCRIc7vGxkm78vnJX7I,28310
|
|
83
|
+
truthound_dashboard/core/notifications/deduplication/__init__.py,sha256=9l7WzLANlHmInBjlpdD0K0A_TzlpCRpXEAPXN3H6w44,4194
|
|
84
|
+
truthound_dashboard/core/notifications/deduplication/policies.py,sha256=-dOS7sAnC_8XRWu0JgrQZuWyHL9hhVqEKNmXwtQ8RF0,8341
|
|
85
|
+
truthound_dashboard/core/notifications/deduplication/service.py,sha256=_3OQFsSal9QPPhfZvabwp3pr7QX6rA8s_ZQgBXQLUoE,12440
|
|
86
|
+
truthound_dashboard/core/notifications/deduplication/stores.py,sha256=CYRoNFjopTLy4sY1PJKZB1wwbtGC51XUflsYoor8c-4,78245
|
|
87
|
+
truthound_dashboard/core/notifications/deduplication/strategies.py,sha256=qjRFPtSYtMjnNUYL98YlR-g0sSePaVpjadwYKlg8nqA,13732
|
|
88
|
+
truthound_dashboard/core/notifications/escalation/__init__.py,sha256=AIarS19BFGa57JR26f1NXXICReWA1BOlrSS3vqDw83g,3922
|
|
89
|
+
truthound_dashboard/core/notifications/escalation/backends.py,sha256=oEW980bUN24V-nFzVaxucaw_jnD11g921IGBXRs7Hv0,46037
|
|
90
|
+
truthound_dashboard/core/notifications/escalation/engine.py,sha256=Tq2T2QBHjelRZTsk2f1NDsFMd9cRIuV6v5-5iB74U6I,13310
|
|
91
|
+
truthound_dashboard/core/notifications/escalation/models.py,sha256=vb1MYW0qOlZ2kr4n0R96pCRZP4fKIdYJcOSOjwUih-Y,11258
|
|
92
|
+
truthound_dashboard/core/notifications/escalation/scheduler.py,sha256=FCCC4BLxeml-fwmxYNG6R5r8vkX26pw3jfxco0hXjWU,40975
|
|
93
|
+
truthound_dashboard/core/notifications/escalation/state_machine.py,sha256=yD50FX7JVoV5cayJXYhQsy8wImyeeNQgUmjAE4bYolk,9475
|
|
94
|
+
truthound_dashboard/core/notifications/escalation/stores.py,sha256=FBOXhbMkQgFOwYls9QjJNundv8BQYQtuxTPOQe6HujM,99375
|
|
95
|
+
truthound_dashboard/core/notifications/metrics/__init__.py,sha256=pSXSeboGmhwLXTFL5WA9O9qg32zcf7B8yi_Y6I-X-4s,3382
|
|
96
|
+
truthound_dashboard/core/notifications/metrics/base.py,sha256=lENdy50D0C9VUvXlQHCvWItDJUOCMDi-N8TqqgRzRRE,15964
|
|
97
|
+
truthound_dashboard/core/notifications/metrics/collectors.py,sha256=fC2-hcFWr_u6-LxIWkTBnp2etrUMSaXcESdVv8Nu-oE,18209
|
|
98
|
+
truthound_dashboard/core/notifications/routing/__init__.py,sha256=9pMf_o_JkXQRKQhx0f95WI9FM53BNIJtmq6LEoUkmdo,4259
|
|
99
|
+
truthound_dashboard/core/notifications/routing/combinators.py,sha256=WaECXlj_cytnhzUq6ktGTEPG3Ebt2orAI2XoWFmLRAM,4970
|
|
100
|
+
truthound_dashboard/core/notifications/routing/config.py,sha256=sPvyP0utmtXeV44iPrrWsHmx9fo-6CGbQ4aj1paG8N0,11088
|
|
101
|
+
truthound_dashboard/core/notifications/routing/config_parser.py,sha256=FXTeGYVDDGW1qfed-LeBdCxfT7LFt7dlObQ0Vg_ogQU,27439
|
|
102
|
+
truthound_dashboard/core/notifications/routing/engine.py,sha256=1HMLJGx-k6s957V00uYMKx6l5Bi1mx1PshfKU83E13k,11652
|
|
103
|
+
truthound_dashboard/core/notifications/routing/expression_engine.py,sha256=MTCqVXKSgfRip_A8e-L-JU4CF1SnNxik67FFb-MOELQ,41219
|
|
104
|
+
truthound_dashboard/core/notifications/routing/jinja2_engine.py,sha256=ZYRvzJ9OyxpJVgXuA6VcIwX3TP4Cy5-EjQCaup7s_FQ,24260
|
|
105
|
+
truthound_dashboard/core/notifications/routing/rules.py,sha256=ThLykcfdJjz1v1bDz8nWXxO7tyWbYBslv7T3rXq-RsM,18228
|
|
106
|
+
truthound_dashboard/core/notifications/routing/validator.py,sha256=CPAKdUE2TR62xw4yQe45HANXYNCLR-uPwOd5EnAc2Is,23096
|
|
107
|
+
truthound_dashboard/core/notifications/throttling/__init__.py,sha256=ge_I1qCG8wLnBRzHhE66zEA7QaLp_8ascG4q9hYTQWQ,2001
|
|
108
|
+
truthound_dashboard/core/notifications/throttling/builder.py,sha256=qr_47Zv_Kn2kPW-BOwSVNMRB6z8jnnXd8CpSQox6Qb4,8357
|
|
109
|
+
truthound_dashboard/core/notifications/throttling/stores.py,sha256=iQiZ_pRdedti-6DXBhaWreNvo4GigEhxVCnzGIcI-20,61556
|
|
110
|
+
truthound_dashboard/core/notifications/throttling/throttlers.py,sha256=sbXmocdxBRTEGS3zreoRqtnAKN1awJnkKAmxsG1J4wM,19779
|
|
111
|
+
truthound_dashboard/core/phase5/__init__.py,sha256=-TNyj28lQC1YjoUtBBJj3ztksN65820Y-BWZRGIEOWA,447
|
|
112
|
+
truthound_dashboard/core/phase5/activity.py,sha256=cHheGj0-1zzWk_L0XdbJvTE8J24JVa3OnjP5Ulqieck,4281
|
|
113
|
+
truthound_dashboard/core/phase5/catalog.py,sha256=hLVaIHxe9BxNp2Tdf7Ru-IIH-xDqUOOitN17zQmLuis,24241
|
|
114
|
+
truthound_dashboard/core/phase5/collaboration.py,sha256=5c2UXVZDGGTkAZ3N3onagNof-hza31tE1ak8t5uM4o0,8331
|
|
115
|
+
truthound_dashboard/core/phase5/glossary.py,sha256=6v3hYXpCQTZ5xaFwBM0IrXMiOeW4giNldHIjdY88ROA,24751
|
|
116
|
+
truthound_dashboard/core/plugins/__init__.py,sha256=lVHwP95jKBrYks7uy3c7JaI1zr2tXfwx4VdWvA6si4Y,1007
|
|
117
|
+
truthound_dashboard/core/plugins/loader.py,sha256=-hM8jR8Dp015_0DBYGs5f65ZbQDNvVZH5AeMxDrZprU,15834
|
|
118
|
+
truthound_dashboard/core/plugins/registry.py,sha256=7DjHTbXItIla52_cj5_6NFQkoY2wwxbAX5y7IXVWkwk,25191
|
|
119
|
+
truthound_dashboard/core/plugins/reporter_executor.py,sha256=oybeBivTLcH8PX2sq775otDY3VadLbMPbtYGD8KTTiI,17187
|
|
120
|
+
truthound_dashboard/core/plugins/sandbox.py,sha256=gDYE5gAQzmdJ2ghfE8G4HPJtfNuUgBroKvg5-stHEqQ,17503
|
|
121
|
+
truthound_dashboard/core/plugins/security.py,sha256=58I0_UIe0UisZ2L28vH0N2PV4ljZKp6t--Y0gLrdAns,13378
|
|
122
|
+
truthound_dashboard/core/plugins/validator_executor.py,sha256=7E3LEve5PU35PQAGalvwd4e7FGITeK_vjSM8P3klQbY,12342
|
|
123
|
+
truthound_dashboard/core/plugins/docs/__init__.py,sha256=Zctl7Nz3YE1sEHflZHojldiJqIb7VVWp5LGcajJm-eg,739
|
|
124
|
+
truthound_dashboard/core/plugins/docs/extractor.py,sha256=Bt4x3tBIwapQDFkHeIqx-f_6efLfAvgvcOhly_oZQwY,24228
|
|
125
|
+
truthound_dashboard/core/plugins/docs/renderers.py,sha256=NYBHT12iIoug6C7uNoS2IWjyADa-QGFKedwoPRi8gGo,26618
|
|
126
|
+
truthound_dashboard/core/plugins/hooks/__init__.py,sha256=3_U92_JS00TdvLICWdzkotMPq22If8vtS7QhFXxrscA,1402
|
|
127
|
+
truthound_dashboard/core/plugins/hooks/decorators.py,sha256=8pW68xB9Qlq9DrkF1Sp8wlKFyerwPMWa4l0LhUbmAv0,11406
|
|
128
|
+
truthound_dashboard/core/plugins/hooks/manager.py,sha256=-jgTGGyqsQiSL6PVfQEJBaoSIiq8N5jaP_xKmlC4rmk,11945
|
|
129
|
+
truthound_dashboard/core/plugins/hooks/protocols.py,sha256=8SgUCLfQbniKzT8T6NNa0vVd2LXMePDCejeRhM_aIs0,7529
|
|
130
|
+
truthound_dashboard/core/plugins/lifecycle/__init__.py,sha256=cgg-rZj-ZOgUgLwWAtzJ5gF539WR_xd3lRbWNt2rq2w,758
|
|
131
|
+
truthound_dashboard/core/plugins/lifecycle/hot_reload.py,sha256=jY5gLBKt_OXF9KppuwNAcok1iVI_BYUkoBWUerpCQf4,18576
|
|
132
|
+
truthound_dashboard/core/plugins/lifecycle/machine.py,sha256=_m5kYdzFNat2Kkfzi66bvIv7kPim7s16KI59EOBtSxc,12959
|
|
133
|
+
truthound_dashboard/core/plugins/lifecycle/states.py,sha256=I1p8xV2GRyveEypwJGQ3pCjBWzCuGnX-DzBdzmyqx2w,6917
|
|
134
|
+
truthound_dashboard/core/plugins/sandbox/__init__.py,sha256=U6v3fnosgHZdmUci73gxP3erR78G1uVmlSd5Pu48Jl8,1272
|
|
135
|
+
truthound_dashboard/core/plugins/sandbox/code_validator.py,sha256=PRpScZbUmWkbbLi2pbQkkrvobQv3XTx2e2ZcuY_5Qn0,7664
|
|
136
|
+
truthound_dashboard/core/plugins/sandbox/engines.py,sha256=Gt14Fv1JFE9k1pOytGQEhMq49gFfYfzeaIBUsNOF0qM,24174
|
|
137
|
+
truthound_dashboard/core/plugins/sandbox/protocols.py,sha256=TVEnpzII81-lySsQaJmHRJ8IbY00YAbh-gemke1UBx8,7220
|
|
138
|
+
truthound_dashboard/core/plugins/security/__init__.py,sha256=bwqvZViNhZP7WD2htc0Zr0DG8s1EscwWuteIKF0vLVA,1440
|
|
139
|
+
truthound_dashboard/core/plugins/security/analyzer.py,sha256=pwj9SW_8-L-kEzJ3LLHOZrs6X0JCGVjUv7JV8mn7avk,18159
|
|
140
|
+
truthound_dashboard/core/plugins/security/policies.py,sha256=pjbkPJ2mvDSzi7cosY-RxzsycHTcxwDulC5eOr28sYE,11114
|
|
141
|
+
truthound_dashboard/core/plugins/security/protocols.py,sha256=vEtSnQLJtXdcrjLhznnf75mcE0OztHXpp9qHd1UqYRs,10362
|
|
142
|
+
truthound_dashboard/core/plugins/security/signing.py,sha256=6fBZ6XM348EUEclpJYZthRfIWoJ2Ho9clUkz0fFzNuE,25975
|
|
143
|
+
truthound_dashboard/core/plugins/versioning/__init__.py,sha256=Iw-1iVNrq9I3kfqzUI3RW2uqxyvPdJX2o9xJvpit6Vc,1063
|
|
144
|
+
truthound_dashboard/core/plugins/versioning/constraints.py,sha256=eGX_-KbJJ9CWc7u2UlWrBQ1VTvsW-KBBRSLBxBMJuPc,10839
|
|
145
|
+
truthound_dashboard/core/plugins/versioning/dependencies.py,sha256=gacGIe2xHNnps6JYhHWugUfvClhMBmpFkEVrwYV00Os,16839
|
|
146
|
+
truthound_dashboard/core/plugins/versioning/semver.py,sha256=8zBWYxXTpuTRsUiu6VrEkNiK3_01fQBX73JZn4LjIAg,8019
|
|
147
|
+
truthound_dashboard/core/reporters/__init__.py,sha256=sabF7o5vbo1iQLclWbchK9ajQGVNB61LOESU4CK6ZHw,1470
|
|
148
|
+
truthound_dashboard/core/reporters/base.py,sha256=9BYdWO6gUNX7bMmg9gNvuod_q-iRlRCwsaVA6vKjYqw,8652
|
|
149
|
+
truthound_dashboard/core/reporters/csv_reporter.py,sha256=vn6lVO3yzXveE3SYYyMN9jC4vRZKh679s6x3AOj0fIs,4921
|
|
150
|
+
truthound_dashboard/core/reporters/html_reporter.py,sha256=r7CScjtSQrvVJDZFbMwH7bFI1EZLF9xAAF1h5blmNbQ,18321
|
|
151
|
+
truthound_dashboard/core/reporters/json_reporter.py,sha256=oo_qXvili7M-EWu2rrdFXRf92fyO9Xj3cU2q6YuT8-w,4924
|
|
152
|
+
truthound_dashboard/core/reporters/junit_reporter.py,sha256=DmTL9Hj3W3G5pVTSyQ4sxM8OY-6yFcs9TnZ1g6GahCM,8945
|
|
153
|
+
truthound_dashboard/core/reporters/markdown_reporter.py,sha256=8Z39eX4BVts9lbpqqJmZ1NW1rkRhugpt2POD13UDHbk,6190
|
|
154
|
+
truthound_dashboard/core/reporters/pdf_reporter.py,sha256=aUwn2VTNUCmqBAPYpYffDMFw-JaROABbmEHevxybK3E,5785
|
|
155
|
+
truthound_dashboard/core/reporters/registry.py,sha256=tiFFZoufrxnWdX-PsQ42njUKvljoqes5Kk-G2jS8cOk,8134
|
|
156
|
+
truthound_dashboard/core/reporters/i18n/__init__.py,sha256=FxckZQMiQ6-lN3JzOndeJzp2yaswpewaerg8a9W47Go,1553
|
|
157
|
+
truthound_dashboard/core/reporters/i18n/base.py,sha256=89V_vM1xiKiZu1BRRGfi96bmuQFF_wQkiptlnqb3rMc,16308
|
|
158
|
+
truthound_dashboard/core/reporters/i18n/catalogs.py,sha256=ny7V60Oot1MKh9gkkZ_YpA1qaoPB42abDFDBIYutRcM,35321
|
|
159
|
+
truthound_dashboard/core/triggers/__init__.py,sha256=nxAO37X_S7CLw7CQFMwjEsaRmKbGvZvILvIggKMF5qI,1077
|
|
160
|
+
truthound_dashboard/core/triggers/base.py,sha256=r6BHa2cHWdkPVk0HRHFJyN8woOh-M8P9NIH5kwhw_d0,6486
|
|
161
|
+
truthound_dashboard/core/triggers/evaluators.py,sha256=xLzwXF2pM4OQWz8_8z00k-IfSAHiCABtQVjVckkd-7g,21722
|
|
162
|
+
truthound_dashboard/core/triggers/factory.py,sha256=JeUPEhZQQYXEaVlABwdMSR9R4GJlGOaNwM3NTQ_c640,11847
|
|
163
|
+
truthound_dashboard/core/websocket/__init__.py,sha256=tZx9jk3i__ZUb9K16tc--zf5OVvgA6Sh_Zhlh9PjX-s,1505
|
|
164
|
+
truthound_dashboard/core/websocket/manager.py,sha256=y_pLWwE93ee6N2gIqKaiGvyfnVw62nL8fTyROjYUFRg,14847
|
|
165
|
+
truthound_dashboard/core/websocket/messages.py,sha256=_AwY_rm1gSb1AmyMgBeVCYm5MRKnxkZbTfivevQGi4s,3929
|
|
166
|
+
truthound_dashboard/db/__init__.py,sha256=AzuuU-pWTnYqH_WUCS7coniWK81j1r7go9cGTPcvWl4,2957
|
|
167
|
+
truthound_dashboard/db/base.py,sha256=nj6DbYxAl5JoY0hC5rtM7pshOKpe-OH-AFsQqPGQzsM,2832
|
|
168
|
+
truthound_dashboard/db/database.py,sha256=yQ9FsQSi29HvvW0t6BrkyX5YcHijRJEjGTTGfcCCw10,5078
|
|
169
|
+
truthound_dashboard/db/models.py,sha256=Wv93Xk5Dxhq5nF4WDHWrMPp6xbpY_ZaOmHmsfQdeBbc,175626
|
|
170
|
+
truthound_dashboard/db/repository.py,sha256=48AJd65rwTSt1XqTN4vUeJ8nk416buE254JqipDCEEE,6890
|
|
171
|
+
truthound_dashboard/schemas/__init__.py,sha256=e3SXeKquiVFFYW8yc7-lOa70nXQg8qyMqwbFxOI4eb0,16500
|
|
172
|
+
truthound_dashboard/schemas/anomaly.py,sha256=6UEbL-O6f9qoZjvebzQ8s0UQ-T5_RE45AsdWXLIDm-4,45825
|
|
173
|
+
truthound_dashboard/schemas/base.py,sha256=Q54unYOGWv_k3fhT8hHzVA6nwLhfDAF-ws71-IZscqg,3061
|
|
174
|
+
truthound_dashboard/schemas/catalog.py,sha256=Gc0ky7kuWyo7naJqyyJe-S9JDF5Ge_c9oeVpUEarQqw,10556
|
|
175
|
+
truthound_dashboard/schemas/collaboration.py,sha256=xUsfK7PuNyCjD8vx4CqfktuYqkYY8oyJMe-JPJgo4uc,4873
|
|
176
|
+
truthound_dashboard/schemas/cross_alerts.py,sha256=1tatU5MKwp72F4uHTDelHb1lIcAEkh030-IWzn9clX8,10528
|
|
177
|
+
truthound_dashboard/schemas/drift.py,sha256=lvrTkYzxB9YxOYHNm40KThEM0cEjKw9UZk0i8REAqG0,8353
|
|
178
|
+
truthound_dashboard/schemas/drift_monitor.py,sha256=t6roREKJuxyZItRWUy1jEj19en1LPI_B79vMj4BwKkU,27901
|
|
179
|
+
truthound_dashboard/schemas/glossary.py,sha256=pY35k4zIf_4FYsdElD5fZJdJsPPQCn0Kk-EdwF8OCmI,10240
|
|
180
|
+
truthound_dashboard/schemas/history.py,sha256=OVzBmbw7uz0C4IWt43P8QxNl9_OO_-WZRdA7L44_9yo,2771
|
|
181
|
+
truthound_dashboard/schemas/lineage.py,sha256=ADrloeXqzWmgPH_x6L6wBaStjlhy2BY4AY2Vqp8CGQs,12633
|
|
182
|
+
truthound_dashboard/schemas/maintenance.py,sha256=FjD04Psq7QoNXPN23MKHJdqm7wgPlL3tnt-6QiVIKoY,4899
|
|
183
|
+
truthound_dashboard/schemas/mask.py,sha256=qOWMUEv2KNqACG4LcVN5n6Xq_hPqXmdM34JachB_SC0,6412
|
|
184
|
+
truthound_dashboard/schemas/model_monitoring.py,sha256=J0gbFnqzgUMPSPSCVgZJ1v_jx1Sc7pdU7e7AuQ5SYUg,14272
|
|
185
|
+
truthound_dashboard/schemas/notifications_advanced.py,sha256=yhQj-18_VsEhyLBfFGMsaGXkIl-pKfSuh2cUtxunkUo,45649
|
|
186
|
+
truthound_dashboard/schemas/openlineage.py,sha256=uLH5oIVKGfWiXRhTq8AggPlSgtB_gmPrJneUgXpXLqo,21675
|
|
187
|
+
truthound_dashboard/schemas/plugins.py,sha256=teCOO_N477MqpWvoHDLaUue9caRiKMudrCV_kiKzXjY,40318
|
|
188
|
+
truthound_dashboard/schemas/profile.py,sha256=q4r6p7CJ9bCC-fN3q4n6sKYbkZMffmGvFhijCAC75_k,18525
|
|
189
|
+
truthound_dashboard/schemas/profile_comparison.py,sha256=tDZhVs7fsUgSCDpec_V5v3Kn3LWOAxODvajzgtLtA2s,9173
|
|
190
|
+
truthound_dashboard/schemas/reports.py,sha256=2tuBJWAJ2jbLRvRE-4-vS4KSwKSrqVm1QUoPz1sO9nM,10916
|
|
191
|
+
truthound_dashboard/schemas/rule.py,sha256=eIx9CdQ-gC6i-BpVsX714y-l0-TWY6VOVr0nSTkn_bk,5207
|
|
192
|
+
truthound_dashboard/schemas/rule_suggestion.py,sha256=Ml_uX3MdQIagWCON9fpJ9BiRixgEO27Bqoct82jluEM,15149
|
|
193
|
+
truthound_dashboard/schemas/scan.py,sha256=v4kvUaoHSvrnPAOE-6KY_IABo5Kuk99jljujT36ggoM,9032
|
|
194
|
+
truthound_dashboard/schemas/schedule.py,sha256=JkXPPqkhkIldBp_JwMD73Vlvq2h4Gq1BighnUVQdjuc,2796
|
|
195
|
+
truthound_dashboard/schemas/schema.py,sha256=u6CI3wvK-h075zrjYVO-SsZ2Cdodjd1HdDSIPJ6abno,4980
|
|
196
|
+
truthound_dashboard/schemas/schema_evolution.py,sha256=al110n2SgM0xxpohWSdQMuEq6dRbIZRb0EvQV-nUJiE,5837
|
|
197
|
+
truthound_dashboard/schemas/source.py,sha256=3Wx17KlUzV5YBOIagt6ekYVeWAwbfC-gwkUr5asltl8,7809
|
|
198
|
+
truthound_dashboard/schemas/triggers.py,sha256=dIJghugFTccrKp1deCgoEP6UVQEEqIGeXXElBwK1Jls,16123
|
|
199
|
+
truthound_dashboard/schemas/unified_alerts.py,sha256=x9efcfy71hxPho6rpGwOmoJXgW3sdJ8ZrqA4YAwti78,7576
|
|
200
|
+
truthound_dashboard/schemas/validation.py,sha256=xyKZlF2ftIfaHwM1Gx8JFdaDdWf5dthw5_89rZeSkn4,9625
|
|
201
|
+
truthound_dashboard/schemas/validators.py,sha256=viqMl-6f8Bnp1488__PHeQUrK5yEFwUO6Z1EXtMoJ1k,1502
|
|
202
|
+
truthound_dashboard/schemas/versioning.py,sha256=gZob-ToosgYTHibf93FqNoIgum_gJMTYtdK-PbFwO_g,5617
|
|
203
|
+
truthound_dashboard/schemas/validators/__init__.py,sha256=rHePThM54k9t-y8lA5zp-2W1TWGNwhoZjdSITjnbFAE,1762
|
|
204
|
+
truthound_dashboard/schemas/validators/aggregate_validators.py,sha256=mJDiHHL8QlUOjtfVCgizTYVAXeoz3apyxndiWV7ArNM,8247
|
|
205
|
+
truthound_dashboard/schemas/validators/anomaly_validators.py,sha256=xYKi3BiH9FTAqHk7ETvPkbT21aAkqkrlC6kdD0S9Cvs,25557
|
|
206
|
+
truthound_dashboard/schemas/validators/base.py,sha256=EME6vAC3XsVmBrlUQjbB__5V6bP3XEc6D3lOOlprbkg,15531
|
|
207
|
+
truthound_dashboard/schemas/validators/completeness_validators.py,sha256=SfvYvErk88syGGMJqy3iSGVvSwqWhgIQZEU4VRzN3oQ,9650
|
|
208
|
+
truthound_dashboard/schemas/validators/cross_table_validators.py,sha256=TrBc6kPhvCjcqEMwFYz1MYBYYV5ULeCHoS8ogp3WIbI,14720
|
|
209
|
+
truthound_dashboard/schemas/validators/datetime_validators.py,sha256=KqUgXgxlUJOFC5Xz2QzuDzyZXn7jsZ-S2Fm978b8-n0,8278
|
|
210
|
+
truthound_dashboard/schemas/validators/distribution_validators.py,sha256=0foHX8aqFmtP9IoecSZa9uKF_so1Zaef3kC5rynhx0k,14442
|
|
211
|
+
truthound_dashboard/schemas/validators/drift_validators.py,sha256=IUp75AK-D7yq3KIL-zMCYNzCKXrBxqBe4KOLkZaR46Y,21602
|
|
212
|
+
truthound_dashboard/schemas/validators/geospatial_validators.py,sha256=EVyG0DjBi2ImJXY5C1va5YUieLhLsRmpAgn0Hp3brFU,16706
|
|
213
|
+
truthound_dashboard/schemas/validators/multi_column_validators.py,sha256=-fVAtahptvIqG686o1YR_lg7OSZHfCv5CGlwwgyPwJk,25586
|
|
214
|
+
truthound_dashboard/schemas/validators/privacy_validators.py,sha256=KGAeQum91ayP3WIPBCVhajspUctqWS8HyfotDsL26x8,20121
|
|
215
|
+
truthound_dashboard/schemas/validators/query_validators.py,sha256=bVoD7JneRSKyJENs4NDMQI8TgVmj_uomuvt4l2MlEK8,18018
|
|
216
|
+
truthound_dashboard/schemas/validators/registry.py,sha256=_3praUHNT1V_mZcufqro48dfEg9oR8MrEjy2Z0X6jKw,9304
|
|
217
|
+
truthound_dashboard/schemas/validators/schema_validators.py,sha256=o7f-6pvjX95D29gDkHpQh4PvvGd2p0wsvknqY_16gkc,15290
|
|
218
|
+
truthound_dashboard/schemas/validators/string_validators.py,sha256=28Jm-6ioe4N2QQzC7Nqu4VJje8ZCUWb-m4bX-3Ysvjk,13064
|
|
219
|
+
truthound_dashboard/schemas/validators/table_validators.py,sha256=hIt5LcGZ05QZMKPNI5J5SEWfUJfejeO7e1Q7DP3nX8k,13967
|
|
220
|
+
truthound_dashboard/schemas/validators/uniqueness_validators.py,sha256=Y23ts3FAAuhluXqz8bdFW8VMN5HZIOM7Nz9Hub0ehRw,12110
|
|
221
|
+
truthound_dashboard/static/favicon.ico,sha256=T9BJXnpyq6t6lpFHd6ivEimWF2uGFzwxDeTDyz2UVmQ,15406
|
|
222
|
+
truthound_dashboard/static/index.html,sha256=zF4jSC_mYBpqp2NSiPQ-58ljscoJcsjEUMJiZHfScII,568
|
|
223
|
+
truthound_dashboard/static/assets/logo--IpBiMPK.png,sha256=c7ne4oaZ1BpQR5yP2TVYoAE1s1vS7lRPxgWP1pzUMYE,213715
|
|
224
|
+
truthound_dashboard/translate/__init__.py,sha256=Mv_xtMk4SaBGUsMgJqhwARnkJkZdq4OhJi5HdpdsBnw,1458
|
|
225
|
+
truthound_dashboard/translate/config_updater.py,sha256=AtJ7ero4cHKwUYQRDbGaPAlLmcyBv0IeBewdiTo0X8c,12038
|
|
226
|
+
truthound_dashboard/translate/exceptions.py,sha256=kPxCN2n_wYl3m6jVg_DRO8pagr55YpPU2e3Dt0YVQhc,3244
|
|
227
|
+
truthound_dashboard/translate/translator.py,sha256=2S35k_cJC1TXy-1XpAIDJZPI5_hKimeX3mNZ3osazik,14228
|
|
228
|
+
truthound_dashboard/translate/providers/__init__.py,sha256=zhG3eycCO2LCl9AVtRqvtqkIrjsTUqaftsN6YhZCpVw,1187
|
|
229
|
+
truthound_dashboard/translate/providers/anthropic.py,sha256=rBF2ueKqVunGrCYSyIDZGTzra1mK7-FOh7vACqg7nis,4522
|
|
230
|
+
truthound_dashboard/translate/providers/base.py,sha256=gYMjv5x1ICpZ-jFzv28tsJc7uTvkm8EVgDlTznbvAVQ,6490
|
|
231
|
+
truthound_dashboard/translate/providers/mistral.py,sha256=j0oh_mGksdMuIfbuZKq0yon6G6oabbO7fTgQzsKEZ7k,4692
|
|
232
|
+
truthound_dashboard/translate/providers/ollama.py,sha256=XlAHE14VvdSPKFbrJIbB3KUHzrgQm0Zj08snL71otUQ,7286
|
|
233
|
+
truthound_dashboard/translate/providers/openai.py,sha256=AeaOfRjNgCIgBdcX1gcYqqf41fXeEIyN3AiLAOy3SZc,6760
|
|
234
|
+
truthound_dashboard/translate/providers/registry.py,sha256=iwfcWYJ2uKfwWjsalhV4jSoyZC7bSeujK6sTMuylMMY,6474
|
|
235
|
+
truthound_dashboard-1.4.0.dist-info/METADATA,sha256=fh_f_UPYvhBAQ6eRQ5r5xNf3X1CHGtPEftAbZZ_tUWY,18083
|
|
236
|
+
truthound_dashboard-1.4.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
237
|
+
truthound_dashboard-1.4.0.dist-info/entry_points.txt,sha256=Xq8qadJ-Sqk4_0Ss_rhCqCv7uxPZZdwO3WUnbK0r6Hw,135
|
|
238
|
+
truthound_dashboard-1.4.0.dist-info/licenses/LICENSE,sha256=qrBWTDMS8ZvwVJl3Yo2n8_AxOos3s8S9pcOzLW5Nivg,10763
|
|
239
|
+
truthound_dashboard-1.4.0.dist-info/RECORD,,
|