chore(): small improvements

This commit is contained in:
ITQ
2026-02-22 19:19:44 +03:00
parent 4b69bb3af0
commit 385aae930f
5 changed files with 27 additions and 6 deletions
@@ -52,6 +52,7 @@ class DecisionAPITest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="control", name="control",
value="ctrl", value="ctrl",
weight=Decimal("50.00"), weight=Decimal("50.00"),
@@ -59,6 +60,7 @@ class DecisionAPITest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="treatment", name="treatment",
value="treat", value="treat",
weight=Decimal("50.00"), weight=Decimal("50.00"),
+4
View File
@@ -14,6 +14,7 @@ class EventTypeCreateIn(ModelSchema):
EventType.name.field.name, EventType.name.field.name,
EventType.display_name.field.name, EventType.display_name.field.name,
EventType.description.field.name, EventType.description.field.name,
EventType.is_exposure.field.name,
EventType.requires_exposure.field.name, EventType.requires_exposure.field.name,
EventType.required_fields.field.name, EventType.required_fields.field.name,
) )
@@ -22,6 +23,7 @@ class EventTypeCreateIn(ModelSchema):
class EventTypeUpdateIn(ModelSchema): class EventTypeUpdateIn(ModelSchema):
display_name: str | None = None display_name: str | None = None
description: str | None = None description: str | None = None
is_exposure: bool | None = None
requires_exposure: bool | None = None requires_exposure: bool | None = None
required_fields: list[str] | None = None required_fields: list[str] | None = None
is_active: bool | None = None is_active: bool | None = None
@@ -31,6 +33,7 @@ class EventTypeUpdateIn(ModelSchema):
fields: ClassVar[tuple[str, ...]] = ( fields: ClassVar[tuple[str, ...]] = (
EventType.display_name.field.name, EventType.display_name.field.name,
EventType.description.field.name, EventType.description.field.name,
EventType.is_exposure.field.name,
EventType.requires_exposure.field.name, EventType.requires_exposure.field.name,
EventType.required_fields.field.name, EventType.required_fields.field.name,
EventType.is_active.field.name, EventType.is_active.field.name,
@@ -45,6 +48,7 @@ class EventTypeOut(ModelSchema):
EventType.name.field.name, EventType.name.field.name,
EventType.display_name.field.name, EventType.display_name.field.name,
EventType.description.field.name, EventType.description.field.name,
EventType.is_exposure.field.name,
EventType.requires_exposure.field.name, EventType.requires_exposure.field.name,
EventType.required_fields.field.name, EventType.required_fields.field.name,
EventType.is_active.field.name, EventType.is_active.field.name,
+9 -4
View File
@@ -184,12 +184,14 @@ def create_variant(
experiment_id: UUID, experiment_id: UUID,
payload: VariantCreateIn, payload: VariantCreateIn,
) -> tuple[HTTPStatus, VariantOut]: ) -> tuple[HTTPStatus, VariantOut]:
user = _get_user(request)
exp = get_object_or_404( exp = get_object_or_404(
Experiment.objects.select_related("flag"), Experiment.objects.select_related("flag", "owner"),
pk=experiment_id, pk=experiment_id,
) )
v = variant_create( v = variant_create(
experiment=exp, experiment=exp,
user=user,
name=payload.name, name=payload.name,
value=payload.value, value=payload.value,
weight=payload.weight, weight=payload.weight,
@@ -210,13 +212,15 @@ def update_variant(
variant_id: UUID, variant_id: UUID,
payload: VariantUpdateIn, payload: VariantUpdateIn,
) -> tuple[HTTPStatus, VariantOut]: ) -> tuple[HTTPStatus, VariantOut]:
user = _get_user(request)
v = get_object_or_404( v = get_object_or_404(
Variant.objects.select_related("experiment__flag"), Variant.objects.select_related("experiment__flag", "experiment__owner"),
pk=variant_id, pk=variant_id,
experiment_id=experiment_id, experiment_id=experiment_id,
) )
v = variant_update( v = variant_update(
variant=v, variant=v,
user=user,
**payload.model_dump(exclude_none=True), **payload.model_dump(exclude_none=True),
) )
return HTTPStatus.OK, VariantOut.model_validate(v) return HTTPStatus.OK, VariantOut.model_validate(v)
@@ -233,12 +237,13 @@ def delete_variant(
experiment_id: UUID, experiment_id: UUID,
variant_id: UUID, variant_id: UUID,
) -> tuple[HTTPStatus, None]: ) -> tuple[HTTPStatus, None]:
user = _get_user(request)
v = get_object_or_404( v = get_object_or_404(
Variant, Variant.objects.select_related("experiment__owner"),
pk=variant_id, pk=variant_id,
experiment_id=experiment_id, experiment_id=experiment_id,
) )
variant_delete(variant=v) variant_delete(variant=v, user=user)
return HTTPStatus.NO_CONTENT, None return HTTPStatus.NO_CONTENT, None
@@ -77,6 +77,7 @@ class DecideForFlagTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="control", name="control",
value="ctrl", value="ctrl",
weight=Decimal("50.00"), weight=Decimal("50.00"),
@@ -84,6 +85,7 @@ class DecideForFlagTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="treatment", name="treatment",
value="treat", value="treat",
weight=Decimal("50.00"), weight=Decimal("50.00"),
@@ -118,6 +120,7 @@ class DecideForFlagTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="control", name="control",
value="ctrl", value="ctrl",
weight=Decimal("50.00"), weight=Decimal("50.00"),
@@ -125,6 +128,7 @@ class DecideForFlagTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="treatment", name="treatment",
value="treat", value="treat",
weight=Decimal("50.00"), weight=Decimal("50.00"),
@@ -157,6 +161,7 @@ class TargetingRulesTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="control", name="control",
value="ctrl", value="ctrl",
weight=Decimal("50.00"), weight=Decimal("50.00"),
@@ -164,6 +169,7 @@ class TargetingRulesTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="treatment", name="treatment",
value="treat", value="treat",
weight=Decimal("50.00"), weight=Decimal("50.00"),
@@ -260,6 +266,7 @@ class ParticipationLimitsTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="control", name="control",
value="ctrl", value="ctrl",
weight=Decimal("50.00"), weight=Decimal("50.00"),
@@ -267,6 +274,7 @@ class ParticipationLimitsTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="treatment", name="treatment",
value="treat", value="treat",
weight=Decimal("50.00"), weight=Decimal("50.00"),
@@ -331,6 +339,7 @@ class PartialTrafficVariantDistributionTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="control", name="control",
value="ctrl", value="ctrl",
weight=Decimal("10.00"), weight=Decimal("10.00"),
@@ -338,6 +347,7 @@ class PartialTrafficVariantDistributionTest(TestCase):
) )
variant_create( variant_create(
experiment=exp, experiment=exp,
user=self.owner,
name="treatment", name="treatment",
value="treat", value="treat",
weight=Decimal("10.00"), weight=Decimal("10.00"),
+2 -2
View File
@@ -62,8 +62,8 @@ class FeatureFlag(BaseModel):
RegexValidator( RegexValidator(
regex=FLAG_KEY_PATTERN, regex=FLAG_KEY_PATTERN,
message=( message=(
"Key must start with a lowercase letter and contain only " "Event type name must follow snake_case, "
"lowercase letters, digits, and underscores." "camelCase, or PascalCase."
), ),
) )
], ],