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')
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')
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')
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
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)
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