(self, validated_data: dict)
| 274 | return super(CreateFeatureSerializer, self).to_internal_value(data) |
| 275 | |
| 276 | def create(self, validated_data: dict) -> Feature: # type: ignore[type-arg] |
| 277 | project = self.context["project"] |
| 278 | self.validate_project_features_limit(project) |
| 279 | |
| 280 | # Pop M2M fields before creating the instance (can't pass to Model.objects.create) |
| 281 | owners: list[FFAdminUser] = validated_data.pop("owners", []) |
| 282 | group_owners: list[UserPermissionGroup] = validated_data.pop("group_owners", []) |
| 283 | |
| 284 | user = validated_data.pop("user", None) |
| 285 | instance = super(CreateFeatureSerializer, self).create(validated_data) # type: ignore[no-untyped-call] |
| 286 | |
| 287 | if owners: |
| 288 | instance.owners.add(*owners) |
| 289 | elif user and getattr(user, "is_master_api_key_user", False) is False: |
| 290 | # Auto-add the creating user as owner only when no explicit owners provided |
| 291 | instance.owners.add(user) |
| 292 | |
| 293 | if group_owners: |
| 294 | instance.group_owners.add(*group_owners) |
| 295 | |
| 296 | return instance # type: ignore[no-any-return] |
| 297 | |
| 298 | def validate_project_features_limit(self, project: Project) -> None: |
| 299 | if not is_edge_enabled(): |
no test coverage detected