0

I'm working on a flask application project and it incorporates usage of tools such as docker, adminer and redis.

I have a migration.py file that looks like this:

from flask import Flask
from configuration import Configuration
from flask_migrate import Migrate, init, migrate, upgrade
from models import database, Role, User, UserRole
from sqlalchemy_utils import database_exists, create_database, drop_database

application = Flask(__name__)
application.config.from_object(Configuration)

migrateObject = Migrate(application, database)

done = False

while not done:
try:
    if not database_exists(application.config['SQLALCHEMY_DATABASE_URI']):
        create_database(application.config['SQLALCHEMY_DATABASE_URI'])

    if database_exists(application.config["SQLALCHEMY_DATABASE_URI"]):
        drop_database(application.config["SQLALCHEMY_DATABASE_URI"])
        create_database(application.config["SQLALCHEMY_DATABASE_URI"])

    database.init_app(application)

    with application.app_context() as context:
        init()
        migrate(message="Initial migration")
        upgrade()

        adminRole = Role(name="admin")
        customerRole = Role(name="customer")
        warehouseworkerRole = Role(name="warehouseworker")

        database.session.add(adminRole)
        database.session.add(customerRole)
        database.session.add(warehouseworkerRole)
        database.session.commit()

        admin = User(email="admin@admin.com", password="1", forename="admin", surname="admin")

        database.session.add(admin)
        database.session.commit()

        userRole = UserRole(userId=admin.id, roleId=adminRole.id)

        database.session.add(userRole)
        database.session.commit()

        done = True
except Exception as error:
    application.logger.debug(error)

It is beeing executed in a docker container and that file looks like this:

FROM python:3

RUN mkdir -p /opt/src/authentication
WORKDIR /opt/src/authentication

COPY authentication/migrate.py ./migrate.py
COPY authentication/configuration.py ./configuration.py
COPY authentication/models.py ./models.py
COPY authentication/requirements.txt ./requirements.txt

RUN pip install -r ./requirements.txt

ENTRYPOINT ["python", "./migrate.py"]

After the first run everything works fine. But if I want to rerun this migration I get an error saying:

Error: Directory migrations already exists and is not empty

I've been going arround circles for the whole day and I'd really appreciate the assistance. I've tried deleting the alembic version in adminer but I don't even see it there.

What should I do?

kosingas
  • 61
  • 1
  • 7

0 Answers0