From 02872f8f2f784396695702a15413a2c6cfdcec75 Mon Sep 17 00:00:00 2001 From: Kraiem Taha Yassine Date: Thu, 21 Dec 2023 15:31:41 +0100 Subject: [PATCH] Api v1.17.0 (#1798) * fix(chalice): support list of errors in response * refactor(chalice): global support of missing filter attribute isEvent --- api/or_dependencies.py | 3 ++- api/schemas/schemas.py | 24 +++++++++++++----------- ee/api/or_dependencies.py | 3 ++- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/api/or_dependencies.py b/api/or_dependencies.py index 2a192550b7..31309bf003 100644 --- a/api/or_dependencies.py +++ b/api/or_dependencies.py @@ -33,7 +33,8 @@ async def custom_route_handler(request: Request) -> Response: response: Response = await original_route_handler(request) except HTTPException as e: if e.status_code // 100 == 4: - return JSONResponse(content={"errors": [e.detail]}, status_code=e.status_code) + return JSONResponse(content={"errors": e.detail if isinstance(e.detail, list) else [e.detail]}, + status_code=e.status_code) else: raise e diff --git a/api/schemas/schemas.py b/api/schemas/schemas.py index ecfbfc2c84..ec0f409580 100644 --- a/api/schemas/schemas.py +++ b/api/schemas/schemas.py @@ -8,6 +8,7 @@ from .overrides import BaseModel, Enum, ORUnion from .transformers_validators import transform_email, remove_whitespace, remove_duplicate_values, single_to_list, \ force_is_event, NAME_PATTERN, int_to_string +from pydantic.functional_validators import BeforeValidator def transform_old_filter_type(cls, values): @@ -700,9 +701,17 @@ class SortOrderType(str, Enum): desc = "DESC" +def add_missing_is_event(values: dict): + if values.get("isEvent") is None: + values["isEvent"] = (EventType.has_value(values["type"]) + or PerformanceEventType.has_value(values["type"]) + or ProductAnalyticsSelectedEventType.has_value(values["type"])) + return values + + # this type is created to allow mixing events&filters and specifying a discriminator GroupedFilterType = Annotated[Union[SessionSearchFilterSchema, SessionSearchEventSchema2], \ - Field(discriminator='is_event')] + Field(discriminator='is_event'), BeforeValidator(add_missing_is_event)] class SessionsSearchPayloadSchema(_TimedSchema, _PaginatedSchema): @@ -732,9 +741,9 @@ def add_missing_attributes(cls, values): for v in values["events"]: v["isEvent"] = True - for v in values.get("filters", []): - if v.get("isEvent") is None: - v["isEvent"] = False + # for v in values.get("filters", []): + # if v.get("isEvent") is None: + # v["isEvent"] = False return values @model_validator(mode="before") @@ -1016,13 +1025,6 @@ def remove_wrong_filter_values(cls, values): f["value"] = vals return values - @model_validator(mode="before") - def __force_is_event(cls, values): - for v in values.get("filters", []): - if v.get("isEvent") is None: - v["isEvent"] = ProductAnalyticsSelectedEventType.has_value(v["type"]) - return values - @model_validator(mode="before") def __enforce_default(cls, values): if values.get("startTimestamp") is None: diff --git a/ee/api/or_dependencies.py b/ee/api/or_dependencies.py index 856cea13b5..5680d254c2 100644 --- a/ee/api/or_dependencies.py +++ b/ee/api/or_dependencies.py @@ -35,7 +35,8 @@ async def custom_route_handler(request: Request) -> Response: response: Response = await original_route_handler(request) except HTTPException as e: if e.status_code // 100 == 4: - response = JSONResponse(content={"errors": [e.detail]}, status_code=e.status_code) + return JSONResponse(content={"errors": e.detail if isinstance(e.detail, list) else [e.detail]}, + status_code=e.status_code) else: raise e