Skip to content

Commit d4e6957

Browse files
authored
Merge pull request #187 from ecmwf-projects/COPDS-1717-constraints-enforcing
Implement constraints enforcing
2 parents 3bc5ebd + ee8d3ff commit d4e6957

File tree

3 files changed

+23
-7
lines changed

3 files changed

+23
-7
lines changed

cads_processing_api_service/clients.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,14 @@ def post_process_execution(
223223
request_inputs = adaptor.normalise_request(request.get("inputs", {}))
224224
except cads_adaptors.exceptions.InvalidRequest as exc:
225225
raise exceptions.InvalidRequest(detail=str(exc)) from exc
226+
if dataset.api_enforce_constraints:
227+
try:
228+
_ = adaptor.apply_constraints(request_inputs)
229+
except (
230+
cads_adaptors.exceptions.ParameterError,
231+
cads_adaptors.exceptions.InvalidRequest,
232+
) as exc:
233+
raise exceptions.InvalidRequest(detail=str(exc)) from exc
226234
auth.verify_cost(request_inputs, adaptor_properties)
227235
licences = adaptor.get_licences(request_inputs)
228236
auth.validate_licences(accepted_licences, licences)

cads_processing_api_service/constraints.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@
22

33
import cads_adaptors
44
import cads_adaptors.constraints
5+
import cads_adaptors.exceptions
56
import cads_catalogue
67
import fastapi
78

8-
from . import adaptors, db_utils, exceptions, utils
9+
from . import adaptors, db_utils, exceptions, models, utils
910

1011

1112
def apply_constraints(
1213
process_id: str = fastapi.Path(...),
13-
request: dict[str, Any] = fastapi.Body(...),
14+
execution_content: models.Execute = fastapi.Body(...),
1415
) -> dict[str, Any]:
16+
request = execution_content.model_dump()
1517
table = cads_catalogue.database.Resource
1618
catalogue_sessionmaker = db_utils.get_catalogue_sessionmaker(
1719
db_utils.ConnectionMode.read
@@ -22,8 +24,13 @@ def apply_constraints(
2224
)
2325
adaptor: cads_adaptors.AbstractAdaptor = adaptors.instantiate_adaptor(dataset)
2426
try:
25-
constraints: dict[str, Any] = adaptor.apply_constraints(request=request)
26-
except cads_adaptors.constraints.ParameterError as exc:
27-
raise exceptions.InvalidParameter(detail=str(exc))
27+
constraints: dict[str, Any] = adaptor.apply_constraints(
28+
request.get("inputs", {})
29+
)
30+
except (
31+
cads_adaptors.exceptions.ParameterError,
32+
cads_adaptors.exceptions.InvalidRequest,
33+
) as exc:
34+
raise exceptions.InvalidParameter(detail=str(exc)) from exc
2835

2936
return constraints

cads_processing_api_service/costing.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@
2525

2626
def estimate_costs(
2727
process_id: str = fastapi.Path(...),
28-
request: models.Execute = fastapi.Body(...),
28+
execution_content: models.Execute = fastapi.Body(...),
2929
) -> models.Costing:
30+
request = execution_content.model_dump()
3031
table = cads_catalogue.database.Resource
3132
catalogue_sessionmaker = db_utils.get_catalogue_sessionmaker(
3233
db_utils.ConnectionMode.read
@@ -37,7 +38,7 @@ def estimate_costs(
3738
)
3839
adaptor_properties = adaptors.get_adaptor_properties(dataset)
3940
costing_info = costing.compute_costing(
40-
request.model_dump()["inputs"], adaptor_properties
41+
request.get("inputs", {}), adaptor_properties
4142
)
4243
return costing_info
4344

0 commit comments

Comments
 (0)