|
@@ -1,4 +1,4 @@
|
|
|
-from typing import Any, MutableMapping, Optional
|
|
|
+from typing import Any, Mapping, MutableMapping, Optional
|
|
|
|
|
|
from django.db import IntegrityError
|
|
|
from django.http import Http404
|
|
@@ -15,8 +15,7 @@ from sentry.api.validators.external_actor import (
|
|
|
validate_integration_id,
|
|
|
)
|
|
|
from sentry.api.validators.integrations import validate_provider
|
|
|
-from sentry.models import ExternalActor, Organization, Team
|
|
|
-from sentry.models.actor import Actor, get_actor_for_user
|
|
|
+from sentry.models import Actor, ExternalActor, Organization, Team, get_actor_for_user
|
|
|
from sentry.services.hybrid_cloud.organization import organization_service
|
|
|
from sentry.services.hybrid_cloud.user import RpcUser
|
|
|
from sentry.services.hybrid_cloud.user.service import user_service
|
|
@@ -63,20 +62,23 @@ class ExternalActorSerializerBase(CamelSnakeModelSerializer):
|
|
|
provider = validate_provider(provider_name_option, available_providers=AVAILABLE_PROVIDERS)
|
|
|
return int(provider.value)
|
|
|
|
|
|
- def get_actor_id(self, validated_data: MutableMapping[str, Any]) -> int:
|
|
|
+ def get_actor_params(self, validated_data: MutableMapping[str, Any]) -> Mapping[str, int]:
|
|
|
actor_model = validated_data.pop(self._actor_key)
|
|
|
if isinstance(actor_model, Team):
|
|
|
- actor = Actor.objects.get(**{self._actor_key: actor_model.id})
|
|
|
+ actor = Actor.objects.get(**{"team_id": actor_model.id})
|
|
|
+ return dict(team_id=actor_model.id, actor_id=actor.id)
|
|
|
else:
|
|
|
actor = get_actor_for_user(actor_model)
|
|
|
- return int(actor.id)
|
|
|
+ return dict(user_id=actor_model.id, actor_id=actor.id)
|
|
|
|
|
|
def create(self, validated_data: MutableMapping[str, Any]) -> ExternalActor:
|
|
|
- actor_id = self.get_actor_id(validated_data)
|
|
|
+ actor_params = self.get_actor_params(validated_data)
|
|
|
+ actor_id = actor_params.pop("actor_id")
|
|
|
return ExternalActor.objects.get_or_create(
|
|
|
**validated_data,
|
|
|
actor_id=actor_id,
|
|
|
organization=self.organization,
|
|
|
+ defaults=actor_params,
|
|
|
)
|
|
|
|
|
|
def update(
|
|
@@ -87,7 +89,7 @@ class ExternalActorSerializerBase(CamelSnakeModelSerializer):
|
|
|
validated_data.pop("id")
|
|
|
|
|
|
if self._actor_key in validated_data:
|
|
|
- validated_data["actor_id"] = self.get_actor_id({**validated_data})
|
|
|
+ validated_data.update(self.get_actor_params({**validated_data}))
|
|
|
|
|
|
for key, value in validated_data.items():
|
|
|
setattr(self.instance, key, value)
|