Ejemplo n.º 1
0
 def setUp(self):
     """Define test variables and initialize app."""
     self.app = create_app('config_test')
     self.client = self.app.test_client
     # apply any/all pending migrations.
     with self.app.app_context():
         from flask_migrate import upgrade as _upgrade
         _upgrade(directory=os.path.join(os.path.dirname(__file__), 'migrations'))
Ejemplo n.º 2
0
def client():
    with tempfile.NamedTemporaryFile() as dbf:
        app = create_app(test_db=f"sqlite:///{dbf.name}")
        with app.app_context():
            from flask_migrate import upgrade as _upgrade

            _upgrade()
        with app.test_client() as test_client:
            yield test_client
        with app.app_context():
            db.drop_all()
Ejemplo n.º 3
0
 def run(self, args):
     cfg = Config.init()
     if args.action == 'start':
         app.run(cfg.get_server_host(), cfg.get_server_port())
     elif args.action == 'upgrade':
         with app.app_context():
             from flask_migrate import upgrade as _upgrade
             _upgrade()
     elif args.action == 'migrate':
         with app.app_context():
             from flask_migrate import migrate as _migrate
             _migrate()
Ejemplo n.º 4
0
def _db(setup_test_app):
    """
    Provide the transactional fixtures with access to the database via a
    Flask-SQLAlchemy database connection.
    """
    db = SQLAlchemy(app=setup_test_app)
    Migrate(setup_test_app, db)
    # apply any/all pending migrations.
    with setup_test_app.app_context():
        from flask_migrate import upgrade as _upgrade
        _upgrade()
    return db
Ejemplo n.º 5
0
def create_app(test_config=None):
    log.info("Creating python app "+__name__)
    flask_app = Flask(__name__)
    flask_app.config.update(settings.PROPS)

    if test_config is not None:
        flask_app.config.update(test_config)
    flask_app.register_blueprint(api_blueprint, url_prefix='/api')

    if test_config is None:
        if flask_app.config.get("COGNITO_CHECK_TOKEN_EXPIRATION") is False:
            log.warning("COGNITO_CHECK_TOKEN_EXPIRATION is disabled, ensure it is enabled in production environments.")
        if flask_app.config.get("FLASK_DEBUG") is True:
            log.warning("FLASK_DEBUG is enabled, ensure it is disabled in production environments.")

    # db initialization
    try:
        db.init_app(flask_app)
    except Exception as e:
        log.exception("Failed to initialize APP: {}".format(repr(e)), exc_info=True)

    # Migrations (upgrade to the latest version)
    with flask_app.app_context():
        try:
            from flask_migrate import upgrade as _upgrade
            migrate = Migrate(flask_app, db)
            _upgrade()
        except Exception as e:
            log.exception("Failed to upgrade DB: {}".format(repr(e)), exc_info=True)

    health = HealthCheck()
    env_dump = EnvironmentDump(include_python=True,
                               include_os=True,
                               include_process=True)
    health.add_check(db_health)
    application_data = settings.application_data()
    # application_data['verified_aws_credentials'] = verify_aws_credentials()
    log.info(application_data)
    env_dump.add_section("application", application_data)
    env_dump.add_section("features", settings.features())

    # Add a flask route to expose information
    flask_app.add_url_rule("/health", "healthcheck", view_func=lambda: health.run())
    flask_app.add_url_rule("/info", "environment", view_func=lambda: env_dump.run())

    return flask_app
Ejemplo n.º 6
0
def app():
    DATABASE_FILEDESCRIPTOR, DATABASE = tempfile.mkstemp()
    test_config = flask_label.config.Testing()
    test_config.DATABASE = DATABASE
    test_config.SQLALCHEMY_DATABASE_URI = "sqlite:////{}".format(DATABASE)
    app = create_app(test_config)

    with app.app_context():
        from flask_migrate import upgrade as _upgrade
        _upgrade()
        db_init_users()
        db_update_task()

    yield app

    os.close(DATABASE_FILEDESCRIPTOR)
    os.unlink(DATABASE)
Ejemplo n.º 7
0
def upgrade(directory, sql, tag, x_arg, revision):
    """Upgrade to a later version"""
    _upgrade(directory, revision, sql, tag, x_arg)
Ejemplo n.º 8
0
def upgrade(directory, sql, tag, x_arg, revision):
    """Upgrade to a later version"""
    _upgrade(directory, revision, sql, tag, x_arg)
Ejemplo n.º 9
0
 def upgrade(revision="head"):
     with app.app_context():
         from flask_migrate import upgrade as _upgrade
         _upgrade(revision=revision)
Ejemplo n.º 10
0
stackcenterapp = Flask(__name__)
CORS(stackcenterapp)

stackcenterapp.config['DEBUG'] = True
stackcenterapp.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///example.sqlite"
stackcenterapp.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(stackcenterapp)
migrate = Migrate(stackcenterapp, db)

db.init_app(stackcenterapp)

with stackcenterapp.app_context():
    from flask_migrate import upgrade as _upgrade
    _upgrade(directory='migrations')

# @app.before_first_request
# def before_first_request():
# db.create_all()
# client = docker.from_env()
#
# for container in client.containers.list():
#     for label, v in container.labels.items():
#         if label == LABEL_COM_DOCKER_COMPOSE_PROJECT:
#             stacks[v] = ""

# pass


@stackcenterapp.route('/', methods=['GET'])
Ejemplo n.º 11
0

class Config:
    SQLALCHEMY_DATABASE_URI = os.environ['DATABASE_URL']
    SQLALCHEMY_TRACK_MODIFICATIONS = False


connex_app = connexion.App(__name__, specification_dir='./api/')
app = connex_app.app
app.config.from_object(Config)
db = SQLAlchemy(app)
ma = Marshmallow(app)
migrate = Migrate(app, db)
with app.app_context():
    # Copy and pasted this from stackoverflow, not sure why we import as _upgrade()
    from flask_migrate import upgrade as _upgrade
    # Retry database migrations for 10 seconds in case database is slow to start up
    # (Common in docker-compose environments)
    for _ in range(5):
        try:
            _upgrade()
            break
        except OperationalError as exc:
            sleep(2)
connex_app.add_api('openapi.yml', validate_responses=True)


@app.route('/')
def swagger_ui():
    return redirect('/ui')