From 8957ea659acb962d658c6d36a551cf65e4be898b Mon Sep 17 00:00:00 2001 From: Thibault Coudray <169165300+tcoudray-pass@users.noreply.github.com> Date: Wed, 15 Jan 2025 14:48:04 +0100 Subject: [PATCH] (PC-33659)[API] chore: script to disable old integration provider --- .../main.py | 43 +++++++++++++++++++ .../main_test.py | 37 ++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 api/src/pcapi/scripts/provider_clean_old_integration_data/main.py create mode 100644 api/tests/scripts/provider_clean_old_integraiton_data/main_test.py diff --git a/api/src/pcapi/scripts/provider_clean_old_integration_data/main.py b/api/src/pcapi/scripts/provider_clean_old_integration_data/main.py new file mode 100644 index 00000000000..c607ed3f7f7 --- /dev/null +++ b/api/src/pcapi/scripts/provider_clean_old_integration_data/main.py @@ -0,0 +1,43 @@ +import logging + +from pcapi.core.offers import models as offers_models +from pcapi.core.providers import models as providers_models +from pcapi.flask_app import app +from pcapi.repository import transaction + + +logger = logging.getLogger(__name__) + +_LEGACY_API_PROVIDERS_IDS = [ + 15, # TiteLive Stocks (Epagine / Place des libraires.com) + 59, # Praxiel/Inférence + 58, # FNAC + 23, # www.leslibraires.fr + 66, # Decitre + 63, # Librisoft + 68, # TMIC-Ellipses + 65, # Mollat + 67, # CDI-Bookshop +] + + +def clean_old_provider_data(provider_ids: list[int]) -> None: + for provider_id in provider_ids: + with transaction(): + provider = providers_models.Provider.query.get(provider_id) + + logger.info("Cleaning data for provider %s (id: %s)", provider.name, provider.id) + + if "[DÉPRÉCIÉ]" not in provider.name: + provider.name = f"[DÉPRÉCIÉ] {provider.name}" + provider.enabledForPro = False + provider.isActive = False + + offers_models.Offer.query.filter(offers_models.Offer.lastProviderId == provider_id).update( + {"idAtProvider": None}, synchronize_session=False + ) + + +if __name__ == "__main__": + app.app_context().push() + clean_old_provider_data(_LEGACY_API_PROVIDERS_IDS) diff --git a/api/tests/scripts/provider_clean_old_integraiton_data/main_test.py b/api/tests/scripts/provider_clean_old_integraiton_data/main_test.py new file mode 100644 index 00000000000..1f9a25565c1 --- /dev/null +++ b/api/tests/scripts/provider_clean_old_integraiton_data/main_test.py @@ -0,0 +1,37 @@ +import pytest + +from pcapi.core.offers import factories as offers_factories +from pcapi.core.providers import factories as providers_factories +from pcapi.models import db +from pcapi.scripts.provider_clean_old_integration_data.main import clean_old_provider_data + + +@pytest.mark.usefixtures("db_session") +def test_clean_old_provider_data(): + provider_1 = providers_factories.ProviderFactory(name="Old Provider that should be deprecated") + provider_already_deprecated = providers_factories.ProviderFactory(name="[DÉPRÉCIÉ] Old Provider") + provider_3 = providers_factories.ProviderFactory() + offer_provider_1 = offers_factories.ThingOfferFactory(lastProvider=provider_1, idAtProvider="12345") + offer_provider_2 = offers_factories.EventOfferFactory(lastProvider=provider_already_deprecated, idAtProvider=None) + offer_provider_3 = offers_factories.ThingOfferFactory(lastProvider=provider_3, idAtProvider="offerId3") + + clean_old_provider_data([provider_1.id, provider_already_deprecated.id]) + + db.session.refresh(offer_provider_1) + db.session.refresh(offer_provider_2) + db.session.refresh(offer_provider_3) + + # should be deprecated + assert provider_1.name == "[DÉPRÉCIÉ] Old Provider that should be deprecated" + assert not provider_1.enabledForPro + assert not provider_1.isActive + assert not offer_provider_1.idAtProvider + assert provider_already_deprecated.name == "[DÉPRÉCIÉ] Old Provider" + assert not provider_already_deprecated.enabledForPro + assert not provider_already_deprecated.isActive + assert not offer_provider_2.idAtProvider + + # should stay the same + assert offer_provider_3.idAtProvider + assert provider_3.enabledForPro + assert provider_3.isActive