truthound-dashboard 1.2.1__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/.gitignore +3 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/PKG-INFO +46 -11
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/README.md +45 -10
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/api.md +279 -12
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/features.md +152 -27
- truthound_dashboard-1.3.0/e2e/package-lock.json +78 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/playwright.config.ts +5 -3
- truthound_dashboard-1.3.0/e2e/tests/activity.spec.ts +638 -0
- truthound_dashboard-1.3.0/e2e/tests/drift.spec.ts +553 -0
- truthound_dashboard-1.3.0/e2e/tests/notifications.spec.ts +962 -0
- truthound_dashboard-1.3.0/e2e/tests/schedules.spec.ts +644 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/config/configuration.json +121 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/catalog.json +155 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/collaboration.json +97 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/common.json +99 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/dashboard.json +65 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/drift.json +97 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/errors.json +29 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/glossary.json +133 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/nav.json +41 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/notifications.json +89 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/schedules.json +99 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/settings.json +31 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/sources.json +85 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/validation.json +65 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/dictionaries.cjs +33 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/dictionaries.mjs +33 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/dynamic_dictionaries.cjs +8 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/dynamic_dictionaries.mjs +8 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/fetch_dictionaries.cjs +8 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/fetch_dictionaries.mjs +8 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/remote_dictionaries.cjs +8 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/remote_dictionaries.mjs +8 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/unmerged_dictionaries.cjs +33 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/main/unmerged_dictionaries.mjs +33 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/catalog.ts +156 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/collaboration.ts +98 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/common.ts +100 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/dashboard.ts +66 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/drift.ts +98 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/errors.ts +30 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/glossary.ts +134 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/intlayer.d.ts +44 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/nav.ts +42 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/notifications.ts +90 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/schedules.ts +100 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/settings.ts +32 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/sources.ts +86 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/types/validation.ts +66 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/catalog.json +464 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/collaboration.json +261 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/common.json +304 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/dashboard.json +185 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/drift.json +285 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/errors.json +59 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/glossary.json +387 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/nav.json +101 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/notifications.json +245 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/schedules.json +292 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/settings.json +66 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/sources.json +243 -0
- truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/validation.json +173 -0
- truthound_dashboard-1.3.0/frontend/intlayer.config.mjs +19 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/package-lock.json +2479 -11
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/package.json +1 -3
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/App.tsx +0 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/api/client.ts +464 -8
- truthound_dashboard-1.3.0/frontend/src/components/AnimatedNumber.test.tsx +144 -0
- truthound_dashboard-1.3.0/frontend/src/components/GlassCard.test.tsx +216 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/Layout.tsx +3 -6
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/catalog/AssetFormDialog.tsx +2 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/glossary/TermFormDialog.tsx +2 -2
- truthound_dashboard-1.3.0/frontend/src/components/validators/ValidatorConfigCard.tsx +138 -0
- truthound_dashboard-1.3.0/frontend/src/components/validators/ValidatorParamInput.tsx +329 -0
- truthound_dashboard-1.3.0/frontend/src/components/validators/ValidatorSelector.tsx +427 -0
- truthound_dashboard-1.3.0/frontend/src/components/validators/index.ts +7 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/index.ts +0 -3
- truthound_dashboard-1.3.0/frontend/src/content/validators.content.ts +230 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/lib/intlayer-utils.ts +34 -3
- truthound_dashboard-1.3.0/frontend/src/mocks/__tests__/phase5-e2e.test.ts +1197 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/data/store.ts +24 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/drift.ts +61 -8
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/index.ts +3 -0
- truthound_dashboard-1.3.0/frontend/src/mocks/factories/mask.ts +221 -0
- truthound_dashboard-1.3.0/frontend/src/mocks/factories/scan.ts +421 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/validations.ts +73 -14
- truthound_dashboard-1.3.0/frontend/src/mocks/factories/validators.ts +917 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/drift.ts +14 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/index.ts +8 -0
- truthound_dashboard-1.3.0/frontend/src/mocks/handlers/mask.ts +149 -0
- truthound_dashboard-1.3.0/frontend/src/mocks/handlers/profile.ts +60 -0
- truthound_dashboard-1.3.0/frontend/src/mocks/handlers/rules.ts +266 -0
- truthound_dashboard-1.3.0/frontend/src/mocks/handlers/scan.ts +140 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/schemas.ts +43 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/validations.ts +72 -2
- truthound_dashboard-1.3.0/frontend/src/mocks/handlers/validators.ts +2260 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Activity.tsx +2 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Catalog.tsx +4 -4
- truthound_dashboard-1.3.0/frontend/src/pages/Dashboard.test.tsx +570 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Glossary.tsx +4 -4
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Catalog.e2e.test.tsx +615 -0
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/CatalogDetail.e2e.test.tsx +497 -0
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Dashboard.e2e.test.tsx +266 -0
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Glossary.e2e.test.tsx +948 -0
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/GlossaryDetail.e2e.test.tsx +944 -0
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/History.e2e.test.tsx +457 -0
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Profile.e2e.test.tsx +475 -0
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Rules.e2e.test.tsx +476 -0
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/SourceDetail.e2e.test.tsx +465 -0
- truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Sources.e2e.test.tsx +426 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/providers/intlayer/config.ts +1 -7
- truthound_dashboard-1.3.0/frontend/src/test/mocks/intlayer-config.ts +19 -0
- truthound_dashboard-1.3.0/frontend/src/test/mocks/intlayer.ts +31 -0
- truthound_dashboard-1.3.0/frontend/src/test/mocks/react-intlayer.ts +717 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/test/setup.ts +19 -1
- truthound_dashboard-1.3.0/frontend/src/test/test-utils.tsx +84 -0
- truthound_dashboard-1.3.0/frontend/src/types/validators.ts +521 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/vite.config.ts +4 -5
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/vitest.config.ts +6 -0
- truthound_dashboard-1.3.0/package-lock.json +6 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/pyproject.toml +1 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/deps.py +28 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/drift.py +1 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/api/mask.py +164 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/profile.py +11 -3
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/router.py +22 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/api/scan.py +168 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/schemas.py +13 -4
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/validations.py +33 -1
- truthound_dashboard-1.3.0/src/truthound_dashboard/api/validators.py +85 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/__init__.py +8 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/activity.py +1 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/services.py +457 -7
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/truthound_adapter.py +441 -26
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/__init__.py +6 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/models.py +250 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/__init__.py +52 -1
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/collaboration.py +1 -1
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/drift.py +233 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/mask.py +209 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/profile.py +45 -2
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/scan.py +312 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/schema.py +30 -2
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/validation.py +60 -3
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/__init__.py +59 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/aggregate_validators.py +238 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/anomaly_validators.py +723 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/base.py +263 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/completeness_validators.py +269 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/cross_table_validators.py +375 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/datetime_validators.py +253 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/distribution_validators.py +422 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/drift_validators.py +615 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/geospatial_validators.py +486 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/multi_column_validators.py +706 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/privacy_validators.py +531 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/query_validators.py +510 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/registry.py +318 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/schema_validators.py +408 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/string_validators.py +396 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/table_validators.py +412 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/uniqueness_validators.py +355 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators.py +59 -0
- truthound_dashboard-1.2.1/src/truthound_dashboard/static/assets/index-BqXVFyqj.js → truthound_dashboard-1.3.0/src/truthound_dashboard/static/assets/index-BCA8H1hO.js +95 -95
- truthound_dashboard-1.3.0/src/truthound_dashboard/static/assets/index-BNsSQ2fN.css +1 -0
- truthound_dashboard-1.3.0/src/truthound_dashboard/static/assets/unmerged_dictionaries-CsJWCRx9.js +1 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/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-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.0}/.github/workflows/release.yml +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/.github/workflows/trigger-docs.yml +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/LICENSE +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/configuration.md +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/getting-started.md +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/index.md +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/internationalization.md +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/package.json +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/tests/dashboard.spec.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/tests/language.spec.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/tests/theme.spec.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/.env.development +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/.env.mock +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/.env.pip +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/.eslintrc.cjs +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/index.html +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/postcss.config.js +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/public/favicon.ico +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/public/mockServiceWorker.js +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/public-pip/favicon.ico +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/assets/logo.png +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/AnimatedNumber.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ConfirmDialog.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/GlassCard.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/LoadingFallback.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ThemeToggle.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/catalog/ColumnMappingDialog.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/collaboration/ActivityFeed.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/collaboration/Comments.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/theme-provider.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/alert-dialog.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/badge.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/button.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/card.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/dialog.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/dropdown-menu.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/input.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/label.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/select.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/switch.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/table.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/tabs.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/toast.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/toaster.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/catalog.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/collaboration.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/common.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/dashboard.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/drift.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/errors.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/glossary.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/nav.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/notifications.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/schedules.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/settings.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/sources.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/validation.content.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/hooks/use-api.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/hooks/use-toast.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/index.css +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/lib/utils.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/main.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/browser.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/base.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/catalog.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/catalog.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/collaboration.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/collaboration.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/glossary.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/glossary.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/history.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/notifications.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/profile.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/schedules.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/schemas.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/sources.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/catalog.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/collaboration.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/glossary.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/health.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/history.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/notifications.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/schedules.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/sources.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/index.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/CatalogDetail.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Dashboard.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Drift.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/GlossaryDetail.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/History.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Notifications.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Profile.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Rules.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Schedules.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/SourceDetail.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Sources.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Validations.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/providers/index.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/providers/intlayer/IntlayerProvider.tsx +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/providers/intlayer/index.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/catalogStore.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/catalogStore.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/glossaryStore.test.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/glossaryStore.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/theme.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/vite-env.d.ts +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/tailwind.config.js +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/tsconfig.json +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/tsconfig.node.json +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/scripts/load_test.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/__main__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/catalog.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/collaboration.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/error_handlers.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/glossary.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/health.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/history.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/middleware.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/notifications.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/rules.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/schedules.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/sources.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/cli.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/config.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/cache.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/connections.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/encryption.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/exceptions.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/logging.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/maintenance.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/channels.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/dispatcher.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/events.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/service.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/catalog.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/collaboration.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/glossary.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/sampling.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/scheduler.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/database.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/repository.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/main.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/catalog.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/glossary.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/history.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/rule.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/schedule.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/source.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/static/assets/logo--IpBiMPK.png +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/static/favicon.ico +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/config_updater.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/exceptions.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/anthropic.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/base.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/mistral.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/ollama.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/openai.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/registry.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/translator.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/conftest.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_catalog.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_collaboration.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_glossary.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_health.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_rules.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_sources.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_core/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_core/test_services.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_db/__init__.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_db/test_models.py +0 -0
- {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/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.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
|
|
@@ -43,7 +43,8 @@ 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
|
|
|
@@ -55,9 +56,10 @@ Description-Content-Type: text/markdown
|
|
|
55
56
|
|
|
56
57
|
A web-based data quality monitoring dashboard for [truthound](https://github.com/seadonggyun4/truthound).
|
|
57
58
|
|
|
58
|
-
[Documentation](https://truthound.netlify.app) | [
|
|
59
|
+
[Documentation](https://truthound.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/)
|
|
59
60
|
|
|
60
61
|
## Overview
|
|
62
|
+
<img width="300" height="300" alt="Truthound_icon" src="https://github.com/user-attachments/assets/90d9e806-8895-45ec-97dc-f8300da4d997" />
|
|
61
63
|
|
|
62
64
|
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
65
|
|
|
@@ -68,13 +70,16 @@ truthound-dashboard provides a graphical interface for managing data sources, ex
|
|
|
68
70
|
| Data Source Management | Available | Available |
|
|
69
71
|
| Schema Learning | Available | Available |
|
|
70
72
|
| Validation Execution | Available | Available |
|
|
73
|
+
| Validator Registry | Available | Available (150+ validators) |
|
|
71
74
|
| Validation History | Available | Available |
|
|
72
75
|
| Scheduled Validations | Available | Available |
|
|
73
76
|
| Slack Notifications | Available | Available |
|
|
74
77
|
| Email Notifications | Available | Available |
|
|
75
78
|
| Webhook Notifications | Available | Available |
|
|
76
|
-
| Drift Detection | Available | Available |
|
|
79
|
+
| Drift Detection | Available | Available (8 methods) |
|
|
77
80
|
| Data Profiling | Available | Available |
|
|
81
|
+
| PII Scan | Available | Available (GDPR/CCPA/LGPD) |
|
|
82
|
+
| Data Masking | Available | Available (redact/hash/fake) |
|
|
78
83
|
| Business Glossary | Available | Available |
|
|
79
84
|
| Data Catalog | Available | Available |
|
|
80
85
|
| Dark Mode | Available | Available |
|
|
@@ -125,8 +130,11 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
125
130
|
|
|
126
131
|
### Validation
|
|
127
132
|
- On-demand validation execution using `th.check`
|
|
133
|
+
- 150+ validators across 15 categories (schema, completeness, uniqueness, distribution, string, datetime, aggregate, cross-table, multi-column, query, table, geospatial, drift, anomaly, privacy)
|
|
134
|
+
- Per-validator parameter configuration with UI
|
|
128
135
|
- Persistent storage of validation results
|
|
129
136
|
- Issue classification by severity (Critical, High, Medium, Low)
|
|
137
|
+
- Advanced options: column filtering, min_severity, parallel execution, SQL pushdown
|
|
130
138
|
|
|
131
139
|
### Validation History
|
|
132
140
|
- Historical record of validation results
|
|
@@ -143,11 +151,26 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
143
151
|
|
|
144
152
|
### Drift Detection
|
|
145
153
|
- Dataset comparison using `th.compare`
|
|
146
|
-
-
|
|
154
|
+
- 8 detection methods: auto, ks, psi, chi2, js, kl, wasserstein, cvm, anderson
|
|
155
|
+
- Multiple testing correction: bonferroni, holm, bh
|
|
156
|
+
- Column-level drift analysis with statistical metrics
|
|
147
157
|
|
|
148
158
|
### Data Profiling
|
|
149
159
|
- Statistical profiling using `th.profile`
|
|
150
160
|
- Column-level statistics
|
|
161
|
+
- Sample size configuration for large datasets
|
|
162
|
+
|
|
163
|
+
### PII Scan
|
|
164
|
+
- Personal data detection using `th.scan`
|
|
165
|
+
- Supported PII types: email, phone, SSN, credit card, IP address, and more
|
|
166
|
+
- Regulation compliance: GDPR, CCPA, LGPD
|
|
167
|
+
- Configurable confidence threshold
|
|
168
|
+
|
|
169
|
+
### Data Masking
|
|
170
|
+
- Sensitive data protection using `th.mask`
|
|
171
|
+
- Three masking strategies: redact (asterisks), hash (SHA256), fake (realistic data)
|
|
172
|
+
- Auto-detection of PII columns
|
|
173
|
+
- Multiple output formats: CSV, Parquet, JSON
|
|
151
174
|
|
|
152
175
|
### Business Glossary
|
|
153
176
|
- Business term definitions with categories
|
|
@@ -309,6 +332,24 @@ npm run dev
|
|
|
309
332
|
npm run dev:mock
|
|
310
333
|
```
|
|
311
334
|
|
|
335
|
+
## Preview with Mock Data
|
|
336
|
+
|
|
337
|
+
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/).
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
# Clone the repository
|
|
341
|
+
git clone https://github.com/seadonggyun4/truthound-dashboard
|
|
342
|
+
cd truthound-dashboard/frontend
|
|
343
|
+
|
|
344
|
+
# Install dependencies
|
|
345
|
+
npm install
|
|
346
|
+
|
|
347
|
+
# Start the development server with mock data
|
|
348
|
+
npm run dev:mock
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
The mock server provides realistic sample data for all dashboard features, enabling evaluation of the user interface and workflow without external dependencies.
|
|
352
|
+
|
|
312
353
|
## Testing
|
|
313
354
|
|
|
314
355
|
```bash
|
|
@@ -319,12 +360,6 @@ pytest
|
|
|
319
360
|
pytest --cov=truthound_dashboard
|
|
320
361
|
```
|
|
321
362
|
|
|
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
363
|
## Documentation
|
|
329
364
|
|
|
330
365
|
Full documentation is available at [https://truthound.netlify.app](https://truthound.netlify.app).
|
|
@@ -1,4 +1,5 @@
|
|
|
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
|
|
|
@@ -10,9 +11,10 @@
|
|
|
10
11
|
|
|
11
12
|
A web-based data quality monitoring dashboard for [truthound](https://github.com/seadonggyun4/truthound).
|
|
12
13
|
|
|
13
|
-
[Documentation](https://truthound.netlify.app) | [
|
|
14
|
+
[Documentation](https://truthound.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/)
|
|
14
15
|
|
|
15
16
|
## Overview
|
|
17
|
+
<img width="300" height="300" alt="Truthound_icon" src="https://github.com/user-attachments/assets/90d9e806-8895-45ec-97dc-f8300da4d997" />
|
|
16
18
|
|
|
17
19
|
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
20
|
|
|
@@ -23,13 +25,16 @@ truthound-dashboard provides a graphical interface for managing data sources, ex
|
|
|
23
25
|
| Data Source Management | Available | Available |
|
|
24
26
|
| Schema Learning | Available | Available |
|
|
25
27
|
| Validation Execution | Available | Available |
|
|
28
|
+
| Validator Registry | Available | Available (150+ validators) |
|
|
26
29
|
| Validation History | Available | Available |
|
|
27
30
|
| Scheduled Validations | Available | Available |
|
|
28
31
|
| Slack Notifications | Available | Available |
|
|
29
32
|
| Email Notifications | Available | Available |
|
|
30
33
|
| Webhook Notifications | Available | Available |
|
|
31
|
-
| Drift Detection | Available | Available |
|
|
34
|
+
| Drift Detection | Available | Available (8 methods) |
|
|
32
35
|
| Data Profiling | Available | Available |
|
|
36
|
+
| PII Scan | Available | Available (GDPR/CCPA/LGPD) |
|
|
37
|
+
| Data Masking | Available | Available (redact/hash/fake) |
|
|
33
38
|
| Business Glossary | Available | Available |
|
|
34
39
|
| Data Catalog | Available | Available |
|
|
35
40
|
| Dark Mode | Available | Available |
|
|
@@ -80,8 +85,11 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
80
85
|
|
|
81
86
|
### Validation
|
|
82
87
|
- On-demand validation execution using `th.check`
|
|
88
|
+
- 150+ validators across 15 categories (schema, completeness, uniqueness, distribution, string, datetime, aggregate, cross-table, multi-column, query, table, geospatial, drift, anomaly, privacy)
|
|
89
|
+
- Per-validator parameter configuration with UI
|
|
83
90
|
- Persistent storage of validation results
|
|
84
91
|
- Issue classification by severity (Critical, High, Medium, Low)
|
|
92
|
+
- Advanced options: column filtering, min_severity, parallel execution, SQL pushdown
|
|
85
93
|
|
|
86
94
|
### Validation History
|
|
87
95
|
- Historical record of validation results
|
|
@@ -98,11 +106,26 @@ The dashboard interface is accessible at `http://localhost:8765`.
|
|
|
98
106
|
|
|
99
107
|
### Drift Detection
|
|
100
108
|
- Dataset comparison using `th.compare`
|
|
101
|
-
-
|
|
109
|
+
- 8 detection methods: auto, ks, psi, chi2, js, kl, wasserstein, cvm, anderson
|
|
110
|
+
- Multiple testing correction: bonferroni, holm, bh
|
|
111
|
+
- Column-level drift analysis with statistical metrics
|
|
102
112
|
|
|
103
113
|
### Data Profiling
|
|
104
114
|
- Statistical profiling using `th.profile`
|
|
105
115
|
- Column-level statistics
|
|
116
|
+
- Sample size configuration for large datasets
|
|
117
|
+
|
|
118
|
+
### PII Scan
|
|
119
|
+
- Personal data detection using `th.scan`
|
|
120
|
+
- Supported PII types: email, phone, SSN, credit card, IP address, and more
|
|
121
|
+
- Regulation compliance: GDPR, CCPA, LGPD
|
|
122
|
+
- Configurable confidence threshold
|
|
123
|
+
|
|
124
|
+
### Data Masking
|
|
125
|
+
- Sensitive data protection using `th.mask`
|
|
126
|
+
- Three masking strategies: redact (asterisks), hash (SHA256), fake (realistic data)
|
|
127
|
+
- Auto-detection of PII columns
|
|
128
|
+
- Multiple output formats: CSV, Parquet, JSON
|
|
106
129
|
|
|
107
130
|
### Business Glossary
|
|
108
131
|
- Business term definitions with categories
|
|
@@ -264,6 +287,24 @@ npm run dev
|
|
|
264
287
|
npm run dev:mock
|
|
265
288
|
```
|
|
266
289
|
|
|
290
|
+
## Preview with Mock Data
|
|
291
|
+
|
|
292
|
+
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/).
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
# Clone the repository
|
|
296
|
+
git clone https://github.com/seadonggyun4/truthound-dashboard
|
|
297
|
+
cd truthound-dashboard/frontend
|
|
298
|
+
|
|
299
|
+
# Install dependencies
|
|
300
|
+
npm install
|
|
301
|
+
|
|
302
|
+
# Start the development server with mock data
|
|
303
|
+
npm run dev:mock
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
The mock server provides realistic sample data for all dashboard features, enabling evaluation of the user interface and workflow without external dependencies.
|
|
307
|
+
|
|
267
308
|
## Testing
|
|
268
309
|
|
|
269
310
|
```bash
|
|
@@ -274,12 +315,6 @@ pytest
|
|
|
274
315
|
pytest --cov=truthound_dashboard
|
|
275
316
|
```
|
|
276
317
|
|
|
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
318
|
## Documentation
|
|
284
319
|
|
|
285
320
|
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
|