def import_vector(): from ...lib.vectormapping import default_mappings as mappings uploaded_shapes=[] upload_failures=[] not_allowed_files=[] for upload_file in request.files.getlist('file_upload'): import_dir = current_app.config.geobox_state.user_data_path('import') target = os.path.join(import_dir, upload_file.filename) if os.path.splitext(target)[1].lower() in ('.shp', '.shx', '.dbf'): try: if not os.path.isdir(import_dir): os.mkdir(import_dir) f = open(target, 'wb') f.write(upload_file.stream.read()) f.close() except IOError: upload_failures.append(upload_file.filename) uploaded_shapes.append(upload_file.filename) else: not_allowed_files.append(upload_file.filename) form = forms.ImportVectorEdit(request.form) shape_files, missing_files = get_shapefile_list() form.file_name.choices = [(name, name) for name in shape_files] form.mapping_name.choices = [ (name, '%s (%s, %s)' % (mapping.name, mapping.geom_type, mapping.other_srs.srs_code)) for name, mapping in mappings.items() ] if not len(request.files): if form.validate_on_submit(): try: is_valid_shapefile(current_app.config.geobox_state.user_data_path('import', form.file_name.data), mappings[form.mapping_name.data]) except ConvertError: flash(_('invalid mapping'), 'error') return render_template('vector/import.html', form=form) except OSError: flash(_('invalid shapefile'), 'error') return render_template('vector/import.html', form=form) task = VectorImportTask( mapping_name=form.mapping_name.data, db_name=mappings[form.mapping_name.data].couchdb, file_name=form.file_name.data ) send_task_logging(current_app.config.geobox_state, task) g.db.add(task) g.db.commit() return redirect(url_for('tasks.list')) elif request.method == 'POST': flash(_('form error'), 'error') for missing_file in missing_files: flash(_('file %(name)s missing', name=missing_file), 'error') for upload_failure in upload_failures: flash(_('failed to upload %(name)s', name=upload_failure), 'error') for not_allowed_file in not_allowed_files: flash(_('filetype of %(name)s not allowed', name=not_allowed_file), 'error') for uploaded_shape in uploaded_shapes: flash(_('file %(name)s uploaded', name=uploaded_shape), 'info') file_browser = request_is_local() return render_template('vector/import.html', form=form, file_browser=file_browser)
def import_vector(): from ...lib.vectormapping import default_mappings as mappings uploaded_shapes = [] upload_failures = [] not_allowed_files = [] for upload_file in request.files.getlist('file_upload'): import_dir = current_app.config.geobox_state.user_data_path('import') target = os.path.join(import_dir, upload_file.filename) if os.path.splitext(target)[1].lower() in ('.shp', '.shx', '.dbf'): try: if not os.path.isdir(import_dir): os.mkdir(import_dir) f = open(target, 'w') f.write(upload_file.stream.read()) f.close() except IOError: upload_failures.append(upload_file.filename) uploaded_shapes.append(upload_file.filename) else: not_allowed_files.append(upload_file.filename) form = forms.ImportVectorEdit(request.form) shape_files, missing_files = get_shapefile_list() form.file_name.choices = [(name, name) for name in shape_files] form.mapping_name.choices = [ (name, '%s (%s, %s)' % (mapping.name, mapping.geom_type, mapping.other_srs.srs_code)) for name, mapping in mappings.items() ] if not len(request.files): if form.validate_on_submit(): try: is_valid_shapefile( current_app.config.geobox_state.user_data_path( 'import', form.file_name.data), mappings[form.mapping_name.data]) except ConvertError: flash(_('invalid mapping'), 'error') return render_template('vector/import.html', form=form) except OSError: flash(_('invalid shapefile'), 'error') return render_template('vector/import.html', form=form) g.db.add( VectorImportTask( mapping_name=form.mapping_name.data, db_name=mappings[form.mapping_name.data].couchdb, file_name=form.file_name.data)) g.db.commit() return redirect(url_for('tasks.list')) elif request.method == 'POST': flash(_('form error'), 'error') for missing_file in missing_files: flash(_('file %(name)s missing', name=missing_file), 'error') for upload_failure in upload_failures: flash(_('failed to upload %(name)s', name=upload_failure), 'error') for not_allowed_file in not_allowed_files: flash(_('filetype of %(name)s not allowed', name=not_allowed_file), 'error') for uploaded_shape in uploaded_shapes: flash(_('file %(name)s uploaded', name=uploaded_shape), 'info') return render_template('vector/import.html', form=form)
def import_vector(): from ...lib.vectormapping import Mapping uploaded_shapes = [] upload_failures = [] not_allowed_files = [] for upload_file in request.files.getlist('file_upload'): import_dir = current_app.config.geobox_state.user_data_path('import') target = os.path.join(import_dir, upload_file.filename) upload_file_ext = os.path.splitext(target)[1].lower() if upload_file_ext in ('.shp', '.shx', '.dbf'): try: if not os.path.isdir(import_dir): os.mkdir(import_dir) f = open(target, 'wb') f.write(upload_file.stream.read()) f.close() except IOError: upload_failures.append(upload_file.filename) uploaded_shapes.append(upload_file.filename) elif upload_file_ext in ('.sbn', '.sbx', '.prj', '.index', '.cpg'): # ignore files without showing message continue else: not_allowed_files.append(upload_file.filename) form = forms.ImportVectorEdit(request.form) form.srs.choices = list(current_app.config.geobox_state.config.get('web', 'available_srs')) form.srs.choices.insert(0, ('', _('-- select srs --'), '')) couch_url = 'http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get('couchdb', 'port')) form.layers.choices = [(item['dbname'], item['title']) for item in vector_layers_metadata(couch_url)] form.layers.choices.insert(0, ('', _('-- select layer or add new --'))) shape_files, missing_files = get_shapefile_list() form.file_name.choices = [(name, name) for name in shape_files] form.file_name.choices.insert(0, ('', _('-- select a shapefile --'))) if not len(request.files): if form.validate_on_submit(): try: is_valid_shapefile(current_app.config.geobox_state.user_data_path('import', form.file_name.data), Mapping(None, None, '*')) except ConvertError as e: flash(e, 'error') return render_template('vector/import.html', form=form) except OSError: flash(_('invalid shapefile'), 'error') return render_template('vector/import.html', form=form) if (form.layers.data and form.name.data) or (not form.layers.data and not form.name.data): flash(_('please select new layer or current layer to import'), 'error') return redirect(url_for('.import_vector')) title = None if form.layers.data: layer = form.layers.data else: title = form.name.data layer = 'local_vector_' + re.sub(r'[^a-z0-9]*', '', title.lower()) if layer == 'local_vector_': flash(_('None of the characters used for the layer is allowed')) return redirect(url_for('.import_vector')) task = VectorImportTask( db_name=layer, title=title, file_name=form.file_name.data, srs=form.srs.data, type_='shp', ) g.db.add(task) g.db.commit() return redirect(url_for('tasks.list')) elif request.method == 'POST': flash(_('form error'), 'error') for missing_file in missing_files: flash(_('file %(name)s missing', name=missing_file), 'error') for upload_failure in upload_failures: flash(_('failed to upload %(name)s', name=upload_failure), 'error') for not_allowed_file in not_allowed_files: flash(_('filetype of %(name)s not allowed', name=not_allowed_file), 'error') for uploaded_shape in uploaded_shapes: flash(_('file %(name)s uploaded', name=uploaded_shape), 'info') file_browser = request_is_local() return render_template('vector/import.html', form=form, file_browser=file_browser)