Esempio n. 1
0
def init_app(args, setup_logging=True):
    """
    Inits Pyramid app for testing environment

    :param args: Class with args
    :return: Dict with ``DbEngine``, ``DbSession`` and ``DbBase``.
    """
    if setup_logging:
        pyramid.paster.setup_logging(args.config)
        settings = pyramid.paster.get_appsettings(args.config)
        if 'environment' not in settings:
            raise KeyError('Missing key "environment" in config. Specify '
                           'environment in INI file "{}".'.format(args.config))
        if not args.etc_dir:
            args.etc_dir = os.path.join(args.root_dir, 'etc')
        rc = Rc(environment=settings['environment'],
                root_dir=args.root_dir,
                etc_dir=args.etc_dir)
        rc.load()
        settings.update(rc.data)
        settings['rc'] = rc
        result = {'settings': settings}
        pym.init_auth(rc)

        #pym.models.init_unscoped(settings, 'db.pym.sa.')
        pym.models.init(settings, 'db.pym.sa.')

        return result
Esempio n. 2
0
def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    # Init Rc
    # Get Rc instance like this, then use its methods e.g. g() or s():
    #     request.registry.settings['rc']
    # Rc data is merged directly into settings, so you can retrieve it like
    # this:
    #     request.registry.settings['project']
    if 'environment' not in settings:
        raise KeyError('Missing key "environment" in config. Specify '
            'environment in paster INI file.')
    rc = Rc(
        environment=settings['environment'],
        root_dir=os.path.abspath(
            os.path.join(os.path.dirname(__file__), '..')
        )
    )
    rc.load()
    settings.update(rc.data)
    rc.s('environment', settings['environment'])
    # Put rc into config settings
    settings['rc'] = rc

    # Create config
    config = Configurator(
        settings=settings
    )
    config.include(pym)
    config.commit()
    config.include(includeme)

    return config.make_wsgi_app()
Esempio n. 3
0
    def init_app(self,
                 args,
                 lgg=None,
                 rc=None,
                 rc_key=None,
                 setup_logging=True):
        """
        Initialises Pyramid application.

        Loads config settings. Initialises SQLAlchemy and a session.
        """
        self.args = args
        fn_config = os.path.abspath(args.config)
        self.rc_key = rc_key
        if setup_logging:
            logging.config.fileConfig(
                fn_config,
                dict(__file__=fn_config, here=os.path.dirname(fn_config)),
                # Keep module loggers
                disable_existing_loggers=False)
        if lgg:
            self.lgg = lgg

        self.lang_code, self.encoding = pym.lib.init_cli_locale(args.locale)
        self.lgg.debug("TTY? {}".format(sys.stdout.isatty()))
        self.lgg.debug("Locale? {}, {}".format(self.lang_code, self.encoding))

        #settings = pyramid.paster.get_appsettings(args.config)
        p = configparser.ConfigParser()
        p.read(fn_config)
        settings = dict(p['app:main'])
        if 'environment' not in settings:
            raise KeyError('Missing key "environment" in config. Specify '
                           'environment in INI file "{}".'.format(args.config))
        if not rc:
            if not args.etc_dir:
                args.etc_dir = os.path.join(args.root_dir, 'etc')
            rc = Rc(environment=settings['environment'],
                    root_dir=args.root_dir,
                    etc_dir=args.etc_dir)
            rc.load()
        settings.update(rc.data)
        settings['rc'] = rc
        self.rc = rc
        self.settings = settings
        self._config = pyramid.config.Configurator(settings=settings)

        pym.models.init(settings, 'db.pym.sa.')
        self._sess = pym.models.DbSession()
        pym.init_auth(rc)
        self.cache = redis.StrictRedis.from_url(
            **self.rc.get_these('cache.redis'))
Esempio n. 4
0
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
target_metadata = pym.models.DbBase.metadata

# other values from the config, defined by the needs of env.py,
# can be acquired:
# my_important_option = config.get_main_option("my_important_option")
# ... etc.

PYM_ENV = config.get_main_option("environment")
if not PYM_ENV:
    raise KeyError('Missing key "environment" in config.')
# The directory of the config file is our root_dir
rc = Rc(environment=PYM_ENV,
        root_dir=os.path.normpath(os.path.join(os.path.dirname(__file__),
                                               '..')))
rc.load()


def run_migrations_offline():
    """Run migrations in 'offline' mode.

    This configures the context with just a URL
    and not an Engine, though an Engine is acceptable
    here as well.  By skipping the Engine creation
    we don't even need a DBAPI to be available.

    Calls to context.execute() here emit the given string to the
    script output.