def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ settings['route_patterns'] = { 'contributors': '/authors', 'contributor': '/authors/{id:[^/\.]+}', 'contributions': '/languages', 'contribution': '/languages/{id:[^/\.]+}', } config = Configurator(settings=settings) config.include('clldmpg') config.registry.registerUtility(WaveMapMarker(), interfaces.IMapMarker) config.registry.registerUtility(link_attrs, interfaces.ILinkAttrs) config.add_301("/varieties", lambda req: req.route_url('contributions')) config.add_301( "/varieties/{id:[^/\.]+}", lambda req: req.route_url('contribution', id=req.matchdict['id'])) return config.make_wsgi_app()
def main(global_config, **settings): """return a Pyramid WSGI application.""" settings['route_patterns'] = { 'languages': '/languoid', 'language': '/languoid/lect/wals_code_{id:[^/\.]+}', 'source': '/refdb/record/{id:[^/\.]+}', 'sources': '/refdb', 'familys': '/languoid/family', 'family': '/languoid/family/{id:[^/\.]+}', 'genus': '/languoid/genus/{id:[^/\.]+}', 'parameters': '/feature', 'parameter': '/feature/{id:[^/\.]+}', 'sentences': '/example', 'sentence': '/example/{id:[^/\.]+}', 'contributions': '/chapter', 'contribution': '/chapter/{id:[^/\.]+}', 'countrys': '/country', 'country': '/country/{id:[^/\.]+}', 'contributors': '/author', 'contributor': '/author/{id:[^/\.]+}', 'legal': '/about/legal', 'olac': '/languoid/oai', 'credits': '/about/credits', } filename_pattern = re.compile('(?P<spec>(c|d|s|f|t)[0-9a-f]{3})\.png') icons = [] for p in sorted(Path(__file__).parent.joinpath('static', 'icons').iterdir(), key=lambda p: p.name): m = filename_pattern.match(p.name) if m: icons.append(WalsIcon(m.group('spec'))) config = Configurator(**dict(settings=settings)) config.include('clldmpg') for utility, interface in [ (WalsCtxFactoryQuery(), ICtxFactoryQuery), (map_marker, IMapMarker), (Blog(settings), IBlog), (icons, IIconList), ]: config.registry.registerUtility(utility, interface) config.register_resource('family', Family, IFamily, with_index=True) config.register_resource('genus', Genus, IGenus, with_index=True) config.register_resource('country', Country, ICountry) config.add_route('sample_alt', '/languoid/samples/{count}.{ext}', factory=sample_factory) config.add_route('sample', '/languoid/samples/{count}', factory=sample_factory) for spec in [ dict(template='parameter/detail_tab.mako', mimetype='application/vnd.clld.tab', send_mimetype="text/plain", extension='tab', name='tab-separated values'), dict(template='parameter/detail_xml.mako', mimetype='application/vnd.clld.xml', send_mimetype="application/xml", extension='xml', name='WALS XML', __doc__="Custom XML format."), dict(template='parameter/detail_georss.mako', mimetype='application/vnd.clld.georss+xml', send_mimetype="application/rdf+xml", extension='georss', name="GeoRSS", __doc__="RSS with location information " "(http://en.wikipedia.org/wiki/GeoRSS)."), dict(template='parameter/detail_kml.mako', mimetype='application/vnd.google-earth.kml+xml', send_mimetype="application/xml", extension='kml', name='KML', __doc__="Keyhole Markup Language"), ]: config.register_adapter(spec, IParameter) config.add_route('feature_info', '/feature-info/{id}') config.add_route('genealogy', '/languoid/genealogy') config.add_301('/index', lambda req: req.route_url('dataset')) config.add_301( '/.{ext}', lambda req: req.route_url('dataset_alt', ext=req.matchdict['ext'])) config.add_301( '/example/{fid}/all', lambda req: req.route_url('parameter', id=req.matchdict['fid'])) config.add_301( '/example/all/wals_code_{lid}', lambda req: req.route_url('sentences', _query=dict(language=req.matchdict['lid']))) # we redirect legacy urls for datapoints because they could not be expressed # with a single id. def datapoint(req): data = {k: v for k, v in req.matchdict.items()} if data['fid'][-1] not in ascii_uppercase: data['fid'] += 'A' return req.route_url('valueset', id='%(fid)s-%(lid)s' % data, _query=req.query_params) config.add_301('/datapoint/{fid}/wals_code_{lid}', datapoint, name='datapoint') # we redirect legacy urls for feature combinations because they could not be expressed # with a single id. def combined(req): return req.route_url('combination', id='%(id1)s_%(id2)s' % req.matchdict, _query=req.query_params) config.add_301('/feature/combined/{id1}/{id2}', combined, name='combined') config.add_301( "/feature/description/{id:[0-9]+}", lambda req: req.route_url('contribution', id=req.matchdict['id'])) config.add_301( "/languoid/by_geography", lambda req: req.route_url('country', id=req.params.get('country'))) config.add_301( "/wals-2011-{fid}", lambda req: req.route_url('parameter', id=req.matchdict.get('fid'))) config.add_301('/languoid/lect', lambda req: req.route_url('languages')) config.add_301('/languoid/family', lambda req: req.route_url('languages')) config.add_301('/languoid/genus', lambda req: req.route_url('languages')) config.add_301('/supplement/1', lambda req: req.route_url('contribution', id='s1')) config.add_301('/supplement/3', lambda req: req.route_url('contribution', id='s1')) config.add_301('/supplement/5', lambda req: req.route_url('contribution', id='s5')) config.add_301('/supplement/6', lambda req: req.route_url('contribution', id='s6')) config.add_301('/supplement/7', lambda req: req.route_url('contribution', id='s7')) config.add_301('/supplement/8', lambda req: req.route_url('contribution', id='s8')) config.add_301('/supplement/9', lambda req: req.route_url('contribution', id='s9')) for pattern in [ '/refdb/', '/refdb/record', '/refdb/record/', '/refdb/search' ]: config.add_301(pattern, lambda req: req.route_url('sources')) config.add_410('/languoid/osd.{ext}') config.add_410("/experimental/{id}") config.add_route('olac.source', '/refdb_oai') config.add_route('languoids', '/languoids') config.add_route('blog_feed', '/blog') config.register_download( Matrix(Language, 'wals3', description="Feature values CSV")) config.register_download( Download(Source, 'wals3', ext='bib', description="Sources as BibTeX")) return config.make_wsgi_app()
def main(global_config, **settings): """return a Pyramid WSGI application.""" settings['route_patterns'] = { 'languages': '/languoid', 'language': '/languoid/lect/wals_code_{id:[^/\.]+}', 'source': '/refdb/record/{id:[^/\.]+}', 'sources': '/refdb', 'familys': '/languoid/family', 'family': '/languoid/family/{id:[^/\.]+}', 'genus': '/languoid/genus/{id:[^/\.]+}', 'parameters': '/feature', 'parameter': '/feature/{id:[^/\.]+}', 'sentences': '/example', 'sentence': '/example/{id:[^/\.]+}', 'contributions': '/chapter', 'contribution': '/chapter/{id:[^/\.]+}', 'countrys': '/country', 'country': '/country/{id:[^/\.]+}', 'contributors': '/author', 'contributor': '/author/{id:[^/\.]+}', 'legal': '/about/legal', 'olac': '/languoid/oai', 'credits': '/about/credits', } filename_pattern = re.compile('(?P<spec>(c|d|s|f|t)[0-9a-f]{3})\.png') icons = [] for name in sorted( path(__file__).dirname().joinpath('static', 'icons').files() ): m = filename_pattern.match(name.splitall()[-1]) if m: icons.append(WalsIcon(m.group('spec'))) config = Configurator(**dict(settings=settings)) config.include('clldmpg') for utility, interface in [ (WalsCtxFactoryQuery(), ICtxFactoryQuery), (map_marker, IMapMarker), (Blog(settings), IBlog), (icons, IIconList), ]: config.registry.registerUtility(utility, interface) config.register_resource('family', Family, IFamily, with_index=True) config.register_resource('genus', Genus, IGenus, with_index=True) config.register_resource('country', Country, ICountry) config.add_route( 'sample_alt', '/languoid/samples/{count}.{ext}', factory=sample_factory) config.add_route( 'sample', '/languoid/samples/{count}', factory=sample_factory) for spec in [ dict( template='parameter/detail_tab.mako', mimetype='application/vnd.clld.tab', send_mimetype="text/plain", extension='tab', name='tab-separated values'), dict( template='parameter/detail_xml.mako', mimetype='application/vnd.clld.xml', send_mimetype="application/xml", extension='xml', name='WALS XML', __doc__="Custom XML format."), dict( template='parameter/detail_georss.mako', mimetype='application/vnd.clld.georss+xml', send_mimetype="application/rdf+xml", extension='georss', name="GeoRSS", __doc__="RSS with location information " "(http://en.wikipedia.org/wiki/GeoRSS)."), dict( template='parameter/detail_kml.mako', mimetype='application/vnd.google-earth.kml+xml', send_mimetype="application/xml", extension='kml', name='KML', __doc__="Keyhole Markup Language"), ]: config.register_adapter(spec, IParameter) config.add_route('feature_info', '/feature-info/{id}') config.add_route('genealogy', '/languoid/genealogy') config.add_301( '/index', lambda req: req.route_url('dataset')) config.add_301( '/.{ext}', lambda req: req.route_url('dataset_alt', ext=req.matchdict['ext'])) config.add_301( '/example/{fid}/all', lambda req: req.route_url('parameter', id=req.matchdict['fid'])) config.add_301( '/example/all/wals_code_{lid}', lambda req: req.route_url( 'sentences', _query=dict(language=req.matchdict['lid']))) # we redirect legacy urls for datapoints because they could not be expressed # with a single id. def datapoint(req): data = {k: v for k, v in req.matchdict.items()} if data['fid'][-1] not in ascii_uppercase: data['fid'] += 'A' return req.route_url( 'valueset', id='%(fid)s-%(lid)s' % data, _query=req.query_params) config.add_301('/datapoint/{fid}/wals_code_{lid}', datapoint, name='datapoint') # we redirect legacy urls for feature combinations because they could not be expressed # with a single id. def combined(req): return req.route_url( 'combination', id='%(id1)s_%(id2)s' % req.matchdict, _query=req.query_params) config.add_301('/feature/combined/{id1}/{id2}', combined, name='combined') config.add_301( "/feature/description/{id:[0-9]+}", lambda req: req.route_url('contribution', id=req.matchdict['id'])) config.add_301( "/languoid/by_geography", lambda req: req.route_url('country', id=req.params.get('country'))) config.add_301( "/wals-2011-{fid}", lambda req: req.route_url('parameter', id=req.matchdict.get('fid'))) config.add_301('/languoid/lect', lambda req: req.route_url('languages')) config.add_301('/languoid/family', lambda req: req.route_url('languages')) config.add_301('/languoid/genus', lambda req: req.route_url('languages')) config.add_301('/supplement/1', lambda req: req.route_url('contribution', id='s1')) config.add_301('/supplement/3', lambda req: req.route_url('contribution', id='s1')) config.add_301('/supplement/5', lambda req: req.route_url('contribution', id='s5')) config.add_301('/supplement/6', lambda req: req.route_url('contribution', id='s6')) config.add_301('/supplement/7', lambda req: req.route_url('contribution', id='s7')) config.add_301('/supplement/8', lambda req: req.route_url('contribution', id='s8')) config.add_301('/supplement/9', lambda req: req.route_url('contribution', id='s9')) for pattern in ['/refdb/', '/refdb/record', '/refdb/record/', '/refdb/search']: config.add_301(pattern, lambda req: req.route_url('sources')) config.add_410('/languoid/osd.{ext}') config.add_410("/experimental/{id}") config.add_route('olac.source', '/refdb_oai') config.add_route('languoids', '/languoids') config.register_download( Matrix(Language, 'wals3', description="Feature values CSV")) config.register_download( Download(Source, 'wals3', ext='bib', description="Sources as BibTeX")) return config.make_wsgi_app()
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ # http://ldh.clld.org/category/iso639_3/aap-para-arara/ config = Configurator(settings=settings) config.include('clldmpg') config.include('clld_glottologfamily_plugin') config.registry.registerUtility(LanguageByFamilyMapMarker(), IMapMarker) # /feed/ -> /sources.atom """ /comments/feed/ /feed/ -> /sources.atom """ config.add_301('/about/', lambda req: req.route_url('dataset', id='ldh')) config.add_301('/about/objective/', lambda req: req.route_url('about', _anchor='objectives')) config.add_301('/repository/', lambda req: req.route_url('about', _anchor='repository')) config.add_301('/archive/', lambda req: req.route_url('sources')) config.add_301('/category/iso639_3/', lambda req: req.route_url('languages')) config.add_301('/category/allgemein/', lambda req: req.route_url('languages')) config.add_301('/contact/', lambda req: req.route_url('contact')) config.add_301('/for-authors/', lambda req: req.route_url('help')) config.add_301('/for-authors/{path}/', lambda req: req.route_url('help')) config.add_301('/feed/', lambda req: req.route_url('sources_alt', ext='atom')) config.add_301('/{year}/{month}/{day}/escidoc{id}/', lambda req: req.route_url( 'source', id='item_{0}'.format(req.matchdict['id'].split('-')[0]), _query=req.query_params), name='item') config.add_301( '/category/iso639_3/{id}/', lambda req: req.route_url('language', id=req.matchdict['id'].split('-')[0], _query=req.query_params), name='category') assert config.registry.unregisterUtility(provided=IDownload, name='dataset.cldf') config.register_download( adapters.BibTeX(models.Description, 'ldh', description="Descriptions as BibTeX")) return config.make_wsgi_app()