def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) add_mako_renderer(config, ".html") config.add_static_view("static", "static", cache_max_age=3600) config.add_static_view("node_modules", settings.get("node_modules_path"), cache_max_age=3600) config.add_static_view("closure", settings.get("closure_library_path"), cache_max_age=3600) config.add_route("index", "/") config.add_route("waypoints_view", "/waypoints/{id}/{culture}") config.add_route("waypoints_index_default", "/waypoints") config.add_route("waypoints_index", "/waypoints/list*filters") config.add_route("waypoints_add", "/waypoints/add") config.add_route("waypoints_edit", "/waypoints/edit/{id}/{culture}") config.add_route("waypoints_history", "/waypoints/history/{id}/{culture}") config.add_route("waypoints_archive", "/waypoints/{id}/{culture}/{version:\d+}") config.add_route("waypoints_diff", "/waypoints/diff/{id}/{culture}/{v1}/{v2}") config.add_route("routes_view", "/routes/{id}/{culture}") config.add_route("routes_index_default", "/routes") config.add_route("routes_index", "/routes/list*filters") config.add_route("routes_add", "/routes/add") config.add_route("routes_edit", "/routes/edit/{id}/{culture}") config.add_route("routes_history", "/routes/history/{id}/{culture}") config.add_route("routes_archive", "/routes/{id}/{culture}/{version:\d+}") config.add_route("routes_diff", "/routes/diff/{id}/{culture}/{v1}/{v2}") config.add_route("auth", "/auth") config.scan(ignore="c2corg_ui.tests") return config.make_wsgi_app()
def main(global_config, **settings): del global_config # unused config = Configurator(settings=settings) init_tilegeneration(settings["tilegeneration_configfile"]) global tilegeneration # pylint: disable=global-statement config.include(c2cwsgiutils.pyramid.includeme) health_check.HealthCheck(config) add_mako_renderer(config, ".html") config.add_route( "admin", "/{}/".format(tilegeneration.config["server"]["admin_path"]), request_method="GET", ) config.add_route( "admin_run", "/{}/run".format(tilegeneration.config["server"]["admin_path"]), request_method="POST", ) config.add_route("tiles", "/*path", request_method="GET") config.add_view(PyramidView, route_name="tiles") config.scan("tilecloud_chain.views") return config.make_wsgi_app()
def includeme(config): add_mako_renderer(config, '.txt') reg = config.registry region = make_region() region.configure_from_config(config.registry.settings, 'cache.registration.') store = DogPileTokenStore(region) message_factory = RegistrationMessageFactory( sender=config.registry.settings['registration.mail.sender']) reg.utilities.register([], ITokenStore, "", store) reg.utilities.register([], ITokenGenerator, "", generate_uuid_token) reg.utilities.register([], IMessageFactory, "", message_factory) reg.utilities.register([], IUserFactory, "", user_factory) reg.adapters.register([IMailer, IMessageFactory, ITokenStore, ITokenGenerator, IUserFactory, ], IRegistration, "", Registration)
def main(global_config, **settings): from pyramid_mako import add_mako_renderer del global_config # unused config = Configurator(settings=settings) init_tilegeneration(settings['tilegeneration_configfile']) global tilegeneration config.include(c2cwsgiutils.pyramid.includeme) health_check.HealthCheck(config) add_mako_renderer(config, ".html") config.add_route( 'admin', '/{}/'.format(tilegeneration.config['server']['admin_path']), request_method='GET', ) config.add_route( 'admin_run', '/{}/run'.format(tilegeneration.config['server']['admin_path']), request_method='POST', ) config.add_route('tiles', '/*path', request_method='GET') config.add_view(PyramidView, route_name='tiles') config.scan('tilecloud_chain.views') return config.make_wsgi_app()
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) settings = config.get_settings() settings.update(yaml.load(file(settings.get("app.cfg")))) add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") config.include("pyramid_mako") engine = engine_from_config(settings, 'sqlalchemy.') sqlahelper.add_engine(engine) config.include(pyramid_tm.includeme) dbreflection.init(engine) config.include('.routes') config.scan() return config.make_wsgi_app()
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) settings = config.get_settings() settings.update(yaml.load(file(settings.get("app.cfg")))) add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") engine = engine_from_config(settings, 'sqlalchemy.') sqlahelper.add_engine(engine) dbreflection.init(engine) config.set_authorization_policy(ACLAuthorizationPolicy()) config.add_request_method( _create_get_user_from_request(settings), name="user", property=True ) authtkt_authentication_policy = AuthTktAuthenticationPolicy( settings.get('authtkt')['secret'], cookie_name=settings.get('authtkt')['cookie_name'], hashalg='sha512' ) remote_user_authentication_policy = RemoteUserAuthenticationPolicy() policies = [remote_user_authentication_policy, authtkt_authentication_policy] authentication_policy = MultiAuthenticationPolicy(policies) config.set_authentication_policy(authentication_policy) config.include('pyramid_mako') config.include(pyramid_tm.includeme) config.add_static_view('static', 'static', cache_max_age=3600) config.add_route('home', '/') config.add_route('viewer', '/viewer.js') config.add_route('image_proxy', '/img/{type}/{id}') config.add_route('pdf_proxy', '/pdf/{type}/{id}.pdf') # historic parcels config.add_route('historic_parcel_get', '/historic_parcel/{id}') config.add_route('historic_parcel', '/historic_parcel') config.add_route('historic_parcel_doc', '/historic_parcel_doc') # print proxy routes config.add_route('printproxy', '/printproxy') config.add_route('printproxy_info', '/printproxy/info.json') config.add_route('printproxy_create', '/printproxy/create.json') config.add_route('printproxy_get', '/printproxy/{file}.printout') # mutation config.add_route('mutation_list', '/mutation/list') config.scan() return config.make_wsgi_app()
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) add_mako_renderer(config, '.html') # Register a tween to get back the cache buster path. config.add_tween("c2corg_ui.lib.cacheversion.CachebusterTween") _add_static_view(config, 'static', 'c2corg_ui:static') config.add_static_view('node_modules', settings.get('node_modules_path'), cache_max_age=3600) config.add_static_view('closure', settings.get('closure_library_path'), cache_max_age=3600) config.add_route('index', '/') config.add_route('waypoints_view', '/waypoints/{id}/{lang}') config.add_route('waypoints_index', '/waypoints') config.add_route('waypoints_sitemap_default', '/waypoints/sitemap') config.add_route('waypoints_sitemap', '/waypoints/sitemap*filters') config.add_route('waypoints_add', '/waypoints/add') config.add_route('waypoints_edit', '/waypoints/edit/{id}/{lang}') config.add_route('waypoints_history', '/waypoints/history/{id}/{lang}') config.add_route('waypoints_archive', '/waypoints/{id}/{lang}/{version:\d+}') config.add_route( 'waypoints_diff', '/waypoints/diff/{id}/{lang}/{v1}/{v2}') config.add_route('routes_view', '/routes/{id}/{lang}') config.add_route('routes_index', '/routes') config.add_route('routes_sitemap_default', '/routes/sitemap') config.add_route('routes_sitemap', '/routes/sitemap*filters') config.add_route('routes_add', '/routes/add') config.add_route('routes_edit', '/routes/edit/{id}/{lang}') config.add_route('routes_history', '/routes/history/{id}/{lang}') config.add_route('routes_archive', '/routes/{id}/{lang}/{version:\d+}') config.add_route( 'routes_diff', '/routes/diff/{id}/{lang}/{v1}/{v2}') config.add_route('outings_view', '/outings/{id}/{lang}') config.add_route('outings_index', '/outings') config.add_route('outings_sitemap_default', '/outings/sitemap') config.add_route('outings_sitemap', '/outings/sitemap*filters') config.add_route('outings_add', '/outings/add') config.add_route('outings_edit', '/outings/edit/{id}/{lang}') config.add_route('outings_history', '/outings/history/{id}/{lang}') config.add_route('outings_archive', '/outings/{id}/{lang}/{version:\d+}') config.add_route( 'outings_diff', '/outings/diff/{id}/{lang}/{v1}/{v2}') config.add_route('auth', '/auth') config.add_route('account', '/account') config.scan(ignore='c2corg_ui.tests') return config.make_wsgi_app()
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) add_mako_renderer(config, '.html') config.add_static_view('static', 'static', cache_max_age=3600) config.add_static_view('node_modules', settings.get('node_modules_path'), cache_max_age=3600) config.add_static_view('closure', settings.get('closure_library_path'), cache_max_age=3600) config.add_route('index', '/') config.scan() return config.make_wsgi_app()
def includeme(config): add_mako_renderer(config, '.txt') reg = config.registry region = make_region() region.configure_from_config(config.registry.settings, 'cache.registration.') store = DogPileTokenStore(region) message_factory = RegistrationMessageFactory( sender=config.registry.settings['registration.mail.sender']) reg.utilities.register([], ITokenStore, "", store) reg.utilities.register([], ITokenGenerator, "", generate_uuid_token) reg.utilities.register([], IMessageFactory, "", message_factory) reg.utilities.register([], IUserFactory, "", user_factory) reg.adapters.register([ IMailer, IMessageFactory, ITokenStore, ITokenGenerator, IUserFactory, ], IRegistration, "", Registration)
def includeme(config): """ By including this in your pyramid web app you can easily provide SQLAlchemy data sets via a restful API :param config: The pyramid apps config object :type config: Configurator """ # bind the mako renderer to other file extensions try: add_mako_renderer(config, ".html") config.commit() except ConfigurationConflictError as e: log.debug('Renderer for "html" already exists: {0}'.format(e.message)) try: add_mako_renderer(config, ".js") config.commit() except ConfigurationConflictError as e: log.debug('Renderer for "js" already exists: {0}'.format(e.message)) # add standard renderers config.add_renderer(name='geo_restful_json', factory=RestfulJson) config.add_renderer(name='geo_restful_geo_json', factory=RestfulGeoJson) config.add_renderer(name='geo_restful_xml', factory=RestfulXML) config.add_renderer(name='geo_restful_model_json', factory=RestfulModelJSON) config.add_renderer(name='geo_restful_model_xml', factory=RestfulModelXML) # add request attributes # global database connection holder see database script/rest script in api class # this feature is mainly used to reduce open database connections. They will be shared if they are exactly # the same. config.registry.pyramid_georest_database_connections = {} # global api holder config.registry.pyramid_georest_apis = {} # place where the api is available on each request config.registry.pyramid_georest_requested_api = None # place where the service is available on each request config.registry.pyramid_georest_requested_service = None
def main(global_config: Any, **settings: Any) -> Router: """Start the server in Pyramid.""" del global_config # unused config = Configurator(settings=settings) init_tilegeneration(settings.get("tilegeneration_configfile")) assert tilegeneration config.include(c2cwsgiutils.pyramid.includeme) health_check.HealthCheck(config) add_mako_renderer(config, ".html") config.add_route( "admin", f"/{tilegeneration.get_main_config().config['server']['admin_path']}/", request_method="GET", ) config.add_route( "admin_run", f"/{tilegeneration.get_main_config().config['server']['admin_path']}/run", request_method="POST", ) config.add_route( "admin_test", f"/{tilegeneration.get_main_config().config['server']['admin_path']}/test", request_method="GET", ) config.add_route("tiles", "/*path", request_method="GET") config.add_view(PyramidView, route_name="tiles") config.scan("tilecloud_chain.views") return config.make_wsgi_app()
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ engine = engine_from_config(settings, 'sqlalchemy.') DBSession.configure(bind=engine) Base.metadata.bind = engine config = Configurator(settings=settings) config.include('pyramid_chameleon') config.add_static_view('static', 'static', cache_max_age=3600) config.add_route('home', '/') add_mako_renderer(config,'.html') config.add_route('test_string','test/string') config.add_route('test_html','test/html') config.add_route('transmission','transmission') config.add_route('scan','scan') config.add_route('del','del') config.add_route('user','add/user') config.add_route('address','insert/address') config.add_route('scan_user','/scan/user') config.add_route('add_address','/add/adress') config.add_route('scan_address','/scan/address') config.add_route('del_address','/del/address') config.scan() return config.make_wsgi_app()
def includeme(config): # pragma: no cover """ This is the place where you should push all the initial stuff for the plugin :param config: The configurator object from the including pyramid module. :type geometries: Configurator """ # If you need access to the settings in this part, you can get them via # settings = config.get_settings() global route_prefix config.include('pyramid_mako') # bind the mako renderer to other file extensions add_mako_renderer(config, ".html") add_mako_renderer(config, ".xml") add_mako_renderer(config, ".js") config.include('oereb_client.routes') def get_route_prefix(request): return config.route_prefix config.add_request_method(get_route_prefix, name='route_prefix', reify=True)
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator( root_factory=Root, settings=settings, locale_negotiator=locale_negotiator, authentication_policy=create_authentication(settings) ) # config.add_subscriber(add_cors_headers_response_callback, NewRequest) # overwrite print routes config.add_route( "lux_printproxy_report_create", "/printproxy/report.{format}", request_method="POST" ) config.add_route( "lux_printproxy_status", "/printproxy/status/{ref}.json", request_method="GET" ) config.add_route( "lux_printproxy_report_get", "/printproxy/report/{ref}", request_method="GET" ) config.add_route( "lux_printproxy_report_cancel", "/printproxy/cancel/{ref}", request_method="DELETE" ) # mymaps routes config.add_route( "mymaps", "/mymaps", request_method="HEAD" ) config.add_route( "mymaps_image", "/", request_method="HEAD" ) config.add_route( "mymaps_getcategories", "mymaps/categories", request_method="GET" ) config.add_route( "mymaps_getallcategories", "mymaps/allcategories", request_method="GET" ) config.add_route( "mymaps_getpublicmaps", "/mymaps/public_maps", request_method="GET" ) config.add_route( "mymaps_getpublicategories", "/mymaps/public_categories", request_method="GET" ) config.add_route( "mymaps_getmaps", "/mymaps/maps", request_method="GET" ) config.add_route( "mymaps_features", "/mymaps/features/{map_id}", request_method="GET" ) config.add_route( "mymaps_map_info", "/mymaps/map_info/{map_id}", request_method="GET" ) config.add_route( "predefined_wms", "/predefined_wms", request_method="GET" ) config.add_route( "mymaps_create", "/mymaps/create", request_method="POST" ) config.add_route( "mymaps_rate", "/mymaps/rate/{map_id}" ) config.add_route( "mymaps_update", "/mymaps/update/{map_id}", request_method="PUT" ) config.add_route( "mymaps_map", "/mymaps/map/{map_id}", request_method="GET" ) config.add_route( "mymaps_comment", "/mymaps/comment/{map_id}", request_method="POST" ) config.add_route( "mymaps_upload_image", "/mymaps/upload_image", request_method="POST" ) config.add_route( "mymaps_upload_symbol", "/mymaps/upload_symbol", request_method="POST" ) config.add_route( "mymaps_get_image", "/mymaps/images/{filename}", request_method="GET" ) config.add_route( "mymaps_get_symbol", "/mymaps/symbol/{symbol_id}", request_method="GET" ) config.add_route( "mymaps_users_categories", "/mymaps/get_users_categories", request_method="GET" ) config.add_route( "mymaps_get_symbols", "/mymaps/symbols", request_method="GET" ) config.add_route( "mymaps_delete", "/mymaps/delete/{map_id}", request_method="DELETE" ) config.add_route( "mymaps_delete_all_features", "/mymaps/delete_all_features/{map_id}", request_method="DELETE" ) config.add_route( "mymaps_delete_feature", "/mymaps/delete_feature/{feature_id}", request_method="DELETE" ) config.add_route( "mymaps_save_feature", "/mymaps/save_feature/{map_id}", request_method="POST" ) config.add_route( "mymaps_save_features", "/mymaps/save_features/{map_id}", request_method="POST" ) config.add_route( "mymaps_save_order", "/mymaps/save_order/{map_id}", request_method="POST" ) config.add_route( "mymaps_copy", "/mymaps/copy/{map_id}", request_method="POST" ) config.add_route( "exportgpxkml", "/mymaps/exportgpxkml", request_method="POST" ) config.add_route( "get_arrow_color", "/mymaps/getarrow" ) config.add_route( "getroute", "/mymaps/getroute" ) config.add_route( "getremoteroute", "/router/getroute" ) # geocoder routes config.add_route( "reverse_geocode", "/geocode/reverse" ) config.add_route( "geocode", "/geocode/search" ) config.add_route( "feedback", "/feedback" ) # pag routes config.add_route( "pag_url", "/pag" ) # pag routes config.add_route( "pag_report", "/pag/report/{oid}.pdf" ) # pag routes config.add_route( "casipo_url", "/casipo" ) # pag routes config.add_route( "casipo_report", "/casipo/report/{oid}.pdf" ) # pds routes config.add_route( "pds_url", "/pds" ) # pag routes config.add_route( "pds_report", "/pds/report/{oid}.pdf" ) config.add_route( "pag_files", "/pag/files/{_file}" ) config.add_route( "get_png", "/legends/get" ) config.add_route( "get_html", "/legends/get_html" ) # full text search routes config.add_route("fulltextsearch", "/fulltextsearch") # layer search routes config.add_route("layersearch", "/layersearch") # cms search routes config.add_route("cmssearch", "/cmssearch") # jsapi routes config.add_route( 'jsapiloader', '/apiv3loader.js' ) config.add_route( 'jsapiexample', '/api-example' ) config.add_route( 'jsapilayers', '/jsapilayers' ) config.include('c2cgeoportal') config.include('pyramid_closure') add_mako_renderer(config, '.appcache') config.add_translation_dirs('geoportailv3:locale/') # initialize database engines = config.get_settings()['sqlalchemy_engines'] if engines: config.registry.dbmakers = {} for engine in engines: if 'url' not in engines[engine]: sqlahelper.add_engine( sqlalchemy.create_engine(engines[engine]), name=engine) else: sqlahelper.add_engine( sqlalchemy.create_engine(engines[engine]['url']), name=engine) config.registry.dbmakers[engine] = sessionmaker( bind=sqlahelper.get_engine(engine)) config.add_request_method(init_db(engine), 'db_'+engine, reify=True) from geoportailv3.views.authentication import ldap_user_validator, \ get_user_from_request ldap_settings = config.get_settings()['ldap'] if ldap_settings: config.include('pyramid_ldap') """Config the ldap connection. """ config.ldap_setup( ldap_settings['url'], ldap_settings['bind'], ldap_settings['passwd'], ) config.ldap_set_login_query( ldap_settings['base_dn'], filter_tmpl='(login=%(login)s)', scope=ldap.SCOPE_SUBTREE, ) config.set_request_property( get_user_from_request, name='user', reify=True ) set_user_validator(config, ldap_user_validator) json_renderer = JSON() json_renderer.add_adapter(datetime.date, datetime_adapter) json_renderer.add_adapter(datetime.datetime, datetime_adapter) json_renderer.add_adapter(Decimal, decimal_adapter) config.add_renderer('json', json_renderer) mail_config = config.get_settings()['turbomail'] if mail_config: interface.start(mail_config) # scan view decorator for adding routes config.scan() # add the interfaces add_interface(config, interface_type=INTERFACE_TYPE_NGEO_CATALOGUE) config.add_route("echocsv", "/profile/echocsv", request_method="POST") config.add_route('getuserinfo', '/getuserinfo') config.add_route('wms', '/ogcproxywms') config.add_route('https_proxy', '/httpsproxy') config.add_route('download_sketch', '/downloadsketch') config.add_route('download', '/download') config.add_route('download_measurement', '/downloadmeasurement') config.add_route('preview_measurement', '/previewmeasurement') config.add_route('qr', '/qr') config.add_route('getfeatureinfo', '/getfeatureinfo') config.add_route('getpoitemplate', '/getpoitemplate') config.add_route('getremotetemplate', '/getremotetemplate') config.add_route('isthemeprivate', '/isthemeprivate') config.add_route('download_resource', '/downloadresource') # Appcache manifest config.add_route( 'appcache', '/geoportailv3.appcache' ) return config.make_wsgi_app()
def includeme(config): """ This function returns a Pyramid WSGI application. """ settings = config.get_settings() config.include("c2cgeoportal_commons") call_hook(settings, "after_settings", settings) get_user_from_request = create_get_user_from_request(settings) config.add_request_method(get_user_from_request, name="user", property=True) config.add_request_method(get_user_from_request, name="get_user") # Configure 'locale' dir as the translation dir for c2cgeoportal app config.add_translation_dirs("c2cgeoportal_geoportal:locale/") config.include('c2cwsgiutils.pyramid.includeme') health_check = HealthCheck(config) # Initialise DBSessions init_dbsessions(settings, config, health_check) # Initialize the dbreflection module dbreflection.init() checker.init(config, health_check) check_collector.init(config, health_check) config.include("pyramid_closure") # dogpile.cache configuration if 'cache' in settings: caching.init_region(settings['cache']) from c2cgeoportal_commons.models.main import InvalidateCacheEvent @zope.event.classhandler.handler(InvalidateCacheEvent) def handle(event: InvalidateCacheEvent): del event caching.invalidate_region() # Register a tween to get back the cache buster path. config.add_tween( "c2cgeoportal_geoportal.lib.cacheversion.CachebusterTween") # Bind the mako renderer to other file extensions add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") # Add the "geojson" renderer config.add_renderer("geojson", GeoJSON()) # Add decimal json renderer config.add_renderer("decimaljson", DecimalJSON()) # Add the "xsd" renderer config.add_renderer( "xsd", XSD(sequence_callback=dbreflection.xsd_sequence_callback)) # Add the set_user_validator directive, and set a default user validator config.add_directive("set_user_validator", set_user_validator) config.set_user_validator(default_user_validator) if settings.get("ogcproxy_enable", False): # pragma: no cover # Add an OGCProxy view config.add_route_predicate("ogc_server", OgcproxyRoutePredicate) config.add_route("ogcproxy", "/ogcproxy", ogc_server=True) config.add_view("papyrus_ogcproxy.views:ogcproxy", route_name="ogcproxy") # Add routes to the mapserver proxy config.add_route_predicate("mapserverproxy", MapserverproxyRoutePredicate) config.add_route( "mapserverproxy", "/mapserv_proxy", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), ) # Add route to the tinyows proxy config.add_route( "tinyowsproxy", "/tinyows_proxy", pregenerator=C2CPregenerator(role=True), ) # Add routes to csv view config.add_route("csvecho", "/csv", request_method="POST") # Add route to the export GPX/KML view config.add_route("exportgpxkml", "/exportgpxkml") # Add routes to the echo service config.add_route("echo", "/echo", request_method="POST") # Add routes to the entry view class config.add_route("base", "/", static=True) config.add_route("loginform", "/login.html", request_method="GET") add_cors_route(config, "/login", "login") config.add_route("login", "/login", request_method="POST") add_cors_route(config, "/logout", "login") config.add_route("logout", "/logout", request_method="GET") add_cors_route(config, "/loginchange", "login") config.add_route("loginchange", "/loginchange", request_method="POST") add_cors_route(config, "/loginresetpassword", "login") config.add_route("loginresetpassword", "/loginresetpassword", request_method="POST") add_cors_route(config, "/loginuser", "login") config.add_route("loginuser", "/loginuser", request_method="GET") config.add_route("testi18n", "/testi18n.html", request_method="GET") config.add_route("apijs", "/api.js", request_method="GET") config.add_route("xapijs", "/xapi.js", request_method="GET") config.add_route("apihelp", "/apihelp.html", request_method="GET") config.add_route("xapihelp", "/xapihelp.html", request_method="GET") config.add_route( "themes", "/themes", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("invalidate", "/invalidate", request_method="GET") # Print proxy routes config.add_route("printproxy", "/printproxy", request_method="HEAD") add_cors_route(config, "/printproxy/*all", "print") config.add_route( "printproxy_capabilities", "/printproxy/capabilities.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("printproxy_report_create", "/printproxy/report.{format}", request_method="POST", header=JSON_CONTENT_TYPE) config.add_route("printproxy_status", "/printproxy/status/{ref}.json", request_method="GET") config.add_route("printproxy_cancel", "/printproxy/cancel/{ref}", request_method="DELETE") config.add_route("printproxy_report_get", "/printproxy/report/{ref}", request_method="GET") # For v2 config.add_route( "printproxy_info", "/printproxy/info.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route( "printproxy_create", "/printproxy/create.json", request_method="POST", ) config.add_route( "printproxy_get", "/printproxy/{file}.printout", request_method="GET", ) # Full-text search routes add_cors_route(config, "/fulltextsearch", "fulltextsearch") config.add_route("fulltextsearch", "/fulltextsearch") # Access to raster data add_cors_route(config, "/raster", "raster") config.add_route("raster", "/raster", request_method="GET") add_cors_route(config, "/profile.{ext}", "profile") config.add_route("profile.csv", "/profile.csv", request_method="POST") config.add_route("profile.json", "/profile.json", request_method="POST") # Shortener add_cors_route(config, "/short/create", "shortener") config.add_route("shortener_create", "/short/create", request_method="POST") config.add_route("shortener_get", "/short/{ref}", request_method="GET") # Geometry processing config.add_route("difference", "/difference", request_method="POST") # PDF report tool config.add_route("pdfreport", "/pdfreport/{layername}/{ids}", request_method="GET") # Add routes for the "layers" web service add_cors_route(config, "/layers/*all", "layers") config.add_route("layers_count", "/layers/{layer_id:\\d+}/count", request_method="GET") config.add_route( "layers_metadata", "/layers/{layer_id:\\d+}/md.xsd", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("layers_read_many", "/layers/{layer_id:\\d+,?(\\d+,)*\\d*$}", request_method="GET") # supports URLs like /layers/1,2,3 config.add_route("layers_read_one", "/layers/{layer_id:\\d+}/{feature_id}", request_method="GET") config.add_route("layers_create", "/layers/{layer_id:\\d+}", request_method="POST", header=JSON_CONTENT_TYPE) config.add_route("layers_update", "/layers/{layer_id:\\d+}/{feature_id}", request_method="PUT", header=JSON_CONTENT_TYPE) config.add_route("layers_delete", "/layers/{layer_id:\\d+}/{feature_id}", request_method="DELETE") config.add_route( "layers_enumerate_attribute_values", "/layers/{layer_name}/values/{field_name}", request_method="GET", pregenerator=C2CPregenerator(), ) # There is no view corresponding to that route, it is to be used from # mako templates to get the root of the "layers" web service config.add_route("layers_root", "/layers/", request_method="HEAD") # Resource proxy (load external url, useful when loading non https content) config.add_route("resourceproxy", "/resourceproxy", request_method="GET") # Scan view decorator for adding routes config.scan(ignore=[ "c2cgeoportal_geoportal.scripts", "c2cgeoportal_geoportal.wsgi_app" ]) if "subdomains" in settings: # pragma: no cover config.registry.registerUtility(MultiDomainStaticURLInfo(), IStaticURLInfo) # Add the static view (for static resources) _add_static_view(config, "static", "c2cgeoportal_geoportal:static") _add_static_view(config, "project", "c2cgeoportal_geoportal:project") add_admin_interface(config) add_static_view(config) # Handles the other HTTP errors raised by the views. Without that, # the client receives a status=200 without content. config.add_view(error_handler, context=HTTPException)
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator( root_factory=Root, settings=settings, locale_negotiator=locale_negotiator, authentication_policy=create_authentication(settings) ) # config.add_subscriber(add_cors_headers_response_callback, NewRequest) # overwrite print routes config.add_route( "lux_printproxy_report_create", "/printproxy/report.{format}", request_method="POST" ) config.add_route( "lux_printproxy_status", "/printproxy/status/{ref}.json", request_method="GET" ) config.add_route( "lux_printproxy_report_get", "/printproxy/report/{ref}", request_method="GET" ) config.add_route( "lux_printproxy_report_cancel", "/printproxy/cancel/{ref}", request_method="DELETE" ) # mymaps routes config.add_route( "mymaps", "/mymaps", request_method="HEAD" ) config.add_route( "mymaps_image", "/", request_method="HEAD" ) config.add_route( "mymaps_getcategories", "mymaps/categories", request_method="GET" ) config.add_route( "mymaps_getallcategories", "mymaps/allcategories", request_method="GET" ) config.add_route( "generate_symbol_file", "/mymaps/generate_symbol_file", request_method="GET" ) config.add_route( "mymaps_getpublicmaps", "/mymaps/public_maps", request_method="GET" ) config.add_route( "mymaps_getpublicategories", "/mymaps/public_categories", request_method="GET" ) config.add_route( "mymaps_getmaps", "/mymaps/maps", request_method="GET" ) config.add_route( "mymaps_features", "/mymaps/features/{map_id}", request_method="GET" ) config.add_route( "mymaps_map_info", "/mymaps/map_info/{map_id}", request_method="GET" ) config.add_route( "predefined_wms", "/predefined_wms", request_method="GET" ) config.add_route( "mymaps_create", "/mymaps/create", request_method="POST" ) config.add_route( "mymaps_rate", "/mymaps/rate/{map_id}" ) config.add_route( "mymaps_update", "/mymaps/update/{map_id}", request_method="PUT" ) config.add_route( "mymaps_map", "/mymaps/map/{map_id}", request_method="GET" ) config.add_route( "mymaps_comment", "/mymaps/comment/{map_id}", request_method="POST" ) config.add_route( "mymaps_upload_image", "/mymaps/upload_image", request_method="POST" ) config.add_route( "mymaps_upload_symbol", "/mymaps/upload_symbol", request_method="POST" ) config.add_route( "mymaps_get_image", "/mymaps/images/{filename}", request_method="GET" ) config.add_route( "mymaps_get_symbol", "/mymaps/symbol/{symbol_id}", request_method="GET" ) config.add_route( "mymaps_users_categories", "/mymaps/get_users_categories", request_method="GET" ) config.add_route( "mymaps_get_symbols", "/mymaps/symbols", request_method="GET" ) config.add_route( "mymaps_delete", "/mymaps/delete/{map_id}", request_method="DELETE" ) config.add_route( "mymaps_delete_all_features", "/mymaps/delete_all_features/{map_id}", request_method="DELETE" ) config.add_route( "mymaps_delete_feature", "/mymaps/delete_feature/{feature_id}", request_method="DELETE" ) config.add_route( "mymaps_save_feature", "/mymaps/save_feature/{map_id}", request_method="POST" ) config.add_route( "mymaps_save_features", "/mymaps/save_features/{map_id}", request_method="POST" ) config.add_route( "mymaps_save_order", "/mymaps/save_order/{map_id}", request_method="POST" ) config.add_route( "mymaps_copy", "/mymaps/copy/{map_id}", request_method="POST" ) config.add_route( "exportgpxkml", "/mymaps/exportgpxkml", request_method="POST" ) config.add_route( "get_arrow_color", "/mymaps/getarrow" ) config.add_route( "getroute", "/mymaps/getroute" ) config.add_route( "getremoteroute", "/router/getroute" ) # geocoder routes config.add_route( "reverse_geocode", "/geocode/reverse" ) config.add_route( "geocode", "/geocode/search" ) config.add_route( "feedback", "/feedback" ) config.add_route( "feedbackanf", "/feedbackanf" ) # pag routes config.add_route( "pag_url", "/pag" ) # pag routes config.add_route( "pag_report", "/pag/report/{oid}.pdf" ) # pag routes config.add_route( "casipo_url", "/casipo" ) # pag routes config.add_route( "casipo_report", "/casipo/report/{oid}.pdf" ) # pds routes config.add_route( "pds_url", "/pds" ) # pag routes config.add_route( "pds_report", "/pds/report/{oid}.pdf" ) config.add_route( "pag_files", "/pag/files/{_file}" ) config.add_route( "get_png", "/legends/get" ) config.add_route( "get_html", "/legends/get_html" ) # full text search routes config.add_route("fulltextsearch", "/fulltextsearch") # layer search routes config.add_route("layersearch", "/layersearch") # cms search routes config.add_route("cmssearch", "/cmssearch") # jsapi routes config.add_route( 'jsapiloader', '/apiv3loader.js' ) config.add_route( 'jsapiexample', '/api-example' ) config.add_route( 'jsapilayers', '/jsapilayers' ) config.include('c2cgeoportal') config.include('pyramid_closure') add_mako_renderer(config, '.appcache') config.add_translation_dirs('geoportailv3:locale/') # initialize database engines = config.get_settings()['sqlalchemy_engines'] if engines: config.registry.dbmakers = {} for engine in engines: if 'url' not in engines[engine]: sqlahelper.add_engine( sqlalchemy.create_engine(engines[engine]), name=engine) else: sqlahelper.add_engine( sqlalchemy.create_engine(engines[engine]['url']), name=engine) config.registry.dbmakers[engine] = sessionmaker( bind=sqlahelper.get_engine(engine)) config.add_request_method(init_db(engine), 'db_'+engine, reify=True) from geoportailv3.views.authentication import ldap_user_validator, \ get_user_from_request ldap_settings = config.get_settings()['ldap'] if ldap_settings: config.include('pyramid_ldap') """Config the ldap connection. """ config.ldap_setup( ldap_settings['url'], ldap_settings['bind'], ldap_settings['passwd'], ) config.ldap_set_login_query( ldap_settings['base_dn'], filter_tmpl='(login=%(login)s)', scope=ldap.SCOPE_SUBTREE, ) config.set_request_property( get_user_from_request, name='user', reify=True ) set_user_validator(config, ldap_user_validator) json_renderer = JSON() json_renderer.add_adapter(datetime.date, datetime_adapter) json_renderer.add_adapter(datetime.datetime, datetime_adapter) json_renderer.add_adapter(Decimal, decimal_adapter) config.add_renderer('json', json_renderer) mail_config = config.get_settings()['turbomail'] if mail_config: interface.start(mail_config) # scan view decorator for adding routes config.scan() # add the interfaces add_interface(config, interface_type=INTERFACE_TYPE_NGEO_CATALOGUE) config.add_route("echocsv", "/profile/echocsv", request_method="POST") config.add_route('getuserinfo', '/getuserinfo') config.add_route('wms', '/ogcproxywms') config.add_route('https_proxy', '/httpsproxy') config.add_route('download_sketch', '/downloadsketch') config.add_route('download', '/download') config.add_route('download_measurement', '/downloadmeasurement') config.add_route('preview_measurement', '/previewmeasurement') config.add_route('qr', '/qr') config.add_route('getfeatureinfo', '/getfeatureinfo') config.add_route('getpoitemplate', '/getpoitemplate') config.add_route('getremotetemplate', '/getremotetemplate') config.add_route('isthemeprivate', '/isthemeprivate') config.add_route('download_resource', '/downloadresource') # Appcache manifest config.add_route( 'appcache', '/geoportailv3.appcache' ) return config.make_wsgi_app()
def includeme(config): """ This function returns a Pyramid WSGI application. """ # update the settings object from the YAML application config file settings = config.get_settings() settings.update(c2c.template.get_config(settings.get("app.cfg"))) call_hook(settings, "after_settings", settings) config.add_request_method(_create_get_user_from_request(settings), name="user", property=True) # configure 'locale' dir as the translation dir for c2cgeoportal app config.add_translation_dirs("c2cgeoportal:locale/") # initialize database engine = sqlalchemy.engine_from_config(settings, "sqlalchemy.") sqlahelper.add_engine(engine) config.include(pyramid_tm.includeme) config.include("pyramid_closure") if "sqlalchemy_slave.url" in settings and \ settings["sqlalchemy.url"] != settings["sqlalchemy_slave.url"]: # pragma: nocover # Setup a slave DB connection and add a tween to switch between it and the default one. log.info("Using a slave DB for reading") engine_slave = sqlalchemy.engine_from_config(config.get_settings(), "sqlalchemy_slave.") sqlahelper.add_engine(engine_slave, name="slave") config.add_tween("c2cgeoportal.models.db_chooser_tween_factory", over="pyramid_tm.tm_tween_factory") # initialize the dbreflection module dbreflection.init(engine) # dogpile.cache configuration caching.init_region(settings["cache"]) caching.invalidate_region() # Register a tween to get back the cache buster path. config.add_tween("c2cgeoportal.lib.cacheversion.CachebusterTween") # bind the mako renderer to other file extensions add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") config.include("pyramid_chameleon") # add the "geojson" renderer config.add_renderer("geojson", GeoJSON()) # add decimal json renderer config.add_renderer("decimaljson", DecimalJSON()) # add the "xsd" renderer config.add_renderer( "xsd", XSD(sequence_callback=dbreflection._xsd_sequence_callback)) # add the set_user_validator directive, and set a default user # validator config.add_directive("set_user_validator", set_user_validator) config.set_user_validator(default_user_validator) if settings.get("ogcproxy_enable", False): # pragma: no cover # add an OGCProxy view config.add_route_predicate("ogc_server", OgcproxyRoutePredicate) config.add_route("ogcproxy", "/ogcproxy", ogc_server=True) config.add_view("papyrus_ogcproxy.views:ogcproxy", route_name="ogcproxy") # add routes to the mapserver proxy config.add_route_predicate("mapserverproxy", MapserverproxyRoutePredicate) config.add_route( "mapserverproxy", "/mapserv_proxy", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), ) # add route to the tinyows proxy config.add_route( "tinyowsproxy", "/tinyows_proxy", pregenerator=C2CPregenerator(role=True), ) # add routes to csv view config.add_route("csvecho", "/csv", request_method="POST") # add route to the export GPX/KML view config.add_route("exportgpxkml", "/exportgpxkml") # add routes to the echo service config.add_route("echo", "/echo", request_method="POST") # add routes to the entry view class config.add_route("base", "/", static=True) config.add_route("loginform", "/login.html", request_method="GET") add_cors_route(config, "/login", "login") config.add_route("login", "/login", request_method="POST") add_cors_route(config, "/logout", "login") config.add_route("logout", "/logout", request_method="GET") add_cors_route(config, "/loginchange", "login") config.add_route("loginchange", "/loginchange", request_method="POST") add_cors_route(config, "/loginresetpassword", "login") config.add_route("loginresetpassword", "/loginresetpassword", request_method="POST") add_cors_route(config, "/loginuser", "login") config.add_route("loginuser", "/loginuser", request_method="GET") config.add_route("testi18n", "/testi18n.html", request_method="GET") config.add_route("apijs", "/api.js", request_method="GET") config.add_route("xapijs", "/xapi.js", request_method="GET") config.add_route("apihelp", "/apihelp.html", request_method="GET") config.add_route("xapihelp", "/xapihelp.html", request_method="GET") config.add_route( "themes", "/themes", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("invalidate", "/invalidate", request_method="GET") # checker routes, Checkers are web services to test and assess that # the application is correctly functioning. # These web services are used by tools like (nagios). config.add_route("checker_routes", "/checker_routes", request_method="GET") config.add_route("checker_lang_files", "/checker_lang_files", request_method="GET") config.add_route("checker_pdf3", "/checker_pdf3", request_method="GET") config.add_route("checker_fts", "/checker_fts", request_method="GET") config.add_route("checker_theme_errors", "/checker_theme_errors", request_method="GET") config.add_route("checker_phantomjs", "/checker_phantomjs", request_method="GET") # collector config.add_route("check_collector", "/check_collector", request_method="GET") # print proxy routes config.add_route("printproxy", "/printproxy", request_method="HEAD") add_cors_route(config, "/printproxy/*all", "print") config.add_route( "printproxy_capabilities", "/printproxy/capabilities.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("printproxy_report_create", "/printproxy/report.{format}", request_method="POST", header=JSON_CONTENT_TYPE) config.add_route("printproxy_status", "/printproxy/status/{ref}.json", request_method="GET") config.add_route("printproxy_cancel", "/printproxy/cancel/{ref}", request_method="DELETE") config.add_route("printproxy_report_get", "/printproxy/report/{ref}", request_method="GET") # full text search routes add_cors_route(config, "/fulltextsearch", "fulltextsearch") config.add_route("fulltextsearch", "/fulltextsearch") # Access to raster data add_cors_route(config, "/raster", "raster") config.add_route("raster", "/raster", request_method="GET") add_cors_route(config, "/profile.{ext}", "profile") config.add_route("profile.csv", "/profile.csv", request_method="POST") config.add_route("profile.json", "/profile.json", request_method="POST") # shortener add_cors_route(config, "/short/create", "shortner") config.add_route("shortener_create", "/short/create", request_method="POST") config.add_route("shortener_get", "/short/{ref}", request_method="GET") # Geometry processing config.add_route("difference", "/difference", request_method="POST") # PDF report tool config.add_route("pdfreport", "/pdfreport/{layername}/{id}", request_method="GET") # add routes for the "layers" web service add_cors_route(config, "/layers/*all", "layers") config.add_route("layers_count", "/layers/{layer_id:\\d+}/count", request_method="GET") config.add_route( "layers_metadata", "/layers/{layer_id:\\d+}/md.xsd", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("layers_read_many", "/layers/{layer_id:\\d+,?(\\d+,)*\\d*$}", request_method="GET") # supports URLs like /layers/1,2,3 config.add_route("layers_read_one", "/layers/{layer_id:\\d+}/{feature_id}", request_method="GET") config.add_route("layers_create", "/layers/{layer_id:\\d+}", request_method="POST", header=JSON_CONTENT_TYPE) config.add_route("layers_update", "/layers/{layer_id:\\d+}/{feature_id}", request_method="PUT", header=JSON_CONTENT_TYPE) config.add_route("layers_delete", "/layers/{layer_id:\\d+}/{feature_id}", request_method="DELETE") config.add_route( "layers_enumerate_attribute_values", "/layers/{layer_name}/values/{field_name}", request_method="GET", pregenerator=C2CPregenerator(), ) # there's no view corresponding to that route, it is to be used from # mako templates to get the root of the "layers" web service config.add_route("layers_root", "/layers/", request_method="HEAD") # Resource proxy (load external url, useful when loading non https content) config.add_route("resourceproxy", "/resourceproxy", request_method="GET") # pyramid_formalchemy's configuration config.include("pyramid_formalchemy") config.include("fa.jquery") # define the srid, schema and parentschema # as global variables to be usable in the model c2cgeoportal.srid = settings["srid"] c2cgeoportal.schema = settings["schema"] c2cgeoportal.parentschema = settings["parentschema"] c2cgeoportal.formalchemy_default_zoom = get_setting( settings, ("admin_interface", "map_zoom"), c2cgeoportal.formalchemy_default_zoom) c2cgeoportal.formalchemy_default_x = get_setting( settings, ("admin_interface", "map_x"), c2cgeoportal.formalchemy_default_x) c2cgeoportal.formalchemy_default_y = get_setting( settings, ("admin_interface", "map_y"), c2cgeoportal.formalchemy_default_y) c2cgeoportal.formalchemy_available_functionalities = get_setting( settings, ("admin_interface", "available_functionalities"), c2cgeoportal.formalchemy_available_functionalities) c2cgeoportal.formalchemy_available_metadata = get_setting( settings, ("admin_interface", "available_metadata"), c2cgeoportal.formalchemy_available_metadata) c2cgeoportal.formalchemy_available_metadata = [ e if isinstance(e, basestring) else e.get("name") for e in c2cgeoportal.formalchemy_available_metadata ] config.add_route("checker_all", "/checker_all", request_method="GET") config.add_route("version_json", "/version.json", request_method="GET") stats.init(config) # scan view decorator for adding routes config.scan(ignore=["c2cgeoportal.tests", "c2cgeoportal.scripts"]) if "subdomains" in settings: # pragma: no cover config.registry.registerUtility(MultiDomainStaticURLInfo(), IStaticURLInfo) # add the static view (for static resources) _add_static_view(config, "static", "c2cgeoportal:static") _add_static_view(config, "project", "c2cgeoportal:project") add_admin_interface(config) add_static_view(config) # Handles the other HTTP errors raised by the views. Without that, # the client receives a status=200 without content. config.add_view(error_handler, context=HTTPException) _log_versions(settings)
def includeme(config): """ This function returns a Pyramid WSGI application. """ # update the settings object from the YAML application config file settings = config.get_settings() settings.update(yaml.load(file(settings.get("app.cfg")))) global srid global schema global parentschema global formalchemy_language global formalchemy_default_zoom global formalchemy_default_x global formalchemy_default_y global formalchemy_available_functionalities global formalchemy_available_metadata config.add_request_method(_create_get_user_from_request(settings), name="user", property=True) # configure 'locale' dir as the translation dir for c2cgeoportal app config.add_translation_dirs("c2cgeoportal:locale/") # initialize database engine = sqlalchemy.engine_from_config(settings, "sqlalchemy.") sqlahelper.add_engine(engine) config.include(pyramid_tm.includeme) config.include("pyramid_closure") # initialize the dbreflection module dbreflection.init(engine) # dogpile.cache configuration caching.init_region(settings["cache"]) caching.invalidate_region() # bind the mako renderer to other file extensions add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") config.include("pyramid_chameleon") # add the "geojson" renderer config.add_renderer("geojson", GeoJSON()) # add decimal json renderer config.add_renderer("decimaljson", DecimalJSON()) # add the "xsd" renderer config.add_renderer( "xsd", XSD(sequence_callback=dbreflection._xsd_sequence_callback)) # add the set_user_validator directive, and set a default user # validator config.add_directive("set_user_validator", set_user_validator) config.set_user_validator(default_user_validator) if settings.get("ogcproxy_enable", True): # add an OGCProxy view config.add_route("ogcproxy", "/ogcproxy", custom_predicates=(ogcproxy_route_predicate, )) config.add_view("papyrus_ogcproxy.views:ogcproxy", route_name="ogcproxy") # add routes to the mapserver proxy config.add_route( "mapserverproxy", "/mapserv_proxy", custom_predicates=(mapserverproxy_route_predicate, ), pregenerator=C2CPregenerator(role=True), ) # add route to the tinyows proxy config.add_route( "tinyowsproxy", "/tinyows_proxy", pregenerator=C2CPregenerator(role=True), ) # add routes to csv view config.add_route("csvecho", "/csv", request_method="POST") # add route to the export GPX/KML view config.add_route("exportgpxkml", "/exportgpxkml") # add routes to the echo service config.add_route("echo", "/echo", request_method="POST") # add routes to the entry view class config.add_route("loginform", "/login.html", request_method="GET") add_cors_route(config, "/login", "login") config.add_route("login", "/login", request_method=("GET", "POST")) add_cors_route(config, "/logout", "login") config.add_route("logout", "/logout", request_method="GET") add_cors_route(config, "/loginchange", "login") config.add_route("loginchange", "/loginchange", request_method="POST") add_cors_route(config, "/loginresetpassword", "login") config.add_route("loginresetpassword", "/loginresetpassword", request_method="GET") config.add_route("testi18n", "/testi18n.html", request_method="GET") config.add_route("apijs", "/api.js", request_method="GET") config.add_route("xapijs", "/xapi.js", request_method="GET") config.add_route("apihelp", "/apihelp.html", request_method="GET") config.add_route("xapihelp", "/xapihelp.html", request_method="GET") config.add_route( "themes", "/themes", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("invalidate", "/invalidate", request_method="GET") # checker routes, Checkers are web services to test and assess that # the application is correctly functioning. # These web services are used by tools like (nagios). config.add_route("checker_main", "/checker_main", request_method="GET") config.add_route("checker_viewer", "/checker_viewer", request_method="GET") config.add_route("checker_edit", "/checker_edit", request_method="GET") config.add_route("checker_edit_js", "/checker_edit_js", request_method="GET") config.add_route("checker_api", "/checker_api", request_method="GET") config.add_route("checker_xapi", "/checker_xapi", request_method="GET") config.add_route("checker_lang_files", "/checker_lang_files", request_method="GET") config.add_route( "checker_printcapabilities", "/checker_printcapabilities", request_method="GET", ) config.add_route("checker_pdf", "/checker_pdf", request_method="GET") config.add_route( "checker_print3capabilities", "/checker_print3capabilities", request_method="GET", ) config.add_route("checker_pdf3", "/checker_pdf3", request_method="GET") config.add_route("checker_fts", "/checker_fts", request_method="GET") config.add_route("checker_wmscapabilities", "/checker_wmscapabilities", request_method="GET") config.add_route("checker_wfscapabilities", "/checker_wfscapabilities", request_method="GET") config.add_route("checker_theme_errors", "/checker_theme_errors", request_method="GET") # collector config.add_route("check_collector", "/check_collector", request_method="GET") # print proxy routes config.add_route("printproxy", "/printproxy", request_method="HEAD") config.add_route( "printproxy_info", "/printproxy/info.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route( "printproxy_create", "/printproxy/create.json", request_method="POST", ) config.add_route( "printproxy_get", "/printproxy/{file}.printout", request_method="GET", ) # V3 add_cors_route(config, "/printproxy/*all", "print") config.add_route( "printproxy_capabilities", "/printproxy/capabilities.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("printproxy_report_create", "/printproxy/report.{format}", request_method="POST", header=JSON_CONTENT_TYPE) config.add_route("printproxy_status", "/printproxy/status/{ref}.json", request_method="GET") config.add_route("printproxy_cancel", "/printproxy/cancel/{ref}", request_method="DELETE") config.add_route("printproxy_report_get", "/printproxy/report/{ref}", request_method="GET") # full text search routes add_cors_route(config, "/fulltextsearch", "fulltextsearch") config.add_route("fulltextsearch", "/fulltextsearch") # Access to raster data add_cors_route(config, "/raster", "raster") config.add_route("raster", "/raster", request_method="GET") add_cors_route(config, "/profile.{ext}", "profile") config.add_route("profile.csv", "/profile.csv", request_method="POST") config.add_route("profile.json", "/profile.json", request_method="POST") # shortener config.add_route("shortener_create", "/short/create", request_method="POST") config.add_route("shortener_get", "/short/{ref}", request_method="GET") # Geometry processing config.add_route("difference", "/difference", request_method="POST") # PDF report tool config.add_route("pdfreport", "/pdfreport/{layername}/{id}", request_method="GET") # add routes for the "layers" web service add_cors_route(config, "/layers/*all", "layers") config.add_route("layers_count", "/layers/{layer_id:\\d+}/count", request_method="GET") config.add_route( "layers_metadata", "/layers/{layer_id:\\d+}/md.xsd", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("layers_read_many", "/layers/{layer_id:\\d+,?(\\d+,)*\\d*$}", request_method="GET") # supports URLs like /layers/1,2,3 config.add_route("layers_read_one", "/layers/{layer_id:\\d+}/{feature_id}", request_method="GET") config.add_route("layers_create", "/layers/{layer_id:\\d+}", request_method="POST", header=JSON_CONTENT_TYPE) config.add_route("layers_update", "/layers/{layer_id:\\d+}/{feature_id}", request_method="PUT", header=JSON_CONTENT_TYPE) config.add_route("layers_delete", "/layers/{layer_id:\\d+}/{feature_id}", request_method="DELETE") config.add_route( "layers_enumerate_attribute_values", "/layers/{layer_name}/values/{field_name}", request_method="GET", pregenerator=C2CPregenerator(), ) # there's no view corresponding to that route, it is to be used from # mako templates to get the root of the "layers" web service config.add_route("layers_root", "/layers/", request_method="HEAD") # pyramid_formalchemy's configuration config.include("pyramid_formalchemy") config.include("fa.jquery") # define the srid, schema and parentschema # as global variables to be usable in the model srid = settings["srid"] schema = settings["schema"] parentschema = settings["parentschema"] formalchemy_default_zoom = get_setting(settings, ("admin_interface", "map_zoom"), formalchemy_default_zoom) formalchemy_default_x = get_setting(settings, ("admin_interface", "map_x"), formalchemy_default_x) formalchemy_default_y = get_setting(settings, ("admin_interface", "map_y"), formalchemy_default_y) formalchemy_available_functionalities = get_setting( settings, ("admin_interface", "available_functionalities"), formalchemy_available_functionalities) formalchemy_available_metadata = get_setting( settings, ("admin_interface", "available_metadata"), formalchemy_available_metadata) config.add_route("checker_all", "/checker_all", request_method="GET") # scan view decorator for adding routes config.scan(ignore="c2cgeoportal.tests") config.registry.registerUtility(MultiDomainStaticURLInfo(), IStaticURLInfo) # add the static view (for static resources) _add_static_view(config, "static", "c2cgeoportal:static") _add_static_view(config, "project", "c2cgeoportal:project") add_admin_interface(config) add_static_view(config) # Handles the other HTTP errors raised by the views. Without that, # the client receives a status=200 without content. config.add_view(error_handler, context=HTTPException)
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) config.include("pyramid_assetviews") add_mako_renderer(config, '.html') # set up redis cache configure_caches(settings) # set up document text attributes parsers configure_parsers(settings) # configure connection pool for http requests max_connections = int(settings.get('http_request_connection_pool_size')) http_requests.session = requests.Session() # see: http://docs.python-requests.org/en/master/api/#requests.adapters.HTTPAdapter # noqa # and: http://urllib3.readthedocs.io/en/1.2.1/managers.html adapter = requests.adapters.HTTPAdapter( pool_connections=1, # number of pools (one pool per host) pool_maxsize=max_connections # connections per pool ) http_requests.session.mount('http://', adapter) # Register a tween to get back the cache buster path. config.add_tween("c2corg_ui.caching.cacheversion.CachebusterTween") # view for assets with cache buster _add_static_view(config, 'static', 'c2corg_ui:static') # favicon stuff filenames = [ "android-chrome-192x192.png", "android-chrome-384x384.png", "apple-touch-icon.png", "browserconfig.xml", "favicon-16x16.png", "favicon-32x32.png", "favicon.ico", "manifest.json", "mstile-150x150.png", "safari-pinned-tab.svg" ] config.add_asset_views('c2corg_ui:static/favicons', filenames=filenames, http_cache=60 * 60 * 24 * 7) # robots.txt config.add_asset_views('c2corg_ui:static', 'robots.txt') # static views only used in debug mode config.add_static_view('node_modules', settings.get('node_modules_path'), cache_max_age=3600) config.add_static_view('closure', settings.get('closure_library_path'), cache_max_age=3600) # page views config.add_route('index', '/') config.add_route('waypoints_index', '/waypoints') config.add_route('waypoints_add', '/waypoints/add') config.add_route('waypoints_edit', '/waypoints/edit/{id:\d+}/{lang}') config.add_route('waypoints_history', '/waypoints/history/{id:\d+}/{lang}') config.add_route('waypoints_archive', '/waypoints/version/{id:\d+}/{lang}/{version:\d+}') config.add_route('waypoints_view', '/waypoints/{id:\d+}/{lang}/{slug}') config.add_route('waypoints_view_id_lang', '/waypoints/{id:\d+}/{lang}') config.add_route('waypoints_view_id', '/waypoints/{id:\d+}') config.add_route('waypoints_diff', '/waypoints/diff/{id:\d+}/{lang}/{v1}/{v2}') config.add_route('waypoints_preview', '/waypoints/preview') config.add_route('routes_index', '/routes') config.add_route('routes_add', '/routes/add') config.add_route('routes_edit', '/routes/edit/{id:\d+}/{lang}') config.add_route('routes_history', '/routes/history/{id:\d+}/{lang}') config.add_route('routes_archive', '/routes/version/{id:\d+}/{lang}/{version:\d+}') config.add_route('routes_view', '/routes/{id:\d+}/{lang}/{slug}') config.add_route('routes_view_id_lang', '/routes/{id:\d+}/{lang}') config.add_route('routes_view_id', '/routes/{id:\d+}') config.add_route('routes_diff', '/routes/diff/{id:\d+}/{lang}/{v1}/{v2}') config.add_route('routes_preview', '/routes/preview') config.add_route('outings_index', '/outings') config.add_route('outings_add', '/outings/add') config.add_route('outings_edit', '/outings/edit/{id:\d+}/{lang}') config.add_route('outings_history', '/outings/history/{id:\d+}/{lang}') config.add_route('outings_archive', '/outings/version/{id:\d+}/{lang}/{version:\d+}') config.add_route('outings_view', '/outings/{id:\d+}/{lang}/{slug}') config.add_route('outings_view_id_lang', '/outings/{id:\d+}/{lang}') config.add_route('outings_view_id', '/outings/{id:\d+}') config.add_route('outings_diff', '/outings/diff/{id:\d+}/{lang}/{v1}/{v2}') config.add_route('outings_preview', '/outings/preview') config.add_route('articles_index', '/articles') config.add_route('articles_add', '/articles/add') config.add_route('articles_edit', '/articles/edit/{id:\d+}/{lang}') config.add_route('articles_history', '/articles/history/{id:\d+}/{lang}') config.add_route('articles_archive', '/articles/version/{id:\d+}/{lang}/{version:\d+}') config.add_route('articles_view', '/articles/{id:\d+}/{lang}/{slug}') config.add_route('articles_view_id_lang', '/articles/{id:\d+}/{lang}') config.add_route('articles_view_id', '/articles/{id:\d+}') config.add_route('articles_diff', '/articles/diff/{id:\d+}/{lang}/{v1}/{v2}') config.add_route('articles_preview', '/articles/preview') config.add_route('books_index', '/books') config.add_route('books_add', '/books/add') config.add_route('books_edit', '/books/edit/{id:\d+}/{lang}') config.add_route('books_history', '/books/history/{id:\d+}/{lang}') config.add_route('books_archive', '/books/version/{id:\d+}/{lang}/{version:\d+}') config.add_route('books_view', '/books/{id:\d+}/{lang}/{slug}') config.add_route('books_view_id_lang', '/books/{id:\d+}/{lang}') config.add_route('books_view_id', '/books/{id:\d+}') config.add_route('books_diff', '/books/diff/{id:\d+}/{lang}/{v1}/{v2}') config.add_route('books_preview', '/books/preview') config.add_route('xreports_index', '/xreports') config.add_route('xreports_add', '/xreports/add') config.add_route('xreports_edit', '/xreports/edit/{id:\d+}/{lang}') config.add_route('xreports_history', '/xreports/history/{id:\d+}/{lang}') config.add_route('xreports_archive', '/xreports/version/{id:\d+}/{lang}/{version:\d+}') config.add_route('xreports_view', '/xreports/{id:\d+}/{lang}/{slug}') config.add_route('xreports_view_id_lang', '/xreports/{id:\d+}/{lang}') config.add_route('xreports_view_id', '/xreports/{id:\d+}') config.add_route('xreports_diff', '/xreports/diff/{id:\d+}/{lang}/{v1}/{v2}') config.add_route('xreports_preview', '/xreports/preview') config.add_route('xreports_data', '/xreports/data/{id:\d+}/{lang}') config.add_route('images_index', '/images') config.add_route('images_edit', '/images/edit/{id:\d+}/{lang}') config.add_route('images_history', '/images/history/{id:\d+}/{lang}') config.add_route('images_archive', '/images/version/{id:\d+}/{lang}/{version:\d+}') config.add_route('images_view', '/images/{id:\d+}/{lang}/{slug}') config.add_route('images_view_id_lang', '/images/{id:\d+}/{lang}') config.add_route('images_view_id', '/images/{id:\d+}') config.add_route('images_diff', '/images/diff/{id:\d+}/{lang}/{v1}/{v2}') config.add_route('images_preview', '/images/preview') config.add_route('areas_index', '/areas') config.add_route('areas_edit', '/areas/edit/{id:\d+}/{lang}') config.add_route('areas_history', '/areas/history/{id:\d+}/{lang}') config.add_route('areas_archive', '/areas/version/{id:\d+}/{lang}/{version:\d+}') config.add_route('areas_view', '/areas/{id:\d+}/{lang}/{slug}') config.add_route('areas_view_id_lang', '/areas/{id:\d+}/{lang}') config.add_route('areas_view_id', '/areas/{id:\d+}') config.add_route('areas_diff', '/areas/diff/{id:\d+}/{lang}/{v1}/{v2}') config.add_route('areas_preview', '/areas/preview') config.add_route('profiles_edit', '/profiles/edit/{id:\d+}/{lang}') config.add_route('profiles_view', '/profiles/{id:\d+}/{lang}') config.add_route('profiles_view_id', '/profiles/{id:\d+}') config.add_route('profiles_data', '/profiles/data/{id:\d+}/{lang}') config.add_route('profiles_preview', '/profiles/preview') config.add_route('auth', '/auth') config.add_route('auth-sso', '/auth-sso') config.add_route('sso-login', '/sso-login') config.add_route('topoguide', '/topoguide') config.add_route('yeti', '/yeti') config.add_route('serac', '/serac') config.add_route('account', '/account') config.add_route('preferences', '/preferences') config.add_route('mailinglists', '/mailinglists') config.add_route('following', '/following') config.add_route('sitemap_index', '/sitemap.xml') config.add_route('sitemap', '/sitemaps/{doc_type:[a-z]{1}}/{i:\d+}.xml') config.add_route('whatsnew', '/whatsnew') # health services config.add_route('health', '/health') config.scan(ignore='c2corg_ui.tests') return config.make_wsgi_app()
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) add_mako_renderer(config, ".html") # set up redis cache configure_caches(settings) # set up document text attributes parsers configure_parsers(settings) # configure connection pool for http requests max_connections = int(settings.get("http_request_connection_pool_size")) http_requests.session = requests.Session() # see: http://docs.python-requests.org/en/master/api/#requests.adapters.HTTPAdapter # noqa # and: http://urllib3.readthedocs.io/en/1.2.1/managers.html adapter = requests.adapters.HTTPAdapter( pool_connections=1, pool_maxsize=max_connections # number of pools (one pool per host) # connections per pool ) http_requests.session.mount("http://", adapter) # Register a tween to get back the cache buster path. config.add_tween("c2corg_ui.caching.cacheversion.CachebusterTween") # view for assets with cache buster _add_static_view(config, "static", "c2corg_ui:static") # static views only used in debug mode config.add_static_view("node_modules", settings.get("node_modules_path"), cache_max_age=3600) config.add_static_view("closure", settings.get("closure_library_path"), cache_max_age=3600) # page views config.add_route("index", "/") config.add_route("waypoints_index", "/waypoints") config.add_route("waypoints_add", "/waypoints/add") config.add_route("waypoints_edit", "/waypoints/edit/{id:\d+}/{lang}") config.add_route("waypoints_history", "/waypoints/history/{id:\d+}/{lang}") config.add_route("waypoints_archive", "/waypoints/{id:\d+}/{lang}/{version:\d+}") config.add_route("waypoints_view", "/waypoints/{id:\d+}/{lang}/{slug}") config.add_route("waypoints_view_id_lang", "/waypoints/{id:\d+}/{lang}") config.add_route("waypoints_view_id", "/waypoints/{id:\d+}") config.add_route("waypoints_diff", "/waypoints/diff/{id:\d+}/{lang}/{v1}/{v2}") config.add_route("waypoints_preview", "/waypoints/preview") config.add_route("routes_index", "/routes") config.add_route("routes_add", "/routes/add") config.add_route("routes_edit", "/routes/edit/{id:\d+}/{lang}") config.add_route("routes_history", "/routes/history/{id:\d+}/{lang}") config.add_route("routes_archive", "/routes/{id:\d+}/{lang}/{version:\d+}") config.add_route("routes_view", "/routes/{id:\d+}/{lang}/{slug}") config.add_route("routes_view_id_lang", "/routes/{id:\d+}/{lang}") config.add_route("routes_view_id", "/routes/{id:\d+}") config.add_route("routes_diff", "/routes/diff/{id:\d+}/{lang}/{v1}/{v2}") config.add_route("routes_preview", "/routes/preview") config.add_route("outings_index", "/outings") config.add_route("outings_add", "/outings/add") config.add_route("outings_edit", "/outings/edit/{id:\d+}/{lang}") config.add_route("outings_history", "/outings/history/{id:\d+}/{lang}") config.add_route("outings_archive", "/outings/{id:\d+}/{lang}/{version:\d+}") config.add_route("outings_view", "/outings/{id:\d+}/{lang}/{slug}") config.add_route("outings_view_id_lang", "/outings/{id:\d+}/{lang}") config.add_route("outings_view_id", "/outings/{id:\d+}") config.add_route("outings_diff", "/outings/diff/{id:\d+}/{lang}/{v1}/{v2}") config.add_route("outings_preview", "/outings/preview") config.add_route("articles_index", "/articles") config.add_route("articles_add", "/articles/add") config.add_route("articles_edit", "/articles/edit/{id:\d+}/{lang}") config.add_route("articles_history", "/articles/history/{id:\d+}/{lang}") config.add_route("articles_archive", "/articles/{id:\d+}/{lang}/{version:\d+}") config.add_route("articles_view", "/articles/{id:\d+}/{lang}/{slug}") config.add_route("articles_view_id_lang", "/articles/{id:\d+}/{lang}") config.add_route("articles_view_id", "/articles/{id:\d+}") config.add_route("articles_diff", "/articles/diff/{id:\d+}/{lang}/{v1}/{v2}") config.add_route("articles_preview", "/articles/preview") config.add_route("books_index", "/books") config.add_route("books_add", "/books/add") config.add_route("books_edit", "/books/edit/{id:\d+}/{lang}") config.add_route("books_history", "/books/history/{id:\d+}/{lang}") config.add_route("books_archive", "/books/{id:\d+}/{lang}/{version:\d+}") config.add_route("books_view", "/books/{id:\d+}/{lang}/{slug}") config.add_route("books_view_id_lang", "/books/{id:\d+}/{lang}") config.add_route("books_view_id", "/books/{id:\d+}") config.add_route("books_diff", "/books/diff/{id:\d+}/{lang}/{v1}/{v2}") config.add_route("books_preview", "/books/preview") config.add_route("xreports_index", "/xreports") # config.add_route('xreports_add', '/xreports/add') # config.add_route('xreports_edit', '/xreports/edit/{id:\d+}/{lang}') config.add_route("xreports_history", "/xreports/history/{id:\d+}/{lang}") config.add_route("xreports_archive", "/xreports/{id:\d+}/{lang}/{version:\d+}") config.add_route("xreports_view", "/xreports/{id:\d+}/{lang}/{slug}") config.add_route("xreports_view_id_lang", "/xreports/{id:\d+}/{lang}") config.add_route("xreports_view_id", "/xreports/{id:\d+}") config.add_route("xreports_diff", "/xreports/diff/{id:\d+}/{lang}/{v1}/{v2}") config.add_route("xreports_preview", "/xreports/preview") config.add_route("images_index", "/images") config.add_route("images_edit", "/images/edit/{id:\d+}/{lang}") config.add_route("images_history", "/images/history/{id:\d+}/{lang}") config.add_route("images_archive", "/images/{id:\d+}/{lang}/{version:\d+}") config.add_route("images_view", "/images/{id:\d+}/{lang}/{slug}") config.add_route("images_view_id_lang", "/images/{id:\d+}/{lang}") config.add_route("images_view_id", "/images/{id:\d+}") config.add_route("images_diff", "/images/diff/{id:\d+}/{lang}/{v1}/{v2}") config.add_route("images_preview", "/images/preview") config.add_route("areas_index", "/areas") config.add_route("areas_edit", "/areas/edit/{id:\d+}/{lang}") config.add_route("areas_history", "/areas/history/{id:\d+}/{lang}") config.add_route("areas_archive", "/areas/{id:\d+}/{lang}/{version:\d+}") config.add_route("areas_view", "/areas/{id:\d+}/{lang}/{slug}") config.add_route("areas_view_id_lang", "/areas/{id:\d+}/{lang}") config.add_route("areas_view_id", "/areas/{id:\d+}") config.add_route("areas_diff", "/areas/diff/{id:\d+}/{lang}/{v1}/{v2}") config.add_route("areas_preview", "/areas/preview") config.add_route("profiles_edit", "/profiles/edit/{id:\d+}/{lang}") config.add_route("profiles_view", "/profiles/{id:\d+}/{lang}") config.add_route("profiles_view_id", "/profiles/{id:\d+}") config.add_route("profiles_data", "/profiles/data/{id:\d+}/{lang}") config.add_route("profiles_preview", "/profiles/preview") config.add_route("auth", "/auth") config.add_route("auth-sso", "/auth-sso") config.add_route("account", "/account") config.add_route("preferences", "/preferences") config.add_route("mailinglists", "/mailinglists") config.add_route("following", "/following") config.add_route("robots.txt", "/robots.txt") config.add_route("sitemap_index", "/sitemap.xml") config.add_route("sitemap", "/sitemaps/{doc_type:[a-z]{1}}/{i:\d+}.xml") # health services config.add_route("health", "/health") config.scan(ignore="c2corg_ui.tests") return config.make_wsgi_app()
def main(global_config, **settings): del global_config # Unused if len(os.environ.get('SENTRY_URL', '')) > 0: sentry_sdk.init(dsn=os.environ.get('SENTRY_URL', ''), integrations=[PyramidIntegration()]) """ This function returns a Pyramid WSGI application. """ config = Configurator( root_factory=Root, settings=settings, locale_negotiator=locale_negotiator, authentication_policy=create_authentication(settings)) if os.environ.get('ALLOW_CORS', '0') == '1': config.add_subscriber(add_cors_headers_response_callback, NewRequest) if os.environ.get('DEBUG_TOOLBAR', '0') == '1': config.get_settings()['debugtoolbar.hosts'] = ['0.0.0.0/0'] config.include('pyramid_debugtoolbar') # Workaround to not have the error: distutils.errors.DistutilsArgError: no commands supplied distutils.core._setup_stop_after = 'config' config.add_route("lux_get_thumbnail", "/printproxy/thumbnail", request_method="GET") # overwrite print routes config.add_route("lux_printproxy_report_create", "/printproxy/report.{format}", request_method="POST") config.add_route("lux_printproxy_status", "/printproxy/status/{ref}.json", request_method="GET") config.add_route("lux_printproxy_report_get", "/printproxy/report/{ref}", request_method="GET") config.add_route("lux_printproxy_report_cancel", "/printproxy/cancel/{ref}", request_method="DELETE") config.include('c2cgeoportal_geoportal') distutils.core._setup_stop_after = None add_mako_renderer(config, '.appcache') config.add_translation_dirs('geoportailv3_geoportal:locale/') add_interface(config, 'main', INTERFACE_TYPE_NGEO_CATALOGUE, default=True) # ping routes config.add_route("ping", "/ping") # mymaps routes config.add_route("mymaps", "/mymaps", request_method="HEAD") config.add_route("mymaps_image", "/", request_method="HEAD") config.add_route("mymaps_get_full_mymaps", "mymaps/get_full_mymaps", request_method="GET") config.add_route("mymaps_getcategories", "mymaps/categories", request_method="GET") config.add_route("mymaps_getallcategories", "mymaps/allcategories", request_method="GET") config.add_route("generate_symbol_file", "/mymaps/generate_symbol_file", request_method="GET") config.add_route("mymaps_getpublicmaps", "/mymaps/public_maps", request_method="GET") config.add_route("mymaps_getpublicategories", "/mymaps/public_categories", request_method="GET") config.add_route("mymaps_getmaps", "/mymaps/maps", request_method="GET") config.add_route("mymaps_features", "/mymaps/features/{map_id}", request_method="GET") config.add_route("mymaps_map_info", "/mymaps/map_info/{map_id}", request_method="GET") config.add_route("predefined_wms", "/predefined_wms", request_method="GET") config.add_route("mymaps_create", "/mymaps/create", request_method="POST") config.add_route("mymaps_rate", "/mymaps/rate/{map_id}") config.add_route("mymaps_update", "/mymaps/update/{map_id}", request_method="PUT") config.add_route("get_gpx", "/mymaps/get_gpx/{map_id}", request_method="GET") config.add_route("mymaps_map", "/mymaps/map/{map_id}", request_method="GET") config.add_route("mymaps_comment", "/mymaps/comment/{map_id}", request_method="POST") config.add_route("mymaps_upload_image", "/mymaps/upload_image", request_method="POST") config.add_route("mymaps_upload_symbol", "/mymaps/upload_symbol", request_method="POST") config.add_route("mymaps_get_image", "/mymaps/images/{filename}", request_method="GET") config.add_route("mymaps_get_symbol", "/mymaps/symbol/{symbol_id}", request_method="GET") config.add_route("mymaps_users_categories", "/mymaps/get_users_categories", request_method="GET") config.add_route("mymaps_get_symbols", "/mymaps/symbols", request_method="GET") config.add_route("mymaps_delete", "/mymaps/delete/{map_id}", request_method="DELETE") config.add_route("mymaps_delete_all_features", "/mymaps/delete_all_features/{map_id}", request_method="DELETE") config.add_route("mymaps_delete_feature", "/mymaps/delete_feature/{feature_id}", request_method="DELETE") config.add_route("mymaps_save_feature", "/mymaps/save_feature/{map_id}", request_method="POST") config.add_route("mymaps_save_features", "/mymaps/save_features/{map_id}", request_method="POST") config.add_route("mymaps_save_order", "/mymaps/save_order/{map_id}", request_method="POST") config.add_route("mymaps_save_offline", "/mymaps/save_offline", request_method="POST") config.add_route("mymaps_copy", "/mymaps/copy/{map_id}", request_method="POST") config.add_route("exportgpxkml", "/mymaps/exportgpxkml", request_method="POST") config.add_route("get_arrow_color", "/mymaps/getarrow") config.add_route("getroute", "/mymaps/getroute") config.add_route("getremoteroute", "/router/getroute") # geocoder routes config.add_route("reverse_geocode", "/geocode/reverse") config.add_route("geocode", "/geocode/search") config.add_route("feedback", "/feedback") config.add_route("feedbackanf", "/feedbackanf") config.add_route("feedbackcrues", "/feedbackcrues") config.add_route("feedbackage", "/feedbackage") # user config routes config.add_route("get_userconfig", "/get_userconfig", request_method="GET") config.add_route("save_userconfig", "/save_userconfig", request_method="POST") config.add_route("delete_userconfig", "/delete_userconfig", request_method="DELETE") config.add_route("apply_mvt_config", "/apply_mvt_config", request_method="GET") # pag routes config.add_route("pag_url", "/pag") # pag routes config.add_route("pag_report", "/pag/report/{oid}.pdf") # pag routes config.add_route("casipo_url", "/casipo") # pag routes config.add_route("casipo_report", "/casipo/report/{oid}.pdf") # pds routes config.add_route("pds_url", "/pds") # pag routes config.add_route("pds_report", "/pds/report/{oid}.pdf") config.add_route("pag_files", "/pag/files/{_file}") config.add_route("get_png", "/legends/get") config.add_route("get_html", "/legends/get_html") config.add_route("get_metadata", "/getMetadata") # full text search routes config.add_route("fulltextsearch", "/fulltextsearch") # layer search routes config.add_route("layersearch", "/layersearch") # cms search routes config.add_route("cmssearch", "/cmssearch") # cms search routes config.add_route("featuresearch", "/featuresearch") # jsapi routes config.add_route('jsapiloader', '/apiv3loader.js') config.add_route('jsapiexample', '/api-example') config.add_route('jsapilayers', '/jsapilayers') config.add_route('jsapilayersfull', '/jsapilayersfull') config.add_route('jsapithemesfull', '/jsapithemesfull') config.add_route("echocsv", "/profile/echocsv", request_method="POST") config.add_route('getuserinfo', '/getuserinfo') config.add_route('wms', '/ogcproxywms') config.add_route('wmspoi', '/wmspoi') config.add_route('https_proxy', '/httpsproxy') config.add_route('download_sketch', '/downloadsketch') config.add_route('download', '/download') config.add_route('download_pdf', '/downloadpdf') config.add_route('download_measurement', '/downloadmeasurement') config.add_route('preview_measurement', '/previewmeasurement') config.add_route('qr', '/qr') config.add_route('getfeatureinfo', '/getfeatureinfo') config.add_route('getbuswidget', '/getbuswidget') config.add_route('getpoitemplate', '/getpoitemplate') config.add_route('getremotetemplate', '/getremotetemplate') config.add_route('isthemeprivate', '/isthemeprivate') config.add_route('download_resource', '/downloadresource') config.add_route('upload_vt_style', '/uploadvtstyle') config.add_route('delete_vt_style', '/deletevtstyle') config.add_route('get_vt_style', '/getvtstyle') # Service worker config.add_route('sw', '/sw.js') config.add_static_view('proj/{version}', path='geoportailv3_geoportal:jsapi/') # Appcache manifest config.add_route('appcache', '/geoportailv3.appcache') # ldap from geoportailv3_geoportal.views.authentication import ldap_user_validator, \ get_user_from_request ldap_settings = config.get_settings()['ldap'] if ldap_settings: config.include('pyramid_ldap3') """Config the ldap connection. """ config.ldap_setup( ldap_settings['url'], ldap_settings['bind'], ldap_settings['passwd'], use_pool= False, # avoid errors like LDAPMaximumRetriesError and LDAPResponseTimeoutError ) ldap_settings['filter_tmpl'] = ldap_settings['filter_tmpl'].replace( '%%', '%') config.ldap_set_login_query( ldap_settings['base_dn'], filter_tmpl=ldap_settings['filter_tmpl'], scope=ldap.SUBTREE, ) config.set_request_property(get_user_from_request, name='user', reify=True) set_user_validator(config, ldap_user_validator) # json json_renderer = JSON() json_renderer.add_adapter(datetime.date, datetime_adapter) json_renderer.add_adapter(datetime.datetime, datetime_adapter) json_renderer.add_adapter(Decimal, decimal_adapter) config.add_renderer('json', json_renderer) # mailer mail_config = config.get_settings()['mailer'].copy() maildir = os.environ.get('MAILER_DIRECTORY', None) if maildir: # To deliver emails to a directory (for local dev) mail_config['transport.use'] = 'maildir' mail_config['transport.directory'] = maildir global mailer mailer = Mailer(mail_config) mailer.start() # Add custom table in admin interace, that means re-add all normal table from c2cgeoform.routes import register_models from c2cgeoportal_commons.models.main import (Role, LayerWMS, LayerWMTS, Theme, LayerGroup, LayerV1, Interface, OGCServer, Functionality, RestrictionArea) from c2cgeoportal_commons.models.static import User from geoportailv3_geoportal.models import LuxDownloadUrl, \ LuxMeasurementLoginCommune, LuxMeasurementDirectory, LuxGetfeatureDefinition, \ LuxPrintServers, LuxPredefinedWms, LuxLayerExternalWMS, LuxLayerInternalWMS register_models( config, ( ('themes', Theme), ('layer_groups', LayerGroup), # ('layers_wms', LayerWMS), removed we use LuxLayerExternalWMS and LuxLayerInternalWMS instead ('layers_wmts', LayerWMTS), ('layers_v1', LayerV1), ('ogc_servers', OGCServer), ('restriction_areas', RestrictionArea), ('users', User), ('roles', Role), ('functionalities', Functionality), ('interfaces', Interface), ('lux_download_url', LuxDownloadUrl), ('lux_measurement_login_commune', LuxMeasurementLoginCommune), ('lux_measurement_directory', LuxMeasurementDirectory), ('lux_getfeature_definition', LuxGetfeatureDefinition), ('lux_print_servers', LuxPrintServers), ('lux_predefined_wms', LuxPredefinedWms), ('lux_layer_external_wms', LuxLayerExternalWMS), ('lux_layer_internal_wms', LuxLayerInternalWMS), ), 'admin') # scan view decorator for adding routes config.scan() return config.make_wsgi_app()
def includeme(config): """ This function returns a Pyramid WSGI application. """ # update the settings object from the YAML application config file settings = config.get_settings() settings.update(c2c.template.get_config(settings.get("app.cfg"))) call_hook(settings, "after_settings", settings) config.add_request_method(_create_get_user_from_request(settings), name="user", property=True) # configure 'locale' dir as the translation dir for c2cgeoportal app config.add_translation_dirs("c2cgeoportal:locale/") # initialize database engine = sqlalchemy.engine_from_config( settings, "sqlalchemy.") sqlahelper.add_engine(engine) config.include(pyramid_tm.includeme) config.include("pyramid_closure") if "sqlalchemy_slave.url" in settings and \ settings["sqlalchemy.url"] != settings["sqlalchemy_slave.url"]: # pragma: nocover # Setup a slave DB connection and add a tween to switch between it and the default one. log.info("Using a slave DB for reading") engine_slave = sqlalchemy.engine_from_config(config.get_settings(), "sqlalchemy_slave.") sqlahelper.add_engine(engine_slave, name="slave") config.add_tween("c2cgeoportal.models.db_chooser_tween_factory", over="pyramid_tm.tm_tween_factory") # initialize the dbreflection module dbreflection.init(engine) # dogpile.cache configuration caching.init_region(settings["cache"]) caching.invalidate_region() # Register a tween to get back the cache buster path. config.add_tween("c2cgeoportal.lib.cacheversion.CachebusterTween") # bind the mako renderer to other file extensions add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") config.include("pyramid_chameleon") # add the "geojson" renderer config.add_renderer("geojson", GeoJSON()) # add decimal json renderer config.add_renderer("decimaljson", DecimalJSON()) # add the "xsd" renderer config.add_renderer("xsd", XSD( sequence_callback=dbreflection._xsd_sequence_callback )) # add the set_user_validator directive, and set a default user # validator config.add_directive("set_user_validator", set_user_validator) config.set_user_validator(default_user_validator) if settings.get("ogcproxy_enable", False): # pragma: no cover # add an OGCProxy view config.add_route_predicate("ogc_server", OgcproxyRoutePredicate) config.add_route( "ogcproxy", "/ogcproxy", ogc_server=True ) config.add_view("papyrus_ogcproxy.views:ogcproxy", route_name="ogcproxy") # add routes to the mapserver proxy config.add_route_predicate("mapserverproxy", MapserverproxyRoutePredicate) config.add_route( "mapserverproxy", "/mapserv_proxy", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), ) # add route to the tinyows proxy config.add_route( "tinyowsproxy", "/tinyows_proxy", pregenerator=C2CPregenerator(role=True), ) # add routes to csv view config.add_route("csvecho", "/csv", request_method="POST") # add route to the export GPX/KML view config.add_route("exportgpxkml", "/exportgpxkml") # add routes to the echo service config.add_route("echo", "/echo", request_method="POST") # add routes to the entry view class config.add_route("base", "/", static=True) config.add_route("loginform", "/login.html", request_method="GET") add_cors_route(config, "/login", "login") config.add_route("login", "/login", request_method="POST") add_cors_route(config, "/logout", "login") config.add_route("logout", "/logout", request_method="GET") add_cors_route(config, "/loginchange", "login") config.add_route("loginchange", "/loginchange", request_method="POST") add_cors_route(config, "/loginresetpassword", "login") config.add_route("loginresetpassword", "/loginresetpassword", request_method="POST") add_cors_route(config, "/loginuser", "login") config.add_route("loginuser", "/loginuser", request_method="GET") config.add_route("testi18n", "/testi18n.html", request_method="GET") config.add_route("apijs", "/api.js", request_method="GET") config.add_route("xapijs", "/xapi.js", request_method="GET") config.add_route("apihelp", "/apihelp.html", request_method="GET") config.add_route("xapihelp", "/xapihelp.html", request_method="GET") config.add_route( "themes", "/themes", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("invalidate", "/invalidate", request_method="GET") # checker routes, Checkers are web services to test and assess that # the application is correctly functioning. # These web services are used by tools like (nagios). config.add_route("checker_routes", "/checker_routes", request_method="GET") config.add_route("checker_lang_files", "/checker_lang_files", request_method="GET") config.add_route("checker_pdf3", "/checker_pdf3", request_method="GET") config.add_route("checker_fts", "/checker_fts", request_method="GET") config.add_route("checker_theme_errors", "/checker_theme_errors", request_method="GET") config.add_route("checker_phantomjs", "/checker_phantomjs", request_method="GET") # collector config.add_route("check_collector", "/check_collector", request_method="GET") # print proxy routes config.add_route("printproxy", "/printproxy", request_method="HEAD") add_cors_route(config, "/printproxy/*all", "print") config.add_route( "printproxy_capabilities", "/printproxy/capabilities.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route( "printproxy_report_create", "/printproxy/report.{format}", request_method="POST", header=JSON_CONTENT_TYPE ) config.add_route( "printproxy_status", "/printproxy/status/{ref}.json", request_method="GET" ) config.add_route( "printproxy_cancel", "/printproxy/cancel/{ref}", request_method="DELETE" ) config.add_route( "printproxy_report_get", "/printproxy/report/{ref}", request_method="GET" ) # full text search routes add_cors_route(config, "/fulltextsearch", "fulltextsearch") config.add_route("fulltextsearch", "/fulltextsearch") # Access to raster data add_cors_route(config, "/raster", "raster") config.add_route("raster", "/raster", request_method="GET") add_cors_route(config, "/profile.{ext}", "profile") config.add_route("profile.csv", "/profile.csv", request_method="POST") config.add_route("profile.json", "/profile.json", request_method="POST") # shortener add_cors_route(config, "/short/create", "shortner") config.add_route("shortener_create", "/short/create", request_method="POST") config.add_route("shortener_get", "/short/{ref}", request_method="GET") # Geometry processing config.add_route("difference", "/difference", request_method="POST") # PDF report tool config.add_route("pdfreport", "/pdfreport/{layername}/{id}", request_method="GET") # add routes for the "layers" web service add_cors_route(config, "/layers/*all", "layers") config.add_route( "layers_count", "/layers/{layer_id:\\d+}/count", request_method="GET" ) config.add_route( "layers_metadata", "/layers/{layer_id:\\d+}/md.xsd", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route( "layers_read_many", "/layers/{layer_id:\\d+,?(\\d+,)*\\d*$}", request_method="GET") # supports URLs like /layers/1,2,3 config.add_route( "layers_read_one", "/layers/{layer_id:\\d+}/{feature_id}", request_method="GET") config.add_route( "layers_create", "/layers/{layer_id:\\d+}", request_method="POST", header=JSON_CONTENT_TYPE) config.add_route( "layers_update", "/layers/{layer_id:\\d+}/{feature_id}", request_method="PUT", header=JSON_CONTENT_TYPE) config.add_route( "layers_delete", "/layers/{layer_id:\\d+}/{feature_id}", request_method="DELETE") config.add_route( "layers_enumerate_attribute_values", "/layers/{layer_name}/values/{field_name}", request_method="GET", pregenerator=C2CPregenerator(), ) # there's no view corresponding to that route, it is to be used from # mako templates to get the root of the "layers" web service config.add_route("layers_root", "/layers/", request_method="HEAD") # Resource proxy (load external url, useful when loading non https content) config.add_route("resourceproxy", "/resourceproxy", request_method="GET") # pyramid_formalchemy's configuration config.include("pyramid_formalchemy") config.include("fa.jquery") # define the srid, schema and parentschema # as global variables to be usable in the model c2cgeoportal.srid = settings["srid"] c2cgeoportal.schema = settings["schema"] c2cgeoportal.parentschema = settings["parentschema"] c2cgeoportal.formalchemy_default_zoom = get_setting( settings, ("admin_interface", "map_zoom"), c2cgeoportal.formalchemy_default_zoom ) c2cgeoportal.formalchemy_default_x = get_setting( settings, ("admin_interface", "map_x"), c2cgeoportal.formalchemy_default_x ) c2cgeoportal.formalchemy_default_y = get_setting( settings, ("admin_interface", "map_y"), c2cgeoportal.formalchemy_default_y ) c2cgeoportal.formalchemy_available_functionalities = get_setting( settings, ("admin_interface", "available_functionalities"), c2cgeoportal.formalchemy_available_functionalities ) c2cgeoportal.formalchemy_available_metadata = get_setting( settings, ("admin_interface", "available_metadata"), c2cgeoportal.formalchemy_available_metadata ) c2cgeoportal.formalchemy_available_metadata = [ e if isinstance(e, basestring) else e.get("name") for e in c2cgeoportal.formalchemy_available_metadata ] config.add_route("checker_all", "/checker_all", request_method="GET") config.add_route("version_json", "/version.json", request_method="GET") stats.init(config) # scan view decorator for adding routes config.scan(ignore=["c2cgeoportal.tests", "c2cgeoportal.scripts"]) if "subdomains" in settings: # pragma: no cover config.registry.registerUtility( MultiDomainStaticURLInfo(), IStaticURLInfo) # add the static view (for static resources) _add_static_view(config, "static", "c2cgeoportal:static") _add_static_view(config, "project", "c2cgeoportal:project") add_admin_interface(config) add_static_view(config) # Handles the other HTTP errors raised by the views. Without that, # the client receives a status=200 without content. config.add_view(error_handler, context=HTTPException) _log_versions(settings)
def includeme(config): """ This function returns a Pyramid WSGI application. """ # update the settings object from the YAML application config file settings = config.get_settings() settings.update(yaml.load(file(settings.get("app.cfg")))) global srid global schema global parentschema global formalchemy_language global formalchemy_default_zoom global formalchemy_default_x global formalchemy_default_y global formalchemy_available_functionalities global formalchemy_available_metadata config.set_request_property(get_user_from_request, name="user") # configure 'locale' dir as the translation dir for c2cgeoportal app config.add_translation_dirs("c2cgeoportal:locale/") # initialize database engine = sqlalchemy.engine_from_config(settings, "sqlalchemy.") sqlahelper.add_engine(engine) config.include(pyramid_tm.includeme) config.include("pyramid_closure") # initialize the dbreflection module dbreflection.init(engine) # dogpile.cache configuration caching.init_region(settings["cache"]) caching.invalidate_region() # bind the mako renderer to other file extensions add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") config.include("pyramid_chameleon") # add the "geojson" renderer config.add_renderer("geojson", GeoJSON()) # add decimal json renderer config.add_renderer("decimaljson", DecimalJSON()) # add the "xsd" renderer config.add_renderer("xsd", XSD(sequence_callback=dbreflection._xsd_sequence_callback)) # add the set_user_validator directive, and set a default user # validator config.add_directive("set_user_validator", set_user_validator) config.set_user_validator(default_user_validator) if settings.get("ogcproxy_enable", True): # add an OGCProxy view config.add_route("ogcproxy", "/ogcproxy", custom_predicates=(ogcproxy_route_predicate,)) config.add_view("papyrus_ogcproxy.views:ogcproxy", route_name="ogcproxy") # add routes to the mapserver proxy config.add_route( "mapserverproxy", "/mapserv_proxy", custom_predicates=(mapserverproxy_route_predicate,), pregenerator=C2CPregenerator(role=True), ) # add route to the tinyows proxy config.add_route("tinyowsproxy", "/tinyows_proxy", pregenerator=C2CPregenerator(role=True)) # add routes to csv view config.add_route("csvecho", "/csv", request_method="POST") # add routes to the echo service config.add_route("echo", "/echo", request_method="POST") # add routes to the entry view class config.add_route("loginform", "/login.html", request_method="GET") config.add_route("login", "/login", request_method=("GET", "POST")) config.add_route("logout", "/logout", request_method="GET") config.add_route("loginchange", "/loginchange", request_method="POST") config.add_route("loginresetpassword", "/loginresetpassword", request_method="GET") config.add_route("testi18n", "/testi18n.html", request_method="GET") config.add_route("apijs", "/api.js", request_method="GET") config.add_route("xapijs", "/xapi.js", request_method="GET") config.add_route("apihelp", "/apihelp.html", request_method="GET") config.add_route("xapihelp", "/xapihelp.html", request_method="GET") config.add_route("themes", "/themes", request_method="GET", pregenerator=C2CPregenerator(role=True)) config.add_route("invalidate", "/invalidate", request_method="GET") # checker routes, Checkers are web services to test and assess that # the application is correctly functioning. # These web services are used by tools like (nagios). config.add_route("checker_main", "/checker_main", request_method="GET") config.add_route("checker_viewer", "/checker_viewer", request_method="GET") config.add_route("checker_edit", "/checker_edit", request_method="GET") config.add_route("checker_edit_js", "/checker_edit_js", request_method="GET") config.add_route("checker_api", "/checker_api", request_method="GET") config.add_route("checker_xapi", "/checker_xapi", request_method="GET") config.add_route("checker_lang_files", "/checker_lang_files", request_method="GET") config.add_route("checker_printcapabilities", "/checker_printcapabilities", request_method="GET") config.add_route("checker_pdf", "/checker_pdf", request_method="GET") config.add_route("checker_print3capabilities", "/checker_print3capabilities", request_method="GET") config.add_route("checker_pdf3", "/checker_pdf3", request_method="GET") config.add_route("checker_fts", "/checker_fts", request_method="GET") config.add_route("checker_wmscapabilities", "/checker_wmscapabilities", request_method="GET") config.add_route("checker_wfscapabilities", "/checker_wfscapabilities", request_method="GET") config.add_route("checker_theme_errors", "/checker_theme_errors", request_method="GET") # collector config.add_route("check_collector", "/check_collector", request_method="GET") # print proxy routes config.add_route("printproxy", "/printproxy", request_method="HEAD") config.add_route( "printproxy_info", "/printproxy/info.json", request_method="GET", pregenerator=C2CPregenerator(role=True) ) config.add_route("printproxy_create", "/printproxy/create.json", request_method="POST") config.add_route("printproxy_get", "/printproxy/{file}.printout", request_method="GET") # V3 config.add_route( "printproxy_capabilities", "/printproxy/capabilities.json", request_method=("GET", "OPTIONS"), pregenerator=C2CPregenerator(role=True), ) config.add_route("printproxy_report_create", "/printproxy/report.{format}", request_method=("POST", "OPTIONS")) config.add_route("printproxy_status", "/printproxy/status/{ref}.json", request_method=("GET", "OPTIONS")) config.add_route("printproxy_cancel", "/printproxy/cancel/{ref}", request_method=("DELETE", "OPTIONS")) config.add_route("printproxy_report_get", "/printproxy/report/{ref}", request_method="GET") # full text search routes config.add_route("fulltextsearch", "/fulltextsearch") # Access to raster data config.add_route("raster", "/raster", request_method="GET") config.add_route("profile.csv", "/profile.csv", request_method="POST") config.add_route("profile.json", "/profile.json", request_method="POST") # shortener config.add_route("shortener_create", "/short/create", request_method="POST") config.add_route("shortener_get", "/short/{ref}", request_method="GET") # Geometry processing config.add_route("difference", "/difference", request_method="POST") # PDF report tool config.add_route("pdfreport", "/pdfreport/{layername}/{id}", request_method="GET") # add routes for the "layers" web service config.add_route("layers_count", "/layers/{layer_id:\\d+}/count", request_method="GET") config.add_route( "layers_metadata", "/layers/{layer_id:\\d+}/md.xsd", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route( "layers_read_many", "/layers/{layer_id:\\d+,?(\\d+,)*\\d*$}", request_method="GET" ) # supports URLs like /layers/1,2,3 config.add_route("layers_read_one", "/layers/{layer_id:\\d+}/{feature_id}", request_method="GET") config.add_route("layers_create", "/layers/{layer_id:\\d+}", request_method="POST") config.add_route("layers_update", "/layers/{layer_id:\\d+}/{feature_id}", request_method="PUT") config.add_route("layers_delete", "/layers/{layer_id:\\d+}/{feature_id}", request_method="DELETE") config.add_route( "layers_enumerate_attribute_values", "/layers/{layer_name}/values/{field_name}", request_method="GET", pregenerator=C2CPregenerator(), ) # there's no view corresponding to that route, it is to be used from # mako templates to get the root of the "layers" web service config.add_route("layers_root", "/layers/", request_method="HEAD") # pyramid_formalchemy's configuration config.include("pyramid_formalchemy") config.include("fa.jquery") # define the srid, schema and parentschema # as global variables to be usable in the model srid = settings["srid"] schema = settings["schema"] parentschema = settings["parentschema"] formalchemy_default_zoom = get_setting(settings, ("admin_interface", "map_zoom"), formalchemy_default_zoom) formalchemy_default_x = get_setting(settings, ("admin_interface", "map_x"), formalchemy_default_x) formalchemy_default_y = get_setting(settings, ("admin_interface", "map_y"), formalchemy_default_y) formalchemy_available_functionalities = get_setting( settings, ("admin_interface", "available_functionalities"), formalchemy_available_functionalities ) formalchemy_available_metadata = get_setting( settings, ("admin_interface", "available_metadata"), formalchemy_available_metadata ) config.add_route("checker_all", "/checker_all", request_method="GET") # scan view decorator for adding routes config.scan(ignore="c2cgeoportal.tests") config.registry.registerUtility(MultiDomainStaticURLInfo(), IStaticURLInfo) # add the static view (for static resources) _add_static_view(config, "static", "c2cgeoportal:static") _add_static_view(config, "project", "c2cgeoportal:project") add_admin_interface(config) add_static_view(config)
def includeme(config): """ This function returns a Pyramid WSGI application. """ # update the settings object from the YAML application config file settings = config.get_settings() settings.update(c2c.template.get_config(settings.get("app.cfg"))) call_hook(settings, "after_settings", settings) get_user_from_request = create_get_user_from_request(settings) config.add_request_method(get_user_from_request, name="user", property=True) config.add_request_method(get_user_from_request, name="get_user") # configure 'locale' dir as the translation dir for c2cgeoportal app config.add_translation_dirs("c2cgeoportal_geoportal:locale/") config.include(c2cwsgiutils.pyramid.includeme) health_check = HealthCheck(config) # Initialise DBSessions from c2cgeoportal_commons.models import init_dbsessions init_dbsessions(settings, config, health_check) # initialize the dbreflection module dbreflection.init() from c2cgeoportal_geoportal.lib import checker, check_collector checker.init(config, health_check) check_collector.init(config, health_check) config.include("pyramid_closure") # dogpile.cache configuration caching.init_region(settings["cache"]) caching.invalidate_region() # Register a tween to get back the cache buster path. config.add_tween("c2cgeoportal_geoportal.lib.cacheversion.CachebusterTween") # bind the mako renderer to other file extensions add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") # add the "geojson" renderer config.add_renderer("geojson", GeoJSON()) # add decimal json renderer config.add_renderer("decimaljson", DecimalJSON()) # add the "xsd" renderer config.add_renderer("xsd", XSD( sequence_callback=dbreflection.xsd_sequence_callback )) # add the set_user_validator directive, and set a default user # validator config.add_directive("set_user_validator", set_user_validator) config.set_user_validator(default_user_validator) if settings.get("ogcproxy_enable", False): # pragma: no cover # add an OGCProxy view config.add_route_predicate("ogc_server", OgcproxyRoutePredicate) config.add_route( "ogcproxy", "/ogcproxy", ogc_server=True ) config.add_view("papyrus_ogcproxy.views:ogcproxy", route_name="ogcproxy") # add routes to the mapserver proxy config.add_route_predicate("mapserverproxy", MapserverproxyRoutePredicate) config.add_route( "mapserverproxy", "/mapserv_proxy", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), ) # add route to the tinyows proxy config.add_route( "tinyowsproxy", "/tinyows_proxy", pregenerator=C2CPregenerator(role=True), ) # add routes to csv view config.add_route("csvecho", "/csv", request_method="POST") # add route to the export GPX/KML view config.add_route("exportgpxkml", "/exportgpxkml") # add routes to the echo service config.add_route("echo", "/echo", request_method="POST") # add routes to the entry view class config.add_route("base", "/", static=True) config.add_route("loginform", "/login.html", request_method="GET") add_cors_route(config, "/login", "login") config.add_route("login", "/login", request_method="POST") add_cors_route(config, "/logout", "login") config.add_route("logout", "/logout", request_method="GET") add_cors_route(config, "/loginchange", "login") config.add_route("loginchange", "/loginchange", request_method="POST") add_cors_route(config, "/loginresetpassword", "login") config.add_route("loginresetpassword", "/loginresetpassword", request_method="POST") add_cors_route(config, "/loginuser", "login") config.add_route("loginuser", "/loginuser", request_method="GET") config.add_route("testi18n", "/testi18n.html", request_method="GET") config.add_route("apijs", "/api.js", request_method="GET") config.add_route("xapijs", "/xapi.js", request_method="GET") config.add_route("apihelp", "/apihelp.html", request_method="GET") config.add_route("xapihelp", "/xapihelp.html", request_method="GET") config.add_route( "themes", "/themes", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("invalidate", "/invalidate", request_method="GET") # print proxy routes config.add_route("printproxy", "/printproxy", request_method="HEAD") add_cors_route(config, "/printproxy/*all", "print") config.add_route( "printproxy_capabilities", "/printproxy/capabilities.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route( "printproxy_report_create", "/printproxy/report.{format}", request_method="POST", header=JSON_CONTENT_TYPE ) config.add_route( "printproxy_status", "/printproxy/status/{ref}.json", request_method="GET" ) config.add_route( "printproxy_cancel", "/printproxy/cancel/{ref}", request_method="DELETE" ) config.add_route( "printproxy_report_get", "/printproxy/report/{ref}", request_method="GET" ) # v2 config.add_route( "printproxy_info", "/printproxy/info.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route( "printproxy_create", "/printproxy/create.json", request_method="POST", ) config.add_route( "printproxy_get", "/printproxy/{file}.printout", request_method="GET", ) # full text search routes add_cors_route(config, "/fulltextsearch", "fulltextsearch") config.add_route("fulltextsearch", "/fulltextsearch") # Access to raster data add_cors_route(config, "/raster", "raster") config.add_route("raster", "/raster", request_method="GET") add_cors_route(config, "/profile.{ext}", "profile") config.add_route("profile.csv", "/profile.csv", request_method="POST") config.add_route("profile.json", "/profile.json", request_method="POST") # shortener add_cors_route(config, "/short/create", "shortener") config.add_route("shortener_create", "/short/create", request_method="POST") config.add_route("shortener_get", "/short/{ref}", request_method="GET") # Geometry processing config.add_route("difference", "/difference", request_method="POST") # PDF report tool config.add_route("pdfreport", "/pdfreport/{layername}/{ids}", request_method="GET") # add routes for the "layers" web service add_cors_route(config, "/layers/*all", "layers") config.add_route( "layers_count", "/layers/{layer_id:\\d+}/count", request_method="GET" ) config.add_route( "layers_metadata", "/layers/{layer_id:\\d+}/md.xsd", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route( "layers_read_many", "/layers/{layer_id:\\d+,?(\\d+,)*\\d*$}", request_method="GET") # supports URLs like /layers/1,2,3 config.add_route( "layers_read_one", "/layers/{layer_id:\\d+}/{feature_id}", request_method="GET") config.add_route( "layers_create", "/layers/{layer_id:\\d+}", request_method="POST", header=JSON_CONTENT_TYPE) config.add_route( "layers_update", "/layers/{layer_id:\\d+}/{feature_id}", request_method="PUT", header=JSON_CONTENT_TYPE) config.add_route( "layers_delete", "/layers/{layer_id:\\d+}/{feature_id}", request_method="DELETE") config.add_route( "layers_enumerate_attribute_values", "/layers/{layer_name}/values/{field_name}", request_method="GET", pregenerator=C2CPregenerator(), ) # there is no view corresponding to that route, it is to be used from # mako templates to get the root of the "layers" web service config.add_route("layers_root", "/layers/", request_method="HEAD") # Resource proxy (load external url, useful when loading non https content) config.add_route("resourceproxy", "/resourceproxy", request_method="GET") # scan view decorator for adding routes config.scan(ignore=["c2cgeoportal_geoportal.scripts", "c2cgeoportal_geoportal.wsgi_app"]) if "subdomains" in settings: # pragma: no cover config.registry.registerUtility( MultiDomainStaticURLInfo(), IStaticURLInfo) # add the static view (for static resources) _add_static_view(config, "static", "c2cgeoportal_geoportal:static") _add_static_view(config, "project", "c2cgeoportal_geoportal:project") add_admin_interface(config) add_static_view(config) # Handles the other HTTP errors raised by the views. Without that, # the client receives a status=200 without content. config.add_view(error_handler, context=HTTPException)
def includeme(config): """ This function returns a Pyramid WSGI application. """ settings = config.get_settings() yaml_config = yaml.load(file(settings.get("app.cfg"))) settings.update(yaml_config) my_session_factory = SignedCookieSessionFactory( yaml_config['authtkt_secret'], cookie_name=yaml_config['authtkt_cookie_name'], timeout=8200 ) config.set_session_factory(my_session_factory) engine = engine_from_config(settings, 'sqlalchemy.') sqlahelper.add_engine(engine) global db_config db_config = yaml.load(file(settings.get('database.cfg')))['db_config'] settings.update(yaml.load(file(settings.get('pdf.cfg')))) config.include(papyrus.includeme) config.include('pyramid_mako') # bind the mako renderer to other file extensions add_mako_renderer(config, ".js") config.add_renderer('geojson', GeoJSON()) # add app configuration from db read_app_config(settings) specific_tmp_path = os.path.join(settings['specific_root_dir'], 'templates') specific_static_path = os.path.join(settings['specific_root_dir'], 'static') settings.setdefault('mako.directories',['crdppf:templates', specific_tmp_path]) settings.setdefault('reload_templates',True) # add the static view (for static resources) config.add_static_view('static', 'crdppf:static',cache_max_age=3600) config.add_static_view('proj', 'crdppfportal:static', cache_max_age=3600) # ROUTES config.add_route('home', '/') config.add_route('images', '/static/images/') config.add_route('create_extract', 'create_extract') config.add_route('get_features', 'get_features') config.add_route('get_property', 'property/get') config.add_route('set_language', 'set_language') config.add_route('get_language', 'get_language') config.add_route('get_translation_dictionary', 'get_translation_dictionary') config.add_route('get_translations_list', 'get_translations_list') config.add_route('get_interface_config', 'get_interface_config') config.add_route('get_baselayers_config', 'get_baselayers_config') config.add_route('test', 'test') config.add_route('formulaire_reglements', 'formulaire_reglements') config.add_route('getTownList', 'getTownList') config.add_route('getTopicsList', 'getTopicsList') config.add_route('createNewDocEntry', 'createNewDocEntry') config.add_route('document_ref', 'getDocumentReferences') config.add_route('legal_documents', 'getLegalDocuments') config.add_route('map', 'map') config.add_route('configpanel', 'configpanel') config.add_route('initjs', '/init.js') config.add_route('globalsjs', '/globals.js') config.add_route('ogcproxy', '/ogcproxy') # CLIENT VIEWS config.add_view('crdppf.views.entry.Entry', route_name = 'images') config.add_view('crdppf.views.entry.Entry', route_name='test') # Print proxy routes config.add_route('printproxy_report_get', '/printproxy/report/{ref}') config.add_route('printproxy_status', '/printproxy/status/{ref}.json') config.add_route('printproxy_report_create', '/printproxy/report/{type_}/{id}') #~ # ADMIN VIEWS #~ config.add_view('crdppf.views.administration.Config', route_name='configpanel') #~ config.add_view('crdppf.views.administration.Config', route_name='formulaire_reglements') config.add_route('catchall_static', '/*subpath') config.add_view('crdppf.static.static_view', route_name='catchall_static') config.scan()
def includeme(config: pyramid.config.Configurator): """ This function returns a Pyramid WSGI application. """ settings = config.get_settings() config.include("c2cgeoportal_commons") call_hook(settings, "after_settings", settings) get_user_from_request = create_get_user_from_request(settings) config.add_request_method(get_user_from_request, name="user", property=True) config.add_request_method(get_user_from_request, name="get_user") # Configure 'locale' dir as the translation dir for c2cgeoportal app config.add_translation_dirs("c2cgeoportal_geoportal:locale/") config.include('c2cwsgiutils.pyramid.includeme') health_check = HealthCheck(config) # Initialise DBSessions init_dbsessions(settings, config, health_check) # Initialize the dbreflection module dbreflection.init() checker.init(config, health_check) check_collector.init(config, health_check) # dogpile.cache configuration if 'cache' in settings: caching.init_region(settings['cache']) from c2cgeoportal_commons.models.main import InvalidateCacheEvent @zope.event.classhandler.handler(InvalidateCacheEvent) def handle(event: InvalidateCacheEvent): # pylint: disable=unused-variable del event caching.invalidate_region() # Register a tween to get back the cache buster path. if 'cache_path' not in config.get_settings(): config.get_settings()['cache_path'] = ['static'] config.add_tween( "c2cgeoportal_geoportal.lib.cacheversion.CachebusterTween") config.add_tween("c2cgeoportal_geoportal.lib.headers.HeadersTween") # Bind the mako renderer to other file extensions add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") # Add the "geojson" renderer config.add_renderer("geojson", GeoJSON()) # Add decimal json renderer config.add_renderer("decimaljson", DecimalJSON()) # Add the "xsd" renderer config.add_renderer("xsd", XSD(include_foreign_keys=True)) # Add the set_user_validator directive, and set a default user validator config.add_directive("set_user_validator", set_user_validator) config.set_user_validator(default_user_validator) config.add_route('dynamic', '/dynamic.json', request_method="GET") # Add routes to the mapserver proxy config.add_route_predicate("mapserverproxy", MapserverproxyRoutePredicate) config.add_route("mapserverproxy", "/mapserv_proxy", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), request_method="GET") config.add_route("mapserverproxy_post", "/mapserv_proxy", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), request_method="POST") add_cors_route(config, "/mapserv_proxy", "mapserver") # Add route to the tinyows proxy config.add_route( "tinyowsproxy", "/tinyows_proxy", pregenerator=C2CPregenerator(role=True), ) # Add routes to the entry view class config.add_route("base", "/", static=True) config.add_route("loginform", "/login.html", request_method="GET") add_cors_route(config, "/login", "login") config.add_route("login", "/login", request_method="POST") add_cors_route(config, "/logout", "login") config.add_route("logout", "/logout", request_method="GET") add_cors_route(config, "/loginchange", "login") config.add_route("loginchange", "/loginchange", request_method="POST") add_cors_route(config, "/loginresetpassword", "login") config.add_route("loginresetpassword", "/loginresetpassword", request_method="POST") add_cors_route(config, "/loginuser", "login") config.add_route("loginuser", "/loginuser", request_method="GET") config.add_route("testi18n", "/testi18n.html", request_method="GET") config.add_renderer(".map", AssetRendererFactory) config.add_renderer(".css", AssetRendererFactory) config.add_renderer(".ico", AssetRendererFactory) config.add_route("localejson", "/locale.json", request_method="GET") # Cannot be at the header to do not load the model too early from c2cgeoportal_geoportal.views.entry import Entry def add_api_route(name: str, attr: str, path: str, renderer: str): config.add_route(name, path, request_method="GET") config.add_view(Entry, attr=attr, route_name=name, renderer=renderer) add_api_route('favicon', 'favicon', '/favicon.ico', '/etc/geomapfish/static/images/favicon.ico') add_api_route('apijs', 'apijs', '/api.js', "/etc/static-ngeo/api.js") add_api_route('apijsmap', 'apijsmap', '/api.js.map', "/etc/static-ngeo/api.js.map") add_api_route('apicss', 'apicss', '/api.css', "/etc/static-ngeo/api.css") add_api_route('apihelp', 'apihelp', '/apihelp/index.html', "/etc/geomapfish/static/apihelp/index.html") c2cgeoportal_geoportal.views.add_redirect(config, 'apihelp_redirect', '/apihelp.html', '/apihelp/index.html') config.add_route( "themes", "/themes", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("invalidate", "/invalidate", request_method="GET") # Print proxy routes config.add_route("printproxy", "/printproxy", request_method="HEAD") add_cors_route(config, "/printproxy/*all", "print") config.add_route( "printproxy_capabilities", "/printproxy/capabilities.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("printproxy_report_create", "/printproxy/report.{format}", request_method="POST", header=JSON_CONTENT_TYPE) config.add_route("printproxy_status", "/printproxy/status/{ref}.json", request_method="GET") config.add_route("printproxy_cancel", "/printproxy/cancel/{ref}", request_method="DELETE") config.add_route("printproxy_report_get", "/printproxy/report/{ref}", request_method="GET") # Full-text search routes add_cors_route(config, "/search", "fulltextsearch") config.add_route("fulltextsearch", "/search", request_method="GET") # Access to raster data add_cors_route(config, "/raster", "raster") config.add_route("raster", "/raster", request_method="GET") add_cors_route(config, "/profile.json", "profile") config.add_route("profile.json", "/profile.json", request_method="POST") # Shortener add_cors_route(config, "/short/create", "shortener") config.add_route("shortener_create", "/short/create", request_method="POST") config.add_route("shortener_get", "/s/{ref}", request_method="GET") # Geometry processing config.add_route("difference", "/difference", request_method="POST") # PDF report tool config.add_route("pdfreport", "/pdfreport/{layername}/{ids}", request_method="GET") # Add routes for the "layers" web service add_cors_route(config, "/layers/*all", "layers") config.add_route("layers_count", "/layers/{layer_id:\\d+}/count", request_method="GET") config.add_route( "layers_metadata", "/layers/{layer_id:\\d+}/md.xsd", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("layers_read_many", "/layers/{layer_id:\\d+,?(\\d+,)*\\d*$}", request_method="GET") # supports URLs like /layers/1,2,3 config.add_route("layers_read_one", "/layers/{layer_id:\\d+}/{feature_id}", request_method="GET") config.add_route("layers_create", "/layers/{layer_id:\\d+}", request_method="POST", header=GEOJSON_CONTENT_TYPE) config.add_route("layers_update", "/layers/{layer_id:\\d+}/{feature_id}", request_method="PUT", header=GEOJSON_CONTENT_TYPE) config.add_route("layers_delete", "/layers/{layer_id:\\d+}/{feature_id}", request_method="DELETE") config.add_route( "layers_enumerate_attribute_values", "/layers/{layer_name}/values/{field_name}", request_method="GET", pregenerator=C2CPregenerator(), ) # There is no view corresponding to that route, it is to be used from # mako templates to get the root of the "layers" web service config.add_route("layers_root", "/layers", request_method="HEAD") # Resource proxy (load external url, useful when loading non https content) config.add_route("resourceproxy", "/resourceproxy", request_method="GET") # Dev config.add_route("dev", "/dev/*path", request_method="GET") # Used memory in caches config.add_route("memory", "/memory", request_method="GET") # Scan view decorator for adding routes config.scan(ignore=[ "c2cgeoportal_geoportal.lib", "c2cgeoportal_geoportal.scaffolds", "c2cgeoportal_geoportal.scripts" ]) add_admin_interface(config) # Add the project static view with cache buster from c2cgeoportal_geoportal.lib.cacheversion import version_cache_buster config.add_static_view( name="static", path="/etc/geomapfish/static", cache_max_age=int(config.get_settings()["default_max_age"]), ) config.add_cache_buster("/etc/geomapfish/static", version_cache_buster) # Add the project static view without cache buster config.add_static_view( name="static-ngeo", path="/etc/static-ngeo", cache_max_age=int(config.get_settings()["default_max_age"]), ) # Handles the other HTTP errors raised by the views. Without that, # the client receives a status=200 without content. config.add_view(error_handler, context=HTTPException) c2cwsgiutils.index.additional_title = '<div class="row"><div class="col-lg-3"><h2>GeoMapFish</h2>' \ '</div><div class="col-lg">' c2cwsgiutils.index.additional_auth.extend([ '<a href="../tiles/admin/">TileCloud chain admin</a><br>', '<a href="../tiles/c2c/">TileCloud chain c2c tools</a><br>', '<a href="../invalidate">Invalidate the cache</a><br>', '<a href="../memory">Memory status</a><br>', ]) if config.get_settings().get('enable_admin_interface', False): c2cwsgiutils.index.additional_noauth.append( '<a href="../admin/">Admin</a><br>') c2cwsgiutils.index.additional_noauth.append( '</div></div><div class="row"><div class="col-lg-3"><h3>Interfaces</h3></div><div class="col-lg">' ) c2cwsgiutils.index.additional_noauth.append( '<a href="../">Default</a><br>') for interface in config.get_settings().get("interfaces", []): if not interface.get('default', False): c2cwsgiutils.index.additional_noauth.append( '<a href="../{interface}">{interface}</a><br>'.format( interface=interface['name'])) c2cwsgiutils.index.additional_noauth.append( '<a href="../apihelp/index.html">API help</a><br>') c2cwsgiutils.index.additional_noauth.append('</div></div><hr>')
def includeme(config: pyramid.config.Configurator) -> None: """Get the Pyramid WSGI application.""" settings = config.get_settings() if "available_locale_names" not in settings: settings["available_locale_names"] = available_locale_names() call_hook(settings, "after_settings", settings) get_user_from_request = create_get_user_from_request(settings) config.add_request_method(get_user_from_request, name="user", property=True) config.add_request_method(get_user_from_request, name="get_user") # Be able for an organization to override the method to use alternate: # - Organization roles name for the standard roles 'anonymous', 'registered' and 'intranet'. config.add_request_method(lambda request, role_type: role_type, name="get_organization_role") # - Organization print URL config.add_request_method( lambda request: request.registry.settings["print_url"], name="get_organization_print_url") # - Organization interface name (in the config and in the admin interface) config.add_request_method(lambda request, interface: interface, name="get_organization_interface") # Configure 'locale' dir as the translation dir for c2cgeoportal app config.add_translation_dirs("c2cgeoportal_geoportal:locale/") config.include("pyramid_mako") config.include("c2cwsgiutils.pyramid.includeme") health_check = HealthCheck(config) config.registry["health_check"] = health_check metrics_config = config.registry.settings["metrics"] if metrics_config["memory_maps_rss"]: add_provider(MemoryMapProvider("rss")) if metrics_config["memory_maps_size"]: add_provider(MemoryMapProvider("size")) if metrics_config["memory_cache"]: add_provider( MemoryCacheSizeProvider( metrics_config.get("memory_cache_all", False))) if metrics_config["raster_data"]: add_provider(RasterDataSizeProvider()) if metrics_config["total_python_object_memory"]: add_provider(TotalPythonObjectMemoryProvider()) # Initialise DBSessions init_db_sessions(settings, config, health_check) checker.init(config, health_check) check_collector.init(config, health_check) # dogpile.cache configuration if "cache" in settings: register_backend("c2cgeoportal.hybrid", "c2cgeoportal_geoportal.lib.caching", "HybridRedisBackend") register_backend("c2cgeoportal.hybridsentinel", "c2cgeoportal_geoportal.lib.caching", "HybridRedisSentinelBackend") for name, cache_config in settings["cache"].items(): caching.init_region(cache_config, name) @zope.event.classhandler.handler(InvalidateCacheEvent ) # type: ignore def handle(event: InvalidateCacheEvent) -> None: del event caching.invalidate_region() if caching.MEMORY_CACHE_DICT: caching.get_region("std").delete_multi( list(caching.MEMORY_CACHE_DICT.keys())) caching.MEMORY_CACHE_DICT.clear() # Register a tween to get back the cache buster path. if "cache_path" not in config.get_settings(): config.get_settings()["cache_path"] = ["static", "static-geomapfish"] config.add_tween( "c2cgeoportal_geoportal.lib.cacheversion.CachebusterTween") config.add_tween("c2cgeoportal_geoportal.lib.headers.HeadersTween") # Bind the mako renderer to other file extensions add_mako_renderer(config, ".html") add_mako_renderer(config, ".js") # Add the "geojson" renderer config.add_renderer("geojson", GeoJSON()) # Add the "xsd" renderer config.add_renderer("xsd", XSD(include_foreign_keys=True)) # Add the set_user_validator directive, and set a default user validator config.add_directive("set_user_validator", set_user_validator) config.set_user_validator(default_user_validator) config.add_route("oauth2token", "/oauth/token", request_method="POST") config.add_route("oauth2loginform", "/oauth/login", request_method="GET") config.add_route("notlogin", "/notlogin", request_method="GET") config.add_route("dynamic", "/dynamic.json", request_method="GET") # Add routes to the mapserver proxy config.add_route_predicate("mapserverproxy", MapserverproxyRoutePredicate) config.add_route( "mapserverproxy", "/mapserv_proxy", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), request_method="GET", ) config.add_route( "mapserverproxy_post", "/mapserv_proxy", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), request_method="POST", ) # The tow next views are used to serve the application on the URL /mapserv_proxy/<ogc server name> # instead of /mapserv_proxy?ogcserver=<ogc server name>, required for QGIS server landing page config.add_route( "mapserverproxy_get_path", "/mapserv_proxy/{ogcserver}/*path", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), request_method="GET", ) config.add_route( "mapserverproxy_post_path", "/mapserv_proxy/{ogcserver}/*path", mapserverproxy=True, pregenerator=C2CPregenerator(role=True), request_method="POST", ) add_cors_route(config, "/mapserv_proxy", "mapserver") # Add route to the tinyows proxy config.add_route("tinyowsproxy", "/tinyows_proxy", pregenerator=C2CPregenerator(role=True)) # Add routes to the entry view class config.add_route("base", "/", static=True) config.add_route("loginform", "/login.html", request_method="GET") add_cors_route(config, "/login", "login") config.add_route("login", "/login", request_method="POST") add_cors_route(config, "/logout", "login") config.add_route("logout", "/logout", request_method="GET") add_cors_route(config, "/loginchangepassword", "login") config.add_route("change_password", "/loginchangepassword", request_method="POST") add_cors_route(config, "/loginresetpassword", "login") config.add_route("loginresetpassword", "/loginresetpassword", request_method="POST") add_cors_route(config, "/loginuser", "login") config.add_route("loginuser", "/loginuser", request_method="GET") config.add_route("testi18n", "/testi18n.html", request_method="GET") config.add_renderer(".map", AssetRendererFactory) config.add_renderer(".css", AssetRendererFactory) config.add_renderer(".ico", AssetRendererFactory) config.add_route("localejson", "/locale.json", request_method="GET") config.add_route("localepot", "/locale.pot", request_method="GET") def add_static_route(name: str, attr: str, path: str, renderer: str) -> None: config.add_route(name, path, request_method="GET") config.add_view(Entry, attr=attr, route_name=name, renderer=renderer) add_static_route("favicon", "favicon", "/favicon.ico", "/etc/geomapfish/static/images/favicon.ico") add_static_route("robot.txt", "robot_txt", "/robot.txt", "/etc/geomapfish/static/robot.txt") config.add_route("apijs", "/api.js", request_method="GET") add_static_route("apijsmap", "apijsmap", "/api.js.map", "/etc/static-ngeo/api.js.map") add_static_route("apicss", "apicss", "/api.css", "/etc/static-ngeo/api.css") add_static_route("apihelp", "apihelp", "/apihelp/index.html", "/etc/geomapfish/static/apihelp/index.html") c2cgeoportal_geoportal.views.add_redirect(config, "apihelp_redirect", "/apihelp.html", "apihelp") config.add_route("themes", "/themes", request_method="GET", pregenerator=C2CPregenerator(role=True)) config.add_route("invalidate", "/invalidate", request_method="GET") # Print proxy routes config.add_route("printproxy", "/printproxy", request_method="HEAD") add_cors_route(config, "/printproxy/*all", "print") config.add_route( "printproxy_capabilities", "/printproxy/capabilities.json", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route( "printproxy_report_create", "/printproxy/report.{format}", request_method="POST", header=JSON_CONTENT_TYPE, ) config.add_route("printproxy_status", "/printproxy/status/{ref}.json", request_method="GET") config.add_route("printproxy_cancel", "/printproxy/cancel/{ref}", request_method="DELETE") config.add_route("printproxy_report_get", "/printproxy/report/{ref}", request_method="GET") # Full-text search routes add_cors_route(config, "/search", "fulltextsearch") config.add_route("fulltextsearch", "/search", request_method="GET") # Access to raster data add_cors_route(config, "/raster", "raster") config.add_route("raster", "/raster", request_method="GET") add_cors_route(config, "/profile.json", "profile") config.add_route("profile.json", "/profile.json", request_method="POST") # Access to vector tiles add_cors_route(config, "/vector_tiles", "vector_tiles") config.add_route("vector_tiles", "/vector_tiles/{layer_name}/{z}/{x}/{y}.pbf", request_method="GET") # There is no view corresponding to that route, it is to be used from # mako templates to get the root of the "vector_tiles" web service config.add_route("vector_tiles_root", "/vector_tiles", request_method="HEAD") # Shortener add_cors_route(config, "/short/create", "shortener") config.add_route("shortener_create", "/short/create", request_method="POST") config.add_route("shortener_get", "/s/{ref}", request_method="GET") # Geometry processing config.add_route("difference", "/difference", request_method="POST") # PDF report tool config.add_route("pdfreport", "/pdfreport/{layername}/{ids}", request_method="GET") # Add routes for the "layers" web service add_cors_route(config, "/layers/*all", "layers") config.add_route("layers_count", "/layers/{layer_id:\\d+}/count", request_method="GET") config.add_route( "layers_metadata", "/layers/{layer_id:\\d+}/md.xsd", request_method="GET", pregenerator=C2CPregenerator(role=True), ) config.add_route("layers_read_many", "/layers/{layer_id:\\d+,?(\\d+,)*\\d*$}", request_method="GET") # supports URLs like /layers/1,2,3 config.add_route("layers_read_one", "/layers/{layer_id:\\d+}/{feature_id}", request_method="GET") config.add_route("layers_create", "/layers/{layer_id:\\d+}", request_method="POST", header=GEOJSON_CONTENT_TYPE) config.add_route( "layers_update", "/layers/{layer_id:\\d+}/{feature_id}", request_method="PUT", header=GEOJSON_CONTENT_TYPE, ) config.add_route("layers_delete", "/layers/{layer_id:\\d+}/{feature_id}", request_method="DELETE") config.add_route( "layers_enumerate_attribute_values", "/layers/{layer_name}/values/{field_name}", request_method="GET", pregenerator=C2CPregenerator(), ) # There is no view corresponding to that route, it is to be used from # mako templates to get the root of the "layers" web service config.add_route("layers_root", "/layers", request_method="HEAD") # Resource proxy (load external url, useful when loading non https content) config.add_route("resourceproxy", "/resourceproxy", request_method="GET") # Dev config.add_route("dev", "/dev/*path", request_method="GET") # Used memory in caches config.add_route("memory", "/memory", request_method="GET") # Scan view decorator for adding routes config.scan(ignore=[ "c2cgeoportal_geoportal.lib", "c2cgeoportal_geoportal.scaffolds", "c2cgeoportal_geoportal.scripts", ]) add_admin_interface(config) add_getitfixed(config) # Add the project static view with cache buster config.add_static_view( name="static", path="/etc/geomapfish/static", cache_max_age=int(config.get_settings()["default_max_age"]), ) config.add_cache_buster("/etc/geomapfish/static", version_cache_buster) # Add the project static view without cache buster config.add_static_view( name="static-ngeo", path="/etc/static-ngeo", cache_max_age=int(config.get_settings()["default_max_age"]), ) # Add the c2cgeoportal static view with cache buster config.add_static_view( name="static-geomapfish", path="c2cgeoportal_geoportal:static", cache_max_age=int(config.get_settings()["default_max_age"]), ) config.add_cache_buster("c2cgeoportal_geoportal:static", version_cache_buster) # Add the project static view without cache buster config.add_static_view( name="static-ngeo-dist", path="/opt/c2cgeoportal/geoportal/node_modules/ngeo/dist", cache_max_age=int(config.get_settings()["default_max_age"]), ) # Handles the other HTTP errors raised by the views. Without that, # the client receives a status=200 without content. config.add_view(error_handler, context=HTTPException) c2cwsgiutils.index.additional_title = ( '<div class="row"><div class="col-lg-3"><h2>GeoMapFish</h2></div><div class="col-lg">' ) c2cwsgiutils.index.additional_auth.extend([ '<a href="../tiles/admin/">TileCloud chain admin</a><br>', '<a href="../tiles/c2c/">TileCloud chain c2c tools</a><br>', '<a href="../invalidate">Invalidate the cache</a><br>', '<a href="../memory">Memory status</a><br>', ]) if config.get_settings().get("enable_admin_interface", False): c2cwsgiutils.index.additional_noauth.append( '<a href="../admin/">Admin</a><br>') c2cwsgiutils.index.additional_noauth.append( '</div></div><div class="row"><div class="col-lg-3"><h3>Interfaces</h3></div><div class="col-lg">' ) c2cwsgiutils.index.additional_noauth.append( '<a href="../">Default</a><br>') for interface in config.get_settings().get("interfaces", []): if not interface.get("default", False): c2cwsgiutils.index.additional_noauth.append( '<a href="../{interface}">{interface}</a><br>'.format( interface=interface["name"])) c2cwsgiutils.index.additional_noauth.append( '<a href="../apihelp/index.html">API help</a><br>') c2cwsgiutils.index.additional_noauth.append("</div></div><hr>")