truthound-dashboard 1.2.0__py3-none-any.whl → 1.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- truthound_dashboard/api/deps.py +28 -0
- truthound_dashboard/api/drift.py +1 -0
- truthound_dashboard/api/mask.py +164 -0
- truthound_dashboard/api/profile.py +11 -3
- truthound_dashboard/api/router.py +22 -0
- truthound_dashboard/api/scan.py +168 -0
- truthound_dashboard/api/schemas.py +13 -4
- truthound_dashboard/api/validations.py +33 -1
- truthound_dashboard/api/validators.py +85 -0
- truthound_dashboard/core/__init__.py +8 -0
- truthound_dashboard/core/phase5/activity.py +1 -1
- truthound_dashboard/core/services.py +457 -7
- truthound_dashboard/core/truthound_adapter.py +441 -26
- truthound_dashboard/db/__init__.py +6 -0
- truthound_dashboard/db/models.py +250 -1
- truthound_dashboard/schemas/__init__.py +52 -1
- truthound_dashboard/schemas/collaboration.py +1 -1
- truthound_dashboard/schemas/drift.py +118 -3
- truthound_dashboard/schemas/mask.py +209 -0
- truthound_dashboard/schemas/profile.py +45 -2
- truthound_dashboard/schemas/scan.py +312 -0
- truthound_dashboard/schemas/schema.py +30 -2
- truthound_dashboard/schemas/validation.py +60 -3
- truthound_dashboard/schemas/validators/__init__.py +59 -0
- truthound_dashboard/schemas/validators/aggregate_validators.py +238 -0
- truthound_dashboard/schemas/validators/anomaly_validators.py +723 -0
- truthound_dashboard/schemas/validators/base.py +263 -0
- truthound_dashboard/schemas/validators/completeness_validators.py +269 -0
- truthound_dashboard/schemas/validators/cross_table_validators.py +375 -0
- truthound_dashboard/schemas/validators/datetime_validators.py +253 -0
- truthound_dashboard/schemas/validators/distribution_validators.py +422 -0
- truthound_dashboard/schemas/validators/drift_validators.py +615 -0
- truthound_dashboard/schemas/validators/geospatial_validators.py +486 -0
- truthound_dashboard/schemas/validators/multi_column_validators.py +706 -0
- truthound_dashboard/schemas/validators/privacy_validators.py +531 -0
- truthound_dashboard/schemas/validators/query_validators.py +510 -0
- truthound_dashboard/schemas/validators/registry.py +318 -0
- truthound_dashboard/schemas/validators/schema_validators.py +408 -0
- truthound_dashboard/schemas/validators/string_validators.py +396 -0
- truthound_dashboard/schemas/validators/table_validators.py +412 -0
- truthound_dashboard/schemas/validators/uniqueness_validators.py +355 -0
- truthound_dashboard/schemas/validators.py +59 -0
- truthound_dashboard/static/assets/index-BCA8H1hO.js +574 -0
- truthound_dashboard/static/assets/index-BNsSQ2fN.css +1 -0
- truthound_dashboard/static/assets/logo--IpBiMPK.png +0 -0
- truthound_dashboard/static/assets/unmerged_dictionaries-CsJWCRx9.js +1 -0
- truthound_dashboard/static/favicon.ico +0 -0
- truthound_dashboard/static/index.html +3 -3
- {truthound_dashboard-1.2.0.dist-info → truthound_dashboard-1.3.0.dist-info}/METADATA +46 -11
- {truthound_dashboard-1.2.0.dist-info → truthound_dashboard-1.3.0.dist-info}/RECORD +53 -28
- truthound_dashboard/static/assets/index-BqJMyAHX.js +0 -110
- truthound_dashboard/static/assets/index-DMDxHCTs.js +0 -465
- truthound_dashboard/static/assets/index-Dm2D11TK.css +0 -1
- truthound_dashboard/static/mockServiceWorker.js +0 -349
- {truthound_dashboard-1.2.0.dist-info → truthound_dashboard-1.3.0.dist-info}/WHEEL +0 -0
- {truthound_dashboard-1.2.0.dist-info → truthound_dashboard-1.3.0.dist-info}/entry_points.txt +0 -0
- {truthound_dashboard-1.2.0.dist-info → truthound_dashboard-1.3.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
"""Geospatial validators.
|
|
2
|
+
|
|
3
|
+
Validators for geographic coordinate and spatial data validation.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from .base import (
|
|
7
|
+
ParameterDefinition,
|
|
8
|
+
ParameterType,
|
|
9
|
+
ValidatorCategory,
|
|
10
|
+
ValidatorDefinition,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
GEOSPATIAL_VALIDATORS: list[ValidatorDefinition] = [
|
|
14
|
+
ValidatorDefinition(
|
|
15
|
+
name="Latitude",
|
|
16
|
+
display_name="Latitude Bounds",
|
|
17
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
18
|
+
description="Validates latitude values are within valid bounds (-90 to 90).",
|
|
19
|
+
parameters=[
|
|
20
|
+
ParameterDefinition(
|
|
21
|
+
name="column",
|
|
22
|
+
label="Latitude Column",
|
|
23
|
+
type=ParameterType.COLUMN,
|
|
24
|
+
required=True,
|
|
25
|
+
),
|
|
26
|
+
ParameterDefinition(
|
|
27
|
+
name="min_lat",
|
|
28
|
+
label="Minimum Latitude",
|
|
29
|
+
type=ParameterType.FLOAT,
|
|
30
|
+
default=-90.0,
|
|
31
|
+
min_value=-90,
|
|
32
|
+
max_value=90,
|
|
33
|
+
),
|
|
34
|
+
ParameterDefinition(
|
|
35
|
+
name="max_lat",
|
|
36
|
+
label="Maximum Latitude",
|
|
37
|
+
type=ParameterType.FLOAT,
|
|
38
|
+
default=90.0,
|
|
39
|
+
min_value=-90,
|
|
40
|
+
max_value=90,
|
|
41
|
+
),
|
|
42
|
+
],
|
|
43
|
+
tags=["geospatial", "latitude", "coordinate"],
|
|
44
|
+
severity_default="medium",
|
|
45
|
+
),
|
|
46
|
+
ValidatorDefinition(
|
|
47
|
+
name="Longitude",
|
|
48
|
+
display_name="Longitude Bounds",
|
|
49
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
50
|
+
description="Validates longitude values are within valid bounds (-180 to 180).",
|
|
51
|
+
parameters=[
|
|
52
|
+
ParameterDefinition(
|
|
53
|
+
name="column",
|
|
54
|
+
label="Longitude Column",
|
|
55
|
+
type=ParameterType.COLUMN,
|
|
56
|
+
required=True,
|
|
57
|
+
),
|
|
58
|
+
ParameterDefinition(
|
|
59
|
+
name="min_lon",
|
|
60
|
+
label="Minimum Longitude",
|
|
61
|
+
type=ParameterType.FLOAT,
|
|
62
|
+
default=-180.0,
|
|
63
|
+
min_value=-180,
|
|
64
|
+
max_value=180,
|
|
65
|
+
),
|
|
66
|
+
ParameterDefinition(
|
|
67
|
+
name="max_lon",
|
|
68
|
+
label="Maximum Longitude",
|
|
69
|
+
type=ParameterType.FLOAT,
|
|
70
|
+
default=180.0,
|
|
71
|
+
min_value=-180,
|
|
72
|
+
max_value=180,
|
|
73
|
+
),
|
|
74
|
+
],
|
|
75
|
+
tags=["geospatial", "longitude", "coordinate"],
|
|
76
|
+
severity_default="medium",
|
|
77
|
+
),
|
|
78
|
+
ValidatorDefinition(
|
|
79
|
+
name="Coordinate",
|
|
80
|
+
display_name="Coordinate Pair",
|
|
81
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
82
|
+
description="Validates latitude/longitude coordinate pairs.",
|
|
83
|
+
parameters=[
|
|
84
|
+
ParameterDefinition(
|
|
85
|
+
name="lat_column",
|
|
86
|
+
label="Latitude Column",
|
|
87
|
+
type=ParameterType.COLUMN,
|
|
88
|
+
required=True,
|
|
89
|
+
),
|
|
90
|
+
ParameterDefinition(
|
|
91
|
+
name="lon_column",
|
|
92
|
+
label="Longitude Column",
|
|
93
|
+
type=ParameterType.COLUMN,
|
|
94
|
+
required=True,
|
|
95
|
+
),
|
|
96
|
+
],
|
|
97
|
+
tags=["geospatial", "coordinate", "pair"],
|
|
98
|
+
severity_default="medium",
|
|
99
|
+
),
|
|
100
|
+
ValidatorDefinition(
|
|
101
|
+
name="CoordinateNotNullIsland",
|
|
102
|
+
display_name="Not Null Island",
|
|
103
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
104
|
+
description="Detects coordinates at (0, 0) - common placeholder or error.",
|
|
105
|
+
parameters=[
|
|
106
|
+
ParameterDefinition(
|
|
107
|
+
name="lat_column",
|
|
108
|
+
label="Latitude Column",
|
|
109
|
+
type=ParameterType.COLUMN,
|
|
110
|
+
required=True,
|
|
111
|
+
),
|
|
112
|
+
ParameterDefinition(
|
|
113
|
+
name="lon_column",
|
|
114
|
+
label="Longitude Column",
|
|
115
|
+
type=ParameterType.COLUMN,
|
|
116
|
+
required=True,
|
|
117
|
+
),
|
|
118
|
+
ParameterDefinition(
|
|
119
|
+
name="tolerance",
|
|
120
|
+
label="Tolerance (degrees)",
|
|
121
|
+
type=ParameterType.FLOAT,
|
|
122
|
+
description="Tolerance around (0,0) to flag",
|
|
123
|
+
default=0.001,
|
|
124
|
+
min_value=0,
|
|
125
|
+
),
|
|
126
|
+
],
|
|
127
|
+
tags=["geospatial", "null_island", "quality"],
|
|
128
|
+
severity_default="medium",
|
|
129
|
+
),
|
|
130
|
+
ValidatorDefinition(
|
|
131
|
+
name="GeoDistance",
|
|
132
|
+
display_name="Distance Between Points",
|
|
133
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
134
|
+
description="Validates distance between two coordinate pairs.",
|
|
135
|
+
parameters=[
|
|
136
|
+
ParameterDefinition(
|
|
137
|
+
name="lat_column_a",
|
|
138
|
+
label="Latitude A",
|
|
139
|
+
type=ParameterType.COLUMN,
|
|
140
|
+
required=True,
|
|
141
|
+
),
|
|
142
|
+
ParameterDefinition(
|
|
143
|
+
name="lon_column_a",
|
|
144
|
+
label="Longitude A",
|
|
145
|
+
type=ParameterType.COLUMN,
|
|
146
|
+
required=True,
|
|
147
|
+
),
|
|
148
|
+
ParameterDefinition(
|
|
149
|
+
name="lat_column_b",
|
|
150
|
+
label="Latitude B",
|
|
151
|
+
type=ParameterType.COLUMN,
|
|
152
|
+
required=True,
|
|
153
|
+
),
|
|
154
|
+
ParameterDefinition(
|
|
155
|
+
name="lon_column_b",
|
|
156
|
+
label="Longitude B",
|
|
157
|
+
type=ParameterType.COLUMN,
|
|
158
|
+
required=True,
|
|
159
|
+
),
|
|
160
|
+
ParameterDefinition(
|
|
161
|
+
name="max_distance_km",
|
|
162
|
+
label="Max Distance (km)",
|
|
163
|
+
type=ParameterType.FLOAT,
|
|
164
|
+
description="Maximum allowed distance in kilometers",
|
|
165
|
+
required=True,
|
|
166
|
+
min_value=0,
|
|
167
|
+
),
|
|
168
|
+
],
|
|
169
|
+
tags=["geospatial", "distance", "haversine"],
|
|
170
|
+
severity_default="medium",
|
|
171
|
+
),
|
|
172
|
+
ValidatorDefinition(
|
|
173
|
+
name="GeoDistanceFromPoint",
|
|
174
|
+
display_name="Distance From Reference Point",
|
|
175
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
176
|
+
description="Validates distance from a fixed reference point.",
|
|
177
|
+
parameters=[
|
|
178
|
+
ParameterDefinition(
|
|
179
|
+
name="lat_column",
|
|
180
|
+
label="Latitude Column",
|
|
181
|
+
type=ParameterType.COLUMN,
|
|
182
|
+
required=True,
|
|
183
|
+
),
|
|
184
|
+
ParameterDefinition(
|
|
185
|
+
name="lon_column",
|
|
186
|
+
label="Longitude Column",
|
|
187
|
+
type=ParameterType.COLUMN,
|
|
188
|
+
required=True,
|
|
189
|
+
),
|
|
190
|
+
ParameterDefinition(
|
|
191
|
+
name="reference_lat",
|
|
192
|
+
label="Reference Latitude",
|
|
193
|
+
type=ParameterType.FLOAT,
|
|
194
|
+
required=True,
|
|
195
|
+
min_value=-90,
|
|
196
|
+
max_value=90,
|
|
197
|
+
),
|
|
198
|
+
ParameterDefinition(
|
|
199
|
+
name="reference_lon",
|
|
200
|
+
label="Reference Longitude",
|
|
201
|
+
type=ParameterType.FLOAT,
|
|
202
|
+
required=True,
|
|
203
|
+
min_value=-180,
|
|
204
|
+
max_value=180,
|
|
205
|
+
),
|
|
206
|
+
ParameterDefinition(
|
|
207
|
+
name="max_distance_km",
|
|
208
|
+
label="Max Distance (km)",
|
|
209
|
+
type=ParameterType.FLOAT,
|
|
210
|
+
required=True,
|
|
211
|
+
min_value=0,
|
|
212
|
+
),
|
|
213
|
+
],
|
|
214
|
+
tags=["geospatial", "distance", "reference"],
|
|
215
|
+
severity_default="medium",
|
|
216
|
+
),
|
|
217
|
+
ValidatorDefinition(
|
|
218
|
+
name="GeoBoundingBox",
|
|
219
|
+
display_name="Bounding Box",
|
|
220
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
221
|
+
description="Validates coordinates fall within a bounding box.",
|
|
222
|
+
parameters=[
|
|
223
|
+
ParameterDefinition(
|
|
224
|
+
name="lat_column",
|
|
225
|
+
label="Latitude Column",
|
|
226
|
+
type=ParameterType.COLUMN,
|
|
227
|
+
required=True,
|
|
228
|
+
),
|
|
229
|
+
ParameterDefinition(
|
|
230
|
+
name="lon_column",
|
|
231
|
+
label="Longitude Column",
|
|
232
|
+
type=ParameterType.COLUMN,
|
|
233
|
+
required=True,
|
|
234
|
+
),
|
|
235
|
+
ParameterDefinition(
|
|
236
|
+
name="min_lat",
|
|
237
|
+
label="Min Latitude (South)",
|
|
238
|
+
type=ParameterType.FLOAT,
|
|
239
|
+
required=True,
|
|
240
|
+
min_value=-90,
|
|
241
|
+
max_value=90,
|
|
242
|
+
),
|
|
243
|
+
ParameterDefinition(
|
|
244
|
+
name="max_lat",
|
|
245
|
+
label="Max Latitude (North)",
|
|
246
|
+
type=ParameterType.FLOAT,
|
|
247
|
+
required=True,
|
|
248
|
+
min_value=-90,
|
|
249
|
+
max_value=90,
|
|
250
|
+
),
|
|
251
|
+
ParameterDefinition(
|
|
252
|
+
name="min_lon",
|
|
253
|
+
label="Min Longitude (West)",
|
|
254
|
+
type=ParameterType.FLOAT,
|
|
255
|
+
required=True,
|
|
256
|
+
min_value=-180,
|
|
257
|
+
max_value=180,
|
|
258
|
+
),
|
|
259
|
+
ParameterDefinition(
|
|
260
|
+
name="max_lon",
|
|
261
|
+
label="Max Longitude (East)",
|
|
262
|
+
type=ParameterType.FLOAT,
|
|
263
|
+
required=True,
|
|
264
|
+
min_value=-180,
|
|
265
|
+
max_value=180,
|
|
266
|
+
),
|
|
267
|
+
],
|
|
268
|
+
tags=["geospatial", "bounding_box", "region"],
|
|
269
|
+
severity_default="medium",
|
|
270
|
+
),
|
|
271
|
+
ValidatorDefinition(
|
|
272
|
+
name="GeoCountry",
|
|
273
|
+
display_name="Country Bounds",
|
|
274
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
275
|
+
description="Validates coordinates fall within a country's boundaries.",
|
|
276
|
+
parameters=[
|
|
277
|
+
ParameterDefinition(
|
|
278
|
+
name="lat_column",
|
|
279
|
+
label="Latitude Column",
|
|
280
|
+
type=ParameterType.COLUMN,
|
|
281
|
+
required=True,
|
|
282
|
+
),
|
|
283
|
+
ParameterDefinition(
|
|
284
|
+
name="lon_column",
|
|
285
|
+
label="Longitude Column",
|
|
286
|
+
type=ParameterType.COLUMN,
|
|
287
|
+
required=True,
|
|
288
|
+
),
|
|
289
|
+
ParameterDefinition(
|
|
290
|
+
name="country_code",
|
|
291
|
+
label="Country Code",
|
|
292
|
+
type=ParameterType.SELECT,
|
|
293
|
+
description="ISO 3166-1 alpha-2 country code",
|
|
294
|
+
required=True,
|
|
295
|
+
options=[
|
|
296
|
+
{"value": "US", "label": "United States"},
|
|
297
|
+
{"value": "KR", "label": "South Korea"},
|
|
298
|
+
{"value": "JP", "label": "Japan"},
|
|
299
|
+
{"value": "CN", "label": "China"},
|
|
300
|
+
{"value": "DE", "label": "Germany"},
|
|
301
|
+
{"value": "FR", "label": "France"},
|
|
302
|
+
{"value": "GB", "label": "United Kingdom"},
|
|
303
|
+
{"value": "CA", "label": "Canada"},
|
|
304
|
+
{"value": "AU", "label": "Australia"},
|
|
305
|
+
{"value": "BR", "label": "Brazil"},
|
|
306
|
+
{"value": "IN", "label": "India"},
|
|
307
|
+
],
|
|
308
|
+
),
|
|
309
|
+
ParameterDefinition(
|
|
310
|
+
name="use_approximate",
|
|
311
|
+
label="Use Approximate Bounds",
|
|
312
|
+
type=ParameterType.BOOLEAN,
|
|
313
|
+
description="Use bounding box instead of precise borders",
|
|
314
|
+
default=True,
|
|
315
|
+
),
|
|
316
|
+
],
|
|
317
|
+
tags=["geospatial", "country", "bounds"],
|
|
318
|
+
severity_default="medium",
|
|
319
|
+
),
|
|
320
|
+
ValidatorDefinition(
|
|
321
|
+
name="GeoPolygon",
|
|
322
|
+
display_name="Within Polygon",
|
|
323
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
324
|
+
description="Validates coordinates fall within a custom polygon.",
|
|
325
|
+
parameters=[
|
|
326
|
+
ParameterDefinition(
|
|
327
|
+
name="lat_column",
|
|
328
|
+
label="Latitude Column",
|
|
329
|
+
type=ParameterType.COLUMN,
|
|
330
|
+
required=True,
|
|
331
|
+
),
|
|
332
|
+
ParameterDefinition(
|
|
333
|
+
name="lon_column",
|
|
334
|
+
label="Longitude Column",
|
|
335
|
+
type=ParameterType.COLUMN,
|
|
336
|
+
required=True,
|
|
337
|
+
),
|
|
338
|
+
ParameterDefinition(
|
|
339
|
+
name="polygon",
|
|
340
|
+
label="Polygon Coordinates",
|
|
341
|
+
type=ParameterType.SCHEMA,
|
|
342
|
+
description="GeoJSON polygon coordinates",
|
|
343
|
+
required=True,
|
|
344
|
+
placeholder='[[[-122.4, 37.8], [-122.4, 37.7], [-122.3, 37.7], [-122.3, 37.8]]]',
|
|
345
|
+
),
|
|
346
|
+
],
|
|
347
|
+
tags=["geospatial", "polygon", "custom"],
|
|
348
|
+
severity_default="medium",
|
|
349
|
+
),
|
|
350
|
+
ValidatorDefinition(
|
|
351
|
+
name="GeoCluster",
|
|
352
|
+
display_name="Geographic Clustering",
|
|
353
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
354
|
+
description="Validates geographic clustering properties.",
|
|
355
|
+
parameters=[
|
|
356
|
+
ParameterDefinition(
|
|
357
|
+
name="lat_column",
|
|
358
|
+
label="Latitude Column",
|
|
359
|
+
type=ParameterType.COLUMN,
|
|
360
|
+
required=True,
|
|
361
|
+
),
|
|
362
|
+
ParameterDefinition(
|
|
363
|
+
name="lon_column",
|
|
364
|
+
label="Longitude Column",
|
|
365
|
+
type=ParameterType.COLUMN,
|
|
366
|
+
required=True,
|
|
367
|
+
),
|
|
368
|
+
ParameterDefinition(
|
|
369
|
+
name="max_cluster_radius_km",
|
|
370
|
+
label="Max Cluster Radius (km)",
|
|
371
|
+
type=ParameterType.FLOAT,
|
|
372
|
+
description="Maximum expected radius of data clusters",
|
|
373
|
+
min_value=0,
|
|
374
|
+
),
|
|
375
|
+
ParameterDefinition(
|
|
376
|
+
name="min_points_per_cluster",
|
|
377
|
+
label="Min Points Per Cluster",
|
|
378
|
+
type=ParameterType.INTEGER,
|
|
379
|
+
default=1,
|
|
380
|
+
min_value=1,
|
|
381
|
+
),
|
|
382
|
+
],
|
|
383
|
+
tags=["geospatial", "clustering", "density"],
|
|
384
|
+
severity_default="low",
|
|
385
|
+
),
|
|
386
|
+
ValidatorDefinition(
|
|
387
|
+
name="GeoSpeed",
|
|
388
|
+
display_name="Geographic Speed",
|
|
389
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
390
|
+
description="Validates travel speed between sequential coordinates.",
|
|
391
|
+
parameters=[
|
|
392
|
+
ParameterDefinition(
|
|
393
|
+
name="lat_column",
|
|
394
|
+
label="Latitude Column",
|
|
395
|
+
type=ParameterType.COLUMN,
|
|
396
|
+
required=True,
|
|
397
|
+
),
|
|
398
|
+
ParameterDefinition(
|
|
399
|
+
name="lon_column",
|
|
400
|
+
label="Longitude Column",
|
|
401
|
+
type=ParameterType.COLUMN,
|
|
402
|
+
required=True,
|
|
403
|
+
),
|
|
404
|
+
ParameterDefinition(
|
|
405
|
+
name="timestamp_column",
|
|
406
|
+
label="Timestamp Column",
|
|
407
|
+
type=ParameterType.COLUMN,
|
|
408
|
+
required=True,
|
|
409
|
+
),
|
|
410
|
+
ParameterDefinition(
|
|
411
|
+
name="max_speed_kmh",
|
|
412
|
+
label="Max Speed (km/h)",
|
|
413
|
+
type=ParameterType.FLOAT,
|
|
414
|
+
description="Maximum realistic travel speed",
|
|
415
|
+
default=200,
|
|
416
|
+
min_value=0,
|
|
417
|
+
),
|
|
418
|
+
ParameterDefinition(
|
|
419
|
+
name="entity_column",
|
|
420
|
+
label="Entity Column",
|
|
421
|
+
type=ParameterType.COLUMN,
|
|
422
|
+
description="Column to group by (e.g., vehicle_id)",
|
|
423
|
+
),
|
|
424
|
+
],
|
|
425
|
+
tags=["geospatial", "speed", "trajectory"],
|
|
426
|
+
severity_default="medium",
|
|
427
|
+
),
|
|
428
|
+
ValidatorDefinition(
|
|
429
|
+
name="GeoAltitude",
|
|
430
|
+
display_name="Altitude Bounds",
|
|
431
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
432
|
+
description="Validates altitude/elevation values.",
|
|
433
|
+
parameters=[
|
|
434
|
+
ParameterDefinition(
|
|
435
|
+
name="column",
|
|
436
|
+
label="Altitude Column",
|
|
437
|
+
type=ParameterType.COLUMN,
|
|
438
|
+
required=True,
|
|
439
|
+
),
|
|
440
|
+
ParameterDefinition(
|
|
441
|
+
name="min_altitude",
|
|
442
|
+
label="Minimum Altitude (m)",
|
|
443
|
+
type=ParameterType.FLOAT,
|
|
444
|
+
description="Minimum altitude in meters",
|
|
445
|
+
default=-500,
|
|
446
|
+
),
|
|
447
|
+
ParameterDefinition(
|
|
448
|
+
name="max_altitude",
|
|
449
|
+
label="Maximum Altitude (m)",
|
|
450
|
+
type=ParameterType.FLOAT,
|
|
451
|
+
description="Maximum altitude in meters",
|
|
452
|
+
default=10000,
|
|
453
|
+
),
|
|
454
|
+
],
|
|
455
|
+
tags=["geospatial", "altitude", "elevation"],
|
|
456
|
+
severity_default="low",
|
|
457
|
+
),
|
|
458
|
+
ValidatorDefinition(
|
|
459
|
+
name="GeoTimezone",
|
|
460
|
+
display_name="Timezone Consistency",
|
|
461
|
+
category=ValidatorCategory.GEOSPATIAL,
|
|
462
|
+
description="Validates timezone consistency with geographic location.",
|
|
463
|
+
parameters=[
|
|
464
|
+
ParameterDefinition(
|
|
465
|
+
name="lat_column",
|
|
466
|
+
label="Latitude Column",
|
|
467
|
+
type=ParameterType.COLUMN,
|
|
468
|
+
required=True,
|
|
469
|
+
),
|
|
470
|
+
ParameterDefinition(
|
|
471
|
+
name="lon_column",
|
|
472
|
+
label="Longitude Column",
|
|
473
|
+
type=ParameterType.COLUMN,
|
|
474
|
+
required=True,
|
|
475
|
+
),
|
|
476
|
+
ParameterDefinition(
|
|
477
|
+
name="timezone_column",
|
|
478
|
+
label="Timezone Column",
|
|
479
|
+
type=ParameterType.COLUMN,
|
|
480
|
+
required=True,
|
|
481
|
+
),
|
|
482
|
+
],
|
|
483
|
+
tags=["geospatial", "timezone", "consistency"],
|
|
484
|
+
severity_default="low",
|
|
485
|
+
),
|
|
486
|
+
]
|