def create_couch_app(): form = CreateCouchAppForm(request.form) if form.validate_on_submit(): form_data = dict(request.form) form_data.pop('csrf_token') target_couch_url = form_data.pop('couch_url')[0].rstrip('/') if offline.create_offline_editor(current_app, target_couch_url, 'geobox_couchapp', 'GeoBoxCouchApp'): replication_layers = [layer[0] for layer in form_data.values()] target_couchdb = CouchDBBase(target_couch_url, '_replicator') source_couch_url = get_external_couch_url(request) for layer in replication_layers: target_couchdb.replication(layer, '%s/%s' % (source_couch_url, layer), layer, create_target=True) flash(_('creating couch app')) if replication_layers: return redirect( url_for('.create_couch_app_status', couch_url=target_couch_url, layers=','.join(replication_layers))) else: return redirect( url_for('.create_couch_app_status', couch_url=target_couch_url)) else: flash( _('Error creating couchapp. Check url and given target couchdb.' ), 'error') raster_layers = [] vector_layers = [] for layer in all_layers( 'http://127.0.0.1:%s' % (current_app.config.geobox_state.config.get('couchdb', 'port'), )): if layer['type'] == 'GeoJSON': vector_layers.append(layer) elif layer['type'] == 'tiles': raster_layers.append(layer) return render_template('create_couch_app.html', form=form, raster_layers=raster_layers, vector_layers=vector_layers)
def create_couch_app(): form = CreateCouchAppForm(request.form) if form.validate_on_submit(): form_data = dict(request.form) form_data.pop('csrf_token') target_couch_url = form_data.pop('couch_url')[0].rstrip('/') if offline.create_offline_editor(current_app, target_couch_url, 'geobox_couchapp', 'GeoBoxCouchApp'): replication_layers = [layer[0] for layer in form_data.values()] target_couchdb = CouchDBBase(target_couch_url, '_replicator') source_couch_url = get_external_couch_url(request) for layer in replication_layers: target_couchdb.replication(layer, '%s/%s' % (source_couch_url, layer), layer, create_target=True) flash(_('creating couch app') ) if replication_layers: return redirect(url_for('.create_couch_app_status', couch_url=target_couch_url, layers=','.join(replication_layers) )) else: return redirect(url_for('.create_couch_app_status', couch_url=target_couch_url)) else: flash(_('Error creating couchapp. Check url and given target couchdb.'), 'error') raster_layers = [] vector_layers = [] for layer in all_layers('http://127.0.0.1:%s' % (current_app.config.geobox_state.config.get('couchdb', 'port'), )): if layer['type'] == 'GeoJSON': vector_layers.append(layer) elif layer['type'] == 'tiles': raster_layers.append(layer) return render_template('create_couch_app.html', form=form, raster_layers=raster_layers, vector_layers=vector_layers)
def export_edit(id=None): if id is None: proj = model.ExportProject() else: proj = g.db.query(model.ExportProject).get(id) if not proj: abort(404) raster_sources = g.db.query(model.LocalWMTSSource).order_by( model.LocalWMTSSource.id).all() coverage_form = forms.SelectCoverage() form = forms.ExportProjectEdit(request.form) form.end_level.choices = form.start_level.choices = get_levels( model.LocalWMTSSource) form.srs.choices = list( current_app.config.geobox_state.config.get('web', 'available_srs')) if form.validate_on_submit(): proj.title = form.data['title'] proj.export_raster_layers = [] proj.export_vector_layers = [] if form.coverage.data != 'false': proj.coverage = prepare_feature_collection_coverage( form.coverage.data) else: proj.coverage = '' proj.export_srs = form.srs.data proj.export_format = form.format.data proj.download_size = float(form.data.get('download_size', 0.0)) g.db.commit() redirect_url = url_for('.export_list', id=id) for raster_layer in json.loads(form.data['raster_layers']): raster_source = g.db.query(model.LocalWMTSSource).get( raster_layer['source_id']) start_level = int(raster_layer['start_level']) end_level = int( raster_layer.get('end_level') or raster_layer['start_level']) if not proj.coverage: raster_coverage = raster_source.wmts_source.download_coverage proj.coverage = raster_coverage else: raster_coverage = proj.coverage g.db.add( model.ExportRasterLayer(source=raster_source, start_level=start_level, end_level=end_level, project=proj)) g.db.commit() if form.start.data == 'start': create_export_tasks(proj) redirect_url = url_for('tasks.list') return redirect(redirect_url) elif request.method == 'POST': flash(_('form error'), 'error') form.title.data = proj.title form.format.data = proj.export_format form.srs.data = proj.export_srs coverage = proj.coverage if proj.coverage else 'null' if form.coverage.data: coverage = form.coverage.data base_layers = g.db.query( model.ExternalWMTSSource).filter_by(background_layer=True).all() for base_layer in base_layers: base_layer.bbox = base_layer.bbox_from_view_coverage() free_disk_space = diskspace_available_in_mb( current_app.config.geobox_state.user_data_path()) cache_url = get_external_couch_url(request) couch_url = 'http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get( 'couchdb', 'port')) couch_layers = list(vector_layers_metadata(couch_url)) couchlayers_form = forms.SelectCouchLayers() couch_titles = [] for key, couch in enumerate(couch_layers): couch_titles.append((key, couch['title'])) couchlayers_form.select_couch.choices = couch_titles return render_template('projects/export_edit.html', proj=proj, form=form, raster_sources=raster_sources, couch_layers=couch_layers, layers=proj.export_raster_layers, base_layers=base_layers, coverage=coverage, free_disk_space=free_disk_space, coverage_form=coverage_form, couchlayers_form=couchlayers_form, cache_url=cache_url)
def export_edit(id=None): if id is None: proj = model.ExportProject() else: proj = g.db.query(model.ExportProject).get(id) if not proj: abort(404) raster_sources = g.db.query(model.LocalWMTSSource).order_by(model.LocalWMTSSource.id).all() coverage_form = forms.SelectCoverage() form = forms.ExportProjectEdit(request.form) form.end_level.choices = form.start_level.choices = get_levels(model.LocalWMTSSource) form.srs.choices = list(current_app.config.geobox_state.config.get('web', 'available_srs')) if form.validate_on_submit(): proj.title = form.data['title'] proj.export_raster_layers = [] proj.export_vector_layers = [] if form.coverage.data != 'false': proj.coverage = prepare_feature_collection_coverage(form.coverage.data) else: proj.coverage = '' proj.export_srs = form.srs.data proj.export_format = form.format.data proj.download_size = float(form.data.get('download_size', 0.0)) g.db.commit() redirect_url = url_for('.export_list', id=id) for raster_layer in json.loads(form.data['raster_layers']): raster_source = g.db.query(model.LocalWMTSSource).get(raster_layer['source_id']) start_level = int(raster_layer['start_level']) end_level = int(raster_layer.get('end_level') or raster_layer['start_level']) if not proj.coverage: raster_coverage = raster_source.wmts_source.download_coverage proj.coverage = raster_coverage else: raster_coverage = proj.coverage g.db.add(model.ExportRasterLayer( source=raster_source, start_level=start_level, end_level=end_level, project=proj )) g.db.commit() if form.start.data == 'start': create_export_tasks(proj) redirect_url = url_for('tasks.list') return redirect(redirect_url) elif request.method == 'POST': flash(_('form error'), 'error') form.title.data = proj.title form.format.data = proj.export_format form.srs.data = proj.export_srs coverage = proj.coverage if proj.coverage else 'null' if form.coverage.data: coverage = form.coverage.data base_layers = g.db.query(model.ExternalWMTSSource).filter_by(background_layer=True).all() for base_layer in base_layers: base_layer.bbox = base_layer.bbox_from_view_coverage() free_disk_space = diskspace_available_in_mb(current_app.config.geobox_state.user_data_path()) cache_url = get_external_couch_url(request) couch_url = 'http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get('couchdb', 'port')) couch_layers = list(vector_layers_metadata(couch_url)) couchlayers_form = forms.SelectCouchLayers() couch_titles = [] for key, couch in enumerate(couch_layers): couch_titles.append((key, couch['title'])) couchlayers_form.select_couch.choices = couch_titles return render_template('projects/export_edit.html', proj=proj, form=form, raster_sources=raster_sources,couch_layers=couch_layers, layers=proj.export_raster_layers, base_layers=base_layers, coverage=coverage, free_disk_space=free_disk_space,coverage_form=coverage_form, couchlayers_form=couchlayers_form, cache_url=cache_url)