-
Notifications
You must be signed in to change notification settings - Fork 32
✨ Add Support for Filtering Solver Jobs by Custom Metadata via metadata.any Query Parameter #7678
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
✨ Add Support for Filtering Solver Jobs by Custom Metadata via metadata.any Query Parameter #7678
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
reask when done
4987755 to
0dd4c6b
Compare
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #7678 +/- ##
==========================================
+ Coverage 87.55% 87.59% +0.03%
==========================================
Files 1802 1797 -5
Lines 70122 69991 -131
Branches 1137 1137
==========================================
- Hits 61393 61306 -87
+ Misses 8419 8375 -44
Partials 310 310
Continue to review full report in Codecov by Sentry.
🚀 New features to boost your workflow:
|
2ced33f to
0f538c8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
wip?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds support for filtering solver jobs by custom metadata via the metadata.any query parameter. Key changes include introducing a new RPC filters model and updating multiple services, repositories, and tests to support filtering by both job parent resource name and custom metadata.
Reviewed Changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| services/web/server/tests/unit/with_dbs/02/test_projects_rpc.py | Updated tests to use the new filters model for job parent resource and metadata filtering. |
| services/web/server/tests/unit/with_dbs/02/test_projects__jobs_service.py | Modified test parameters and added tests for metadata filtering in projects marked as jobs. |
| services/web/server/src/simcore_service_webserver/projects/_jobs_service.py | Renamed pagination and filter parameters to improve clarity. |
| services/web/server/src/simcore_service_webserver/projects/_jobs_repository.py | Introduced functions to apply job parent resource name and custom metadata filters in SQL queries. |
| services/api-server/* | Updated API endpoints, dependencies, and RPC client calls to use the new filters model. |
| packages/models-library/src/models_library/rpc/webserver/projects.py | Updated RPC filters model and examples for listing projects marked as jobs. |
Comments suppressed due to low confidence (1)
packages/models-library/src/models_library/rpc/webserver/projects.py:39
- [nitpick] The JSON schema example uses 'any_of_metadata' instead of the actual field name 'any_custom_metadata'. For consistency, update the example key to 'any_custom_metadata'.
"any_of_metadata": [
services/web/server/src/simcore_service_webserver/projects/_jobs_repository.py
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
...ces/api-server/src/simcore_service_api_server/api/dependencies/models_schemas_job_filters.py
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks!
services/api-server/src/simcore_service_api_server/api/routes/solvers_jobs_getters.py
Outdated
Show resolved
Hide resolved
services/api-server/src/simcore_service_api_server/services_rpc/wb_api_server.py
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
Adds end-to-end support for filtering solver (and study) jobs by custom metadata via the metadata.any query parameter.
- Introduces a new
metadata.anyPydantic schema and FastAPI dependency to parse name-pattern filters. - Propagates metadata filters through API-server → RPC → web-server → repository, converting glob-style patterns to SQL
ILIKEon a JSONB column. - Updates unit tests across both services to cover exact, wildcard, multi-field (OR), and combined resource-prefix + metadata filters.
Reviewed Changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| services/web/server/tests/unit/with_dbs/02/test_projects_rpc.py | Added RPC client tests for metadata filters |
| services/web/server/tests/unit/with_dbs/02/test_projects__jobs_service.py | Added service-layer tests for project metadata filtering |
| services/web/server/src/simcore_service_webserver/projects/_jobs_service.py | Extended list_my_projects_marked_as_jobs to accept metadata filters |
| services/web/server/src/simcore_service_webserver/projects/_jobs_repository.py | Implemented _apply_custom_metadata_filter on JSONB metadata |
| services/web/server/src/simcore_service_webserver/projects/_controller/projects_rpc.py | Updated RPC controller to unpack metadata filters |
| services/api-server/tests/unit/test_api_dependencies.py | Added tests for metadata.any query dependency |
| services/api-server/src/simcore_service_api_server/api/dependencies/models_schemas_job_filters.py | Implemented get_job_metadata_filter dependency |
| services/api-server/src/simcore_service_api_server/models/schemas/jobs_filters.py | Defined MetadataFilterItem & JobMetadataFilter schemas |
| services/api-server/src/simcore_service_api_server/services_rpc/wb_api_server.py | Converts dict filters into RPC-model filters |
| services/api-server/src/simcore_service_api_server/api/routes/solvers_jobs_getters.py | Added metadata filter dependency to solver-jobs endpoint |
| services/api-server/src/simcore_service_api_server/_service_solvers.py | Propagates metadata filters through solver service |
| services/api-server/src/simcore_service_api_server/_service_jobs.py | Propagates metadata filters through job service |
| packages/service-library/src/servicelib/rabbitmq/rpc_interfaces/webserver/projects.py | Updated RPC interface to accept filter model |
| packages/models-library/src/models_library/rpc/webserver/projects.py | Added ListProjectsMarkedAsJobRpcFilters & MetadataFilterItem models |
services/web/server/src/simcore_service_webserver/projects/_jobs_repository.py
Outdated
Show resolved
Hide resolved
services/api-server/src/simcore_service_api_server/models/schemas/jobs_filters.py
Outdated
Show resolved
Hide resolved
packages/models-library/src/models_library/rpc/webserver/projects.py
Outdated
Show resolved
Hide resolved
|
No sure what the status is regarding this https://github.com/ITISFoundation/private-issues/issues/49 I need to be able to get a list of Ideally, I could ask for filter: |
services/web/server/src/simcore_service_webserver/projects/_jobs_repository.py
Show resolved
Hide resolved
46864a6 to
0ba6902
Compare
|
|
@mergify queue |
🛑 The pull request has been removed from the queue
|
We really need to work on our communication... I need to get the solver version back based on the display version to create a job with the correct solver in the first place. |
|
This pull request has been removed from the queue for the following reason: The merge conditions cannot be satisfied due to failing checks:You may have to fix your CI before adding the pull request to the queue again. |
|
|
@mergify queue |
🟠 Waiting for conditions to match
|



What do these changes do?
This PR adds support for filtering solver jobs by custom metadata. The filter works by matching any specified metadata key-value pairs using the
metadata.anyquery parameter.Example usage:
This will return jobs where any metadata key-value pair matches the given patterns (e.g., wildcard support like

val*).NOTE that this entrypoint is still not released so it will not be shown in the openapi specs. When released, it will display as follows:
Request Flow Overview
This is the request path from the public API to the PostgreSQL database and back, via
api-server, RabbitMQ, andweb-server.Client request:
GET /solvers/-/releases/-/jobs?metadata.any=...simcore_service_api_server:list_all_solvers_jobs(filter_job_metadata_params: JobMetadataFilter | None)Depends(get_job_metadata_filter)parses and validates the query and builds aJobMetadataFilterinstanceSolverService.list_jobs(filter_any_custom_metadata=...)JobService.list_jobs(filter_any_custom_metadata=...)WbApiRpcClient.list_projects_marked_as_jobs(filter_any_custom_metadata=...)projects_rpc_client.list_projects_marked_as_jobs(filters=ListProjectsMarkedAsJobRpcFilters(any_custom_metadata=...))RabbitMQ: transports the request to
simcore_service_webserver.simcore_service_webserver:projectsdomain:_controller.projects_rpc.list_projects_marked_as_jobs(filters=...)_jobs_service.list_my_projects_marked_as_jobs(filter_any_custom_metadata=...)_jobs_repository.ProjectJobsRepository.list_projects_marked_as_jobs(filter_any_custom_metadata=...)_apply_custom_metadata_filter()applies the filter with.where(...)in the SQL queryPostgreSQL: executes the filtered query.
Response: returned via the same path in reverse.
Related issue/s
GET /v0/solvers/-/releases/-/jobs/page#7399How to test
services/web/server/tests/unit/with_dbs/02/test_projects__jobs_service.py: tests filter inproject's service-layerservices/web/server/tests/unit/with_dbs/02/test_projects_rpc.py: test filter from web-server RPC client all the way to postgres and backservices/api-server/tests/unit/api_solvers/test_api_routers_solvers_jobs_read.pytests filter from api-server REST client all the way to a mocked web-server RPC client.services/api-server/tests/unit/test_api_dependencies.pytest api-server dependency injection that parses query and gets filterDev-ops
None