def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) config.include('pyramid_chameleon') config.include('pyramid_mako') config.include("cornice") config.include('pyramid_mailer') config.registry['mailer'] = Mailer.from_settings(settings) config_db(config, settings) config_routes(config) config_auth_policy(config, settings) config.add_static_view('static', 'static', cache_max_age=3600) config.add_route('home', '/home') config.scan() # Added these lines ## Pull in Angular App as python package, must have includeme() in __init__.py config.include('app') ## These pull along with static.py mount the angular app at / config.add_route('catchall_static', '/*subpath') config.add_view('server.static.static_view', route_name='catchall_static') return config.make_wsgi_app()
def __init__(self,**kwargs): """ we're going to wrap the pyramid_mailer.mailer.Mailer class , but figure out some sendmail functionality first """ sendmail_app = None sendmail_template = None if 'sendmail_app' in kwargs: sendmail_app = kwargs['sendmail_app'] if 'sendmail_template' in kwargs: sendmail_template = kwargs['sendmail_template'] if sendmail_app : self.sendmail_mailer = SendmailMailer( sendmail_app , sendmail_template ) else: self.sendmail_mailer = SendmailMailer() self.sendmail_delivery = SendmailDelivery(self.sendmail_mailer) ## ok, let the superclass take over pyramid_mailer_Mailer.__init__( self , **kwargs )
def test_rebind(self): from pyramid_mailer import Mailer class Dummy(object): pass mailer = Mailer() registry = DummyRegistry(mailer) request = Dummy() request.registry = registry request.tm = object() result = self._get_mailer(request) self.assertNotEqual(result, mailer) self.assertTrue(result.transaction_manager is request.tm)
def send_zim_url(settings, email, zim_url): """Send an email with a link to one zim file. :param settings: A pyramid settings object, used by pyramid_mailer. :param email: The email of the recipient. :param zim_url: The URL of the zim file. """ mailer = Mailer.from_settings(settings) msg = ZimReadyMessage(email, zim_url) mailer.send_immediately(msg)
def include_package(config): """Pyramid package include""" # add translations config.add_translation_dirs('pyams_mail:locales') config.scan() settings = config.registry.settings mailers = settings.get('pyams_mail.mailers') if mailers: for prefix in mailers.split(): config.registry.registerUtility( Mailer.from_settings(settings, prefix), IMailer, name=settings['{0}name'.format(prefix)])
def includeme(config): settings = config.get_settings() settings.setdefault('tm.manager_hook', 'pyramid_tm.explicit_manager') config.include('pyramid_services') config.include('pyramid_tm') config.include('pyramid_retry') engine = get_engine(settings) dbmaker = get_session_factory(engine) config.registry['dbmaker'] = dbmaker def db_factory(context, request): return get_tm_session(dbmaker, request.tm) config.register_service_factory(db_factory, name='db') def account_factory(context, request): db = request.find_service(name='db') svc = AccountService(db) return svc config.register_service_factory(account_factory, AccountService) mailer = Mailer.from_settings(settings) def mailer_factory(context, request): return mailer.bind(transaction_manager=request.tm) config.register_service_factory(mailer_factory, name='mailer') def mail_service_factory(context, request): mailer = request.find_service(name='mailer') svc = MailService(settings=settings, mailer=mailer) return svc config.register_service_factory(mail_service_factory, MailService) def login_factory(context, request): db = request.find_service(name='db') svc = LoginService(db) return svc config.register_service_factory(login_factory, LoginService)
def get_mailer(): return Mailer().from_settings(get_mailer_settings(), '')
def includeme(config): # Override deform templates # Initialisation must take place from within dom-ready! Else # deform.js and/or jquery is not loaded, because we use requirejs def translator(term): return get_localizer(get_current_request()).translate(term) deform_templates = resource_filename('deform', 'templates') search_path = (resource_filename('pym', 'deform_templates'), deform_templates) deform.Form.set_zpt_renderer(search_path, translator=translator) # Init resource root config.set_root_factory(res.models.root_factory) # Init session session_factory = session_factory_from_settings(config.registry.settings) config.set_session_factory(session_factory) from .auth import group_finder from .auth.models import get_current_user # Init Auth and Authz auth_pol = SessionAuthenticationPolicy( callback=group_finder ) authz_pol = ACLAuthorizationPolicy() config.add_request_method(get_current_user, 'user', reify=True) config.set_authentication_policy(auth_pol) config.set_authorization_policy(authz_pol) config.set_default_permission('view') # i18n config.add_translation_dirs('pym:locale/') config.add_translation_dirs('deform:locale/') config.set_locale_negotiator(i18n.locale_negotiator) config.add_request_method(i18n.get_locale, 'locale', reify=True) # This sets the translation string factory and domain # for use in templates. See pym.subscribers.add_localizer(). i18n.tsf = TranslationStringFactory('pym') # Mailer config.registry['mailer'] = Mailer.from_settings(config.registry.settings) # Mako config.include('pyramid_mako') # Chameleon needed if we use deform #config.include('pyramid_chameleon') # Init DB models.init(config.registry.settings, 'db.pym.sa.', invalidate_caches=True) # Run scan() which also imports db models config.scan('pym') # Static assets for this project config.add_static_view('static-pym', 'pym:static') config.add_static_view('static-deform', 'deform:static') init_auth(config.registry.settings['rc']) # View predicates from pyramid_duh config.include(duh_view) # Redis config.include('pyramid_redis')
def includeme(config): # Override deform templates # Initialisation must take place from within dom-ready! Else # deform.js and/or jquery is not loaded, because we use requirejs def translator(term): return get_localizer(get_current_request()).translate(term) deform_templates = resource_filename('deform', 'templates') search_path = (resource_filename('pym', 'deform_templates'), deform_templates) deform.Form.set_zpt_renderer(search_path, translator=translator) # Init resource root config.set_root_factory(res.models.root_factory) # Init session session_factory = session_factory_from_settings(config.registry.settings) config.set_session_factory(session_factory) from .auth import group_finder from .auth.models import get_current_user # Init Auth and Authz auth_pol = SessionAuthenticationPolicy(callback=group_finder) authz_pol = ACLAuthorizationPolicy() config.add_request_method(get_current_user, 'user', reify=True) config.set_authentication_policy(auth_pol) config.set_authorization_policy(authz_pol) config.set_default_permission('view') # i18n config.add_translation_dirs('pym:locale/') config.add_translation_dirs('deform:locale/') config.set_locale_negotiator(i18n.locale_negotiator) config.add_request_method(i18n.get_locale, 'locale', reify=True) # This sets the translation string factory and domain # for use in templates. See pym.subscribers.add_localizer(). i18n.tsf = TranslationStringFactory('pym') # Mailer config.registry['mailer'] = Mailer.from_settings(config.registry.settings) # Mako config.include('pyramid_mako') # Chameleon needed if we use deform #config.include('pyramid_chameleon') # Init DB models.init(config.registry.settings, 'db.pym.sa.', invalidate_caches=True) # Run scan() which also imports db models config.scan('pym') # Static assets for this project config.add_static_view('static-pym', 'pym:static') config.add_static_view('static-deform', 'deform:static') init_auth(config.registry.settings['rc']) # View predicates from pyramid_duh config.include(duh_view) # Redis config.include('pyramid_redis')