Commit 538bdc0
authored
feat: Search annotations in pipeline run API (#107)
### TL;DR
Implemented annotation-based filtering for Pipeline Run API and proper pagination handling.
### What changed?
API `GET /api/pipeline_runs/`
#### Functionality
- Implemented support for `filter_query` which handles annotation searches in pipeline runs.
- Added new database index for annotation-based queries. Covering index `(key, pipeline_run_id, value)`.
- Enhanced pagination to preserve both legacy `filter` and new `filter_query` across pages.
#### Other
- Created new `filter_query_sql.py` module with comprehensive filter query processing:
- `PageToken` class for encoding/decoding pagination state
- Support for annotation-based predicates: `key_exists`, `value_equals`, `value_contains`, `value_in`
- Logical operators: `and`, `or`, `not` with proper nesting
- Integration with existing legacy filter system
- Refactored pipeline run listing to use the new filter query system while maintaining backward compatibility
### How to test?
```
uv run pytest tests/test_api_server_sql.py tests/test_filter_query_sql.py
```
- Test basic annotation filtering: `{"and": [{"key_exists": {"key": "team"}}]}`
- Test value-based filtering: `{"and": [{"value_equals": {"key": "env", "value": "prod"}}]}`
- Test logical combinations with nested `and`/`or`/`not` predicates
- Verify mutual exclusivity validation between `filter` and `filter_query` parameters
- Test pagination preservation of filter_query state across multiple pages
- Confirm legacy filter functionality remains unchanged
### Why make this change?
Annotation search support is the backbone for all the upcoming search features (`create_by`, `pipeline name`, `status`) for Pipeline Runs. The other searches will be search against the annotations table.1 parent fa0c050 commit 538bdc0
7 files changed
Lines changed: 1031 additions & 210 deletions
File tree
- cloud_pipelines_backend
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | 1 | | |
3 | 2 | | |
4 | | - | |
5 | 3 | | |
6 | 4 | | |
7 | 5 | | |
| |||
12 | 10 | | |
13 | 11 | | |
14 | 12 | | |
15 | | - | |
| 13 | + | |
16 | 14 | | |
17 | 15 | | |
18 | 16 | | |
| |||
69 | 67 | | |
70 | 68 | | |
71 | 69 | | |
72 | | - | |
73 | | - | |
74 | 70 | | |
75 | 71 | | |
76 | 72 | | |
| |||
173 | 169 | | |
174 | 170 | | |
175 | 171 | | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
189 | | - | |
190 | | - | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
191 | 176 | | |
| 177 | + | |
192 | 178 | | |
193 | 179 | | |
194 | 180 | | |
| |||
200 | 186 | | |
201 | 187 | | |
202 | 188 | | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
211 | 193 | | |
212 | 194 | | |
213 | 195 | | |
| |||
348 | 330 | | |
349 | 331 | | |
350 | 332 | | |
351 | | - | |
352 | | - | |
353 | | - | |
354 | | - | |
355 | | - | |
356 | | - | |
357 | | - | |
358 | | - | |
359 | | - | |
360 | | - | |
361 | | - | |
362 | | - | |
363 | | - | |
364 | | - | |
365 | | - | |
366 | | - | |
367 | | - | |
368 | | - | |
369 | | - | |
370 | | - | |
371 | | - | |
372 | | - | |
373 | | - | |
374 | | - | |
375 | | - | |
376 | | - | |
377 | | - | |
378 | | - | |
379 | | - | |
380 | | - | |
381 | | - | |
382 | | - | |
383 | | - | |
384 | | - | |
385 | | - | |
386 | | - | |
387 | | - | |
388 | | - | |
389 | | - | |
390 | | - | |
391 | | - | |
392 | | - | |
393 | | - | |
394 | | - | |
395 | | - | |
396 | | - | |
397 | | - | |
398 | | - | |
399 | | - | |
400 | | - | |
401 | | - | |
402 | | - | |
403 | | - | |
404 | | - | |
405 | | - | |
406 | | - | |
407 | | - | |
408 | | - | |
409 | | - | |
410 | | - | |
411 | | - | |
412 | | - | |
413 | | - | |
414 | | - | |
415 | | - | |
416 | | - | |
417 | | - | |
418 | | - | |
419 | | - | |
420 | | - | |
421 | | - | |
422 | | - | |
423 | | - | |
424 | | - | |
425 | | - | |
426 | | - | |
427 | | - | |
428 | | - | |
429 | | - | |
430 | | - | |
431 | | - | |
432 | | - | |
433 | 333 | | |
434 | 334 | | |
435 | 335 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
294 | 294 | | |
295 | 295 | | |
296 | 296 | | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
297 | 300 | | |
298 | 301 | | |
299 | 302 | | |
| |||
491 | 494 | | |
492 | 495 | | |
493 | 496 | | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
494 | 500 | | |
495 | 501 | | |
496 | 502 | | |
| |||
500 | 506 | | |
501 | 507 | | |
502 | 508 | | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
503 | 518 | | |
504 | 519 | | |
505 | 520 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
57 | | - | |
58 | 57 | | |
59 | 58 | | |
60 | 59 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
78 | | - | |
| 78 | + | |
79 | 79 | | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
0 commit comments