コード例 #1
0
ファイル: __init__.py プロジェクト: mgedmin/ShoppingList
def main(global_config, **settings):
    """This function returns a Pyramid WSGI application."""
    engine = engine_from_config(settings, "sqlalchemy.")
    DBSession.configure(bind=engine)
    config = Configurator(settings=settings)
    config.add_settings(
        {"mako.imports": "from shoppinglist.filters import json"}
    )
    config.include("pyramid_mako")
    config.include("pyramid_tm")
    config.add_static_view("static", "static", cache_max_age=365*24*3600)
    config.add_cache_buster("static", ChecksumCacheBuster("static/SHA256SUMS"))
    config.add_route("home", "/")
    # Let's go nuts with REST, why don't we?
    config.add_route("list_items", "/api/items", request_method="GET")
    config.add_route("add_item", "/api/items", request_method="POST")
    config.add_route("remove_item", "/api/items/{id}", request_method="DELETE")
    config.add_route(
        "check_item", "/api/items/{id}/checked", request_method="POST"
    )
    config.add_route(
        "uncheck_item", "/api/items/{id}/checked", request_method="DELETE"
    )
    config.add_route("clear_list", "/api/items", request_method="DELETE")
    config.scan()
    return config.make_wsgi_app()
コード例 #2
0
ファイル: __init__.py プロジェクト: juliaWongCY/nlp
def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    config = Configurator(settings=settings)
    config.include('pyramid_jinja2')
    config.include('pyramid_beaker')
    config.include('pyramid_excel')
    config.add_static_view('static', 'static')
    config.add_cache_buster(
        'static', QueryStringConstantCacheBuster(str(int(time.time()))))
    config.add_route('home', '/')
    config.add_route('score', '/score')
    config.add_route('result', '/score/result')
    config.add_route('option', '/score/option')
    config.add_route('statistics', '/statistics')
    config.add_route('re_statistics', '/statistics/refresh')
    config.add_route('analysis', '/analysis')
    config.scan()
    return config.make_wsgi_app()
コード例 #3
0
def application(_global_config, **settings):
    """ Returns the Pyramid WSGI application.
    """

    config = Configurator(settings=settings)
    config.include('pyramid_debugtoolbar')
    config.include('pyramid_mako')

    config.add_subscriber(set_renderer_context, BeforeRender)

    config.add_static_view(
        name='assets', path='clang_ast_webservice.assets:',
        cache_max_age=2592000)
    config.add_cache_buster(
        'clang_ast_webservice.assets:',
        QueryStringConstantCacheBuster(assets_version))

    config.include(add_json_renderer)

    config.include('.index')

    return config.make_wsgi_app()
コード例 #4
0
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
    authn_policy = AuthTktAuthenticationPolicy(settings['buddy.site_secret'],
                                               callback=groupfinder,hashalg='sha512',max_age=864000, timeout=3600,reissue_time=120)
    authz_policy = ACLAuthorizationPolicy()
    hex_secret = settings['buddy.session_secret'].strip()
    secret = binascii.unhexlify(hex_secret)
    session_factory = EncryptedCookieSessionFactory(secret)
    config = Configurator(settings=settings,
                          authentication_policy=authn_policy,
                          authorization_policy=authz_policy,
                          session_factory=session_factory)

    cache = RootFactory.__acl__
    config.set_root_factory(RootFactory)
    config.add_request_method(get_user, 'user', reify=True)
    config.add_subscriber(add_renderer_globals, BeforeRender)
    config.set_default_csrf_options(require_csrf=True)
    config.add_static_view('static', 'static',cache_max_age=5184000)
    config.add_cache_buster(
        'buddy:static/',
        QueryStringConstantCacheBuster(str(int(time.time()))))
    config.add_static_view('deform_static', 'deform_bootstrap:static',cache_max_age=5184000)
    config.add_cache_buster(
        'buddy:deform_bootstrap/static/',
        QueryStringConstantCacheBuster(str(int(time.time()))))
    config.add_static_view('images','buddy:images')
    config.add_cache_buster(
        'buddy:images/',
        QueryStringConstantCacheBuster(str(int(time.time()))))
    config.include('pyramid_mailer')
    config.include("pyramid_mako")
    config.include("pyramid_retry")
    config.include('buddy.views.noprefix_include')
    config.include('buddy.views.profile_include')
    config.include('buddy.views.advice.noprefix_route')
    config.include('buddy.views.listing.noprefix_route')
    config.include('buddy.views.users_include',route_prefix='users')
    config.include('buddy.views.listing.add_route',route_prefix='listings')
    config.include('buddy.views.listing.add_route_listing_ajax',route_prefix="listings-ajax")
    config.include('buddy.views.dashboard.add_route',route_prefix='dashboard')
    config.include('buddy.views.advice.blog_route',route_prefix='blogs')
    config.include('buddy.views.inbox.add_route', route_prefix='message')
    config.include('buddy.views.document.add_route',route_prefix='corp')
    config.include("buddy.views.search.add_route", route_prefix="prosearch")
    config.include("buddy.views.pricing.pricing")
    config.include("buddy.pyramid_storage.s3")

    config.scan()
    return config.make_wsgi_app()
コード例 #5
0
def main(global_config, **settings):
    """
    This function returns a Pyramid WSGI application.
    """
    # Patch in all environment variables
    settings.update(get_dbas_environs())

    settings.update(get_key_pair())

    # Patch in beaker url
    settings.update(get_db_environs(key="session.url", db_name="beaker"))

    # authentication and authorization
    authn_policy = AuthTktAuthenticationPolicy(settings["authn.secret"],
                                               callback=groupfinder,
                                               hashalg='sha512',
                                               wild_domain=False)
    authz_policy = ACLAuthorizationPolicy()

    # load database
    settings.update(
        get_db_environs("sqlalchemy.discussion.url", db_name="discussion"))

    discussion_engine = engine_from_config(settings, "sqlalchemy.discussion.")
    load_discussion_database(discussion_engine)

    # session management and cache region support
    session_factory = session_factory_from_settings(settings)
    set_cache_regions_from_settings(settings)

    # creating the configurator
    config = Configurator(settings=settings,
                          authentication_policy=authn_policy,
                          authorization_policy=authz_policy,
                          root_factory='dbas.security.RootFactory',
                          session_factory=session_factory)
    config.add_translation_dirs(
        'dbas:locale', 'admin:locale')  # add this before the locale negotiator
    config.set_locale_negotiator(_locale_negotiator)
    config.set_default_csrf_options(require_csrf=True)

    # Include apps
    config.include('api', route_prefix='/api')
    config.include('api.v2', route_prefix='/api/v2')
    config.include('admin', route_prefix='/admin')
    config.include('graph', route_prefix='/graph')
    config.include('websocket', route_prefix='/websocket')

    # more includes are in the config
    config.include('pyramid_chameleon')
    config.include('pyramid_mailer')
    config.include('pyramid_tm')

    config.add_static_view(name='swagger-ui',
                           path='api:swagger-ui/',
                           cache_max_age=3600)
    config.add_static_view(name='static',
                           path='dbas:static/',
                           cache_max_age=3600)
    config.add_static_view(name='websocket',
                           path='websocket:static/',
                           cache_max_age=3600)
    config.add_static_view(name='admin',
                           path='admin:static/',
                           cache_max_age=3600)
    config.add_cache_buster(
        'static', QueryStringConstantCacheBuster(str(int(time.time()))))
    config.add_cache_buster(
        'admin:static/', QueryStringConstantCacheBuster(str(int(time.time()))))
    config.add_cache_buster(
        'websocket:static/',
        QueryStringConstantCacheBuster(str(int(time.time()))))

    # adding main routes
    config.add_route('main_page', '/')
    config.add_route('main_settings', '/settings')
    config.add_route('main_notification', '/notifications')
    config.add_route('main_news', '/news')
    config.add_route('main_imprint', '/imprint')
    config.add_route('main_privacy', '/privacy_policy')
    config.add_route('main_faq', '/faq')
    config.add_route('main_batman', '/batman')
    config.add_route('main_docs', '/docs')
    config.add_route('main_experiment', '/fieldexperiment')
    config.add_route('main_user', r'/user/{uid:\d+}')
    config.add_route('main_graphiql', '/graphiql')
    config.add_route('main_api', '/api')
    config.add_route('discussion_overview', '/mydiscussions')
    config.add_route('health', '/health')

    # ajax for navigation logic, administration, settings and editing/viewing log
    config.add_route('user_login', '{url:.*}user_login')
    config.add_route('oauth_start', "/oauth")
    config.add_route('oauth',
                     '/oauth/{service:(facebook|google|twitter|github)}')
    config.add_route('user_logout', 'user/logout')
    config.add_route('user_delete', 'user/delete')
    config.add_route('set_new_start_argument',
                     '{url:.*}set_new_start_argument')
    config.add_route('set_new_start_premise', '{url:.*}set_new_start_premise')
    config.add_route('set_new_premises_for_argument',
                     '/{url:.*}set_new_premises_for_argument')
    config.add_route('set_correction_of_statement',
                     '/{url:.*}set_correction_of_statement')
    config.add_route('set_new_issue', '/{url:.*}set_new_issue')
    config.add_route('get_logfile_for_statements',
                     '/{url:.*}get_logfile_for_statements')
    config.add_route('get_shortened_url', '/{url:.*}get_shortened_url')
    config.add_route('user_registration', '/{url:.*}user_registration')
    config.add_route('user_password_request', '/{url:.*}user_password_request')
    config.add_route('fuzzy_search', '/{url:.*}fuzzy_search')
    config.add_route('fuzzy_nickname_search', '/{url:.*}fuzzy_nickname_search')
    config.add_route('switch_language', '{url:.*}switch_language{params:.*}')
    config.add_route('send_notification', '{url:.*}send_notification')
    config.add_route('get_infos_about_argument',
                     '/{url:.*}get_infos_about_argument')
    config.add_route('get_user_with_same_opinion',
                     '/{url:.*}get_user_with_same_opinion')
    config.add_route('get_public_user_data', '/{url:.*}get_public_user_data')
    config.add_route('get_temp_key', "get_temp_key")
    config.add_route('get_user_history', 'get_user_history')
    config.add_route('get_all_edits', 'get_all_edits')
    config.add_route('get_all_posted_statements', 'get_all_posted_statements')
    config.add_route('get_all_argument_clicks', 'get_all_argument_clicks')
    config.add_route('get_all_statement_clicks', 'get_all_statement_clicks')
    config.add_route('get_all_marked_arguments', 'get_all_marked_arguments')
    config.add_route('get_all_marked_statements', 'get_all_marked_statements')
    config.add_route('set_user_setting', 'set_user_setting')
    config.add_route('set_user_language', 'set_user_language')
    config.add_route('delete_user_history', 'delete_user_history')
    config.add_route('delete_statistics', 'delete_statistics')
    config.add_route('get_news', 'get_news')
    config.add_route('send_news', 'send_news')
    config.add_route('notifications_read', 'notifications_read')
    config.add_route('notifications_delete', 'notifications_delete')
    config.add_route('get_arguments_by_statement_uid',
                     r'get_arguments_by_statement/{statement_id:\d+}')
    config.add_route('flag_argument_or_statement',
                     '{url:.*}flag_argument_or_statement')
    config.add_route('split_or_merge_statement',
                     '{url:.*}split_or_merge_statement')
    config.add_route('split_or_merge_premisegroup',
                     '{url:.*}split_or_merge_premisegroup')
    config.add_route('review_delete_argument',
                     '{url:.*}review_delete_argument')
    config.add_route('review_optimization_argument',
                     '{url:.*}review_optimization_argument')
    config.add_route('review_duplicate_statement',
                     '{url:.*}review_duplicate_statement')
    config.add_route('review_edit_argument', '{url:.*}review_edit_argument')
    config.add_route('review_splitted_premisegroup',
                     '{url:.*}review_splitted_premisegroup')
    config.add_route('review_merged_premisegroup',
                     '{url:.*}review_merged_premisegroup')
    config.add_route('undo_review', '{url:.*}undo_review')
    config.add_route('cancel_review', '{url:.*}cancel_review')
    config.add_route('review_lock', '{url:.*}review_lock')
    config.add_route('revoke_statement_content',
                     '{url:.*}revoke_statement_content')
    config.add_route('revoke_argument_content',
                     '{url:.*}revoke_argument_content')
    config.add_route('get_references', '{url:.*}get_references')
    config.add_route('set_references', '{url:.*}set_references')
    config.add_route('set_seen_statements', '{url:.*}set_seen_statements')
    config.add_route('mark_statement_or_argument',
                     '{url:.*}mark_statement_or_argument')
    config.add_route('set_discussion_properties',
                     '{url:.*}set_discussion_properties')
    config.add_route('get_suggestion_with_similarity_to', '/search')

    # logic at the end, otherwise the * pattern will do shit
    config.add_route(
        'discussion_support',
        r'/discuss/{slug}/support/{arg_id_user:\d+}/{arg_id_sys:\d+}')
    config.add_route(
        'discussion_reaction',
        r'/discuss/{slug}/reaction/{arg_id_user:\d+}/{relation}/{arg_id_sys:\d+}'
    )
    config.add_route('discussion_dontknow_argument',
                     r'/discuss/{slug}/justify/{argument_id:\d+}/dontknow')
    config.add_route('discussion_justify_statement',
                     r'/discuss/{slug}/justify/{statement_id:\d+}/{attitude}')
    config.add_route(
        'discussion_justify_argument',
        r'/discuss/{slug}/justify/{argument_id:\d+}/{attitude}/{relation}')
    config.add_route('discussion_attitude',
                     r'/discuss/{slug}/attitude/{statement_id:\d+}')
    config.add_route('discussion_choose', r'/discuss/{slug}/choose*pgroup_ids')
    config.add_route('discussion_jump',
                     r'/discuss/{slug}/jump/{argument_id:\d+}')
    config.add_route('discussion_finish',
                     r'/discuss/{slug}/finish/{argument_id:\d+}')
    config.add_route('discussion_exit', '/discuss/exit')
    config.add_route('discussion_start', '/discuss')
    config.add_route('discussion_start_with_slash', '/discuss/')
    config.add_route('discussion_init_with_slug', '/discuss/{slug}')
    config.add_route('discussion_init_with_slug_with_slash',
                     '/discuss/{slug}/')

    # review section
    config.add_route('review_index', '/review')
    config.add_route('review_reputation', '/review/reputation')
    config.add_route('review_history', '/review/history')
    config.add_route('review_ongoing', '/review/ongoing')
    config.add_route('review_queue', '/review/{queue}')

    config.scan()

    return config.make_wsgi_app()
コード例 #6
0
ファイル: assets.py プロジェクト: betagouv/zam
def includeme(config: Configurator) -> None:
    config.add_static_view("static", "static", cache_max_age=3600)
    config.add_cache_buster(
        "zam_repondeur:static/",
        ContentHashCacheBuster(package="zam_repondeur", base_path="static/"),
    )
コード例 #7
0
def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    config = Configurator(settings=settings)
    config.include('pyramid_jinja2')

    # Insecure Session
    # https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/sessions.html#sessions-chapter
    my_session_factory = SignedCookieSessionFactory(
        'insecure-but-digitally-signed-382746', serializer=JSONSerializer())
    config.set_session_factory(my_session_factory)

    # Cache busting of static assets
    # See https://docs.pylonsproject.org/projects/pyramid/en/1.10-branch/narr/assets.html#cache-busting
    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_cache_buster(
        'arscca:static/',
        QueryStringConstantCacheBuster(str(int(time.time()))))

    config.add_route('admin_clear_run_groups', '/admin/run_groups/clear')
    config.add_route('admin_generate_run_groups', '/admin/run_groups/generate')
    config.add_route('admin_run_groups', '/admin/run_groups')
    config.add_route('calendar', '/calendar')
    config.add_route('calendar_slash', '/calendar/')
    config.add_route('calendar_plain', '/calendar/plain')
    config.add_route('exception', '/exception')
    config.add_route('help_index', '/help')
    config.add_route('help_index_slash', '/help/')
    config.add_route('help_show', '/help/{document_name}')
    config.add_route('opinion_index', '/opinion')
    config.add_route('opinion_index_slash', '/opinion/')
    config.add_route('opinion_show', '/opinion/{document_name}')
    config.add_route('driver', '/drivers/{slug}')
    config.add_route('drivers', '/drivers')
    config.add_route('drivers_slash', '/drivers/')
    config.add_route('event', '/events/{date}')
    config.add_route('events', '/events')  # redirects to home
    config.add_route('events_slash',
                     '/events/')  # redirects to home (slash is distinct)
    config.add_route('index', '/')
    config.add_route('javascript_errors', '/javascript_errors')
    config.add_route('joomla_test__home_page_photos',
                     '/joomla_test/home_page_photos')
    config.add_route('joomla_test__home_page_calendar',
                     '/joomla_test/home_page_calendar')
    config.add_route('live_event', '/live')
    config.add_route('live_event_drivers', '/live/drivers')
    config.add_route('live_event_raw', '/live/raw')
    config.add_route('live_event_revision', '/live/revision')
    config.add_route('live_event_update_redis', '/live/update_redis')
    config.add_route('msreg', '/msreg')
    config.add_route('msreg_upload', '/msreg/upload', request_method='POST')
    config.add_route('msreg_download',
                     '/msreg/{download_filename}',
                     request_method='GET')
    config.add_route('national_event', '/national_events/{year}')
    config.add_route('photo_upload_create',
                     '/photos/upload',
                     request_method='POST')
    config.add_route('photo_upload_new',
                     '/photos/upload',
                     request_method='GET')
    config.add_route('photos', '/photos')
    config.add_route('photos_slash', '/photos/')
    config.add_route('photos__teaser', '/photos/teaser')
    config.add_route('report', '/standings')
    config.add_route('run_groups', '/run_groups')

    config.scan()
    config.include('pyramid_exclog')
    return config.make_wsgi_app()
コード例 #8
0
def main(global_config, **settings):
    """
    This function returns a Pyramid WSGI application.
    """
    # Patch in all environment variables
    settings.update(get_dbas_environs())

    # Patch in beaker url
    settings.update(get_db_environs(key="session.url", db_name="beaker"))

    # authentication and authorization
    authn_policy = AuthTktAuthenticationPolicy(settings["authn.secret"],
                                               callback=groupfinder,
                                               hashalg='sha512')
    authz_policy = ACLAuthorizationPolicy()

    # load database
    settings.update(
        get_db_environs("sqlalchemy.discussion.url", db_name="discussion"))

    discussion_engine = engine_from_config(settings, "sqlalchemy.discussion.")
    load_discussion_database(discussion_engine)

    # session management and cache region support
    session_factory = session_factory_from_settings(settings)
    set_cache_regions_from_settings(settings)

    # PLEASE USE THIS CODE TO READ CUSTOM SETTINGS FROM THE INI FILES
    # include custom parts
    # sections = ['service']
    # log settings
    # log = logging.getLogger(__name__)
    # for s in sections:
    #     try:
    #         parser = ConfigParser()
    #         parser.read(global_config['__file__'])
    #         custom_settings = dict()
    #         for k, v in parser.items('settings:{}'.format(s)):
    #             custom_settings['settings:{}:{}'.format(s, k)] = v
    #         settings.update(custom_settings)
    #     except NoSectionError as e:
    #         log.debug('__init__() '.upper() + 'main() <No ' + s + '-Section> ' + str(e))

    # creating the configurator
    config = Configurator(settings=settings,
                          authentication_policy=authn_policy,
                          authorization_policy=authz_policy,
                          root_factory='dbas.security.RootFactory',
                          session_factory=session_factory)
    config.add_translation_dirs(
        'dbas:locale', 'admin:locale')  # add this before the locale negotiator
    config.set_default_csrf_options(require_csrf=True)

    # Include apps
    config.include('api', route_prefix='/api')
    config.include('api.v2', route_prefix='/api/v2')
    config.include('graph', route_prefix='/graph')
    config.include('admin', route_prefix='/admin')
    config.include('websocket', route_prefix='/websocket')

    # more includes are in the config
    config.include('pyramid_chameleon')
    config.include('pyramid_mailer')
    config.include('pyramid_tm')

    config.add_static_view(name='static',
                           path='dbas:static/',
                           cache_max_age=3600)
    config.add_static_view(name='websocket',
                           path='websocket:static/',
                           cache_max_age=3600)
    config.add_static_view(name='admin',
                           path='admin:static/',
                           cache_max_age=3600)
    config.add_cache_buster(
        'static', QueryStringConstantCacheBuster(str(int(time.time()))))
    config.add_cache_buster(
        'admin:static/', QueryStringConstantCacheBuster(str(int(time.time()))))
    config.add_cache_buster(
        'websocket:static/',
        QueryStringConstantCacheBuster(str(int(time.time()))))

    # adding main routes
    config.add_route('main_page', '/')
    config.add_route('main_settings', '/settings')
    config.add_route('main_notification', '/notifications')
    config.add_route('main_news', '/news')
    config.add_route('main_imprint', '/imprint')
    config.add_route('main_privacy', '/privacy_policy')
    config.add_route('main_rss', '/rss')
    config.add_route('main_faq', '/faq')
    config.add_route('main_docs', '/docs')
    config.add_route('main_experiment', '/fieldexperiment')
    config.add_route('main_discussions_overview', '/mydiscussions')
    config.add_route('main_user', '/user/{uid:\d+}')
    config.add_route('main_graphiql', '/graphiql')
    config.add_route('main_api', '/api')

    # ajax for navigation logic, administration, settings and editing/viewing log
    config.add_route('user_login', '{url:.*}user_login')
    config.add_route('user_login_oauth', '{url:.*}user_login_oauth')
    config.add_route('user_logout', '{url:.*}user_logout')
    config.add_route('user_delete', '{url:.*}user_delete')
    config.add_route('set_new_start_argument',
                     '{url:.*}set_new_start_argument')
    config.add_route('set_new_start_premise', '{url:.*}set_new_start_premise')
    config.add_route('set_new_premises_for_argument',
                     '/{url:.*}set_new_premises_for_argument')
    config.add_route('set_correction_of_statement',
                     '/{url:.*}set_correction_of_statement')
    config.add_route('set_new_issue', '/{url:.*}set_new_issue')
    config.add_route('get_logfile_for_statements',
                     '/{url:.*}get_logfile_for_statements')
    config.add_route('get_shortened_url', '/{url:.*}get_shortened_url')
    config.add_route('user_registration', '/{url:.*}user_registration')
    config.add_route('user_password_request', '/{url:.*}user_password_request')
    config.add_route('fuzzy_search', '/{url:.*}fuzzy_search')
    config.add_route('fuzzy_nickname_search', '/{url:.*}fuzzy_nickname_search')
    config.add_route('switch_language', '{url:.*}switch_language{params:.*}')
    config.add_route('send_notification', '{url:.*}send_notification')
    config.add_route('get_infos_about_argument',
                     '/{url:.*}get_infos_about_argument')
    config.add_route('get_user_with_same_opinion',
                     '/{url:.*}get_user_with_same_opinion')
    config.add_route('get_public_user_data', '/{url:.*}get_public_user_data')
    config.add_route('get_user_history', 'get_user_history')
    config.add_route('get_all_edits', 'get_all_edits')
    config.add_route('get_all_posted_statements', 'get_all_posted_statements')
    config.add_route('get_all_argument_clicks', 'get_all_argument_clicks')
    config.add_route('get_all_statement_clicks', 'get_all_statement_clicks')
    config.add_route('get_all_marked_arguments', 'get_all_marked_arguments')
    config.add_route('get_all_marked_statements', 'get_all_marked_statements')
    config.add_route('set_user_setting', 'set_user_setting')
    config.add_route('set_user_language', 'set_user_language')
    config.add_route('delete_user_history', 'delete_user_history')
    config.add_route('delete_statistics', 'delete_statistics')
    config.add_route('get_news', 'get_news')
    config.add_route('send_news', 'send_news')
    config.add_route('notifications_read', 'notifications_read')
    config.add_route('notifications_delete', 'notifications_delete')
    config.add_route('get_arguments_by_statement_uid',
                     'get_arguments_by_statement/{statement_id:\d+}')
    config.add_route('flag_argument_or_statement',
                     '{url:.*}flag_argument_or_statement')
    config.add_route('split_or_merge_statement',
                     '{url:.*}split_or_merge_statement')
    config.add_route('split_or_merge_premisegroup',
                     '{url:.*}split_or_merge_premisegroup')
    config.add_route('review_delete_argument',
                     '{url:.*}review_delete_argument')
    config.add_route('review_optimization_argument',
                     '{url:.*}review_optimization_argument')
    config.add_route('review_duplicate_statement',
                     '{url:.*}review_duplicate_statement')
    config.add_route('review_edit_argument', '{url:.*}review_edit_argument')
    config.add_route('review_splitted_premisegroup',
                     '{url:.*}review_splitted_premisegroup')
    config.add_route('review_merged_premisegroup',
                     '{url:.*}review_merged_premisegroup')
    config.add_route('undo_review', '{url:.*}undo_review')
    config.add_route('cancel_review', '{url:.*}cancel_review')
    config.add_route('review_lock', '{url:.*}review_lock')
    config.add_route('revoke_statement_content',
                     '{url:.*}revoke_statement_content')
    config.add_route('revoke_argument_content',
                     '{url:.*}revoke_argument_content')
    config.add_route('get_references', '{url:.*}get_references')
    config.add_route('set_references', '{url:.*}set_references')
    config.add_route('set_seen_statements', '{url:.*}set_seen_statements')
    config.add_route('mark_statement_or_argument',
                     '{url:.*}mark_statement_or_argument')
    config.add_route('set_discussion_properties',
                     '{url:.*}set_discussion_properties')

    # logic at the end, otherwise the * pattern will do shit
    config.add_route(
        'discussion_support',
        '/discuss/{slug}/support/{arg_id_user:\d+}/{arg_id_sys:\d+}')
    config.add_route(
        'discussion_reaction',
        '/discuss/{slug}/reaction/{arg_id_user:\d+}/{relation}/{arg_id_sys:\d+}'
    )
    config.add_route('discussion_dontknow_argument',
                     '/discuss/{slug}/justify/{argument_id:\d+}/dontknow')
    config.add_route('discussion_justify_statement',
                     '/discuss/{slug}/justify/{statement_id:\d+}/{attitude}')
    config.add_route(
        'discussion_justify_argument',
        '/discuss/{slug}/justify/{argument_id:\d+}/{attitude}/{relation}')

    config.add_route('discussion_attitude',
                     '/discuss/{slug}/attitude/{statement_id:\d+}')
    config.add_route(
        'discussion_choose',
        '/discuss/{slug}/choose/{is_argument}/{is_supportive}/{id:\d+}*pgroup_ids'
    )
    config.add_route('discussion_jump',
                     '/discuss/{slug}/jump/{argument_id:\d+}')
    config.add_route('discussion_finish',
                     '/discuss/{slug}/finish/{argument_id:\d+}')
    config.add_route('discussion_exit', '/discuss/exit')
    config.add_route('discussion_start', '/discuss')
    config.add_route('discussion_start_with_slash', '/discuss/')
    config.add_route('discussion_init_with_slug', '/discuss/{slug}')

    # review section
    config.add_route('review_index', '/review')
    config.add_route('review_reputation', '/review/reputation')
    config.add_route('review_history', '/review/history')
    config.add_route('review_ongoing', '/review/ongoing')
    config.add_route('review_content', '/review/{queue}')

    config.scan()

    __write_rss_feeds()

    return config.make_wsgi_app()