Skip to content

Commit

Permalink
get_dbos_database_url (dbos-inc#69)
Browse files Browse the repository at this point in the history
added `get_dbos_database_url` function to return dbos-config connection
info as a URL. This makes setting the sqlalchemy.url field of alembic a
single line of code.

Other changes:
* snake_case `config_file_path` param in load_config
* change black pre-commit hook to use python3 instead of python3.10
  • Loading branch information
devhawk authored Aug 26, 2024
1 parent eaaac25 commit 69c8c53
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 22 deletions.
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ repos:
rev: 24.4.2
hooks:
- id: black
language_version: python3.10
language_version: python3
- repo: https://github.com/pycqa/isort
rev: 5.13.2
hooks:
Expand Down
3 changes: 2 additions & 1 deletion dbos/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from .dbos import WorkflowHandle as WorkflowHandle
from .dbos import WorkflowStatus as WorkflowStatus
from .dbos_config import ConfigFile as ConfigFile
from .dbos_config import load_config
from .dbos_config import get_dbos_database_url, load_config
from .system_database import WorkflowStatusString as WorkflowStatusString

__all__ = [
Expand All @@ -17,5 +17,6 @@
"WorkflowStatus",
"WorkflowStatusString",
"load_config",
"get_dbos_database_url",
"error",
]
18 changes: 16 additions & 2 deletions dbos/dbos_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import yaml
from jsonschema import ValidationError, validate
from sqlalchemy import URL

from dbos.error import DBOSInitializationError
from dbos.logger import dbos_logger
Expand Down Expand Up @@ -70,9 +71,22 @@ def replace_func(match: re.Match[str]) -> str:
return re.sub(regex, replace_func, content)


def load_config(configFilePath: str = "dbos-config.yaml") -> ConfigFile:
def get_dbos_database_url(config_file_path: str = "dbos-config.yaml") -> str:
dbos_config = load_config(config_file_path)
db_url = URL.create(
"postgresql",
username=dbos_config["database"]["username"],
password=dbos_config["database"]["password"],
host=dbos_config["database"]["hostname"],
port=dbos_config["database"]["port"],
database=dbos_config["database"]["app_db_name"],
)
return db_url.render_as_string(hide_password=False)


def load_config(config_file_path: str = "dbos-config.yaml") -> ConfigFile:
# Load the YAML file
with open(configFilePath, "r") as file:
with open(config_file_path, "r") as file:
content = file.read()
substituted_content = substitute_env_vars(content)
data = yaml.safe_load(substituted_content)
Expand Down
22 changes: 4 additions & 18 deletions templates/hello/alembic/env.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import os
from logging.config import fileConfig

from alembic import context
from sqlalchemy import URL, engine_from_config, pool
from sqlalchemy import engine_from_config, pool

from dbos import load_config
from dbos import get_dbos_database_url

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
Expand All @@ -15,21 +14,8 @@
if config.config_file_name is not None:
fileConfig(config.config_file_name)

# Load DBOS Config and parse the database URL
dbos_config_path = os.path.join(
os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "dbos-config.yaml"
)

dbos_config = load_config(dbos_config_path)
db_url = URL.create(
"postgresql",
username=dbos_config["database"]["username"],
password=dbos_config["database"]["password"],
host=dbos_config["database"]["hostname"],
port=dbos_config["database"]["port"],
database=dbos_config["database"]["app_db_name"],
)
config.set_main_option("sqlalchemy.url", db_url.render_as_string(hide_password=False))
# programmatically set the sqlalchemy.url field from DBOS Config
config.set_main_option("sqlalchemy.url", get_dbos_database_url())

# add your model's MetaData object here
# for 'autogenerate' support
Expand Down

0 comments on commit 69c8c53

Please sign in to comment.