def update_browse_layer(browse_layer, config=None): config = config or get_ngeo_config() try: browse_layer_model = models.BrowseLayer.objects.get(id=browse_layer.id) except models.BrowseLayer.DoesNotExist: raise Exception("Could not update the previous browse layer") immutable_values = ( "id", "browse_type", "contains_vertical_curtains", "r_band", "g_band", "b_band", "radiometric_interval_min", "radiometric_interval_max", "grid", "lowest_map_level", "highest_map_level", "strategy" ) for key in immutable_values: if getattr(browse_layer_model, key) != getattr(browse_layer, key): raise Exception("Cannot change immutable property '%s'." % key) mutable_values = [ "title", "description", "browse_access_policy", "timedimension_default", "tile_query_limit" ] refresh_mapcache_xml = False for key in mutable_values: setattr(browse_layer_model, key, getattr(browse_layer, key)) if key in ("timedimension_default", "tile_query_limit"): refresh_mapcache_xml = True for related_dataset_id in browse_layer.related_dataset_ids: models.RelatedDataset.objects.get_or_create( dataset_id=related_dataset_id, browse_layer=browse_layer_model ) # remove all related datasets that are not referenced anymore models.RelatedDataset.objects.filter( browse_layer=browse_layer_model ).exclude( dataset_id__in=browse_layer.related_dataset_ids ).delete() browse_layer_model.full_clean() browse_layer_model.save() if not browse_layer.contains_volumes and not browse_layer.contains_vertical_curtains: if refresh_mapcache_xml: remove_mapcache_layer_xml(browse_layer, config) add_mapcache_layer_xml(browse_layer, config)
def add_browse_layer(browse_layer, config=None): """ Add a browse layer to the ngEO Browse Server system. This includes the database models, cache configuration and filesystem paths. """ config = config or get_ngeo_config() try: # create a new browse layer model browse_layer_model = models.BrowseLayer( **browse_layer.get_kwargs() ) browse_layer_model.full_clean() browse_layer_model.save() for related_dataset_id in browse_layer.related_dataset_ids: models.RelatedDataset.objects.get_or_create( dataset_id=related_dataset_id, browse_layer=browse_layer_model ) except Exception: raise # create EOxServer dataset series eoxs_models.DatasetSeries.objects.create(identifier=browse_layer.id) # remove source from mapcache sqlite if not browse_layer.contains_volumes and not browse_layer.contains_vertical_curtains: mapcache_models.Source.objects.create(name=browse_layer.id) # add an XML section to the mapcache config xml add_mapcache_layer_xml(browse_layer, config) # create a base directory for optimized files directory = get_project_relative_path(join( config.get(INGEST_SECTION, "optimized_files_dir"), browse_layer.id )) if not os.path.exists(directory): os.makedirs(directory)
def update_browse_layer(browse_layer, config=None): config = config or get_ngeo_config() try: logger.info("Fetching browse layer '%s' for update." % browse_layer.id) browse_layer_model = models.BrowseLayer.objects.get(id=browse_layer.id) except models.BrowseLayer.DoesNotExist: raise Exception( "Could not update browse layer '%s' as it does not exist." % browse_layer.id ) immutable_values = ( "id", "browse_type", "contains_vertical_curtains", "r_band", "g_band", "b_band", "radiometric_interval_min", "radiometric_interval_max", "grid", "lowest_map_level", "highest_map_level" ) for key in immutable_values: if getattr(browse_layer_model, key) != getattr(browse_layer, key): raise Exception("Cannot change immutable property '%s'." % key) mutable_values = [ "title", "description", "browse_access_policy", "timedimension_default", "tile_query_limit", "strategy" ] refresh_mapcache_xml = False refresh_metadata = False for key in mutable_values: setattr(browse_layer_model, key, getattr(browse_layer, key)) if key in ("timedimension_default", "tile_query_limit"): refresh_mapcache_xml = True if key in ("title", "description"): refresh_metadata = True # relatedDatasets are ignored (see NGEO-1508) # for related_dataset_id in browse_layer.related_dataset_ids: # models.RelatedDataset.objects.get_or_create( # dataset_id=related_dataset_id, browse_layer=browse_layer_model # ) # # remove all related datasets that are not referenced any more # models.RelatedDataset.objects.filter( # browse_layer=browse_layer_model # ).exclude( # dataset_id__in=browse_layer.related_dataset_ids # ).delete() browse_layer_model.full_clean() browse_layer_model.save() # update EOxServer layer metadata if refresh_metadata: dss = System.getRegistry().getFromFactory( "resources.coverages.wrappers.DatasetSeriesFactory", {"obj_id": browse_layer.id} ) dss._DatasetSeriesWrapper__model.layer_metadata.all().delete() if browse_layer.title: md_title = LayerMetadataRecord.objects.get_or_create( key="ows_title", value=str(browse_layer.title))[0] dss._DatasetSeriesWrapper__model.layer_metadata.add(md_title) if browse_layer.description: md_abstract = LayerMetadataRecord.objects.get_or_create( key="ows_abstract", value=str(browse_layer.description))[0] dss._DatasetSeriesWrapper__model.layer_metadata.add(md_abstract) if refresh_mapcache_xml: try: remove_mapcache_layer_xml(browse_layer, config) except LayerException: logger.info("Nothing to be removed. Layer disabled?") add_mapcache_layer_xml(browse_layer, config) logger.info("Finished updating browse layer '%s'." % browse_layer.id)
def add_browse_layer(browse_layer, config=None): """ Add a browse layer to the ngEO Browse Server system. This includes the database models, cache configuration and filesystem paths. """ config = config or get_ngeo_config() try: logger.info("Adding new browse layer '%s'." % browse_layer.id) # create a new browse layer model browse_layer_model = models.BrowseLayer( **browse_layer.get_kwargs() ) browse_layer_model.full_clean() browse_layer_model.save() # relatedDatasets are ignored (see NGEO-1508) # for related_dataset_id in browse_layer.related_dataset_ids: # models.RelatedDataset.objects.get_or_create( # dataset_id=related_dataset_id, browse_layer=browse_layer_model # ) except Exception: raise # create EOxServer dataset series dss_mgr = System.getRegistry().findAndBind( intf_id="resources.coverages.interfaces.Manager", params={ "resources.coverages.interfaces.res_type": "eo.dataset_series" } ) dss_mgr.create(browse_layer.id, eo_metadata=EOMetadata( browse_layer.id, datetime.now(), datetime.now(), MultiPolygon(Polygon.from_bbox((0, 0, 1, 1))) ) ) # create EOxServer layer metadata if browse_layer.title or browse_layer.description: dss = System.getRegistry().getFromFactory( "resources.coverages.wrappers.DatasetSeriesFactory", {"obj_id": browse_layer.id} ) if browse_layer.title: md_title = LayerMetadataRecord.objects.get_or_create( key="ows_title", value=str(browse_layer.title))[0] dss._DatasetSeriesWrapper__model.layer_metadata.add(md_title) if browse_layer.description: md_abstract = LayerMetadataRecord.objects.get_or_create( key="ows_abstract", value=str(browse_layer.description))[0] dss._DatasetSeriesWrapper__model.layer_metadata.add(md_abstract) # add source to mapcache sqlite mapcache_models.Source.objects.create(name=browse_layer.id) # add an XML section to the mapcache config xml add_mapcache_layer_xml(browse_layer, config) # create a base directory for optimized files directory = get_project_relative_path(join( config.get(INGEST_SECTION, "optimized_files_dir"), browse_layer.id )) if not os.path.exists(directory): os.makedirs(directory)
def update_browse_layer(browse_layer, config=None): config = config or get_ngeo_config() try: logger.info("Fetching browse layer '%s' for update." % browse_layer.id) browse_layer_model = models.BrowseLayer.objects.get(id=browse_layer.id) except models.BrowseLayer.DoesNotExist: raise Exception( "Could not update browse layer '%s' as it does not exist." % browse_layer.id) immutable_values = ("id", "browse_type", "contains_vertical_curtains", "r_band", "g_band", "b_band", "radiometric_interval_min", "radiometric_interval_max", "grid", "lowest_map_level", "highest_map_level", "harvesting_source") for key in immutable_values: if getattr(browse_layer_model, key) != getattr(browse_layer, key): raise Exception("Cannot change immutable property '%s'." % key) mutable_values = [ "title", "description", "browse_access_policy", "timedimension_default", "tile_query_limit", "strategy" ] refresh_mapcache_xml = False refresh_metadata = False for key in mutable_values: setattr(browse_layer_model, key, getattr(browse_layer, key)) if key in ("timedimension_default", "tile_query_limit"): refresh_mapcache_xml = True if key in ("title", "description"): refresh_metadata = True # relatedDatasets are ignored (see NGEO-1508) # for related_dataset_id in browse_layer.related_dataset_ids: # models.RelatedDataset.objects.get_or_create( # dataset_id=related_dataset_id, browse_layer=browse_layer_model # ) # # remove all related datasets that are not referenced any more # models.RelatedDataset.objects.filter( # browse_layer=browse_layer_model # ).exclude( # dataset_id__in=browse_layer.related_dataset_ids # ).delete() browse_layer_model.full_clean() browse_layer_model.save() # update EOxServer layer metadata if refresh_metadata: dss = System.getRegistry().getFromFactory( "resources.coverages.wrappers.DatasetSeriesFactory", {"obj_id": browse_layer.id}) dss._DatasetSeriesWrapper__model.layer_metadata.all().delete() if browse_layer.title: md_title = LayerMetadataRecord.objects.get_or_create( key="ows_title", value=str(browse_layer.title))[0] dss._DatasetSeriesWrapper__model.layer_metadata.add(md_title) if browse_layer.description: md_abstract = LayerMetadataRecord.objects.get_or_create( key="ows_abstract", value=str(browse_layer.description))[0] dss._DatasetSeriesWrapper__model.layer_metadata.add(md_abstract) if refresh_mapcache_xml: try: remove_mapcache_layer_xml(browse_layer, config) except LayerException: logger.info("Nothing to be removed. Layer disabled?") add_mapcache_layer_xml(browse_layer, config) # re-configure SxCat harvesting for collection harvesting_via_sxcat = False try: harvesting_via_sxcat = config.getboolean("control", "harvesting_via_sxcat") except: pass if (harvesting_via_sxcat and browse_layer.harvesting_source and browse_layer.harvesting_source == browse_layer_model.harvesting_source): add_collection(browse_layer) logger.info("Finished updating browse layer '%s'." % browse_layer.id)
def add_browse_layer(browse_layer, config=None): """ Add a browse layer to the ngEO Browse Server system. This includes the database models, cache configuration and filesystem paths. """ config = config or get_ngeo_config() try: logger.info("Adding new browse layer '%s'." % browse_layer.id) # create a new browse layer model browse_layer_model = models.BrowseLayer(**browse_layer.get_kwargs()) browse_layer_model.full_clean() browse_layer_model.save() # relatedDatasets are ignored (see NGEO-1508) # for related_dataset_id in browse_layer.related_dataset_ids: # models.RelatedDataset.objects.get_or_create( # dataset_id=related_dataset_id, browse_layer=browse_layer_model # ) except Exception: raise # create EOxServer dataset series dss_mgr = System.getRegistry().findAndBind( intf_id="resources.coverages.interfaces.Manager", params={ "resources.coverages.interfaces.res_type": "eo.dataset_series" }) dss_mgr.create(browse_layer.id, eo_metadata=EOMetadata( browse_layer.id, datetime.now(), datetime.now(), MultiPolygon(Polygon.from_bbox((0, 0, 1, 1))))) # create EOxServer layer metadata if browse_layer.title or browse_layer.description: dss = System.getRegistry().getFromFactory( "resources.coverages.wrappers.DatasetSeriesFactory", {"obj_id": browse_layer.id}) if browse_layer.title: md_title = LayerMetadataRecord.objects.get_or_create( key="ows_title", value=str(browse_layer.title))[0] dss._DatasetSeriesWrapper__model.layer_metadata.add(md_title) if browse_layer.description: md_abstract = LayerMetadataRecord.objects.get_or_create( key="ows_abstract", value=str(browse_layer.description))[0] dss._DatasetSeriesWrapper__model.layer_metadata.add(md_abstract) # add source to mapcache sqlite mapcache_models.Source.objects.create(name=browse_layer.id) # add an XML section to the mapcache config xml add_mapcache_layer_xml(browse_layer, config) # create a base directory for optimized files directory = get_project_relative_path( join(config.get(INGEST_SECTION, "optimized_files_dir"), browse_layer.id)) if not os.path.exists(directory): os.makedirs(directory) # create SxCat collection if harvesting via SxCat is enabled and source # is given harvesting_via_sxcat = False try: harvesting_via_sxcat = config.getboolean("control", "harvesting_via_sxcat") except: pass if harvesting_via_sxcat and browse_layer.harvesting_source: add_collection(browse_layer)