Esempio n. 1
0
def includeme(configurator):
    """pyramid_localize configuration method."""
    # let's check if we have any configuration, or not
    if babel:
        configurator.scan('pyramid_localize.subscribers.i18n')
        configuration = configurator.registry.get('config', {}).get('localize')
        if configuration:
            configurator.include('pyramid_mako')
            # once user allowed for localization, lets set up default values!
            config_defaults(configurator, 'pyramid_localize:config')

            configurator.set_locale_negotiator(
                'pyramid_localize.negotiator.locale_negotiator')
            translation_dirs = configuration.translation.dirs
            # if it's not a list, lets make it a list.
            # This is to allow creating both single, and list-like config entry
            if not isinstance(translation_dirs, list):
                translation_dirs = [translation_dirs]

            # let's add destination folder to the list
            if 'destination' in configuration.translation:
                translation_dirs.append(configuration.translation.destination)

            configurator.add_translation_dirs(*translation_dirs)
            # let scan all subscribers
            configurator.scan('pyramid_localize.views')

            configurator.add_route(name='localize:index', pattern='catalogue')
            configurator.add_route(name='localize:update',
                                   pattern='catalogue/update')
            configurator.add_route(name='localize:compile',
                                   pattern='catalogue/compile')
            configurator.add_route(name='localize:reload',
                                   pattern='catalogue/reload')

            # getting requests methods
            configurator.add_request_method(locale, name='locale', reify=True)
            configurator.add_request_method(database_locales,
                                            name='_database_locales',
                                            reify=True)
            configurator.add_request_method(locales, name='locales')
            configurator.add_request_method(locale_id,
                                            name='locale_id',
                                            reify=True)

            # if configured
            return

    # including fake subscribers
    configurator.scan('pyramid_localize.subscribers.fake')
Esempio n. 2
0
def includeme(configurator):
    """pyramid_localize configuration method."""
    # let's check if we have any configuration, or not
    if babel:
        configurator.scan('pyramid_localize.subscribers.i18n')
        configuration = configurator.registry.get('config', {}).get('localize')
        if configuration:
            configurator.include('pyramid_mako')
            # once user allowed for localization, lets set up default values!
            config_defaults(configurator, 'pyramid_localize:config')

            configurator.set_locale_negotiator('pyramid_localize.negotiator.locale_negotiator')
            translation_dirs = configuration.translation.dirs
            # if it's not a list, lets make it a list.
            # This is to allow creating both single, and list-like config entry
            if not isinstance(translation_dirs, list):
                translation_dirs = [translation_dirs]

            # let's add destination folder to the list
            if 'destination' in configuration.translation:
                translation_dirs.append(configuration.translation.destination)

            configurator.add_translation_dirs(*translation_dirs)
            # let scan all subscribers
            configurator.scan('pyramid_localize.views')

            configurator.add_route(name='localize:index', pattern='catalogue')
            configurator.add_route(name='localize:update', pattern='catalogue/update')
            configurator.add_route(name='localize:compile', pattern='catalogue/compile')
            configurator.add_route(name='localize:reload', pattern='catalogue/reload')

            # getting requests methods
            configurator.add_request_method(locale, name='locale', reify=True)
            configurator.add_request_method(database_locales, name='_database_locales', reify=True)
            configurator.add_request_method(locales, name='locales')
            configurator.add_request_method(locale_id, name='locale_id', reify=True)

            # if configured
            return

    # including fake subscribers
    configurator.scan('pyramid_localize.subscribers.fake')
Esempio n. 3
0
def includeme(configurator):
    '''
        i18n includeme action
    '''

    # TODO: Find a better way to run other stuff than translation methods
    configuration = configurator.registry['config'].get('localize')
    # let's check if we have any configuration, or not
    if babel:
        configurator.scan('pyramid_localize.subscribers.i18n')
        if configuration:
            # once user allowed for localization, lets set up default values!
            config_defaults(configurator, 'pyramid_localize:config')

            configurator.set_locale_negotiator(tools.locale_negotiator)
            translation_dirs = configuration.translation.dirs
            # if it's not a list, lets make it a list. This is to allow creating both single, and list-like config entry
            if not isinstance(translation_dirs, list):
                translation_dirs = [translation_dirs]
            configurator.add_translation_dirs(*translation_dirs)
            # let scan all subscribers
            configurator.scan('pyramid_localize.views')

            configurator.add_route(name='localize:index', pattern='catalog')
            configurator.add_route(name='localize:update', pattern='catalog/update')
            configurator.add_route(name='localize:compile', pattern='catalog/compile')
            configurator.add_route(name='localize:reload', pattern='catalog/reload')

            # getting requests methods
            configurator.add_request_method(locale, name='locale', reify=True)
            configurator.add_request_method(database_locales, name='_database_locales', reify=True)
            configurator.add_request_method(locales, name='locales')
            configurator.add_request_method(locale_id, name='locale_id', reify=True)
    else:
        # including fake subscribers
        configurator.scan('pyramid_localize.subscribers.fake')
Esempio n. 4
0
def configure(settings=None):
    if settings is None:
        settings = {}

    config = Configurator(settings=settings)

    # Set our yml.location so that it contains all of our settings files
    config_defaults(config, ["warehouse:etc"])

    # We want to load configuration from YAML files
    config.include("tzf.pyramid_yml")

    # Register our logging support
    config.include(".logging")

    # We'll want to use Jinja2 as our template system.
    config.include("pyramid_jinja2")

    # We also want to use Jinja2 for .html templates as well, because we just
    # assume that all templates will be using Jinja.
    config.add_jinja2_renderer(".html")

    # We'll want to configure some filters for Jinja2 as well.
    filters = config.get_settings().setdefault("jinja2.filters", {})
    filters.setdefault("readme", "warehouse.filters:readme_renderer")
    filters.setdefault("shorten_number", "warehouse.filters:shorten_number")

    # We also want to register some global functions for Jinja
    jglobals = config.get_settings().setdefault("jinja2.globals", {})
    jglobals.setdefault("gravatar", "warehouse.utils.gravatar:gravatar")

    # We'll store all of our templates in one location, warehouse/templates
    # so we'll go ahead and add that to the Jinja2 search path.
    config.add_jinja2_search_path("warehouse:templates", name=".html")

    # We want to configure our JSON renderer to sort the keys, and also to use
    # an ultra compact serialization format.
    config.add_renderer(
        "json",
        renderers.JSON(sort_keys=True, separators=(",", ":")),
    )

    # Configure our transaction handling so that each request gets it's own
    # transaction handler and the lifetime of the transaction is tied to the
    # lifetime of the request.
    config.add_settings({
        "tm.manager_hook": lambda request: transaction.TransactionManager(),
        "tm.activate_hook": activate_hook,
    })
    config.include("pyramid_tm")

    # Register support for services
    config.include("pyramid_services")

    # Register support for our legacy action URLs
    config.include(".legacy.action_routing")

    # Register support for internationalization and localization
    config.include(".i18n")

    # Register the configuration for the PostgreSQL database.
    config.include(".db")

    # Register our session support
    config.include(".sessions")

    # Register our support for http and origin caching
    config.include(".cache.http")
    config.include(".cache.origin")

    # Register our CSRF support
    config.include(".csrf")

    # Register our authentication support.
    config.include(".accounts")

    # Allow the packaging app to register any services it has.
    config.include(".packaging")

    # Configure redirection support
    config.include(".redirects")

    # Register all our URL routes for Warehouse.
    config.include(".routes")

    # Enable a Content Security Policy
    config.add_settings({
        "csp": {
            "default-src": ["'none'"],
            "frame-ancestors": ["'none'"],
            "img-src": [
                "'self'",
                config.registry.settings["camo.url"],
                "https://secure.gravatar.com",
            ],
            "referrer": ["cross-origin"],
            "reflected-xss": ["block"],
            "script-src": ["'self'"],
            "style-src": ["'self'"],
        },
    })
    config.add_tween("warehouse.config.content_security_policy_tween_factory")

    # If a route matches with a slash appended to it, redirect to that route
    # instead of returning a HTTPNotFound.
    config.add_notfound_view(append_slash=HTTPMovedPermanently)

    # Configure the filesystems we use.
    config.registry["filesystems"] = {}
    for key, path in {
            k[5:]: v
            for k, v in config.registry.settings.items()
            if k.startswith("dirs.")}.items():
        config.registry["filesystems"][key] = \
            fs.opener.fsopendir(path, create_dir=True)

    # Enable Warehouse to service our static files
    config.add_static_view(
        name="static",
        path="warehouse:static",
        cachebust=WarehouseCacheBuster(
            "warehouse:static/manifest.json",
            cache=not config.registry.settings["pyramid.reload_assets"],
        ),
    )

    # Scan everything for configuration
    config.scan(ignore=["warehouse.migrations.env"])

    return config
Esempio n. 5
0
def includeme(configurator):
    """
    Configure pyramid_fullauth on application.

    :param pyramid.configurator.Configurator configurator: pyramid's configurator object
    """
    config_defaults(configurator, 'pyramid_fullauth:config/default.yaml')
    configurator.include('pyramid_localize')
    configurator.include('pyramid_mako')
    fullauth_config = configurator.registry['config'].fullauth

    if configurator.registry.queryUtility(IAuthorizationPolicy) is None:
        configurator.set_authorization_policy(ACLAuthorizationPolicy())

    # register authentication policy, only if not set already
    if configurator.registry.queryUtility(IAuthenticationPolicy) is None:
        configurator.set_authentication_policy(
            AuthTktAuthenticationPolicy(callback=groupfinder,
                                        **fullauth_config.AuthTkt))

    # register root factory, only if not set already
    if configurator.registry.queryUtility(IRootFactory) is None:
        configurator.set_root_factory(
            'pyramid_fullauth.auth.BaseACLRootFactoryMixin')

    # register session factory, only, if not already registered
    if configurator.registry.queryUtility(ISessionFactory) is None:
        # loading and setting session factory
        # first, divide provided path for module, and factory name
        module, factory = fullauth_config.session.factory.rsplit('.', 1)
        # import session module first
        session_module = __import__(module, fromlist=[module])
        # get the  factory class
        session_factory = getattr(session_module, factory)

        # set the new session factory
        configurator.set_session_factory(
            session_factory(**fullauth_config.session.settings))

    configurator.add_view_predicate(
        'check_csrf', predicates.CSRFCheckPredicate)

    # add routes
    configurator.add_route(name='login', pattern='/login')
    configurator.add_route(name='logout', pattern='/logout')
    configurator.add_route(name='register', pattern='/register')
    configurator.add_route(
        name='register:activate', pattern='/register/activate/{hash}')
    configurator.add_route(name='password:reset', pattern='/password/reset')
    configurator.add_route(
        name='password:reset:continue', pattern='/password/reset/{hash}',
        custom_predicates=(predicates.reset_hash,))
    configurator.add_route(name='email:change', pattern='/email/change')
    configurator.add_route(
        name='email:change:continue', pattern='/email/change/{hash}',
        custom_predicates=(predicates.change_email_hash,))
    # scan base views
    configurator.scan('pyramid_fullauth.views.basic')

    # check for the social. If social is not available, we will not turn it on!
    if 'social' in fullauth_config:
        # Velruse init (for social auth)

        # scan social views
        configurator.scan('pyramid_fullauth.views.social')
        providers = fullauth_config.social
        configurator.registry['config']['login_providers'] = providers
        for provider in providers:
            # Ugly hack for using google oauth2, not OpenID + Oauth2 from google
            provider_settings = fullauth_config['social'][provider]
            if provider == 'google':  # pragma: no cover
                provider = 'google_oauth2'

            configurator.include('velruse.providers.' + provider)
            getattr(configurator, 'add_{0}_login'.format(provider))(**provider_settings)

    # we'll add some request methods:
    configurator.add_request_method(login_perform, name='login_perform')
    configurator.add_request_method(logout, name='logout')
    configurator.add_request_method(user, name='user', reify=True)
Esempio n. 6
0
def configure(settings=None):
    if settings is None:
        settings = {}

    config = Configurator(settings=settings)

    # Set our yml.location so that it contains all of our settings files
    config_defaults(config, ["warehouse:etc"])

    # We want to load configuration from YAML files
    config.include("tzf.pyramid_yml")

    # Register our logging support
    config.include(".logging")

    # We'll want to use Jinja2 as our template system.
    config.include("pyramid_jinja2")

    # We also want to use Jinja2 for .html templates as well, because we just
    # assume that all templates will be using Jinja.
    config.add_jinja2_renderer(".html")

    # We'll want to configure some filters for Jinja2 as well.
    filters = config.get_settings().setdefault("jinja2.filters", {})
    filters.setdefault("readme", "warehouse.filters:readme_renderer")
    filters.setdefault("shorten_number", "warehouse.filters:shorten_number")

    # We also want to register some global functions for Jinja
    jglobals = config.get_settings().setdefault("jinja2.globals", {})
    jglobals.setdefault("gravatar", "warehouse.utils.gravatar:gravatar")

    # We'll store all of our templates in one location, warehouse/templates
    # so we'll go ahead and add that to the Jinja2 search path.
    config.add_jinja2_search_path("warehouse:templates", name=".html")

    # We want to configure our JSON renderer to sort the keys, and also to use
    # an ultra compact serialization format.
    config.add_renderer(
        "json",
        renderers.JSON(sort_keys=True, separators=(",", ":")),
    )

    # Configure our transaction handling so that each request gets it's own
    # transaction handler and the lifetime of the transaction is tied to the
    # lifetime of the request.
    config.add_settings({
        "tm.manager_hook":
        lambda request: transaction.TransactionManager(),
        "tm.activate_hook":
        activate_hook,
    })
    config.include("pyramid_tm")

    # Register support for services
    config.include("pyramid_services")

    # Register support for internationalization and localization
    config.include(".i18n")

    # Register the configuration for the PostgreSQL database.
    config.include(".db")

    # Register our session support
    config.include(".sessions")

    # Register our support for http and origin caching
    config.include(".cache.http")
    config.include(".cache.origin")

    # Register our CSRF support
    config.include(".csrf")

    # Register our authentication support.
    config.include(".accounts")

    # Allow the packaging app to register any services it has.
    config.include(".packaging")

    # Configure redirection support
    config.include(".redirects")

    # Register all our URL routes for Warehouse.
    config.include(".routes")

    # Enable a Content Security Policy
    config.add_settings({
        "csp": {
            "default-src": ["'none'"],
            "frame-ancestors": ["'none'"],
            "img-src": [
                "'self'",
                config.registry.settings["camo.url"],
                "https://secure.gravatar.com",
            ],
            "referrer": ["cross-origin"],
            "reflected-xss": ["block"],
            "script-src": ["'self'"],
            "style-src": ["'self'"],
        },
    })
    config.add_tween("warehouse.config.content_security_policy_tween_factory")

    # If a route matches with a slash appended to it, redirect to that route
    # instead of returning a HTTPNotFound.
    config.add_notfound_view(append_slash=HTTPMovedPermanently)

    # Configure the filesystems we use.
    config.registry["filesystems"] = {}
    for key, path in {
            k[5:]: v
            for k, v in config.registry.settings.items()
            if k.startswith("dirs.")
    }.items():
        config.registry["filesystems"][key] = \
            fs.opener.fsopendir(path, create_dir=True)

    # Enable Warehouse to service our static files
    config.add_static_view(
        name="static",
        path="warehouse:static",
        cachebust=WarehouseCacheBuster(
            "warehouse:static/manifest.json",
            cache=not config.registry.settings["pyramid.reload_assets"],
        ),
    )

    # Scan everything for configuration
    config.scan(ignore=["warehouse.migrations.env"])

    return config