feat: Adding option to set_database_uri CLI command (#12740)

* Adding option to set_database_uri CLI command

* Fixing flag logic
This commit is contained in:
Craig Rueda
2021-01-25 12:49:22 -08:00
committed by GitHub
parent 51d1b66dca
commit 0fed1e04ef
2 changed files with 16 additions and 7 deletions

View File

@@ -191,9 +191,16 @@ def load_examples(
@superset.command()
@click.option("--database_name", "-d", help="Database name to change")
@click.option("--uri", "-u", help="Database URI to change")
def set_database_uri(database_name: str, uri: str) -> None:
@click.option(
"--skip_create",
"-s",
is_flag=True,
default=False,
help="Create the DB if it doesn't exist",
)
def set_database_uri(database_name: str, uri: str, skip_create: bool) -> None:
"""Updates a database connection URI """
utils.get_or_create_db(database_name, uri)
utils.get_or_create_db(database_name, uri, not skip_create)
@superset.command()

View File

@@ -1095,7 +1095,7 @@ def user_label(user: User) -> Optional[str]:
def get_or_create_db(
database_name: str, sqlalchemy_uri: str, *args: Any, **kwargs: Any
database_name: str, sqlalchemy_uri: str, always_create: Optional[bool] = True
) -> "Database":
from superset import db
from superset.models import core as models
@@ -1104,13 +1104,15 @@ def get_or_create_db(
db.session.query(models.Database).filter_by(database_name=database_name).first()
)
if not database:
if not database and always_create:
logger.info("Creating database reference for %s", database_name)
database = models.Database(database_name=database_name, *args, **kwargs)
database = models.Database(database_name=database_name)
db.session.add(database)
database.set_sqlalchemy_uri(sqlalchemy_uri)
db.session.commit()
if database:
database.set_sqlalchemy_uri(sqlalchemy_uri)
db.session.commit()
return database