From ea7b142928fbbec28de89587293b174002938cf8 Mon Sep 17 00:00:00 2001
From: Fabian Schindler <fabian.schindler.strauss@gmail.com>
Date: Fri, 4 Feb 2022 09:48:18 +0100
Subject: [PATCH] Allowing to set the service visibility for a given product
 type or globally

---
 registrar/backend/eoxserver.py | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/registrar/backend/eoxserver.py b/registrar/backend/eoxserver.py
index 1a40876..68490b5 100644
--- a/registrar/backend/eoxserver.py
+++ b/registrar/backend/eoxserver.py
@@ -79,10 +79,12 @@ class EOxServerBackend(ItemBackend):
         instance_name: str,
         product_types: List[ItemToProductTypeMapping],
         auto_create_product_types: bool = False,
+        automatic_visibilities: Optional[List[str]] = None,
     ):
         self.product_types = product_types
         self.instance_name = instance_name
         self.auto_create_product_types = auto_create_product_types
+        self.automatic_visibilities = automatic_visibilities
         path = os.path.join(instance_base_path, instance_name)
         if path not in sys.path:
             sys.path.append(path)
@@ -219,6 +221,7 @@ class EOxServerBackend(ItemBackend):
         storage,
         product_type: Optional[ItemToProductTypeMapping],
         create_product_type_model: bool = False,
+        automatic_visibilities: Optional[List[str]] = None,
     ):
         from eoxserver.backends import models as backends
         from eoxserver.resources.coverages import models
@@ -226,6 +229,7 @@ class EOxServerBackend(ItemBackend):
             register_stac_product,
             create_product_type_from_stac_item,
         )
+        from eoxserver.services import models as service_models
 
         # TODO: flag to re-use product type?
         if create_product_type_model:
@@ -288,6 +292,27 @@ class EOxServerBackend(ItemBackend):
                 replace=replace,
             )
 
+        if product_type:
+            service_visibilities = product_type.get(
+                "service_visibility", automatic_visibilities or []
+            )
+        else:
+            service_visibilities = automatic_visibilities or []
+
+        # make product visible for certain services
+        for service in service_visibilities:
+            (
+                service_visibility,
+                _,
+            ) = service_models.ServiceVisibility.objects.get_or_create(
+                eo_object=product,
+                service=service,
+            )
+
+            service_visibility.visibility = True
+            service_visibility.full_clean()
+            service_visibility.save()
+
         logger.info(
             f"Successfully {'replaced' if replaced else 'registered'} "
             f"Product {product.identifier}"
@@ -344,7 +369,13 @@ class EOxServerBackend(ItemBackend):
                 models.collection_insert_eo_object(collection, product)
         elif self.auto_create_product_types:
             product = self._register_with_stac(
-                source, item, replace, storage, None, True
+                source,
+                item,
+                replace,
+                storage,
+                product_type=None,
+                create_product_type_model=True,
+                automatic_visibilities=self.automatic_visibilities,
             )
         else:
             raise RegistrationError(f"{item} not matched to any product_type")
-- 
GitLab