From 0afa74b446cc0770783edfee9da5819230527a13 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Tue, 4 Jul 2023 12:05:28 +0200 Subject: [PATCH] change(api): feature flags validate condition filters --- api/chalicelib/core/feature_flags.py | 3 +-- api/schemas.py | 9 ++++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/api/chalicelib/core/feature_flags.py b/api/chalicelib/core/feature_flags.py index db54c2600..f044191d9 100644 --- a/api/chalicelib/core/feature_flags.py +++ b/api/chalicelib/core/feature_flags.py @@ -38,7 +38,6 @@ def exists_by_name(flag_key: str, project_id: int, exclude_id: Optional[int]) -> def update_feature_flag_status(project_id: int, feature_flag_id: int, is_active: bool) -> Dict[str, Any]: try: - print(f"feature_flag_id: {feature_flag_id}, is_active: {is_active}") with pg_client.PostgresClient() as cur: query = cur.mogrify(f"""UPDATE feature_flags SET is_active = %(is_active)s, updated_at=NOW() @@ -234,7 +233,7 @@ def prepare_conditions_values(feature_flag_data): conditions_data[f"{k}_{i}"] = s.__getattribute__(k) conditions_data[f"name_{i}"] = s.name conditions_data[f"rollout_percentage_{i}"] = s.rollout_percentage - conditions_data[f"filters_{i}"] = json.dumps(s.filters) + conditions_data[f"filters_{i}"] = json.dumps([filter_.dict() for filter_ in s.filters]) return conditions_data diff --git a/api/schemas.py b/api/schemas.py index 2304f1b32..2d2d9bc79 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -1393,11 +1393,18 @@ class FeatureFlagVariant(BaseModel): alias_generator = attribute_to_camel_case +class FeatureFlagConditionFilterSchema(BaseModel): + is_event: bool = Field(False, const=False) + type: FilterType = Field(...) + value: List[str] = Field(default=[], min_items=1) + operator: Union[SearchEventOperator, MathOperator] = Field(...) + + class FeatureFlagCondition(BaseModel): condition_id: Optional[int] = Field(default=None) name: str = Field(...) rollout_percentage: Optional[int] = Field(default=0) - filters: List[dict] = Field(default=[]) + filters: List[FeatureFlagConditionFilterSchema] = Field(default=[]) class Config: alias_generator = attribute_to_camel_case