EOX GitLab Instance

Skip to content
Snippets Groups Projects
Commit fba45fa0 authored by Nikola Jankovic's avatar Nikola Jankovic :computer:
Browse files

added updates from v2

parent 428c5c94
No related branches found
No related tags found
No related merge requests found
Pipeline #18231 passed
......@@ -53,7 +53,7 @@ ENV INSTANCE_ID="prism-view-server_core" \
INSTANCE_DIR="/var/www/pvs/dev/pvs_instance/" \
COLLECTION= \
UPLOAD_CONTAINER= \
DB="postgis" \
DB=postgis \
DB_USER= \
DB_PW= \
DB_HOST= \
......@@ -80,6 +80,7 @@ ENV INSTANCE_ID="prism-view-server_core" \
COLLECT_STATIC="false" \
REGISTRAR_REPLACE= \
GDAL_PAM_ENABLED="NO" \
EOXS_LAYER_SUFFIX_SEPARATOR="__" \
DEV="false"
COPY . .
......
......@@ -34,6 +34,7 @@
echo "EOXS_VALIDATE_IDS_NCNAME = False" >> pvs_instance/settings.py
echo "EOXS_OPENSEARCH_RECORD_MODEL = 'eoxserver.resources.coverages.models.Product'" >> pvs_instance/settings.py
echo "EOXS_LAYER_SUFFIX_SEPARATOR = '${EOXS_LAYER_SUFFIX_SEPARATOR}'" >> pvs_instance/settings.py
echo "CACHES = {
'default': {
......
......@@ -10,6 +10,7 @@ import sys
import logging
from typing import List, TYPE_CHECKING, TypedDict
import json
from urllib.parse import urlparse
import django
from django.db import transaction
......@@ -106,6 +107,7 @@ class EOxServerBackend(Backend):
created_storage_auth = False
created_storage = False
storage_name = None
if isinstance(source, LocalSource):
storage, created_storage = backends.Storage.get_or_create(
name=source.name,
......@@ -128,6 +130,13 @@ class EOxServerBackend(Backend):
endpoint_url = endpoint_url[len('http://'):]
bucket = source.bucket_name
# get default bucket name from "first" asset. The first path
# component is the bucket.
if bucket is None:
asset = next(iter(item.get_assets().values()), None)
bucket = urlparse(asset.href).path.partition('/')[0]
storage_auth, created_storage_auth = \
backends.StorageAuth.objects.get_or_create(
name=(
......@@ -196,31 +205,51 @@ class EOxServerBackend(Backend):
def _register_with_stac(self, source: Source, item: 'Item',
replace: bool, storage,
product_type: ItemToProductTypeMapping):
product_type: ItemToProductTypeMapping,
create_product_type_model: bool = False):
from eoxserver.backends import models as backends
from eoxserver.resources.coverages import models
from eoxserver.resources.coverages.registration.stac import (
register_stac_product, create_product_type_from_stac_item
)
product_type_obj, _ = create_product_type_from_stac_item(
item.to_dict(),
product_type_name=product_type['product_type'],
ignore_existing=True,
coverage_mapping=product_type.get('coverages', {})
)
logger.info(f"Created Product Type {product_type_obj}")
# TODO: flag to re-use product type?
if create_product_type_model:
product_type_obj, created = create_product_type_from_stac_item(
item.to_dict(),
# TODO: use hash instead
product_type_name=product_type['name'],
ignore_existing=True,
coverage_mapping=product_type.get('coverages', {})
)
else:
created = False
product_type_obj = models.ProductType.objects.get(
name=product_type['name']
)
if created:
logger.info(f"Created Product Type {product_type_obj}")
else:
logger.info(f"Using existing Product Type {product_type_obj}")
# resolve storage object
if storage:
storage = backends.Storage.objects.get(name=storage[0])
product, _ = register_stac_product(
product, replaced = register_stac_product(
item.to_dict(),
product_type_obj,
storage,
replace=replace,
coverage_mapping=product_type.get('coverages', {})
coverage_mapping=product_type.get('coverages', {}),
browse_mapping=product_type.get('browses', {}),
metadata_asset_names=product_type.get('metadata_assets'),
)
logger.info(
f"Successfully {'replaced' if replaced else 'registered'} "
f"Product {product.identifier}"
)
return product
@transaction.atomic
......@@ -264,7 +293,7 @@ class EOxServerBackend(Backend):
raise RegistrationError(f'{item} not matched to any product_type')
logger.info(
f'Registering into EOxServer for type '
f'"{product_type["product_type"]}"'
f'"{product_type["name"]}"'
)
product = self._register_with_stac(
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment