Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)