diff --git a/NEWS.rst b/NEWS.rst index 0c5427adec0e505090a49c77ab7622a40611f6cf_TkVXUy5yc3Q=..fc105f03c4c0d67d77f68353b0b52a0a8f924625_TkVXUy5yc3Q= 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -15,6 +15,8 @@ Default to pdb with pdb++ instead of ipdb. New option ``--ipdb`` to run ipdb instead if wanted. +docker_dev_start: add argument to run SQL script after eventual restauration but before starting the server. + 4.0 --- diff --git a/odoo_scripts/docker_dev_start.py b/odoo_scripts/docker_dev_start.py index 0c5427adec0e505090a49c77ab7622a40611f6cf_b2Rvb19zY3JpcHRzL2RvY2tlcl9kZXZfc3RhcnQucHk=..fc105f03c4c0d67d77f68353b0b52a0a8f924625_b2Rvb19zY3JpcHRzL2RvY2tlcl9kZXZfc3RhcnQucHk= 100755 --- a/odoo_scripts/docker_dev_start.py +++ b/odoo_scripts/docker_dev_start.py @@ -355,6 +355,12 @@ help="Odoo sources to use, if any [default: %(default)s]", default=None, ) + parser.add_argument( + "--pre-sql-script", + help="SQL script to run on database [default: %(default)s]", + default=None, + dest="PRE_SQL", + ) # TODO detect that user is member of docker group @@ -385,6 +391,7 @@ load_language = "" installing_or_updating = False odoo_sources = nmspc.odoo_sources + pre_sql_script = nmspc.PRE_SQL if restore_filename: if not database: @@ -769,6 +776,64 @@ if not restore: return 15 + # --- Pre SQL script --- + if pre_sql_script: + if start_postgresql: + pre_sql_script_basename = os.path.basename(pre_sql_script) + _logger.info( + "Copying SQL script %s in docker", pre_sql_script_basename + ) + call( + [ + "docker", + "cp", + pre_sql_script, + "{}:/tmp/{}".format(name, pre_sql_script_basename), + ] + ) + _logger.info( + "Running SQL script %s in %s", + pre_sql_script_basename, + database, + ) + script = call( + [ + "docker", + "exec", + name, + "psql", + "-U", + user, + "-d", + database, + "-f", + "/tmp/{}".format(pre_sql_script_basename), + ] + ) + if script > 0: + _logger.fatal("Error when running script (%s)", script) + return 16 + _logger.info("Removing SQL script %s in docker") + call( + [ + "docker", + "exec", + name, + "rm", + "/tmp/{}".format(pre_sql_script_basename), + ] + ) + else: + _logger.info( + "Running SQL script %s in %s", pre_sql_script, database + ) + script = call( + ["psql", "-U", user, "-d", database, "-f", pre_sql_script] + ) + if script > 0: + _logger.fatal("Error when running script (%s)", script) + return 16 + # volume magic target_module_directory = "/mnt/addons" for module in modules: