Example #1
0
 def test_nodes_connection(self):
     try:
         geodata_staging = self.testapp.app.registry.settings[
             'geodata_staging']
         session = scoped_session(sessionmaker())
         topics = self.testapp.get('/rest/services', status=200)
         for t in topics.json['topics']:
             topic = t.get('id')
             query = session.query(Catalog).filter(Catalog.topic == topic)\
                 .order_by(Catalog.orderKey)
             query = filter_by_geodata_staging(query, Catalog.staging,
                                               geodata_staging)
             rows = query.all()
             if (rows):
                 graph, meta, root_id = create_digraph(rows, 'fr')
                 nodes = graph.nodes()
                 if len(nodes) != len(rows):
                     for row in rows:
                         if row.id not in nodes:
                             raise Exception(
                                 '%s %s %s is unconnected leaf' %
                                 (topic, row.category, row.layerBodId))
     finally:
         if session:
             session.close()
Example #2
0
def get_layers_config_for_params(params, query, model):
    ''' Returns a generator function that yields
    layer config dictionaries. '''
    model = LayersConfig
    query = filter_by_map_name(query, model, params.mapName)
    query = filter_by_geodata_staging(query, model.staging,
                                      params.geodataStaging)

    for q in query:
        yield q.layerConfig(params)
Example #3
0
def getTopics():
    session = getSession()
    model = Topics
    showCatalog = True
    query = session.query(model).filter(model.showCatalog == showCatalog).order_by(model.id)
    query = filter_by_geodata_staging(query, model.staging, STAGING)
    results = [q.id for q in query]

    session.close()

    return results
Example #4
0
def get_layers_metadata_for_params(params, query, model, layerIds=None):
    """ Returns a generator function that yields
    layer metadata dictionaries. """
    query = filter_by_map_name(query, model, params.mapName)
    query = filter_by_geodata_staging(query, model.staging, params.geodataStaging)
    if layerIds is not None:
        for layerId in layerIds:
            layer = get_layer(query, model, layerId)
            yield layer.layerMetadata()

    for q in query:
        yield q.layerMetadata()
Example #5
0
    def catalog(self):
        model = Catalog
        query = self.request.db.query(model)\
            .filter(model.topic.like('%%%s%%' % self.mapName.lower()))\
            .order_by(model.depth)\
            .order_by(model.orderKey)\
            .order_by(remove_accents(model.get_name_from_lang(self.lang)))
        rows = filter_by_geodata_staging(query, model.staging, self.staging).all()
        if len(rows) == 0:
            raise HTTPNotFound('No catalog with id %s is available' % self.mapName)

        return {'results': self.tree(rows)}
Example #6
0
def get_layers_metadata_for_params(params, query, model, layerIds=None):
    ''' Returns a generator function that yields
    layer metadata dictionaries. '''
    query = filter_by_map_name(query, model, params.mapName)
    query = filter_by_geodata_staging(query, model.staging,
                                      params.geodataStaging)
    if layerIds is not None:
        for layerId in layerIds:
            layer = get_layer(query, model, layerId)
            yield layer.layerMetadata()

    for q in query:
        yield q.layerMetadata()
Example #7
0
    def catalog(self):
        model = Catalog
        query = self.request.db.query(model)\
            .filter(model.topic.like('%%%s%%' % self.mapName.lower()))\
            .order_by(model.depth)\
            .order_by(model.orderKey)\
            .order_by(remove_accents(model.get_name_from_lang(self.lang)))
        rows = filter_by_geodata_staging(query, model.staging,
                                         self.staging).all()
        if len(rows) == 0:
            raise HTTPNotFound('No catalog with id %s is available' %
                               self.mapName)

        return {'results': self.tree(rows)}
Example #8
0
def topics(request):
    model = Topics
    geodataStaging = request.registry.settings['geodata_staging']
    showCatalog = True
    query = request.db.query(model).filter(model.showCatalog == showCatalog).order_by(model.orderKey)
    query = filter_by_geodata_staging(query, model.staging, geodataStaging)
    results = [{
        'id': q.id,
        'langs': q.availableLangs,
        'showCatalog': q.showCatalog,
        'backgroundLayers': q.backgroundLayers,
        'selectedLayers': q.selectedLayers
    } for q in query]
    return {'topics': results}
Example #9
0
    def wmtscapabilities(self):
        from pyramid.renderers import render_to_response
        scheme = self.request.headers.get(
            'X-Forwarded-Proto',
            self.request.scheme)
        staging = self.request.registry.settings['geodata_staging']
        host = self.request.headers.get(
            'X-Forwarded-Host', self.request.host)
        mapproxyHost = self.request.registry.settings['mapproxyhost']
        apache_base_path = self.request.registry.settings['apache_base_path']
        apache_entry_point = '/' if (apache_base_path == 'main' or 'localhost' in host) else '/' + apache_base_path

        # Default ressource
        s3_url = sanitize_url("%s://wmts.geo.admin.ch/" % scheme)
        mapproxy_url = sanitize_url("%s://%s%s/" % (scheme, mapproxyHost, apache_entry_point))
        onlineressources = {'mapproxy': mapproxy_url, 's3': s3_url}

        layers_query = self.request.db.query(self.models['GetCap'])
        layers_query = filter_by_geodata_staging(
            layers_query,
            self.models['GetCap'].staging,
            staging
        )
        if self.mapName != 'all':
            layers_query = filter_by_map_name(layers_query, self.models['GetCap'], self.mapName)
        layers = layers_query.all()
        if hasattr(self.models['GetCapThemes'], 'oberthema_id'):
            themes = self.request.db.query(self.models['GetCapThemes']).order_by(self.models['GetCapThemes'].oberthema_id).all()
        else:
            themes = self.request.db.query(self.models['GetCapThemes']).all()

        metadata = self.request.db.query(self.models['ServiceMetadata'])\
            .filter(self.models['ServiceMetadata']
                    .pk_map_name.like('%wmts-bgdi%')).first()

        wmts = {
            'layers': layers,
            'themes': themes,
            'metadata': metadata,
            'scheme': scheme,
            'onlineressources': onlineressources,
            'tilematrixset': self.tileMatrixSet,
            'tilematrixsetDefs': DEFAULT_TILEMATRIXSET
        }
        response = render_to_response(
            'chsdi:templates/wmtscapabilities.mako',
            wmts,
            request=self.request)
        response.content_type = 'text/xml'
        return response
Example #10
0
def layers(params):
    buildlink = lambda x: '?topic=' + topic['id'] + '&layers=' + x.layerBodId
    session = params.request.db
    paths = []
    topics = getTopics(params)
    for topic in topics:
        query = (session.query(Catalog)
                 .filter(Catalog.topic.ilike('%%%s%%' % topic['id']))
                 .filter(Catalog.category.ilike('%%layer%%')))
        query = filter_by_geodata_staging(query, Catalog.staging, params.staging)
        layerlinks = map(buildlink, query.all())
        paths.extend(toAllLanguages(topic['langs'].split(','), layerlinks, '&', ''))

    return asXml(params, paths)
Example #11
0
def layers(params):
    buildlink = lambda x: '?topic=' + topic['id'] + '&layers=' + x.layerBodId
    session = params.request.db
    paths = []
    topics = getTopics(params)
    for topic in topics:
        query = (session.query(Catalog)
                 .filter(Catalog.topic.ilike('%%%s%%' % topic['id']))
                 .filter(Catalog.category.ilike(u'%%layer%%')))
        query = filter_by_geodata_staging(query, Catalog.staging, params.staging)
        layerlinks = map(buildlink, query.all())
        paths.extend(toAllLanguages(params.langs, layerlinks, '&', ''))

    return asXml(params, paths, params.geoadminhost)
Example #12
0
def topics(request):
    model = Topics
    geodataStaging = request.registry.settings['geodata_staging']
    showCatalog = True
    query = request.db.query(model).filter(
        model.showCatalog == showCatalog).order_by(model.orderKey)
    query = filter_by_geodata_staging(query, model.staging, geodataStaging)
    results = [{
        'id': q.id,
        'langs': q.availableLangs,
        'showCatalog': q.showCatalog,
        'backgroundLayers': q.backgroundLayers,
        'selectedLayers': q.selectedLayers
    } for q in query]
    return {'topics': results}
Example #13
0
    def wmtscapabilities(self):
        from pyramid.renderers import render_to_response
        scheme = self.request.headers.get('X-Forwarded-Proto',
                                          self.request.scheme)
        staging = self.request.registry.settings['geodata_staging']
        mapproxyHost = self.request.registry.settings['mapproxyhost']

        # Default ressource
        s3_url = sanitize_url("%s://wmts.geo.admin.ch/" % scheme)
        mapproxy_url = sanitize_url("%s://%s/" % (scheme, mapproxyHost))
        onlineressources = {'mapproxy': mapproxy_url, 's3': s3_url}

        layers_query = self.request.db.query(self.models['GetCap'])
        layers_query = filter_by_geodata_staging(layers_query,
                                                 self.models['GetCap'].staging,
                                                 staging)
        if self.mapName != 'all':
            layers_query = filter_by_map_name(layers_query,
                                              self.models['GetCap'],
                                              self.mapName)
        layers = layers_query.all()
        if hasattr(self.models['GetCapThemes'], 'oberthema_id'):
            themes = self.request.db.query(
                self.models['GetCapThemes']).order_by(
                    self.models['GetCapThemes'].oberthema_id).all()
        else:
            themes = self.request.db.query(self.models['GetCapThemes']).all()

        metadata = self.request.db.query(self.models['ServiceMetadata'])\
            .filter(self.models['ServiceMetadata']
                    .pk_map_name.like('%wmts-bgdi%')).first()

        wmts = {
            'layers': layers,
            'themes': themes,
            'metadata': metadata,
            'scheme': scheme,
            'onlineressources': onlineressources,
            'tilematrixset': self.tileMatrixSet,
            'tilematrixsetDefs': DEFAULT_TILEMATRIXSET
        }
        response = render_to_response(
            'chsdi:templates/wmtscapabilities/wmtscapabilities.mako',
            wmts,
            request=self.request)
        response.content_type = 'text/xml'
        return response
Example #14
0
    def wmtscapabilities(self):
        from pyramid.renderers import render_to_response
        scheme = self.request.headers.get('X-Forwarded-Proto',
                                          self.request.scheme)
        staging = self.request.registry.settings['geodata_staging']
        wmts_public_host = self.request.registry.settings['wmts_public_host']

        # Default ressource
        onlineressource = sanitize_url("%s://%s/" % (scheme, wmts_public_host))

        layers_query = self.request.db.query(self.models['GetCap'])
        layers_query = filter_by_geodata_staging(layers_query,
                                                 self.models['GetCap'].staging,
                                                 staging)
        if self.mapName != 'all':
            layers_query = filter_by_map_name(layers_query,
                                              self.models['GetCap'],
                                              self.mapName)
        layers = layers_query.all()
        zoom_levels = getLayersZoomLevelSet(self.tileMatrixSet, layers)
        if hasattr(self.models['GetCapThemes'], 'oberthema_id'):
            themes = self.request.db.query(
                self.models['GetCapThemes']).order_by(
                    self.models['GetCapThemes'].oberthema_id).all()
        else:
            themes = self.request.db.query(self.models['GetCapThemes']).all()

        metadata = self.request.db.query(self.models['ServiceMetadata'])\
            .filter(self.models['ServiceMetadata']
                    .pk_map_name.like(u'%wmts-bgdi%')).first()

        wmts = {
            'layers': layers,
            'zoomlevels': zoom_levels,
            'themes': themes,
            'metadata': metadata,
            'scheme': scheme,
            'onlineressource': onlineressource,
            'tilematrixset': self.tileMatrixSet,
            'tilematrixsetDefs': getDefaultTileMatrixSet(self.tileMatrixSet)
        }
        response = render_to_response(
            'chsdi:templates/wmtscapabilities/wmtscapabilities.mako',
            wmts,
            request=self.request)
        response.content_type = 'text/xml'
        return response
Example #15
0
def getLayersConfigs():

    engine = engine_from_config(settings, 'sqlalchemy.bod.')
    DBSession = scoped_session(sessionmaker())
    DBSession.configure(bind=engine)

    models = get_wmts_models(LANG)
    layers_query = DBSession.query(models['GetCap'])
    layers_query = layers_query.filter(models['GetCap'].maps.ilike('%%%s%%' % 'api'))
    layers_query = filter_by_geodata_staging(
        layers_query,
        models['GetCap'].staging,
        STAGING
    )
    DBSession.close()

    return [q for q in layers_query.all()]
Example #16
0
    def catalog(self):
        model = Catalog
        query = self.request.db.query(model)\
            .filter(model.topic.like('%%%s%%' % self.mapName.lower()))
        rows = filter_by_geodata_staging(query, model.staging, self.staging).all()
        if len(rows) == 0:
            raise HTTPNotFound('No catalog with id %s is available' % self.mapName)

        G, meta, root_id = create_digraph(rows, self.lang)

        if len(rows) != len(G.nodes()):
            raise HTTPInternalServerError('Catalog tree for topic %s has unconnected leaves' % self.mapName)
        data = tree_data(G, root_id, {'children': 'children', 'id': 'id'}, meta)
        data['category'] = meta[root_id]['category']
        data['staging'] = meta[root_id]['staging']
        data = {'results': {'root': data}}
        return data
Example #17
0
    def wmtscapabilities(self):
        from pyramid.renderers import render_to_response
        scheme = self.request.headers.get(
            'X-Forwarded-Proto',
            self.request.scheme)
        staging = self.request.registry.settings['geodata_staging']
        wmts_public_host = self.request.registry.settings['wmts_public_host']

        # Default ressource
        onlineressource = sanitize_url("%s://%s/" % (scheme, wmts_public_host))

        layers_query = self.request.db.query(self.models['GetCap'])
        layers_query = filter_by_geodata_staging(
            layers_query,
            self.models['GetCap'].staging,
            staging
        )
        if self.mapName != 'all':
            layers_query = filter_by_map_name(layers_query, self.models['GetCap'], self.mapName)
        layers = layers_query.all()
        zoom_levels = getLayersZoomLevelSet(self.tileMatrixSet, layers)
        if hasattr(self.models['GetCapThemes'], 'oberthema_id'):
            themes = self.request.db.query(self.models['GetCapThemes']).order_by(self.models['GetCapThemes'].oberthema_id).all()
        else:
            themes = self.request.db.query(self.models['GetCapThemes']).all()

        metadata = self.request.db.query(self.models['ServiceMetadata'])\
            .filter(self.models['ServiceMetadata']
                    .pk_map_name.like(u'%wmts-bgdi%')).first()

        wmts = {
            'layers': layers,
            'zoomlevels': zoom_levels,
            'themes': themes,
            'metadata': metadata,
            'scheme': scheme,
            'onlineressource': onlineressource,
            'tilematrixset': self.tileMatrixSet,
            'tilematrixsetDefs': getDefaultTileMatrixSet(self.tileMatrixSet)
        }
        response = render_to_response(
            'chsdi:templates/wmtscapabilities/wmtscapabilities.mako',
            wmts,
            request=self.request)
        response.content_type = 'text/xml'
        return response
Example #18
0
def get_layers_config_for_params(params, query, model):
    ''' Returns a generator function that yields
    layer config dictionaries. '''
    model = LayersConfig
    query = filter_by_map_name(
        query,
        model,
        params.mapName
    )
    query = filter_by_geodata_staging(
        query,
        model.staging,
        params.geodataStaging
    )

    for q in query:
        yield q.layerConfig(params)
Example #19
0
def getLayersConfigs(topics=topics):
    session = getSession()
    models = get_wmts_models(LANG)
    conditions = []
    for topic in topics:
        conditions.append(models['GetCap'].maps.ilike('%{}%'.format(topic)))

    layers_query = session.query(models['GetCap'])
    layers_query = layers_query.filter(or_(*conditions))
    layers_query = filter_by_geodata_staging(
        layers_query,
        models['GetCap'].staging,
        STAGING
    )
    session.close()

    return [q for q in layers_query.all()]
Example #20
0
def topics(request):
    model = Topics
    geodataStaging = request.registry.settings['geodata_staging']
    showCatalog = True
    query = request.db.query(model).filter(model.showCatalog == showCatalog) \
                                   .order_by(model.groupId)
    query = filter_by_geodata_staging(query, model.staging, geodataStaging)
    results = [{
        'id': q.id,
        'defaultBackground': q.defaultBackground,
        'backgroundLayers': q.backgroundLayers,
        'selectedLayers': q.selectedLayers,
        'activatedLayers': q.activatedLayers,
        'plConfig': q.plconf,
        'groupId': q.groupId
    } for q in query]
    return {'topics': results}
Example #21
0
 def test_nodes_connection(self):
     try:
         geodata_staging = self.testapp.app.registry.settings['geodata_staging']
         session = scoped_session(sessionmaker())
         topics = self.testapp.get('/rest/services', status=200)
         for t in topics.json['topics']:
             topic = t.get('id')
             query = session.query(Catalog).filter(Catalog.topic == topic)\
                 .order_by(Catalog.orderKey)
             query = filter_by_geodata_staging(query, Catalog.staging, geodata_staging)
             rows = query.all()
             if (rows):
                 graph, meta, root_id = create_digraph(rows, 'fr')
                 nodes = graph.nodes()
                 if len(nodes) != len(rows):
                     for row in rows:
                         if row.id not in nodes:
                             raise Exception('%s %s %s is unconnected leaf' % (topic, row.category, row.layerBodId))
     finally:
         if session:
             session.close()
Example #22
0
    def catalog(self):
        model = Catalog
        query = self.request.db.query(model)\
            .filter(model.topic.like('%%%s%%' % self.mapName.lower()))
        rows = filter_by_geodata_staging(query, model.staging,
                                         self.staging).all()
        if len(rows) == 0:
            raise HTTPNotFound('No catalog with id %s is available' %
                               self.mapName)

        G, meta, root_id = create_digraph(rows, self.lang)

        if len(rows) != len(G.nodes()):
            raise HTTPInternalServerError(
                'Catalog tree for topic %s has unconnected leaves' %
                self.mapName)
        data = tree_data(G, root_id, {
            'children': 'children',
            'id': 'id'
        }, meta)
        data['category'] = meta[root_id]['category']
        data['staging'] = meta[root_id]['staging']
        data = {'results': {'root': data}}
        return data