def test_metadata(self): """Metadata is retrieved correctly for both raster and vector data """ # Upload test data filenames = [os.path.join('hazard', 'jakarta_flood_design.tif'), os.path.join('exposure', 'buildings_osm_4326.shp')] layers = [] paths = [] for filename in filenames: path = os.path.join(UNITDATA, filename) layer = save_to_geonode(path, user=self.user, overwrite=True) # Record layer and file layers.append(layer) paths.append(path) # Check integrity for i, layer in enumerate(layers): if filenames[i].endswith('.shp'): layertype = 'vector' elif filenames[i].endswith('.tif'): layertype = 'raster' else: msg = ('Unknown layer extension in %s. ' 'Expected .shp or .tif' % filenames[i]) raise Exception(msg) layer_name = '%s:%s' % (layer.workspace, layer.name) metadata = get_metadata(INTERNAL_SERVER_URL, layer_name) assert 'id' in metadata assert 'title' in metadata assert 'layertype' in metadata assert 'keywords' in metadata assert 'bounding_box' in metadata assert len(metadata['bounding_box']) == 4 # Check integrity between Django layer and file assert_bounding_box_matches(layer, paths[i]) # Check integrity between file and OWS metadata ref_bbox = get_bounding_box(paths[i]) msg = ('Bounding box from OWS did not match bounding box ' 'from file. They are\n' 'From file %s: %s\n' 'From OWS: %s' % (paths[i], ref_bbox, metadata['bounding_box'])) assert numpy.allclose(metadata['bounding_box'], ref_bbox), msg assert layer.title == metadata['title'] assert layer_name == metadata['id'] assert layertype == metadata['layertype'] # Check keywords if layertype == 'raster': category = 'hazard' subcategory = 'flood' elif layertype == 'vector': category = 'exposure' subcategory = 'structure' else: msg = 'Unknown layer type %s' % layertype raise Exception(msg) keywords = metadata['keywords'] msg = 'Did not find key "category" in keywords: %s' % keywords assert 'category' in keywords, msg msg = 'Did not find key "subcategory" in keywords: %s' % keywords assert 'subcategory' in keywords, msg msg = ('Category keyword %s did not match expected %s' % (keywords['category'], category)) assert category == keywords['category'], msg msg = ('Subcategory keyword %s did not match expected %s' % (keywords['subcategory'], category)) assert subcategory == keywords['subcategory'], msg
def test_metadata(self): """Metadata is retrieved correctly for both raster and vector data """ # Upload test data filenames = [ os.path.join('hazard', 'jakarta_flood_design.tif'), os.path.join('exposure', 'buildings_osm_4326.shp') ] layers = [] paths = [] for filename in filenames: path = os.path.join(UNITDATA, filename) layer = save_to_geonode(path, user=self.user, overwrite=True) # Record layer and file layers.append(layer) paths.append(path) # Check integrity for i, layer in enumerate(layers): if filenames[i].endswith('.shp'): layertype = 'vector' elif filenames[i].endswith('.tif'): layertype = 'raster' else: msg = ('Unknown layer extension in %s. ' 'Expected .shp or .tif' % filenames[i]) raise Exception(msg) layer_name = '%s:%s' % (layer.workspace, layer.name) metadata = get_metadata(INTERNAL_SERVER_URL, layer_name) assert 'id' in metadata assert 'title' in metadata assert 'layertype' in metadata assert 'keywords' in metadata assert 'bounding_box' in metadata assert len(metadata['bounding_box']) == 4 # Check integrity between Django layer and file assert_bounding_box_matches(layer, paths[i]) # Check integrity between file and OWS metadata ref_bbox = get_bounding_box(paths[i]) msg = ('Bounding box from OWS did not match bounding box ' 'from file. They are\n' 'From file %s: %s\n' 'From OWS: %s' % (paths[i], ref_bbox, metadata['bounding_box'])) assert numpy.allclose(metadata['bounding_box'], ref_bbox), msg assert layer.title == metadata['title'] assert layer_name == metadata['id'] assert layertype == metadata['layertype'] # Check keywords if layertype == 'raster': category = 'hazard' subcategory = 'flood' elif layertype == 'vector': category = 'exposure' subcategory = 'structure' else: msg = 'Unknown layer type %s' % layertype raise Exception(msg) keywords = metadata['keywords'] msg = 'Did not find key "category" in keywords: %s' % keywords assert 'category' in keywords, msg msg = 'Did not find key "subcategory" in keywords: %s' % keywords assert 'subcategory' in keywords, msg msg = ('Category keyword %s did not match expected %s' % (keywords['category'], category)) assert category == keywords['category'], msg msg = ('Subcategory keyword %s did not match expected %s' % (keywords['subcategory'], category)) assert subcategory == keywords['subcategory'], msg
def test_metadata_twice(self): """Layer metadata can be correctly uploaded multiple times """ # This test reproduces ticket #99 by creating new data, # uploading twice and verifying metadata # Base test data filenames = ['jakarta_flood_design.tif', ] for org_filename in filenames: org_basename, ext = os.path.splitext(os.path.join(UNITDATA, 'hazard', org_filename)) # Copy data to temporary unique name basename = unique_filename(dir='/tmp') cmd = '/bin/cp -f %s.keywords %s.keywords' % (org_basename, basename) os.system(cmd) # Not needed since we are dealing with a raster #cmd = '/bin/cp -f %s.prj %s.prj' % (org_basename, basename) #os.system(cmd) if ext == '.tif': layertype = 'raster' filename = '%s.tif' % basename cmd = '/bin/cp %s.tif %s' % (org_basename, filename) os.system(cmd) elif ext == '.shp': layertype = 'vector' filename = '%s.shp' % basename for e in ['shp', 'shx', 'sbx', 'sbn', 'dbf']: cmd = '/bin/cp %s.%s %s.%s' % (org_basename, e, basename, e) os.system(cmd) else: msg = ('Unknown layer extension in %s. ' 'Expected .shp or .asc' % filename) raise Exception(msg) # Repeat multiple times for i in range(3): # Upload layer = save_to_geonode(filename, user=self.user, overwrite=True) # Get metadata layer_name = '%s:%s' % (layer.workspace, layer.name) metadata = get_metadata(INTERNAL_SERVER_URL, layer_name) # Verify assert 'id' in metadata assert 'title' in metadata assert 'layertype' in metadata assert 'keywords' in metadata assert 'bounding_box' in metadata assert len(metadata['bounding_box']) == 4 # Check integrity between Django layer and file assert_bounding_box_matches(layer, filename) # Check integrity between file and OWS metadata ref_bbox = get_bounding_box(filename) msg = ('Bounding box from OWS did not match bounding box ' 'from file. They are\n' 'From file %s: %s\n' 'From OWS: %s' % (filename, ref_bbox, metadata['bounding_box'])) assert numpy.allclose(metadata['bounding_box'], ref_bbox), msg assert layer.title == metadata['title'] assert layer_name == metadata['id'] assert layertype == metadata['layertype'] # Check keywords if layertype == 'raster': category = 'hazard' subcategory = 'flood' else: msg = 'Unknown layer type %s' % layertype raise Exception(msg) keywords = metadata['keywords'] msg = 'Did not find key "category" in keywords: %s' % keywords assert 'category' in keywords, msg msg = ('Did not find key "subcategory" in keywords: %s' % keywords) assert 'subcategory' in keywords, msg msg = ('Category keyword %s did not match expected %s' % (keywords['category'], category)) assert category == keywords['category'], msg msg = ('Subcategory keyword %s did not match expected %s' % (keywords['subcategory'], category)) assert subcategory == keywords['subcategory'], msg
def test_metadata_twice(self): """Layer metadata can be correctly uploaded multiple times """ # This test reproduces ticket #99 by creating new data, # uploading twice and verifying metadata # Base test data filenames = [ 'jakarta_flood_design.tif', ] for org_filename in filenames: org_basename, ext = os.path.splitext( os.path.join(UNITDATA, 'hazard', org_filename)) # Copy data to temporary unique name basename = unique_filename(dir='/tmp') cmd = '/bin/cp -f %s.keywords %s.keywords' % (org_basename, basename) os.system(cmd) # Not needed since we are dealing with a raster #cmd = '/bin/cp -f %s.prj %s.prj' % (org_basename, basename) #os.system(cmd) if ext == '.tif': layertype = 'raster' filename = '%s.tif' % basename cmd = '/bin/cp %s.tif %s' % (org_basename, filename) os.system(cmd) elif ext == '.shp': layertype = 'vector' filename = '%s.shp' % basename for e in ['shp', 'shx', 'sbx', 'sbn', 'dbf']: cmd = '/bin/cp %s.%s %s.%s' % (org_basename, e, basename, e) os.system(cmd) else: msg = ('Unknown layer extension in %s. ' 'Expected .shp or .asc' % filename) raise Exception(msg) # Repeat multiple times for i in range(3): # Upload layer = save_to_geonode(filename, user=self.user, overwrite=True) # Get metadata layer_name = '%s:%s' % (layer.workspace, layer.name) metadata = get_metadata(INTERNAL_SERVER_URL, layer_name) # Verify assert 'id' in metadata assert 'title' in metadata assert 'layertype' in metadata assert 'keywords' in metadata assert 'bounding_box' in metadata assert len(metadata['bounding_box']) == 4 # Check integrity between Django layer and file assert_bounding_box_matches(layer, filename) # Check integrity between file and OWS metadata ref_bbox = get_bounding_box(filename) msg = ('Bounding box from OWS did not match bounding box ' 'from file. They are\n' 'From file %s: %s\n' 'From OWS: %s' % (filename, ref_bbox, metadata['bounding_box'])) assert numpy.allclose(metadata['bounding_box'], ref_bbox), msg assert layer.title == metadata['title'] assert layer_name == metadata['id'] assert layertype == metadata['layertype'] # Check keywords if layertype == 'raster': category = 'hazard' subcategory = 'flood' else: msg = 'Unknown layer type %s' % layertype raise Exception(msg) keywords = metadata['keywords'] msg = 'Did not find key "category" in keywords: %s' % keywords assert 'category' in keywords, msg msg = ('Did not find key "subcategory" in keywords: %s' % keywords) assert 'subcategory' in keywords, msg msg = ('Category keyword %s did not match expected %s' % (keywords['category'], category)) assert category == keywords['category'], msg msg = ('Subcategory keyword %s did not match expected %s' % (keywords['subcategory'], category)) assert subcategory == keywords['subcategory'], msg