EOX GitLab Instance

Skip to content
Snippets Groups Projects
Commit 32f8ab93 authored by Lubomir Dolezal's avatar Lubomir Dolezal
Browse files

registering to coverage type based on band count

parent 5a128112
No related branches found
No related tags found
2 merge requests!49Production release 1.1.1,!46Emg prod types
......@@ -28,7 +28,7 @@ replace = version="{new_version}"
search = version="{current_version}"
replace = version="{new_version}"
[bumpversion:glob:registrar/setup.py]
[bumpversion:glob:core/setup.py]
search = version="{current_version}"
replace = version="{new_version}"
......
......@@ -7,7 +7,9 @@ import json
import django
from django.db import transaction
from django.db.models import Count
from django.contrib.gis.geos import GEOSGeometry, Polygon
from osgeo import gdal
from .exceptions import RegistrationError
from .context import Context
......@@ -129,14 +131,16 @@ class EOxServerBackend(Backend):
from eoxserver.resources.coverages.registration.registrators.gdal import GDALRegistrator
# get the mapping for this particular item
type_mapping = self.mapping[item.product_type]
try:
type_mapping = self.mapping[item.product_type]
except KeyError:
raise RegistrationError(f'Could not find mapping for {item.product_type} in configuration')
mapping = type_mapping.get(item.product_level) or type_mapping.get(None)
if not mapping:
raise RegistrationError(f'Could not get mapping for {item.product_type} {item.product_level}')
_, metadata_file = source.get_container_and_path(item.metadata_files[0])
# metadata_file = '/'.join(item.metadata_files[0].split('/')[1:])
storage = self._get_storage_from_source(source, item.path)
try:
......@@ -180,9 +184,26 @@ class EOxServerBackend(Backend):
storage + [source.get_container_and_path(raster_item)[1]]
for raster_item in (raster_items if isinstance(raster_items, list) else [raster_items])
]
if isinstance(coverage_type_name, list):
# determine which one to use based on number of bands
gdal_path_prefix = ''
if isinstance(source, SwiftSource):
gdal_path_prefix = '/vsiswift/'
elif isinstance(source, S3Source):
gdal_path_prefix = '/vsis3/'
raster_item_to_check = f'{gdal_path_prefix}{raster_items[0][0]}/{raster_items[0][1]}'
ds = gdal.Open(raster_item_to_check)
logger.debug("Raster has number of bands: '%s'" % ds.RasterCount)
# find covtype that has correct number of bands
try:
coverage_model = models.CoverageType.objects \
.filter(name__in=coverage_type_name) \
.annotate(field_count=Count('field_types')) \
.get(field_count=ds.RasterCount)
except models.CoverageType.DoesNotExist:
raise RegistrationError(f'Coverage Band Count is different than in any of configured CoverageTypes')
coverage_type_name = coverage_model.name
logger.info(f"Registering coverage{'s' if len(raster_items) > 1 else ''} {raster_items} as {coverage_type_name}")
report = GDALRegistrator().register(
data_locations=raster_items,
metadata_locations=[storage + [metadata_file]],
......
......@@ -6,7 +6,7 @@ long_description = ""
setup(
name="registrar", # Replace with your own username
version="1.0.0-rc.2",
version="1.0.0",
author="",
author_email="",
description="registrar for PVS",
......
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