🐛 fix(manager.py): migrate flows to default superuser if they don't have a user id associated with them when auto_login is enabled
🐛 fix(utils.py): handle case when superuser already exists during creation to prevent UNIQUE constraint violation
This commit is contained in:
parent
3017525160
commit
f7884af3af
2 changed files with 31 additions and 3 deletions
|
|
@ -58,6 +58,25 @@ class DatabaseService(Service):
|
||||||
with Session(self.engine) as session:
|
with Session(self.engine) as session:
|
||||||
yield session
|
yield session
|
||||||
|
|
||||||
|
def migrate_flows_if_auto_login(self):
|
||||||
|
# if auto_login is enabled, we need to migrate the flows
|
||||||
|
# to the default superuser if they don't have a user id
|
||||||
|
# associated with them
|
||||||
|
settings_service = get_settings_service()
|
||||||
|
if settings_service.auth_settings.AUTO_LOGIN:
|
||||||
|
with Session(self.engine) as session:
|
||||||
|
flows = (
|
||||||
|
session.query(models.Flow).filter(models.Flow.user_id == None).all()
|
||||||
|
)
|
||||||
|
if flows:
|
||||||
|
logger.debug("Migrating flows to default superuser")
|
||||||
|
username = settings_service.auth_settings.SUPERUSER
|
||||||
|
user = get_user_by_username(session, username)
|
||||||
|
for flow in flows:
|
||||||
|
flow.user_id = user.id
|
||||||
|
session.commit()
|
||||||
|
logger.debug("Flows migrated successfully")
|
||||||
|
|
||||||
def check_schema_health(self) -> bool:
|
def check_schema_health(self) -> bool:
|
||||||
inspector = inspect(self.engine)
|
inspector = inspect(self.engine)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ from langflow.services.settings.constants import (
|
||||||
DEFAULT_SUPERUSER_PASSWORD,
|
DEFAULT_SUPERUSER_PASSWORD,
|
||||||
)
|
)
|
||||||
from sqlmodel import Session
|
from sqlmodel import Session
|
||||||
from .getters import get_session, get_settings_service
|
from .getters import get_db_service, get_session, get_settings_service
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -54,8 +54,12 @@ def get_or_create_super_user(session: Session, username, password, is_default):
|
||||||
logger.debug("Creating default superuser.")
|
logger.debug("Creating default superuser.")
|
||||||
else:
|
else:
|
||||||
logger.debug("Creating superuser.")
|
logger.debug("Creating superuser.")
|
||||||
|
try:
|
||||||
return create_super_user(username, password, db=session)
|
return create_super_user(username, password, db=session)
|
||||||
|
except Exception as exc:
|
||||||
|
if "UNIQUE constraint failed: user.username" in str(exc):
|
||||||
|
logger.debug("Superuser already exists.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def setup_superuser(settings_service, session: Session):
|
def setup_superuser(settings_service, session: Session):
|
||||||
|
|
@ -193,3 +197,8 @@ def initialize_services():
|
||||||
setup_superuser(
|
setup_superuser(
|
||||||
service_manager.get(ServiceType.SETTINGS_SERVICE), next(get_session())
|
service_manager.get(ServiceType.SETTINGS_SERVICE), next(get_session())
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
|
get_db_service().migrate_flows_if_auto_login()
|
||||||
|
except Exception as exc:
|
||||||
|
logger.error(f"Error migrating flows: {exc}")
|
||||||
|
raise RuntimeError("Error migrating flows") from exc
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue