diff --git a/api/integrations/amplitude/amplitude.py b/api/integrations/amplitude/amplitude.py index 456da87460a3..40c6419bf813 100644 --- a/api/integrations/amplitude/amplitude.py +++ b/api/integrations/amplitude/amplitude.py @@ -13,13 +13,11 @@ logger = logging.getLogger(__name__) -AMPLITUDE_API_URL = "https://api.amplitude.com" - class AmplitudeWrapper(AbstractBaseIdentityIntegrationWrapper): def __init__(self, config: AmplitudeConfiguration): self.api_key = config.api_key - self.url = f"{AMPLITUDE_API_URL}/identify" + self.url = f"{config.base_url}/identify" def _identify_user(self, user_data: dict) -> None: payload = {"api_key": self.api_key, "identification": json.dumps([user_data])} diff --git a/api/integrations/amplitude/constants.py b/api/integrations/amplitude/constants.py new file mode 100644 index 000000000000..f64216114617 --- /dev/null +++ b/api/integrations/amplitude/constants.py @@ -0,0 +1 @@ +DEFAULT_AMPLITUDE_API_URL = "https://api2.amplitude.com" diff --git a/api/integrations/amplitude/migrations/0006_add_default_base_url.py b/api/integrations/amplitude/migrations/0006_add_default_base_url.py new file mode 100644 index 000000000000..2f808470c73c --- /dev/null +++ b/api/integrations/amplitude/migrations/0006_add_default_base_url.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.20 on 2023-07-27 13:04 + +from django.db import migrations, models +from django.db.models import Q + + +def add_default_base_url(apps, schema_editor): + amplitude_configuration_model = apps.get_model( + "amplitude", "AmplitudeConfiguration" + ) + + # Note that we're updating the existing items to point to + # api.amplitude.com (rather than api2) to maintain existing + # behaviour for these integrations. + amplitude_configuration_model.objects.filter( + Q(base_url__isnull=True) | Q(base_url="") + ).update(base_url="https://api.amplitude.com") + + +class Migration(migrations.Migration): + dependencies = [ + ("amplitude", "0005_amplitudeconfiguration_deleted_at"), + ] + + operations = [ + migrations.RunPython( + add_default_base_url, reverse_code=migrations.RunPython.noop + ), + migrations.AlterField( + model_name="amplitudeconfiguration", + name="base_url", + field=models.URLField(default="https://api2.amplitude.com"), + ), + ] diff --git a/api/integrations/amplitude/models.py b/api/integrations/amplitude/models.py index 90e0864ed668..d9745c156b2c 100644 --- a/api/integrations/amplitude/models.py +++ b/api/integrations/amplitude/models.py @@ -1,10 +1,12 @@ from django.db import models from environments.models import Environment +from integrations.amplitude.constants import DEFAULT_AMPLITUDE_API_URL from integrations.common.models import EnvironmentIntegrationModel class AmplitudeConfiguration(EnvironmentIntegrationModel): + base_url = models.URLField(default=DEFAULT_AMPLITUDE_API_URL) environment = models.OneToOneField( Environment, related_name="amplitude_config", on_delete=models.CASCADE ) diff --git a/api/integrations/amplitude/serializers.py b/api/integrations/amplitude/serializers.py index d48836475fb9..4562de29aeeb 100644 --- a/api/integrations/amplitude/serializers.py +++ b/api/integrations/amplitude/serializers.py @@ -7,4 +7,4 @@ class AmplitudeConfigurationSerializer(BaseEnvironmentIntegrationModelSerializer): class Meta: model = AmplitudeConfiguration - fields = ("id", "api_key") + fields = ("id", "api_key", "base_url") diff --git a/api/tests/unit/integrations/amplitude/test_unit_amplitude.py b/api/tests/unit/integrations/amplitude/test_unit_amplitude.py index e12122640582..e9d885c010a1 100644 --- a/api/tests/unit/integrations/amplitude/test_unit_amplitude.py +++ b/api/tests/unit/integrations/amplitude/test_unit_amplitude.py @@ -3,10 +3,8 @@ from environments.identities.models import Identity from environments.models import Environment from features.models import FeatureState -from integrations.amplitude.amplitude import ( - AMPLITUDE_API_URL, - AmplitudeWrapper, -) +from integrations.amplitude.amplitude import AmplitudeWrapper +from integrations.amplitude.constants import DEFAULT_AMPLITUDE_API_URL from integrations.amplitude.models import AmplitudeConfiguration @@ -18,10 +16,22 @@ def test_amplitude_initialized_correctly(): amplitude_wrapper = AmplitudeWrapper(config) # Then - expected_url = f"{AMPLITUDE_API_URL}/identify" + expected_url = f"{DEFAULT_AMPLITUDE_API_URL}/identify" assert amplitude_wrapper.url == expected_url +def test_amplitude_initialized_correctly_with_custom_base_url(): + # Given + base_url = "https://api.eu.amplitude.com" + config = AmplitudeConfiguration(api_key="123key", base_url=base_url) + + # When initialized + amplitude_wrapper = AmplitudeWrapper(config) + + # Then + assert amplitude_wrapper.url == f"{base_url}/identify" + + @pytest.mark.django_db def test_amplitude_when_generate_user_data_with_correct_values_then_success( environment: Environment,