def to_csv(self, target_path, target_proj4=None, **kw): try: t = concatenate_tables( _get_instance_for_csv( x, source_proj4 or LONGITUDE_LATITUDE_PROJ4, target_proj4, ) for source_proj4, x in self.groupby('geometry_proj4')) except ValueError: t = self excluded_column_names = [] unique_geometry_layers = t['geometry_layer'].unique() unique_geometry_proj4s = t['geometry_proj4'].unique() if len(unique_geometry_layers) == 1: excluded_column_names.append('geometry_layer') if len(unique_geometry_proj4s) == 1: excluded_column_names.append('geometry_proj4') geometry_proj4 = unique_geometry_proj4s[0] if geometry_proj4 != LONGITUDE_LATITUDE_PROJ4: open(replace_file_extension(target_path, '.proj4'), 'wt').write(geometry_proj4) if len(t) == 0: excluded_column_names.extend( ['geometry_layer', 'geometry_proj4', 'geometry_object']) t['wkt'] = '' t = t.drop(columns=excluded_column_names) with TemporaryStorage() as storage: temporary_path = join(storage.folder, 'geotable.csv') super(GeoTable, t).to_csv(temporary_path, **kw) if has_archive_extension(target_path): compress(storage.folder, target_path) else: move_path(target_path, temporary_path)
def prepare_argument_path( self, argument_noun, raw_arguments, draft_folder, default_path): data_type = get_data_type(argument_noun) # If client sent direct content (x_table_csv), save it for file_format in data_type.formats: raw_argument_name = '%s_%s' % (argument_noun, file_format) if raw_argument_name not in raw_arguments: continue source_text = raw_arguments[raw_argument_name] target_name = '%s.%s' % (argument_noun, file_format) return copy_text(join(draft_folder, target_name), source_text) # Raise KeyError if client did not specify noun (x_table) v = raw_arguments[argument_noun] # If client sent multipart content, save it if hasattr(v, 'file'): target_name = argument_noun + get_file_extension(v.filename) return copy_file(join(draft_folder, target_name), v.file) # If client sent empty content, use default if v == '': if not default_path: raise KeyError target_name = argument_noun + get_file_extension(default_path) return link_path(join(draft_folder, target_name), default_path) # If client sent a relative path (x_table=11/x/y.csv), find it if '/' in v: source_path = self.get_file_path(*parse_result_relative_path(v)) target_name = argument_noun + get_file_extension(source_path) return link_path(join(draft_folder, target_name), source_path) # If client sent an upload id (x_table=x), find it upload = get_upload(self, upload_id=v) source_path = join(upload.folder, data_type.get_file_name()) target_name = argument_noun + get_file_extension(source_path) target_path = move_path(join(draft_folder, target_name), source_path) remove_safely(upload.folder) return target_path
def prepare_argument_path(self, argument_noun, raw_arguments, draft_folder, default_path): data_type = get_data_type(argument_noun) # If client sent direct content (x_table_csv), save it for file_format in data_type.formats: raw_argument_name = '%s_%s' % (argument_noun, file_format) if raw_argument_name not in raw_arguments: continue source_text = raw_arguments[raw_argument_name] target_name = '%s.%s' % (argument_noun, file_format) return copy_text(join(draft_folder, target_name), source_text) # Raise KeyError if client did not specify noun (x_table) v = raw_arguments[argument_noun] # If client sent multipart content, save it if hasattr(v, 'file'): target_name = argument_noun + get_file_extension(v.filename) return copy_file(join(draft_folder, target_name), v.file) # If client sent empty content, use default if v == '': if not default_path: raise KeyError target_name = argument_noun + get_file_extension(default_path) return link_path(join(draft_folder, target_name), default_path) # If client sent a relative path (x_table=11/x/y.csv), find it if '/' in v: source_path = self.get_file_path(*parse_result_relative_path(v)) target_name = argument_noun + get_file_extension(source_path) return link_path(join(draft_folder, target_name), source_path) # If client sent an upload id (x_table=x), find it upload = get_upload(self, upload_id=v) source_path = realpath(join(upload.folder, data_type.get_file_name())) target_name = argument_noun + get_file_extension(source_path) target_path = move_path(join(draft_folder, target_name), source_path) remove_safely(upload.folder) return target_path
def migrate_arguments(self, result_arguments, source_folder): d = OrderedDict() make_folder(source_folder) for k, v in result_arguments.items(): if k.endswith('_path'): v = move_path(join(source_folder, basename(v)), v) d[k] = v return d