def rename_and_prepare(base_file): """ensure the file(s) have a proper name @hack this should be done in a nicer way, but needs fixing now To fix longer term: if geonode computes a name, the uploader should respect it As it is/was, geonode will compute a name based on the zipfile but the importer will use names as it unpacks the zipfile. Renaming all the various pieces seems a burden on the client Additionally, if a SLD file is present, extract this. """ name, ext = os.path.splitext(os.path.basename(base_file)) dirname = os.path.dirname(base_file) if ext == ".zip": zf = ZipFile(base_file, 'r') rename = False main_file = None for f in zf.namelist(): name, ext = os.path.splitext(os.path.basename(f)) if _clean_string(name) != name: rename = True # @todo other files - need to unify extension handling somewhere if ext.lower() == '.shp': main_file = f elif ext.lower() == '.tif': main_file = f elif ext.lower() == '.csv': main_file = f # if an sld is there, extract so it can be found if ext.lower() == '.sld': zf.extract(f, dirname) if not main_file: raise Exception('Could not locate a shapefile or tif file') if rename: # dang, have to unpack and rename zf.extractall(dirname) zf.close() if rename: os.unlink(base_file) base_file = os.path.join(dirname, main_file) for f in os.listdir(dirname): safe = _clean_string(f) if safe != f: os.rename(os.path.join(dirname, f), os.path.join(dirname, safe)) return os.path.join( dirname, _clean_string(os.path.basename(base_file)) )
def rename_and_prepare(base_file): """ensure the file(s) have a proper name @hack this should be done in a nicer way, but needs fixing now To fix longer term: if geonode computes a name, the uploader should respect it As it is/was, geonode will compute a name based on the zipfile but the importer will use names as it unpacks the zipfile. Renaming all the various pieces seems a burden on the client Additionally, if a SLD file is present, extract this. """ name, ext = os.path.splitext(os.path.basename(base_file)) dirname = os.path.dirname(base_file) if ext == ".zip": zf = ZipFile(base_file, 'r') rename = False main_file = None for f in zf.namelist(): name, ext = os.path.splitext(os.path.basename(f)) if _clean_string(name) != name: rename = True # @todo other files - need to unify extension handling somewhere if ext.lower() == '.shp': main_file = f elif ext.lower() == '.tif': main_file = f elif ext.lower() == '.csv': main_file = f # if an sld is there, extract so it can be found if ext.lower() == '.sld': zf.extract(f, dirname) if not main_file: raise Exception( 'Could not locate a shapefile or tif file') if rename: # dang, have to unpack and rename zf.extractall(dirname) zf.close() if rename: os.unlink(base_file) base_file = os.path.join(dirname, main_file) for f in os.listdir(dirname): safe = _clean_string(f) if safe != f: os.rename(os.path.join(dirname, f), os.path.join(dirname, safe)) return os.path.join( dirname, _clean_string(os.path.basename(base_file)) )
def get_valid_name(layer_name): """ Create a brand new name """ name = _clean_string(layer_name) proposed_name = name count = 1 while Layer.objects.filter(name=proposed_name).count() > 0: proposed_name = "%s_%d" % (name, count) count = count + 1 logger.info('Requested name already used; adjusting name ' '[%s] => [%s]', layer_name, proposed_name) else: logger.info("Using name as requested") return proposed_name
def get_valid_name(layer_name): """ Create a brand new name """ name = _clean_string(layer_name) proposed_name = name count = 1 while Layer.objects.filter(name=proposed_name).count() > 0: proposed_name = "%s_%d" % (name, count) count = count + 1 logger.info( 'Requested name already used; adjusting name ' '[%s] => [%s]', layer_name, proposed_name) else: logger.info("Using name as requested") return proposed_name