Browse Source

chore(hybridcloud) Introduce non-tuple parameter to bulk_create_organization_slug_reservations (#71248)

Add a new parameter that is more compatible with schema generation and
comparison tooling.

Refs HC-1190
Mark Story 9 months ago
parent
commit
ecdcd11986

+ 13 - 2
src/sentry/hybridcloud/rpc_services/control_organization_provisioning/impl.py

@@ -254,12 +254,23 @@ class DatabaseBackedControlOrganizationProvisioningService(
         return primary_slug
 
     def bulk_create_organization_slug_reservations(
-        self, *, region_name: str, organization_ids_and_slugs: set[tuple[int, str]]
+        self,
+        *,
+        region_name: str,
+        organization_ids_and_slugs: set[tuple[int, str]] | None = None,
+        slug_mapping: dict[int, str] | None = None,
     ) -> None:
         slug_reservations_to_create: list[OrganizationSlugReservation] = []
+        assert not (
+            organization_ids_and_slugs is not None and slug_mapping is not None
+        ), "Cannot provide both slug_mapping and organization_ids_and_slugs"
+
+        if organization_ids_and_slugs:
+            slug_mapping = dict(organization_ids_and_slugs)
+        assert isinstance(slug_mapping, dict), "slug_mapping must be dict now"
 
         with outbox_context(transaction.atomic(router.db_for_write(OrganizationSlugReservation))):
-            for org_id, slug in organization_ids_and_slugs:
+            for org_id, slug in slug_mapping.items():
                 slug_reservation = OrganizationSlugReservation(
                     slug=self._generate_org_slug(slug=slug, region_name=region_name),
                     organization_id=org_id,

+ 8 - 2
src/sentry/hybridcloud/rpc_services/control_organization_provisioning/service.py

@@ -77,7 +77,11 @@ class ControlOrganizationProvisioningRpcService(RpcService):
     @abstractmethod
     @rpc_method
     def bulk_create_organization_slug_reservations(
-        self, *, region_name: str, organization_ids_and_slugs: set[tuple[int, str]]
+        self,
+        *,
+        region_name: str,
+        organization_ids_and_slugs: set[tuple[int, str]] | None = None,
+        slug_mapping: dict[int, str] | None = None,
     ) -> None:
         """
         Only really intended for bulk organization import usage. Creates unique organization slug
@@ -85,7 +89,9 @@ class ControlOrganizationProvisioningRpcService(RpcService):
         in the provided region.
 
         :param region_name: The region where the imported organization exist
-        :param organization_ids_and_slugs: A set of ID and base slug tuples to reserve slugs for
+        :param organization_ids_and_slugs: A set of ID and base slug tuples to reserve slugs for.
+            This parameter is deprecated. Use slug_mapping instead.
+        :param slug_mapping: A map of organization id -> slug to reserve.
         :return:
         """