def load_coverage(): project_id = request.form.get('id', False) couchdb_coverage = request.form.get('couchdb_coverage', False) if couchdb_coverage == 'true': couch = CouchDB('http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get('couchdb', 'port')), current_app.config.geobox_state.config.get('web', 'coverages_from_couchdb')) records = couch.load_records() coverage = [] for record in records: geometry = record.get('geometry') # load only poylgons or mulitpolygons for coverages if geometry and isinstance(geometry, dict) and geometry.get('type') in ('Polygon', 'MultiPolygon'): coverage.append(record) else: project = g.db.query(model.Project).with_polymorphic('*').filter_by(id = project_id).first() if not project: abort(404) coverage = project.coverage if not coverage: return jsonify(coverage=False) else: return jsonify(coverage=coverage)
def load_coverage(): project_id = request.form.get('id', False) couchdb_coverage = request.form.get('couchdb_coverage', False) if couchdb_coverage == 'true': couch = CouchDB( 'http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get('couchdb', 'port')), current_app.config.geobox_state.config.get( 'web', 'coverages_from_couchdb')) records = couch.load_records() coverage = [] for record in records: # load only poylgons or mulitpolygons for coverages if record['geometry']['type'] in ('Polygon', 'MultiPolygon'): coverage.append(record) else: project = g.db.query(model.Project).with_polymorphic('*').filter_by( id=project_id).first() coverage = project.coverage if not coverage: return jsonify(coverage=False) else: return jsonify(coverage=coverage)
def create_couch_app_status(couch_url, layers=None): couchapp_ready = True if layers: _layers = layers.split(',') layers = {} for layer in _layers: couchdb = CouchDB( 'http://127.0.0.1:%s' % (current_app.config.geobox_state.config.get('couchdb', 'port')), layer) metadata = couchdb.get('metadata') status = replication_status(couch_url, layer) if status != 'completed': couchapp_ready = False layers[metadata['title']] = status else: layers = {} if couchapp_ready: couchapp_url = '%s/geobox_couchapp/_design/GeoBoxCouchApp/_rewrite' % couch_url flash(_('couchapp ready %(couchapp_url)s', couchapp_url=couchapp_url), 'success') return render_template('create_couch_app_status.html', layers=layers, ready=couchapp_ready)
def load_coverage(): project_id = request.form.get('id', False) couchdb_coverage = request.form.get('couchdb_coverage', False) if couchdb_coverage == 'true': couch = CouchDB( 'http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get('couchdb', 'port')), current_app.config.geobox_state.config.get( 'web', 'authorization_layer_name')) records = couch.load_records() coverage = [] for record in records: geometry = record.get('geometry') # load only poylgons or mulitpolygons for coverages if geometry and isinstance( geometry, dict) and geometry.get('type') in ('Polygon', 'MultiPolygon'): coverage.append(record) else: project = g.db.query(model.Project).with_polymorphic('*').filter_by( id=project_id).first() if not project: abort(404) coverage = project.coverage if not coverage: return jsonify(coverage=False) else: return jsonify(coverage=coverage)
def map(): raster_sources = g.db.query(LocalWMTSSource).all() base_layer = g.db.query(ExternalWMTSSource).filter_by( background_layer=True).first() base_layer.bbox = base_layer.bbox_from_view_coverage() cache_url = get_local_cache_url(request) couch = CouchDB( 'http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get('couchdb', 'port')), current_app.config.geobox_state.config.get('web', 'coverages_from_couchdb')) records = couch.load_records() vector_geometries = [] for record in records: if record['geometry']: # check if record has geometry type vector_geometries.append(record) return render_template('map.html', cache_url=cache_url, base_layer=base_layer, sources=raster_sources, vector_geometries=vector_geometries)
def clear_couchdb(name): # delete from couch db couch = CouchDB('http://127.0.0.1:%s' % (current_app.config.geobox_state.config.get('couchdb', 'port'), ), name ) couch.clear_db() flash(_('cleared database')) return redirect(url_for('.admin'))
def clear_couchdb(name): # delete from couch db couch = CouchDB( 'http://127.0.0.1:%s' % (current_app.config.geobox_state.config.get('couchdb', 'port'), ), name) couch.clear_db() flash(_('cleared database')) return redirect(url_for('.admin'))
def process(self): log.debug('Start vector export process. Task %d' % self.task_id) try: with self.task() as task: mapping = mappings[task.mapping_name].copy() output_file = self.app_state.user_data_path('export', task.project.title, task.mapping_name + '.shp', make_dirs=True) couch = CouchDB('http://%s:%s' % ('127.0.0.1', self.app_state.config.get('couchdb', 'port')), task.db_name) write_json_to_shape(couch.load_records(), mapping, output_file) self.task_done() except ConvertError, e: self.task_failed(e)
def process(self): log.debug('Start replication process. Task %d' % self.task_id) try: with self.task() as task: couch = CouchDB('http://%s:%s' % ('127.0.0.1', self.app_state.config.get('couchdb', 'port')), task.db_name) if task.pull: couch.replicate_pull(task.remote_db_url, task.remote_db_name) if task.push: couch.replicate_push(task.remote_db_url, task.remote_db_name) self.task_done() except UnexpectedResponse, e: self.task_failed(e)
def process(self): log.debug('Start tile merge process. Task %d' % self.task_id) try: with self.task() as task: file_extension = '.tiff' if task.export_format == 'GTiff' else '.jpeg' wmts_source = task.layer.wmts_source export_filename = self.app_state.user_data_path( 'export', task.project.title, wmts_source.name + file_extension, make_dirs=True) couch = CouchDB( 'http://%s:%s' % ('127.0.0.1', self.app_state.config.get( 'couchdb', 'port')), task.layer.name) coverage = coverage_from_geojson(task.coverage).bbox if coverage: merge_tiles(couch, export_filename, task.zoom_level_start, coverage, wmts_source.matrix_set, overlay=wmts_source.is_overlay, format=task.export_format, srs=task.export_srs) self.task_done() except Exception, e: self.task_failed(e)
def update_couchdb_sources(gbi_server, app_state): couchdb_port = app_state.config.get_int('couchdb', 'port') couchdb = CouchDB('http://127.0.0.1:%d' % couchdb_port, '_replicator') couchdb_sources = gbi_server.context.couchdb_sources() for couchdb_source in couchdb_sources: replicate_database(couchdb, couchdb_source, app_state, gbi_server.prefix)
def process(self): log.debug('Start vector import process. Task %d' % self.task_id) try: with self.task() as task: mapping = mappings[task.mapping_name].copy() mapping.json_defaults = mapping.json_defaults.copy() mapping.json_defaults['import_timestamp'] = datetime.now().isoformat(); mapping.json_defaults['import_file'] = task.file_name; input_file = self.app_state.user_data_path('import', task.file_name) couch = CouchDB('http://%s:%s' % ('127.0.0.1', self.app_state.config.get('couchdb', 'port')), task.db_name) couch.store_records( load_json_from_shape(input_file, mapping) ) self.task_done() except ConvertError, e: self.task_failed(e)
def process(self): try: with self.task() as task: export_path = self.app_state.user_data_path('export', task.project.title, 'couchdb', make_dirs=True) export_name = task.layer.wmts_source.name couchdb = TempCouchDB(self.app_state, export_path) self.couchdb_port = couchdb.port with couchdb.run(): RasterProcess.process(self) couchdb_client = CouchDB( url='http://127.0.0.1:%d' % couchdb.port, db_name=export_name, ) couchdb_client.update_or_create_doc('geobox_info', {'type': 'raster'} ) except Exception, e: self.task_failed(e)
def remove_source(id): query = g.db.query(LocalWMTSSource).filter_by(id=id) source = query.first() if source: # delete from couch db couch = CouchDB('http://127.0.0.1:%s' % (current_app.config.geobox_state.config.get('couchdb', 'port'), ), source.wmts_source.name ) # if delete from couch is successfull delete from db if couch.delete_db(): g.db.delete(source) g.db.commit() write_mapproxy_config(current_app.config.geobox_state) flash(_('delete sucessful')) else: flash(_('delete not sucessful')) return redirect(url_for('.admin'))
def remove_source(id): query = g.db.query(LocalWMTSSource).filter_by(id=id) source = query.first() if source: # delete from couch db couch = CouchDB( 'http://127.0.0.1:%s' % (current_app.config.geobox_state.config.get('couchdb', 'port'), ), source.wmts_source.name) # if delete from couch is successfull delete from db if couch.delete_db(): g.db.delete(source) g.db.commit() write_mapproxy_config(current_app.config.geobox_state) flash(_('delete sucessful')) else: flash(_('delete not sucessful')) return redirect(url_for('.admin'))
def process(self): try: with self.task() as task: export_path = self.app_state.user_data_path('export', task.project.title, 'couchdb', make_dirs=True) export_name = task.layer.wmts_source.name couchdb = TempCouchDB(self.app_state, export_path) self.couchdb_port = couchdb.port with couchdb.run(): RasterProcess.process(self) couchdb_client = CouchDB( url='http://127.0.0.1:%d' % couchdb.port, db_name=export_name, ) couchdb_client.update_or_create_doc('geobox_info', {'type': 'raster'}) except Exception, e: self.task_failed(e)
def create_couch_app_status(couch_url, layers=None): couchapp_ready = True if layers: _layers = layers.split(',') layers = {} for layer in _layers: couchdb = CouchDB('http://127.0.0.1:%s' % (current_app.config.geobox_state.config.get('couchdb', 'port')), layer) metadata = couchdb.get('metadata') status = replication_status(couch_url, layer) if status != 'completed': couchapp_ready = False layers[metadata['title']] = status else: layers = {} if couchapp_ready: couchapp_url = '%s/geobox_couchapp/_design/GeoBoxCouchApp/_rewrite' % couch_url flash(_('couchapp ready %(couchapp_url)s', couchapp_url=couchapp_url), 'success') return render_template('create_couch_app_status.html', layers=layers, ready=couchapp_ready)
def map(): raster_sources = g.db.query(LocalWMTSSource).all() base_layer = g.db.query(ExternalWMTSSource).filter_by(background_layer=True).first() base_layer.bbox = base_layer.bbox_from_view_coverage() cache_url = get_local_cache_url(request) couch = CouchDB('http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get('couchdb', 'port')), current_app.config.geobox_state.config.get('web', 'coverages_from_couchdb')) records = couch.load_records() vector_geometries = [] for record in records: if record['geometry']: # check if record has geometry type vector_geometries.append(record) return render_template('map.html', cache_url=cache_url, base_layer=base_layer, sources=raster_sources, vector_geometries=vector_geometries )
def replicate_database(couchdb, couchdb_source, app_state, prefix=None): dbname_user = couchdb_source['dbname_user'] if prefix is not None: dbname_user = '******' % (prefix, dbname_user) dburl = source_couchdb_url(couchdb_source) couch_url = 'http://127.0.0.1:%d' % app_state.config.get_int( 'couchdb', 'port') target_couchdb = CouchDB(couch_url, dbname_user) target_couchdb.init_db() couchdb.replication( repl_id=couchdb_source['dbname'], source=dburl, target=dbname_user, continuous=True, ) if couchdb_source['writable']: couchdb.replication( repl_id=couchdb_source['dbname'] + '_push', source=dbname_user, target=dburl, continuous=True, )
def replicate_database(couchdb, couchdb_source, app_state, prefix=None): dbname_user = couchdb_source['dbname_user'] if prefix is not None: dbname_user = '******' % (prefix, dbname_user) dburl = source_couchdb_url(couchdb_source) couch_url = 'http://127.0.0.1:%d' % app_state.config.get_int( 'couchdb', 'port') target_couchdb = CouchDB(couch_url, dbname_user) target_couchdb.init_db() couchdb.replication( repl_id=couchdb_source['dbname'], source=dburl, target=dbname_user, continuous=True, ) if couchdb_source['writable']: couchdb.replication( repl_id=couchdb_source['dbname'] + '_push', source=dbname_user, target=dburl, continuous=True, )
def load_coverage(): project_id = request.form.get("id", False) couchdb_coverage = request.form.get("couchdb_coverage", False) if couchdb_coverage == "true": couch = CouchDB( "http://%s:%s" % ("127.0.0.1", current_app.config.geobox_state.config.get("couchdb", "port")), current_app.config.geobox_state.config.get("web", "coverages_from_couchdb"), ) records = couch.load_records() coverage = [] for record in records: # load only poylgons or mulitpolygons for coverages if record["geometry"]["type"] in ("Polygon", "MultiPolygon"): coverage.append(record) else: project = g.db.query(model.Project).with_polymorphic("*").filter_by(id=project_id).first() coverage = project.coverage if not coverage: return jsonify(coverage=False) else: return jsonify(coverage=coverage)
def process(self): log.debug('Start replication process. Task %d' % self.task_id) try: with self.task() as task: couch = CouchDB( 'http://%s:%s' % ('127.0.0.1', self.app_state.config.get( 'couchdb', 'port')), task.db_name) if task.pull: couch.replicate_pull(task.remote_db_url, task.remote_db_name) if task.push: couch.replicate_push(task.remote_db_url, task.remote_db_name) self.task_done() except UnexpectedResponse, e: self.task_failed(e)
def reload_context_document(app_state, user, password): session = app_state.user_db_session() result = requests.get(app_state.config.get('web', 'context_document_url'), auth=(user, password)) if result.status_code != 200: return False context = Context(result.json) all_active_sources = set(session.query(model.ExternalWMTSSource).filter_by(active=True).all()) updater = ContextModelUpdater(session) first_source = None for source in updater.sources_from_context(context): if not first_source: first_source = source if source in all_active_sources: all_active_sources.remove(source) session.add(source) # set all sources that are not in the context as inactive for active_source in all_active_sources: active_source.active = False for source in session.query(model.ExternalWMTSSource): if source != first_source: source.background_layer = False app_state.config.set('app', 'logging_server', context.logging_server()) app_state.config.write() couchdb = CouchDB('http://127.0.0.1:%d' % app_state.config.get_int('couchdb', 'port'), '_replicator') for couchdb_source in context.couchdb_sources(): dbname_user = couchdb_source['dbname_user'] dburl = couchdb_source['url'] + '/' + couchdb_source['dbname'] if 'username' in couchdb_source: schema, dburl = dburl.split('://') dburl = '%s://%s:%s@%s' % ( schema, couchdb_source['username'], couchdb_source['password'], dburl, ) target_couchdb = CouchDB('http://127.0.0.1:%d' % app_state.config.get_int('couchdb', 'port'), dbname_user) target_couchdb.init_db() couchdb.replication( repl_id=couchdb_source['dbname'], source=dburl, target=dbname_user, continuous=True, ) if couchdb_source['writable']: couchdb.replication( repl_id=couchdb_source['dbname'] + '_push', source=dbname_user, target=dburl, continuous=True, ) session.commit() return True