Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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'))
Ejemplo n.º 7
0
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'))
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
    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)
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
 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)
Ejemplo n.º 14
0
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'))
Ejemplo n.º 15
0
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'))
Ejemplo n.º 16
0
 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)
Ejemplo n.º 17
0
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)
Ejemplo n.º 18
0
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
    )
Ejemplo n.º 19
0
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,
        )
Ejemplo n.º 20
0
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,
        )
Ejemplo n.º 21
0
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)
Ejemplo n.º 22
0
 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)
Ejemplo n.º 23
0
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