53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
from loguru import logger
|
|
|
|
from odoo_openupgrade_wizard.tools_docker import get_docker_client
|
|
|
|
|
|
def get_postgres_container():
|
|
client = get_docker_client()
|
|
return client.containers.list(filters={"name": "db"})[0]
|
|
|
|
|
|
def execute_sql_request(request, database="postgres"):
|
|
container = get_postgres_container()
|
|
docker_command = (
|
|
"psql --username=odoo --dbname={database} -t"
|
|
' -c "{request}"'.format(database=database, request=request)
|
|
)
|
|
logger.debug(
|
|
"Executing the following command in postgres container"
|
|
" on database %s \n %s" % (database, request)
|
|
)
|
|
docker_result = container.exec_run(docker_command)
|
|
if docker_result.exit_code != 0:
|
|
raise Exception(
|
|
"Request %s failed on database %s. Exit Code : %d"
|
|
% (request, database, docker_result.exit_code)
|
|
)
|
|
lines = docker_result.output.decode("utf-8").split("\n")
|
|
result = []
|
|
for line in lines:
|
|
if not line:
|
|
continue
|
|
result.append([x.strip() for x in line.split("|")])
|
|
return result
|
|
|
|
|
|
def ensure_database_exists(database: str):
|
|
"""
|
|
- Connect to postgres container.
|
|
- Check if the database exist.
|
|
- if not, create it.
|
|
"""
|
|
request = "select datname FROM pg_database WHERE datistemplate = false;"
|
|
|
|
result = execute_sql_request(request)
|
|
if [database] in result:
|
|
return
|
|
|
|
logger.info("Create database '%s' ..." % database)
|
|
request = "CREATE DATABASE {database} owner odoo;".format(
|
|
database=database
|
|
)
|
|
execute_sql_request(request)
|