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