Esempio n. 1
0
 def test_setting_with_dots(self):
     settings = {
         'foo.bar': '1'
     }
     self.assertEqual('1', read_setting_from_env(settings, 'foo.bar'))
     os.environ['FOO_BAR'] = '2'
     self.assertEqual('2', read_setting_from_env(settings, 'foo.bar'))
     del os.environ['FOO_BAR']
    def test_read_setting_from_env(self):
        settings = {
            'foo_bar': '1',
            }

        self.assertEqual('1', read_setting_from_env(settings, 'foo_bar'))

        self.assertEqual('default',
                         read_setting_from_env(settings, 'new_option', 'default'))
        self.assertEqual(None,
                         read_setting_from_env(settings, 'new_option'))

        os.environ['FOO_BAR'] = '2'
        self.assertEqual('2', read_setting_from_env(settings, 'foo_bar'))
Esempio n. 3
0
    def test_read_setting_from_env(self):
        settings = {
            'foo_bar': '1',
        }

        self.assertEqual('1', read_setting_from_env(settings, 'foo_bar'))

        self.assertEqual('default',
                         read_setting_from_env(settings, 'new_option', 'default'))
        self.assertEqual(None,
                         read_setting_from_env(settings, 'new_option'))

        os.environ['FOO_BAR'] = '2'
        self.assertEqual('2', read_setting_from_env(settings, 'foo_bar'))
        del os.environ['FOO_BAR']
Esempio n. 4
0
def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    # read pyramid_mailer options
    for key, default in (
        ('host', 'localhost'),
        ('port', '25'),
        ('username', None),
        ('password', None),
        ('default_sender', '*****@*****.**')
    ):
        option = 'mail_' + key
        settings[option] = read_setting_from_env(settings, option, default)

    # read admin_emails option
    settings['admin_emails'] = read_setting_from_env(settings, 'admin_emails', '').split()

    # read Google Analytics code
    settings['google_analytics_code'] = read_setting_from_env(
        settings, 'google_analytics_code', None)

    # read the auth secret
    settings['auth_tk_secret'] = read_setting_from_env(
        settings, 'auth_tk_secret', None)
    if settings['auth_tk_secret'] is None:
        raise ConfigurationError('The auth_tk_secret configuration '
                                 'option is required')

    # SQLAlchemy setup
    settings['database_url'] = read_setting_from_env(settings, 'database_url', None)
    if settings['database_url'] is None:
        raise ConfigurationError('The database_url configuration '
                                 'option is required')
    settings['sqlalchemy.url'] = settings['database_url']

    # read sessions settings
    settings['redis.sessions.secret'] = read_setting_from_env(
        settings, 'redis.sessions.secret', None)
    if settings['redis.sessions.secret'] is None:
        raise ConfigurationError('The redis.sessions.secret configuration '
                                 'option is required')

    settings['redis.sessions.url'] = read_setting_from_env(
        settings, 'redis.sessions.url', None)
    if settings['redis.sessions.url'] is None:
        raise ConfigurationError('The redis.sessions.url configuration '
                                 'option is required')

    # Available languages
    available_languages = read_setting_from_env(settings, 'available_languages', 'en es')

    settings['available_languages'] = [
        lang for lang in available_languages.split(' ') if lang
    ]

    # Public URL root
    settings['public_url_root'] = read_setting_from_env(
        settings, 'public_url_root', 'http://localhost:6543/')

    # Google, Facebook and Microsoft Live Connect settings for pyramid_sna
    settings['google_scope'] = 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'
    settings['google_callback'] = 'yithlibraryserver.sna_callbacks.google_callback'
    settings['facebook_scope'] = 'email'
    settings['facebook_callback'] = 'yithlibraryserver.sna_callbacks.facebook_callback'
    settings['liveconnect_callback'] = 'yithlibraryserver.sna_callbacks.liveconnect_callback'

    # webassets
    settings['webassets.base_dir'] = 'yithlibraryserver:static'
    settings['webassets.base_url'] = 'static'
    settings['webassets.static_view'] = 'True'
    here = os.path.dirname(os.path.abspath(__file__))
    manifest_path = ('static', 'build', 'manifest.json')
    settings['webassets.manifest'] = 'json:%s' % os.path.join(here, *manifest_path)

    # main config object
    config = Configurator(
        settings=settings,
        root_factory=RootFactory,
        authorization_policy=ACLAuthorizationPolicy(),
        authentication_policy=AuthTktAuthenticationPolicy(
            settings['auth_tk_secret'],
            wild_domain=False,
            hashalg='sha512',
        ),
        locale_negotiator=locale_negotiator,
    )
    config.add_renderer('json', json_renderer)
    config.add_static_view('static', 'static', cache_max_age=3600)

    # Chameleon setup
    config.include('pyramid_chameleon')

    # Webassets
    config.include('pyramid_webassets')

    # SQLAlchemy
    config.include('pyramid_sqlalchemy')
    config.enable_sql_two_phase_commit()

    # Setup of stuff used only in the tests
    if 'testing' in settings and asbool(settings['testing']):
        config.include('pyramid_mailer.testing')
        config.set_session_factory(SignedCookieSessionFactory('testing'))

        # add test only views to make it easy to login and add
        # things to the session during the tests
        from yithlibraryserver.testing import view_test_login
        from yithlibraryserver.testing import view_test_add_to_session

        config.add_route('test_login', '/__login/{user}')
        config.add_view(view_test_login,
                        route_name='test_login')
        config.add_route('test_add_to_session', '/__session')
        config.add_view(view_test_add_to_session,
                        route_name='test_add_to_session')

    else:  # pragma: no cover
        config.include('pyramid_mailer')

        config.include('pyramid_redis_sessions')

    # Google/Facebook authentication
    config.include('pyramid_sna')

    config.include('pyramid_tm')

    # CORS support setup
    config.registry.settings['cors_manager'] = CORSManager(
        read_setting_from_env(settings, 'cors_allowed_origins', ''))

    # Routes
    config.include('yithlibraryserver.backups')
    config.include('yithlibraryserver.contributions')
    config.include('yithlibraryserver.oauth2')
    config.include('yithlibraryserver.password')

    # Translation directories
    config.add_translation_dirs('yithlibraryserver:locale/')

    # the user package needs to be included before twitter,
    # facebook and google
    config.include('yithlibraryserver.user')

    config.include('yithlibraryserver.twitter')

    if config.registry.settings['facebook_auth_enabled']:
        config.add_identity_provider('Facebook')

    if config.registry.settings['google_auth_enabled']:
        config.add_identity_provider('Google')

    if config.registry.settings['liveconnect_auth_enabled']:
        config.add_identity_provider('Live Connect')

    config.include('yithlibraryserver.persona')

    # assets
    config.include('yithlibraryserver.assets')

    includeme(config)

    # Subscribers
    config.include('yithlibraryserver.subscribers')

    config.scan(ignore=[re.compile('.*tests.*').search,
                        re.compile('.*testing.*').search])
    return config.make_wsgi_app()
Esempio n. 5
0
def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    # read pyramid_mailer options
    for key, default in (('host', 'localhost'), ('port', '25'),
                         ('username', None), ('password', None),
                         ('default_sender', '*****@*****.**')):
        option = 'mail_' + key
        settings[option] = read_setting_from_env(settings, option, default)

    # read admin_emails option
    settings['admin_emails'] = read_setting_from_env(settings, 'admin_emails',
                                                     '').split()

    # read Google Analytics code
    settings['google_analytics_code'] = read_setting_from_env(
        settings, 'google_analytics_code', None)

    # read the auth secret
    settings['auth_tk_secret'] = read_setting_from_env(settings,
                                                       'auth_tk_secret', None)
    if settings['auth_tk_secret'] is None:
        raise ConfigurationError('The auth_tk_secret configuration '
                                 'option is required')

    # SQLAlchemy setup
    settings['database_url'] = read_setting_from_env(settings, 'database_url',
                                                     None)
    if settings['database_url'] is None:
        raise ConfigurationError('The database_url configuration '
                                 'option is required')
    settings['sqlalchemy.url'] = settings['database_url']

    # read sessions settings
    settings['redis.sessions.secret'] = read_setting_from_env(
        settings, 'redis.sessions.secret', None)
    if settings['redis.sessions.secret'] is None:
        raise ConfigurationError('The redis.sessions.secret configuration '
                                 'option is required')

    settings['redis.sessions.url'] = read_setting_from_env(
        settings, 'redis.sessions.url', None)
    if settings['redis.sessions.url'] is None:
        raise ConfigurationError('The redis.sessions.url configuration '
                                 'option is required')

    # Available languages
    available_languages = read_setting_from_env(settings,
                                                'available_languages', 'en es')

    settings['available_languages'] = [
        lang for lang in available_languages.split(' ') if lang
    ]

    # Public URL root
    settings['public_url_root'] = read_setting_from_env(
        settings, 'public_url_root', 'http://localhost:6543/')

    # Google, Facebook and Microsoft Live Connect settings for pyramid_sna
    settings[
        'google_scope'] = 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'
    settings[
        'google_callback'] = 'yithlibraryserver.sna_callbacks.google_callback'
    settings['facebook_scope'] = 'email'
    settings[
        'facebook_callback'] = 'yithlibraryserver.sna_callbacks.facebook_callback'
    settings[
        'liveconnect_callback'] = 'yithlibraryserver.sna_callbacks.liveconnect_callback'

    # webassets
    settings['webassets.base_dir'] = 'yithlibraryserver:static'
    settings['webassets.base_url'] = 'static'
    settings['webassets.static_view'] = 'True'
    here = os.path.dirname(os.path.abspath(__file__))
    manifest_path = ('static', 'build', 'manifest.json')
    settings['webassets.manifest'] = 'json:%s' % os.path.join(
        here, *manifest_path)

    # main config object
    config = Configurator(
        settings=settings,
        root_factory=RootFactory,
        authorization_policy=ACLAuthorizationPolicy(),
        authentication_policy=AuthTktAuthenticationPolicy(
            settings['auth_tk_secret'],
            wild_domain=False,
            hashalg='sha512',
        ),
        locale_negotiator=locale_negotiator,
    )
    config.add_renderer('json', json_renderer)
    config.add_static_view('static', 'static', cache_max_age=3600)

    # Chameleon setup
    config.include('pyramid_chameleon')

    # Webassets
    config.include('pyramid_webassets')

    # SQLAlchemy
    config.include('pyramid_sqlalchemy')
    config.enable_sql_two_phase_commit()

    # Setup of stuff used only in the tests
    if 'testing' in settings and asbool(settings['testing']):
        config.include('pyramid_mailer.testing')
        config.set_session_factory(SignedCookieSessionFactory('testing'))

        # add test only views to make it easy to login and add
        # things to the session during the tests
        from yithlibraryserver.testing import view_test_login
        from yithlibraryserver.testing import view_test_add_to_session

        config.add_route('test_login', '/__login/{user}')
        config.add_view(view_test_login, route_name='test_login')
        config.add_route('test_add_to_session', '/__session')
        config.add_view(view_test_add_to_session,
                        route_name='test_add_to_session')

    else:  # pragma: no cover
        config.include('pyramid_mailer')

        config.include('pyramid_redis_sessions')

    # Google/Facebook authentication
    config.include('pyramid_sna')

    config.include('pyramid_tm')

    # CORS support setup
    config.registry.settings['cors_manager'] = CORSManager(
        read_setting_from_env(settings, 'cors_allowed_origins', ''))

    # Routes
    config.include('yithlibraryserver.backups')
    config.include('yithlibraryserver.contributions')
    config.include('yithlibraryserver.oauth2')
    config.include('yithlibraryserver.password')

    # Translation directories
    config.add_translation_dirs('yithlibraryserver:locale/')

    # the user package needs to be included before twitter,
    # facebook and google
    config.include('yithlibraryserver.user')

    config.include('yithlibraryserver.twitter')

    if config.registry.settings['facebook_auth_enabled']:
        config.add_identity_provider('Facebook')

    if config.registry.settings['google_auth_enabled']:
        config.add_identity_provider('Google')

    if config.registry.settings['liveconnect_auth_enabled']:
        config.add_identity_provider('Live Connect')

    config.include('yithlibraryserver.persona')

    # assets
    config.include('yithlibraryserver.assets')

    includeme(config)

    # Subscribers
    config.include('yithlibraryserver.subscribers')

    config.scan(ignore=[
        re.compile('.*tests.*').search,
        re.compile('.*testing.*').search
    ])
    return config.make_wsgi_app()
def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    # read pyramid_mailer options
    for key in ('host', 'port', 'username', 'password', 'default_sender'):
        option = 'mail_' + key
        settings[option] = read_setting_from_env(settings, option)

    # read admin_emails option
    settings['admin_emails'] = read_setting_from_env(settings, 'admin_emails')
    if settings['admin_emails'] is not None:
        settings['admin_emails'] = settings['admin_emails'].split()

    # read Google Analytics code
    settings['google_analytics_code'] = read_setting_from_env(
        settings, 'google_analytics_code', None)

    # read the auth secret
    settings['auth_tk_secret'] = read_setting_from_env(
        settings, 'auth_tk_secret', None)
    if settings['auth_tk_secret'] is None:
        raise ConfigurationError('The auth_tk_secret configuration '
                                 'option is required')

    # read the Mongodb URI
    settings['mongo_uri'] = read_setting_from_env(settings, 'mongo_uri', None)
    if settings['mongo_uri'] is None:
        raise ConfigurationError('The mongo_uri configuration '
                                 'option is required')

    # main config object
    config = Configurator(
        settings=settings,
        root_factory=RootFactory,
        authorization_policy=ACLAuthorizationPolicy(),
        authentication_policy=AuthTktAuthenticationPolicy(
            settings['auth_tk_secret'],
            wild_domain=False,
            ),
        )
    config.add_renderer('json', json_renderer)
    config.add_static_view('static', 'static', cache_max_age=3600)

    # Beaker (sessions) setup
    config.include('pyramid_beaker')

    # Mailer setup
    if 'testing' in settings and settings['testing'] is True:
        config.include('pyramid_mailer.testing')
    else:  # pragma: no cover
        config.include('pyramid_mailer')
    config.include('pyramid_tm')

    # Mongodb setup
    mongodb = MongoDB(settings['mongo_uri'])
    config.registry.settings['mongodb'] = mongodb
    config.registry.settings['db_conn'] = mongodb.get_connection()

    # CORS support setup
    config.registry.settings['cors_manager'] = CORSManager(
        read_setting_from_env(settings, 'cors_allowed_origins', ''))

    # Routes
    config.include('yithlibraryserver.oauth2')
    config.include('yithlibraryserver.password')

    # the user package needs to be included before twitter,
    # facebook and google
    config.include('yithlibraryserver.user')

    config.include('yithlibraryserver.twitter')
    config.include('yithlibraryserver.facebook')
    config.include('yithlibraryserver.google')
    config.include('yithlibraryserver.persona')

    includeme(config)

    # Subscribers
    config.include('yithlibraryserver.subscribers')

    config.scan(ignore=[re.compile('.*tests.*').search, '.testing'])
    return config.make_wsgi_app()
def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    # read pyramid_mailer options
    for key, default in (
        ('host', 'localhost'),
        ('port', '25'),
        ('username', None),
        ('password', None),
        ('default_sender', '*****@*****.**')
        ):
        option = 'mail_' + key
        settings[option] = read_setting_from_env(settings, option, default)

    # read admin_emails option
    settings['admin_emails'] = read_setting_from_env(settings, 'admin_emails', '').split()

    # read Google Analytics code
    settings['google_analytics_code'] = read_setting_from_env(
        settings, 'google_analytics_code', None)

    # read the auth secret
    settings['auth_tk_secret'] = read_setting_from_env(
        settings, 'auth_tk_secret', None)
    if settings['auth_tk_secret'] is None:
        raise ConfigurationError('The auth_tk_secret configuration '
                                 'option is required')

    # read the Mongodb URI
    settings['mongo_uri'] = read_setting_from_env(settings, 'mongo_uri', None)
    if settings['mongo_uri'] is None:
        raise ConfigurationError('The mongo_uri configuration '
                                 'option is required')

    # Available languages
    available_languages = read_setting_from_env(settings, 'available_languages', 'en es')

    settings['available_languages'] = [
        lang for lang in available_languages.split(' ') if lang
        ]

    # Public URL root
    settings['public_url_root'] = read_setting_from_env(
        settings, 'public_url_root', 'http://localhost:6543/')

    # Google and Facebook settings for pyramid_sna
    settings['google_scope'] = 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'
    settings['google_callback'] = 'yithlibraryserver.sna_callbacks.google_callback'
    settings['facebook_scope'] = 'email'
    settings['facebook_callback'] = 'yithlibraryserver.sna_callbacks.facebook_callback'

    # main config object
    config = Configurator(
        settings=settings,
        root_factory=RootFactory,
        authorization_policy=ACLAuthorizationPolicy(),
        authentication_policy=AuthTktAuthenticationPolicy(
            settings['auth_tk_secret'],
            wild_domain=False,
            hashalg='sha512',
            ),
        locale_negotiator=locale_negotiator,
        )
    config.add_renderer('json', json_renderer)
    config.add_static_view('static', 'static', cache_max_age=3600)

    # Beaker (sessions) setup
    config.include('pyramid_beaker')

    # Mailer setup
    if 'testing' in settings and asbool(settings['testing']):
        config.include('pyramid_mailer.testing')
        config.include('yithlibraryserver.datetimeservice.testing')
    else:  # pragma: no cover
        config.include('pyramid_mailer')
        config.include('yithlibraryserver.datetimeservice')

    # Google/Facebook authentication
    config.include('pyramid_sna')

    config.include('pyramid_tm')

    # Mongodb setup
    mongodb = MongoDB(settings['mongo_uri'])
    config.registry.settings['mongodb'] = mongodb
    config.registry.settings['db_conn'] = mongodb.get_connection()

    # CORS support setup
    config.registry.settings['cors_manager'] = CORSManager(
        read_setting_from_env(settings, 'cors_allowed_origins', ''))

    # Routes
    config.include('yithlibraryserver.backups')
    config.include('yithlibraryserver.contributions')
    config.include('yithlibraryserver.oauth2')
    config.include('yithlibraryserver.password')

    # Translation directories
    config.add_translation_dirs('yithlibraryserver:locale/')

    # the user package needs to be included before twitter,
    # facebook and google
    config.include('yithlibraryserver.user')

    config.include('yithlibraryserver.twitter')

    if config.registry.settings['facebook_auth_enabled']:
        config.add_identity_provider('facebook')

    if config.registry.settings['google_auth_enabled']:
        config.add_identity_provider('google')

    config.include('yithlibraryserver.persona')

    includeme(config)

    # Subscribers
    config.include('yithlibraryserver.subscribers')

    config.scan(ignore=[re.compile('.*tests.*').search,
                        re.compile('.*testing.*').search])
    return config.make_wsgi_app()