diff --git a/src/fides/api/api/v1/endpoints/router_factory.py b/src/fides/api/api/v1/endpoints/router_factory.py index 2afd5fb334..b7be7047e7 100644 --- a/src/fides/api/api/v1/endpoints/router_factory.py +++ b/src/fides/api/api/v1/endpoints/router_factory.py @@ -70,6 +70,16 @@ async def validate_data_categories( ) +def validate_masking_strategy(dataset: Dataset) -> None: + try: + validate_masking_strategy_override(dataset) + except ValidationError as e: + raise HTTPException( + status_code=HTTP_422_UNPROCESSABLE_ENTITY, + detail=jsonable_encoder(e.message), + ) + + def generic_router_factory(fides_model: FidesModelType, model_type: str) -> APIRouter: """ Compose all of the individual route factories into a single coherent Router. @@ -147,13 +157,7 @@ async def create( sql_model = sql_model_map[model_type] if isinstance(resource, Dataset): await validate_data_categories(resource, db) - try: - validate_masking_strategy_override(resource) - except ValidationError as e: - raise HTTPException( - status_code=HTTP_422_UNPROCESSABLE_ENTITY, - detail=jsonable_encoder(e.message), - ) + validate_masking_strategy(resource) if isinstance(sql_model, ModelWithDefaultField) and resource.is_default: raise errors.ForbiddenIsDefaultTaxonomyError( model_type, resource.fides_key, action="create" @@ -258,13 +262,7 @@ async def update( sql_model = sql_model_map[model_type] if isinstance(resource, Dataset): await validate_data_categories(resource, db) - try: - validate_masking_strategy_override(resource) - except ValidationError as e: - raise HTTPException( - status_code=HTTP_422_UNPROCESSABLE_ENTITY, - detail=jsonable_encoder(e.message), - ) + validate_masking_strategy(resource) await forbid_if_editing_is_default(sql_model, resource.fides_key, resource, db) return await update_resource(sql_model, resource.model_dump(mode="json"), db) @@ -346,13 +344,7 @@ async def upsert( for resource in resources: if isinstance(resource, Dataset): await validate_data_categories(resource, db) - try: - validate_masking_strategy_override(resource) - except ValidationError as e: - raise HTTPException( - status_code=HTTP_422_UNPROCESSABLE_ENTITY, - detail=jsonable_encoder(e.message), - ) + validate_masking_strategy(resource) await forbid_if_editing_any_is_default(sql_model, resource_dicts, db) result = await upsert_resources(sql_model, resource_dicts, db) response.status_code = (