truthound-dashboard 1.2.1__tar.gz → 1.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/.gitignore +3 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/PKG-INFO +50 -11
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/README.md +49 -10
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/docs/api.md +279 -12
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/docs/features.md +152 -27
- truthound_dashboard-1.3.1/e2e/package-lock.json +78 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/e2e/playwright.config.ts +5 -3
- truthound_dashboard-1.3.1/e2e/tests/activity.spec.ts +638 -0
- truthound_dashboard-1.3.1/e2e/tests/drift.spec.ts +553 -0
- truthound_dashboard-1.3.1/e2e/tests/notifications.spec.ts +962 -0
- truthound_dashboard-1.3.1/e2e/tests/schedules.spec.ts +644 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/config/configuration.json +121 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/catalog.json +155 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/collaboration.json +97 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/common.json +99 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/dashboard.json +65 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/drift.json +97 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/errors.json +29 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/glossary.json +133 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/nav.json +41 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/notifications.json +89 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/schedules.json +99 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/settings.json +31 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/sources.json +85 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/validation.json +65 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/dictionary/validators.json +215 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/dictionaries.cjs +35 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/dictionaries.mjs +35 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/dynamic_dictionaries.cjs +8 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/dynamic_dictionaries.mjs +8 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/fetch_dictionaries.cjs +8 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/fetch_dictionaries.mjs +8 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/remote_dictionaries.cjs +8 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/remote_dictionaries.mjs +8 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/unmerged_dictionaries.cjs +35 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/main/unmerged_dictionaries.mjs +35 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/catalog.ts +156 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/collaboration.ts +98 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/common.ts +100 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/dashboard.ts +66 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/drift.ts +98 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/errors.ts +30 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/glossary.ts +134 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/intlayer.d.ts +46 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/nav.ts +42 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/notifications.ts +90 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/schedules.ts +100 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/settings.ts +32 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/sources.ts +86 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/validation.ts +66 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/types/validators.ts +216 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/catalog.json +464 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/collaboration.json +261 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/common.json +304 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/dashboard.json +185 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/drift.json +285 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/errors.json +59 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/glossary.json +387 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/nav.json +101 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/notifications.json +245 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/schedules.json +292 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/settings.json +66 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/sources.json +243 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/validation.json +173 -0
- truthound_dashboard-1.3.1/frontend/.intlayer/unmerged_dictionary/validators.json +602 -0
- truthound_dashboard-1.3.1/frontend/intlayer.config.mjs +19 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/package-lock.json +2479 -11
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/package.json +1 -3
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/App.tsx +0 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/api/client.ts +464 -8
- truthound_dashboard-1.3.1/frontend/src/components/AnimatedNumber.test.tsx +144 -0
- truthound_dashboard-1.3.1/frontend/src/components/GlassCard.test.tsx +216 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/Layout.tsx +3 -6
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/catalog/AssetFormDialog.tsx +2 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/glossary/TermFormDialog.tsx +2 -2
- truthound_dashboard-1.3.1/frontend/src/components/validators/ValidatorConfigCard.tsx +138 -0
- truthound_dashboard-1.3.1/frontend/src/components/validators/ValidatorParamInput.tsx +329 -0
- truthound_dashboard-1.3.1/frontend/src/components/validators/ValidatorSelector.tsx +427 -0
- truthound_dashboard-1.3.1/frontend/src/components/validators/index.ts +7 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/index.ts +0 -3
- truthound_dashboard-1.3.1/frontend/src/content/validators.content.ts +230 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/lib/intlayer-utils.ts +34 -3
- truthound_dashboard-1.3.1/frontend/src/mocks/__tests__/phase5-e2e.test.ts +1197 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/data/store.ts +24 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/drift.ts +61 -8
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/index.ts +3 -0
- truthound_dashboard-1.3.1/frontend/src/mocks/factories/mask.ts +198 -0
- truthound_dashboard-1.3.1/frontend/src/mocks/factories/scan.ts +420 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/validations.ts +85 -14
- truthound_dashboard-1.3.1/frontend/src/mocks/factories/validators.ts +917 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/drift.ts +14 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/index.ts +8 -0
- truthound_dashboard-1.3.1/frontend/src/mocks/handlers/mask.ts +149 -0
- truthound_dashboard-1.3.1/frontend/src/mocks/handlers/profile.ts +60 -0
- truthound_dashboard-1.3.1/frontend/src/mocks/handlers/rules.ts +266 -0
- truthound_dashboard-1.3.1/frontend/src/mocks/handlers/scan.ts +140 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/schemas.ts +43 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/validations.ts +72 -2
- truthound_dashboard-1.3.1/frontend/src/mocks/handlers/validators.ts +2260 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Activity.tsx +2 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Catalog.tsx +4 -4
- truthound_dashboard-1.3.1/frontend/src/pages/Dashboard.test.tsx +570 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Glossary.tsx +4 -4
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Schedules.tsx +184 -68
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/SourceDetail.tsx +109 -3
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/Catalog.e2e.test.tsx +615 -0
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/CatalogDetail.e2e.test.tsx +497 -0
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/Dashboard.e2e.test.tsx +266 -0
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/Glossary.e2e.test.tsx +948 -0
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/GlossaryDetail.e2e.test.tsx +944 -0
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/History.e2e.test.tsx +457 -0
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/Profile.e2e.test.tsx +475 -0
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/Rules.e2e.test.tsx +476 -0
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/SourceDetail.e2e.test.tsx +465 -0
- truthound_dashboard-1.3.1/frontend/src/pages/__tests__/Sources.e2e.test.tsx +426 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/providers/intlayer/config.ts +1 -7
- truthound_dashboard-1.3.1/frontend/src/test/mocks/intlayer-config.ts +19 -0
- truthound_dashboard-1.3.1/frontend/src/test/mocks/intlayer.ts +31 -0
- truthound_dashboard-1.3.1/frontend/src/test/mocks/react-intlayer.ts +717 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/test/setup.ts +19 -1
- truthound_dashboard-1.3.1/frontend/src/test/test-utils.tsx +84 -0
- truthound_dashboard-1.3.1/frontend/src/types/validators.ts +521 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/vite.config.ts +4 -5
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/vitest.config.ts +6 -0
- truthound_dashboard-1.3.1/package-lock.json +6 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/pyproject.toml +1 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/deps.py +28 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/drift.py +1 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/api/mask.py +164 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/profile.py +11 -3
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/router.py +22 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/api/scan.py +168 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/schemas.py +13 -4
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/validations.py +33 -1
- truthound_dashboard-1.3.1/src/truthound_dashboard/api/validators.py +85 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/__init__.py +8 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/phase5/activity.py +1 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/services.py +457 -7
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/truthound_adapter.py +441 -26
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/db/__init__.py +6 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/db/models.py +250 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/__init__.py +52 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/collaboration.py +1 -1
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/drift.py +233 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/mask.py +209 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/profile.py +45 -2
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/scan.py +312 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/schema.py +30 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/validation.py +60 -3
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/__init__.py +59 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/aggregate_validators.py +238 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/anomaly_validators.py +723 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/base.py +263 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/completeness_validators.py +269 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/cross_table_validators.py +375 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/datetime_validators.py +253 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/distribution_validators.py +422 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/drift_validators.py +615 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/geospatial_validators.py +486 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/multi_column_validators.py +706 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/privacy_validators.py +531 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/query_validators.py +510 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/registry.py +318 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/schema_validators.py +408 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/string_validators.py +396 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/table_validators.py +412 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators/uniqueness_validators.py +355 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/schemas/validators.py +59 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/static/assets/index-BZG20KuF.js +586 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/static/assets/index-D_HyZ3pb.css +1 -0
- truthound_dashboard-1.3.1/src/truthound_dashboard/static/assets/unmerged_dictionaries-CtpqQBm0.js +1 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/static/index.html +2 -2
- truthound_dashboard-1.2.1/e2e/tests/notifications.spec.ts +0 -65
- truthound_dashboard-1.2.1/frontend/.env.demo +0 -3
- truthound_dashboard-1.2.1/frontend/intlayer.config.ts +0 -14
- truthound_dashboard-1.2.1/frontend/netlify.toml +0 -31
- truthound_dashboard-1.2.1/frontend/src/components/DemoBanner.tsx +0 -61
- truthound_dashboard-1.2.1/frontend/src/content/demo.content.ts +0 -22
- truthound_dashboard-1.2.1/frontend/src/mocks/handlers/profile.ts +0 -33
- truthound_dashboard-1.2.1/frontend/src/test/test-utils.tsx +0 -26
- truthound_dashboard-1.2.1/src/truthound_dashboard/schemas/drift.py +0 -118
- truthound_dashboard-1.2.1/src/truthound_dashboard/static/assets/index-BqXVFyqj.js +0 -574
- truthound_dashboard-1.2.1/src/truthound_dashboard/static/assets/index-o8qHVDte.css +0 -1
- truthound_dashboard-1.2.1/src/truthound_dashboard/static/assets/unmerged_dictionaries-n_T3wZTf.js +0 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/.github/workflows/release.yml +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/.github/workflows/trigger-docs.yml +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/LICENSE +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/docs/configuration.md +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/docs/getting-started.md +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/docs/index.md +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/docs/internationalization.md +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/e2e/package.json +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/e2e/tests/dashboard.spec.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/e2e/tests/language.spec.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/e2e/tests/theme.spec.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/.env.development +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/.env.mock +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/.env.pip +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/.eslintrc.cjs +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/index.html +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/postcss.config.js +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/public/favicon.ico +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/public/mockServiceWorker.js +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/public-pip/favicon.ico +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/assets/logo.png +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/AnimatedNumber.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ConfirmDialog.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/GlassCard.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/LoadingFallback.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ThemeToggle.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/catalog/ColumnMappingDialog.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/collaboration/ActivityFeed.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/collaboration/Comments.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/theme-provider.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/alert-dialog.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/badge.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/button.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/card.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/dialog.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/dropdown-menu.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/input.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/label.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/select.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/switch.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/table.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/tabs.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/toast.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/components/ui/toaster.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/catalog.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/collaboration.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/common.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/dashboard.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/drift.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/errors.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/glossary.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/nav.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/notifications.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/schedules.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/settings.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/sources.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/content/validation.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/hooks/use-api.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/hooks/use-toast.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/index.css +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/lib/utils.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/main.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/browser.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/base.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/catalog.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/catalog.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/collaboration.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/collaboration.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/glossary.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/glossary.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/history.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/notifications.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/profile.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/schedules.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/schemas.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/factories/sources.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/catalog.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/collaboration.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/glossary.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/health.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/history.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/notifications.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/schedules.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/handlers/sources.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/mocks/index.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/CatalogDetail.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Dashboard.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Drift.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/GlossaryDetail.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/History.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Notifications.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Profile.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Rules.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Sources.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/pages/Validations.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/providers/index.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/providers/intlayer/IntlayerProvider.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/providers/intlayer/index.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/stores/catalogStore.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/stores/catalogStore.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/stores/glossaryStore.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/stores/glossaryStore.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/stores/theme.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/src/vite-env.d.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/tailwind.config.js +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/tsconfig.json +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/frontend/tsconfig.node.json +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/scripts/load_test.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/__main__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/catalog.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/collaboration.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/error_handlers.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/glossary.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/health.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/history.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/middleware.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/notifications.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/rules.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/schedules.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/api/sources.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/cli.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/config.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/cache.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/connections.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/encryption.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/exceptions.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/logging.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/maintenance.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/notifications/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/notifications/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/notifications/channels.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/notifications/dispatcher.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/notifications/events.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/notifications/service.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/phase5/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/phase5/catalog.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/phase5/collaboration.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/phase5/glossary.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/sampling.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/core/scheduler.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/db/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/db/database.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/db/repository.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/main.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/catalog.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/glossary.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/history.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/rule.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/schedule.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/schemas/source.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/static/assets/logo--IpBiMPK.png +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/static/favicon.ico +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/config_updater.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/exceptions.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/providers/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/providers/anthropic.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/providers/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/providers/mistral.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/providers/ollama.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/providers/openai.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/providers/registry.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/src/truthound_dashboard/translate/translator.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/conftest.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_api/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_api/test_catalog.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_api/test_collaboration.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_api/test_glossary.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_api/test_health.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_api/test_rules.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_api/test_sources.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_core/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_core/test_services.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_db/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_db/test_models.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.1}/tests/test_phase4.py +0 -0
|
@@ -142,8 +142,8 @@ npm-debug.log*
|
|
|
142
142
|
yarn-debug.log*
|
|
143
143
|
yarn-error.log*
|
|
144
144
|
|
|
145
|
-
# Intlayer (
|
|
146
|
-
|
|
145
|
+
# Intlayer cache only (dictionary must be committed for CI builds)
|
|
146
|
+
frontend/.intlayer/cache/
|
|
147
147
|
|
|
148
148
|
# Frontend build output (handled by build process)
|
|
149
149
|
# src/truthound_dashboard/static/
|
|
@@ -163,3 +163,4 @@ htmlcov/
|
|
|
163
163
|
# Claude
|
|
164
164
|
.claude/
|
|
165
165
|
CLAUDE.md
|
|
166
|
+
.truthound_docs/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: truthound-dashboard
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.1
|
|
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
|
|
@@ -43,10 +43,15 @@ Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
|
43
43
|
Provides-Extra: translate
|
|
44
44
|
Description-Content-Type: text/markdown
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
|
|
47
|
+
<img width="2551" height="911" alt="스크린샷 2026-01-08 오전 11 54 18" src="https://github.com/user-attachments/assets/5e6b6d39-ee69-48f3-b0df-577f73bcb03d" />
|
|
47
48
|
|
|
48
49
|
# truthound-dashboard
|
|
49
50
|
|
|
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
|
+
|
|
50
55
|
[](https://pypi.org/project/truthound-dashboard/)
|
|
51
56
|
[](https://www.python.org/downloads/)
|
|
52
57
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
@@ -55,9 +60,10 @@ Description-Content-Type: text/markdown
|
|
|
55
60
|
|
|
56
61
|
A web-based data quality monitoring dashboard for [truthound](https://github.com/seadonggyun4/truthound).
|
|
57
62
|
|
|
58
|
-
[Documentation](https://truthound.netlify.app) | [
|
|
63
|
+
[Documentation](https://truthound.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/)
|
|
59
64
|
|
|
60
65
|
## Overview
|
|
66
|
+
<img width="300" height="300" alt="Truthound_icon" src="https://github.com/user-attachments/assets/90d9e806-8895-45ec-97dc-f8300da4d997" />
|
|
61
67
|
|
|
62
68
|
truthound-dashboard provides a graphical interface for managing data sources, executing validations, tracking historical results, scheduling automated checks, and configuring notifications. It serves as an alternative to commercial data quality platforms.
|
|
63
69
|
|
|
@@ -68,13 +74,16 @@ truthound-dashboard provides a graphical interface for managing data sources, ex
|
|
|
68
74
|
| Data Source Management | Available | Available |
|
|
69
75
|
| Schema Learning | Available | Available |
|
|
70
76
|
| Validation Execution | Available | Available |
|
|
77
|
+
| Validator Registry | Available | Available (150+ validators) |
|
|
71
78
|
| Validation History | Available | Available |
|
|
72
79
|
| Scheduled Validations | Available | Available |
|
|
73
80
|
| Slack Notifications | Available | Available |
|
|
74
81
|
| Email Notifications | Available | Available |
|
|
75
82
|
| Webhook Notifications | Available | Available |
|
|
76
|
-
| Drift Detection | Available | Available |
|
|
83
|
+
| Drift Detection | Available | Available (8 methods) |
|
|
77
84
|
| Data Profiling | Available | Available |
|
|
85
|
+
| PII Scan | Available | Available (GDPR/CCPA/LGPD) |
|
|
86
|
+
| Data Masking | Available | Available (redact/hash/fake) |
|
|
78
87
|
| Business Glossary | Available | Available |
|
|
79
88
|
| Data Catalog | Available | Available |
|
|
80
89
|
| Dark Mode | Available | Available |
|
|
@@ -125,8 +134,11 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
125
134
|
|
|
126
135
|
### Validation
|
|
127
136
|
- On-demand validation execution using `th.check`
|
|
137
|
+
- 150+ validators across 15 categories (schema, completeness, uniqueness, distribution, string, datetime, aggregate, cross-table, multi-column, query, table, geospatial, drift, anomaly, privacy)
|
|
138
|
+
- Per-validator parameter configuration with UI
|
|
128
139
|
- Persistent storage of validation results
|
|
129
140
|
- Issue classification by severity (Critical, High, Medium, Low)
|
|
141
|
+
- Advanced options: column filtering, min_severity, parallel execution, SQL pushdown
|
|
130
142
|
|
|
131
143
|
### Validation History
|
|
132
144
|
- Historical record of validation results
|
|
@@ -143,11 +155,26 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
143
155
|
|
|
144
156
|
### Drift Detection
|
|
145
157
|
- Dataset comparison using `th.compare`
|
|
146
|
-
-
|
|
158
|
+
- 8 detection methods: auto, ks, psi, chi2, js, kl, wasserstein, cvm, anderson
|
|
159
|
+
- Multiple testing correction: bonferroni, holm, bh
|
|
160
|
+
- Column-level drift analysis with statistical metrics
|
|
147
161
|
|
|
148
162
|
### Data Profiling
|
|
149
163
|
- Statistical profiling using `th.profile`
|
|
150
164
|
- Column-level statistics
|
|
165
|
+
- Sample size configuration for large datasets
|
|
166
|
+
|
|
167
|
+
### PII Scan
|
|
168
|
+
- Personal data detection using `th.scan`
|
|
169
|
+
- Supported PII types: email, phone, SSN, credit card, IP address, and more
|
|
170
|
+
- Regulation compliance: GDPR, CCPA, LGPD
|
|
171
|
+
- Configurable confidence threshold
|
|
172
|
+
|
|
173
|
+
### Data Masking
|
|
174
|
+
- Sensitive data protection using `th.mask`
|
|
175
|
+
- Three masking strategies: redact (asterisks), hash (SHA256), fake (realistic data)
|
|
176
|
+
- Auto-detection of PII columns
|
|
177
|
+
- Multiple output formats: CSV, Parquet, JSON
|
|
151
178
|
|
|
152
179
|
### Business Glossary
|
|
153
180
|
- Business term definitions with categories
|
|
@@ -309,6 +336,24 @@ npm run dev
|
|
|
309
336
|
npm run dev:mock
|
|
310
337
|
```
|
|
311
338
|
|
|
339
|
+
## Preview with Mock Data
|
|
340
|
+
|
|
341
|
+
To explore the dashboard interface without configuring a backend or data sources, the repository includes a mock mode that simulates API responses using [Mock Service Worker (MSW)](https://mswjs.io/).
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# Clone the repository
|
|
345
|
+
git clone https://github.com/seadonggyun4/truthound-dashboard
|
|
346
|
+
cd truthound-dashboard/frontend
|
|
347
|
+
|
|
348
|
+
# Install dependencies
|
|
349
|
+
npm install
|
|
350
|
+
|
|
351
|
+
# Start the development server with mock data
|
|
352
|
+
npm run dev:mock
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
The mock server provides realistic sample data for all dashboard features, enabling evaluation of the user interface and workflow without external dependencies.
|
|
356
|
+
|
|
312
357
|
## Testing
|
|
313
358
|
|
|
314
359
|
```bash
|
|
@@ -319,12 +364,6 @@ pytest
|
|
|
319
364
|
pytest --cov=truthound_dashboard
|
|
320
365
|
```
|
|
321
366
|
|
|
322
|
-
## Live Demo
|
|
323
|
-
|
|
324
|
-
A live demonstration is available at [https://truthound-dashboard.netlify.app](https://truthound-dashboard.netlify.app).
|
|
325
|
-
|
|
326
|
-
The demo instance operates using Mock Service Worker (MSW) with simulated data and does not require a backend connection.
|
|
327
|
-
|
|
328
367
|
## Documentation
|
|
329
368
|
|
|
330
369
|
Full documentation is available at [https://truthound.netlify.app](https://truthound.netlify.app).
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
|
+
<img width="2551" height="911" alt="스크린샷 2026-01-08 오전 11 54 18" src="https://github.com/user-attachments/assets/5e6b6d39-ee69-48f3-b0df-577f73bcb03d" />
|
|
2
3
|
|
|
3
4
|
# truthound-dashboard
|
|
4
5
|
|
|
6
|
+
> **⚠️ Under Active Development**
|
|
7
|
+
>
|
|
8
|
+
> 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.
|
|
9
|
+
|
|
5
10
|
[](https://pypi.org/project/truthound-dashboard/)
|
|
6
11
|
[](https://www.python.org/downloads/)
|
|
7
12
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
@@ -10,9 +15,10 @@
|
|
|
10
15
|
|
|
11
16
|
A web-based data quality monitoring dashboard for [truthound](https://github.com/seadonggyun4/truthound).
|
|
12
17
|
|
|
13
|
-
[Documentation](https://truthound.netlify.app) | [
|
|
18
|
+
[Documentation](https://truthound.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/)
|
|
14
19
|
|
|
15
20
|
## Overview
|
|
21
|
+
<img width="300" height="300" alt="Truthound_icon" src="https://github.com/user-attachments/assets/90d9e806-8895-45ec-97dc-f8300da4d997" />
|
|
16
22
|
|
|
17
23
|
truthound-dashboard provides a graphical interface for managing data sources, executing validations, tracking historical results, scheduling automated checks, and configuring notifications. It serves as an alternative to commercial data quality platforms.
|
|
18
24
|
|
|
@@ -23,13 +29,16 @@ truthound-dashboard provides a graphical interface for managing data sources, ex
|
|
|
23
29
|
| Data Source Management | Available | Available |
|
|
24
30
|
| Schema Learning | Available | Available |
|
|
25
31
|
| Validation Execution | Available | Available |
|
|
32
|
+
| Validator Registry | Available | Available (150+ validators) |
|
|
26
33
|
| Validation History | Available | Available |
|
|
27
34
|
| Scheduled Validations | Available | Available |
|
|
28
35
|
| Slack Notifications | Available | Available |
|
|
29
36
|
| Email Notifications | Available | Available |
|
|
30
37
|
| Webhook Notifications | Available | Available |
|
|
31
|
-
| Drift Detection | Available | Available |
|
|
38
|
+
| Drift Detection | Available | Available (8 methods) |
|
|
32
39
|
| Data Profiling | Available | Available |
|
|
40
|
+
| PII Scan | Available | Available (GDPR/CCPA/LGPD) |
|
|
41
|
+
| Data Masking | Available | Available (redact/hash/fake) |
|
|
33
42
|
| Business Glossary | Available | Available |
|
|
34
43
|
| Data Catalog | Available | Available |
|
|
35
44
|
| Dark Mode | Available | Available |
|
|
@@ -80,8 +89,11 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
80
89
|
|
|
81
90
|
### Validation
|
|
82
91
|
- On-demand validation execution using `th.check`
|
|
92
|
+
- 150+ validators across 15 categories (schema, completeness, uniqueness, distribution, string, datetime, aggregate, cross-table, multi-column, query, table, geospatial, drift, anomaly, privacy)
|
|
93
|
+
- Per-validator parameter configuration with UI
|
|
83
94
|
- Persistent storage of validation results
|
|
84
95
|
- Issue classification by severity (Critical, High, Medium, Low)
|
|
96
|
+
- Advanced options: column filtering, min_severity, parallel execution, SQL pushdown
|
|
85
97
|
|
|
86
98
|
### Validation History
|
|
87
99
|
- Historical record of validation results
|
|
@@ -98,11 +110,26 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
98
110
|
|
|
99
111
|
### Drift Detection
|
|
100
112
|
- Dataset comparison using `th.compare`
|
|
101
|
-
-
|
|
113
|
+
- 8 detection methods: auto, ks, psi, chi2, js, kl, wasserstein, cvm, anderson
|
|
114
|
+
- Multiple testing correction: bonferroni, holm, bh
|
|
115
|
+
- Column-level drift analysis with statistical metrics
|
|
102
116
|
|
|
103
117
|
### Data Profiling
|
|
104
118
|
- Statistical profiling using `th.profile`
|
|
105
119
|
- Column-level statistics
|
|
120
|
+
- Sample size configuration for large datasets
|
|
121
|
+
|
|
122
|
+
### PII Scan
|
|
123
|
+
- Personal data detection using `th.scan`
|
|
124
|
+
- Supported PII types: email, phone, SSN, credit card, IP address, and more
|
|
125
|
+
- Regulation compliance: GDPR, CCPA, LGPD
|
|
126
|
+
- Configurable confidence threshold
|
|
127
|
+
|
|
128
|
+
### Data Masking
|
|
129
|
+
- Sensitive data protection using `th.mask`
|
|
130
|
+
- Three masking strategies: redact (asterisks), hash (SHA256), fake (realistic data)
|
|
131
|
+
- Auto-detection of PII columns
|
|
132
|
+
- Multiple output formats: CSV, Parquet, JSON
|
|
106
133
|
|
|
107
134
|
### Business Glossary
|
|
108
135
|
- Business term definitions with categories
|
|
@@ -264,6 +291,24 @@ npm run dev
|
|
|
264
291
|
npm run dev:mock
|
|
265
292
|
```
|
|
266
293
|
|
|
294
|
+
## Preview with Mock Data
|
|
295
|
+
|
|
296
|
+
To explore the dashboard interface without configuring a backend or data sources, the repository includes a mock mode that simulates API responses using [Mock Service Worker (MSW)](https://mswjs.io/).
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
# Clone the repository
|
|
300
|
+
git clone https://github.com/seadonggyun4/truthound-dashboard
|
|
301
|
+
cd truthound-dashboard/frontend
|
|
302
|
+
|
|
303
|
+
# Install dependencies
|
|
304
|
+
npm install
|
|
305
|
+
|
|
306
|
+
# Start the development server with mock data
|
|
307
|
+
npm run dev:mock
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
The mock server provides realistic sample data for all dashboard features, enabling evaluation of the user interface and workflow without external dependencies.
|
|
311
|
+
|
|
267
312
|
## Testing
|
|
268
313
|
|
|
269
314
|
```bash
|
|
@@ -274,12 +319,6 @@ pytest
|
|
|
274
319
|
pytest --cov=truthound_dashboard
|
|
275
320
|
```
|
|
276
321
|
|
|
277
|
-
## Live Demo
|
|
278
|
-
|
|
279
|
-
A live demonstration is available at [https://truthound-dashboard.netlify.app](https://truthound-dashboard.netlify.app).
|
|
280
|
-
|
|
281
|
-
The demo instance operates using Mock Service Worker (MSW) with simulated data and does not require a backend connection.
|
|
282
|
-
|
|
283
322
|
## Documentation
|
|
284
323
|
|
|
285
324
|
Full documentation is available at [https://truthound.netlify.app](https://truthound.netlify.app).
|
|
@@ -288,19 +288,56 @@ Analyzes data to automatically generate a schema.
|
|
|
288
288
|
|
|
289
289
|
Run validation (th.check).
|
|
290
290
|
|
|
291
|
-
**Request:**
|
|
291
|
+
**Request (Simple Mode):**
|
|
292
292
|
```json
|
|
293
293
|
{
|
|
294
|
-
"validators": ["
|
|
294
|
+
"validators": ["Null", "Unique", "ColumnExists"],
|
|
295
295
|
"schema_path": "/path/to/schema.yaml",
|
|
296
296
|
"auto_schema": false
|
|
297
297
|
}
|
|
298
298
|
```
|
|
299
299
|
|
|
300
|
+
**Request (Advanced Mode with validator_configs):**
|
|
301
|
+
```json
|
|
302
|
+
{
|
|
303
|
+
"validator_configs": [
|
|
304
|
+
{
|
|
305
|
+
"name": "Between",
|
|
306
|
+
"enabled": true,
|
|
307
|
+
"params": {
|
|
308
|
+
"column": "price",
|
|
309
|
+
"min_value": 0,
|
|
310
|
+
"max_value": 10000
|
|
311
|
+
},
|
|
312
|
+
"severity_override": "high"
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"name": "Regex",
|
|
316
|
+
"enabled": true,
|
|
317
|
+
"params": {
|
|
318
|
+
"column": "email",
|
|
319
|
+
"pattern": "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$"
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
],
|
|
323
|
+
"columns": ["price", "email", "status"],
|
|
324
|
+
"min_severity": "medium",
|
|
325
|
+
"parallel": true,
|
|
326
|
+
"max_workers": 4
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
300
330
|
**Parameters:**
|
|
301
|
-
- `validators` (optional): List of
|
|
331
|
+
- `validators` (optional): List of validator names to run (simple mode)
|
|
332
|
+
- `validator_configs` (optional): Per-validator configuration with params (advanced mode, takes precedence)
|
|
302
333
|
- `schema_path` (optional): Path to schema file
|
|
303
334
|
- `auto_schema` (optional): If true, auto-generate schema before validation
|
|
335
|
+
- `columns` (optional): Specific columns to validate
|
|
336
|
+
- `min_severity` (optional): Minimum severity to report (low, medium, high, critical)
|
|
337
|
+
- `strict` (optional): Raise exception on failures
|
|
338
|
+
- `parallel` (optional): Enable parallel execution
|
|
339
|
+
- `max_workers` (optional): Max threads for parallel (1-32)
|
|
340
|
+
- `pushdown` (optional): Enable SQL query pushdown
|
|
304
341
|
|
|
305
342
|
**Response:**
|
|
306
343
|
```json
|
|
@@ -378,6 +415,16 @@ Retrieve validation history for a source.
|
|
|
378
415
|
|
|
379
416
|
Run data profiling (th.profile).
|
|
380
417
|
|
|
418
|
+
**Request:**
|
|
419
|
+
```json
|
|
420
|
+
{
|
|
421
|
+
"sample_size": 10000
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**Parameters:**
|
|
426
|
+
- `sample_size` (optional): Maximum rows to sample for profiling
|
|
427
|
+
|
|
381
428
|
**Response:**
|
|
382
429
|
```json
|
|
383
430
|
{
|
|
@@ -433,18 +480,37 @@ Compare two datasets (th.compare).
|
|
|
433
480
|
**Request:**
|
|
434
481
|
```json
|
|
435
482
|
{
|
|
436
|
-
"
|
|
437
|
-
"
|
|
483
|
+
"baseline_source_id": "abc123",
|
|
484
|
+
"current_source_id": "def456",
|
|
485
|
+
"columns": ["price", "quantity"],
|
|
486
|
+
"method": "psi",
|
|
487
|
+
"threshold": 0.1,
|
|
488
|
+
"correction": "bh",
|
|
489
|
+
"sample_size": 10000
|
|
438
490
|
}
|
|
439
491
|
```
|
|
440
492
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
493
|
+
**Parameters:**
|
|
494
|
+
- `baseline_source_id` (required): Baseline source ID
|
|
495
|
+
- `current_source_id` (required): Current source ID to compare
|
|
496
|
+
- `columns` (optional): Columns to compare (null = all columns)
|
|
497
|
+
- `method` (optional): Detection method - auto, ks, psi, chi2, js, kl, wasserstein, cvm, anderson (default: auto)
|
|
498
|
+
- `threshold` (optional): Custom threshold (default varies by method)
|
|
499
|
+
- `correction` (optional): Multiple testing correction - none, bonferroni, holm, bh (default: bh for multiple columns)
|
|
500
|
+
- `sample_size` (optional): Sample size for large datasets
|
|
501
|
+
|
|
502
|
+
**Detection Methods:**
|
|
503
|
+
| Method | Use Case | Default Threshold |
|
|
504
|
+
|--------|----------|-------------------|
|
|
505
|
+
| auto | Smart selection based on data type | 0.05 |
|
|
506
|
+
| ks | Continuous distributions | 0.05 |
|
|
507
|
+
| psi | Industry standard, any distribution | 0.1 |
|
|
508
|
+
| chi2 | Categorical data | 0.05 |
|
|
509
|
+
| js | Symmetric, bounded (0-1) | 0.1 |
|
|
510
|
+
| kl | Information loss measure | 0.1 |
|
|
511
|
+
| wasserstein | Earth Mover's Distance | 0.1 |
|
|
512
|
+
| cvm | Sensitive to tail differences | 0.05 |
|
|
513
|
+
| anderson | Weighted for tail sensitivity | 0.05 |
|
|
448
514
|
|
|
449
515
|
**Response:**
|
|
450
516
|
```json
|
|
@@ -479,6 +545,207 @@ Or:
|
|
|
479
545
|
|
|
480
546
|
Retrieve drift comparison result.
|
|
481
547
|
|
|
548
|
+
### GET /drift/comparisons
|
|
549
|
+
|
|
550
|
+
List drift comparisons with optional filters.
|
|
551
|
+
|
|
552
|
+
**Query Parameters:**
|
|
553
|
+
- `baseline_source_id` (optional): Filter by baseline source
|
|
554
|
+
- `current_source_id` (optional): Filter by current source
|
|
555
|
+
- `limit` (default: 20): Maximum results (1-100)
|
|
556
|
+
|
|
557
|
+
---
|
|
558
|
+
|
|
559
|
+
## Validators
|
|
560
|
+
|
|
561
|
+
### GET /validators
|
|
562
|
+
|
|
563
|
+
List all available validators with their parameter definitions.
|
|
564
|
+
|
|
565
|
+
**Query Parameters:**
|
|
566
|
+
- `category` (optional): Filter by category (schema, completeness, uniqueness, etc.)
|
|
567
|
+
- `search` (optional): Search by name, description, or tags
|
|
568
|
+
|
|
569
|
+
**Response:**
|
|
570
|
+
```json
|
|
571
|
+
[
|
|
572
|
+
{
|
|
573
|
+
"name": "Between",
|
|
574
|
+
"display_name": "Value Between",
|
|
575
|
+
"category": "distribution",
|
|
576
|
+
"description": "Validates that values fall within a specified range",
|
|
577
|
+
"parameters": [
|
|
578
|
+
{
|
|
579
|
+
"name": "column",
|
|
580
|
+
"label": "Column",
|
|
581
|
+
"type": "column",
|
|
582
|
+
"required": true
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
"name": "min_value",
|
|
586
|
+
"label": "Minimum Value",
|
|
587
|
+
"type": "float",
|
|
588
|
+
"required": true
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
"name": "max_value",
|
|
592
|
+
"label": "Maximum Value",
|
|
593
|
+
"type": "float",
|
|
594
|
+
"required": true
|
|
595
|
+
}
|
|
596
|
+
],
|
|
597
|
+
"tags": ["distribution", "range", "bounds"],
|
|
598
|
+
"severity_default": "medium"
|
|
599
|
+
}
|
|
600
|
+
]
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### GET /validators/categories
|
|
604
|
+
|
|
605
|
+
List all validator categories with metadata.
|
|
606
|
+
|
|
607
|
+
**Response:**
|
|
608
|
+
```json
|
|
609
|
+
[
|
|
610
|
+
{
|
|
611
|
+
"value": "schema",
|
|
612
|
+
"label": "Schema",
|
|
613
|
+
"description": "Validate structure, columns, and data types",
|
|
614
|
+
"icon": "layout",
|
|
615
|
+
"color": "#3b82f6",
|
|
616
|
+
"validator_count": 14
|
|
617
|
+
}
|
|
618
|
+
]
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
### GET /validators/{name}
|
|
622
|
+
|
|
623
|
+
Get a specific validator definition by name.
|
|
624
|
+
|
|
625
|
+
---
|
|
626
|
+
|
|
627
|
+
## PII Scan
|
|
628
|
+
|
|
629
|
+
### POST /scans/sources/{id}/scan
|
|
630
|
+
|
|
631
|
+
Run PII scan on a data source (th.scan).
|
|
632
|
+
|
|
633
|
+
**Request:**
|
|
634
|
+
```json
|
|
635
|
+
{
|
|
636
|
+
"columns": ["email", "phone", "ssn"],
|
|
637
|
+
"regulations": ["gdpr", "ccpa"],
|
|
638
|
+
"min_confidence": 0.8
|
|
639
|
+
}
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
**Parameters:**
|
|
643
|
+
- `columns` (optional): Columns to scan (null = all columns)
|
|
644
|
+
- `regulations` (optional): Privacy regulations to check - gdpr, ccpa, lgpd
|
|
645
|
+
- `min_confidence` (optional): Confidence threshold (0.0-1.0, default: 0.8)
|
|
646
|
+
|
|
647
|
+
**Response:**
|
|
648
|
+
```json
|
|
649
|
+
{
|
|
650
|
+
"id": "scan123",
|
|
651
|
+
"source_id": "abc123",
|
|
652
|
+
"status": "success",
|
|
653
|
+
"total_columns_scanned": 15,
|
|
654
|
+
"columns_with_pii": 3,
|
|
655
|
+
"total_findings": 5,
|
|
656
|
+
"has_violations": true,
|
|
657
|
+
"total_violations": 2,
|
|
658
|
+
"findings": [
|
|
659
|
+
{
|
|
660
|
+
"column": "email",
|
|
661
|
+
"pii_type": "email",
|
|
662
|
+
"confidence": 0.95,
|
|
663
|
+
"sample_count": 1000
|
|
664
|
+
}
|
|
665
|
+
],
|
|
666
|
+
"violations": [
|
|
667
|
+
{
|
|
668
|
+
"regulation": "gdpr",
|
|
669
|
+
"column": "ssn",
|
|
670
|
+
"pii_type": "ssn",
|
|
671
|
+
"message": "SSN data requires explicit consent under GDPR",
|
|
672
|
+
"severity": "high"
|
|
673
|
+
}
|
|
674
|
+
],
|
|
675
|
+
"created_at": "2024-01-15T10:30:00Z"
|
|
676
|
+
}
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
### GET /scans/{id}
|
|
680
|
+
|
|
681
|
+
Get PII scan result by ID.
|
|
682
|
+
|
|
683
|
+
### GET /scans/sources/{id}/scans
|
|
684
|
+
|
|
685
|
+
List PII scan history for a source.
|
|
686
|
+
|
|
687
|
+
### GET /scans/sources/{id}/scans/latest
|
|
688
|
+
|
|
689
|
+
Get the most recent PII scan for a source.
|
|
690
|
+
|
|
691
|
+
---
|
|
692
|
+
|
|
693
|
+
## Data Masking
|
|
694
|
+
|
|
695
|
+
### POST /masks/sources/{id}/mask
|
|
696
|
+
|
|
697
|
+
Run data masking on a source (th.mask).
|
|
698
|
+
|
|
699
|
+
**Request:**
|
|
700
|
+
```json
|
|
701
|
+
{
|
|
702
|
+
"columns": ["email", "ssn", "phone"],
|
|
703
|
+
"strategy": "hash",
|
|
704
|
+
"output_format": "csv"
|
|
705
|
+
}
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
**Parameters:**
|
|
709
|
+
- `columns` (optional): Columns to mask (null = auto-detect PII columns)
|
|
710
|
+
- `strategy` (optional): Masking strategy - redact, hash, fake (default: redact)
|
|
711
|
+
- `output_format` (optional): Output format - csv, parquet, json (default: csv)
|
|
712
|
+
|
|
713
|
+
**Masking Strategies:**
|
|
714
|
+
| Strategy | Description |
|
|
715
|
+
|----------|-------------|
|
|
716
|
+
| redact | Replace values with asterisks (e.g., "john@example.com" → "****") |
|
|
717
|
+
| hash | Replace with SHA256 hash (deterministic, can be used for joins) |
|
|
718
|
+
| fake | Replace with realistic fake data (e.g., "john@example.com" → "alice@test.org") |
|
|
719
|
+
|
|
720
|
+
**Response:**
|
|
721
|
+
```json
|
|
722
|
+
{
|
|
723
|
+
"id": "mask123",
|
|
724
|
+
"source_id": "abc123",
|
|
725
|
+
"status": "success",
|
|
726
|
+
"strategy": "hash",
|
|
727
|
+
"output_path": "/tmp/masked_data.csv",
|
|
728
|
+
"columns_masked": ["email", "ssn", "phone"],
|
|
729
|
+
"auto_detected": false,
|
|
730
|
+
"row_count": 10000,
|
|
731
|
+
"column_count": 15,
|
|
732
|
+
"duration_ms": 1500,
|
|
733
|
+
"created_at": "2024-01-15T10:30:00Z"
|
|
734
|
+
}
|
|
735
|
+
```
|
|
736
|
+
|
|
737
|
+
### GET /masks/{id}
|
|
738
|
+
|
|
739
|
+
Get mask operation by ID.
|
|
740
|
+
|
|
741
|
+
### GET /masks/sources/{id}/masks
|
|
742
|
+
|
|
743
|
+
List mask operations for a source.
|
|
744
|
+
|
|
745
|
+
### GET /masks/sources/{id}/masks/latest
|
|
746
|
+
|
|
747
|
+
Get the most recent mask operation for a source.
|
|
748
|
+
|
|
482
749
|
---
|
|
483
750
|
|
|
484
751
|
## Schedules
|