diff --git a/core/registrar.py b/core/registrar.py index 046f5db66555468ce1462d1cf2cab763225c7453..cd0a4cffa77bde9bca896d7e63d6c8b7b007e221 100644 --- a/core/registrar.py +++ b/core/registrar.py @@ -52,6 +52,7 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pvs_instance.settings") django.setup() from eoxserver.backends import access +from eoxserver.backends import models as backends from eoxserver.resources.coverages import models from eoxserver.resources.coverages.registration.product import ( ProductRegistrator @@ -104,26 +105,39 @@ def add_mask(product): ) -def get_product_level(product): +def get_product_type_and_level(metadata_item): + with access.vsi_open(metadata_item) as f: + tree = lxml.etree.parse(f) + root = tree.getroot() + try: - metadata_item = product.metadata_items.all()[0] - with access.vsi_open(metadata_item) as f: - tree = lxml.etree.parse(f) - root = tree.getroot() - xp = '/gsc:report/gsc:opt_metadata/gml:metaDataProperty/gsc:EarthObservationMetaData/eop:parentIdentifier/text()' + xp = '//gml:using/eop:EarthObservationEquipment/eop:platform/eop:Platform/eop:shortName/text()' product_type_name = tree.xpath(xp, namespaces=root.nsmap)[0] - if product_type_name.endswith('Level_1'): - return 'Level_1' - if product_type_name.endswith('Level_3'): - return 'Level_3' + except Exception as e: + logger.warning( + 'Failed to determine product type of %s, error was %s' + % (metadata_item.location, e) + ) + + try: + xp = '//gml:metaDataProperty/gsc:EarthObservationMetaData/eop:parentIdentifier/text()' + parent_identifier = tree.xpath(xp, namespaces=root.nsmap)[0] + + print("parent identifier --->", parent_identifier) + if parent_identifier.endswith('Level_1'): + level = 'Level_1' + if parent_identifier.endswith('Level_3'): + level = 'Level_3' else: - raise Exception('Invalid product type name %s' % product_type_name) + raise Exception('Invalid parent identifier type name %s' % parent_identifier) except Exception as e: logger.warning( - 'Failed to determine product level for product %s, error was %s' - % (product.identifier, e) + 'Failed to determine product level of %s, error was %s' + % (metadata_item.location, e) ) + return product_type_name, level + class RegistrationError(Exception): pass @@ -172,7 +186,10 @@ def registrar( % objects_prefix ) - product_type = data_package.split("/")[2] + storage = backends.Storage.objects.get(name=upload_container) + metadata_item = models.MetaDataItem(storage=storage, location=metadata_package) + + product_type, level = get_product_type_and_level(metadata_item) product, replaced = ProductRegistrator().register( metadata_locations=[[upload_container, @@ -184,12 +201,12 @@ def registrar( package_path=None, overrides={}, ) + collection = models.Collection.objects.get( identifier=collection ) models.collection_insert_eo_object(collection, product) - level = get_product_level(product) if level == 'Level_1': collection_level_1 = models.Collection.objects.get( identifier="%s_Level_1" % collection