[IMP] script update config from database and implement TODO configuration
- execute script remote endline from output
This commit is contained in:
parent
c580493099
commit
facd1c928e
8 changed files with 354 additions and 66 deletions
66
script/database/get_module_list_from_database.py
Executable file
66
script/database/get_module_list_from_database.py
Executable file
|
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# © 2021-2025 TechnoLibre (http://www.technolibre.ca)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
new_path = os.path.normpath(
|
||||||
|
os.path.join(os.path.dirname(__file__), "..", "..")
|
||||||
|
)
|
||||||
|
sys.path.append(new_path)
|
||||||
|
|
||||||
|
from script.execute import execute
|
||||||
|
from script.git.git_tool import GitTool
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def get_config():
|
||||||
|
"""Parse command line arguments, extracting the config file name,
|
||||||
|
returning the union of config file and command line arguments
|
||||||
|
|
||||||
|
:return: dict of config file settings and command line arguments
|
||||||
|
"""
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
|
description="""\
|
||||||
|
Will print list of installed module from database
|
||||||
|
""",
|
||||||
|
epilog="""\
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--database",
|
||||||
|
required=True,
|
||||||
|
help="The database name to extract",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
config = get_config()
|
||||||
|
execute_cmd = execute.Execute()
|
||||||
|
|
||||||
|
if config.database:
|
||||||
|
cmd = f"cat ./script/odoo/util/show_installed_module.py | ./odoo_bin.sh shell -d {config.database}"
|
||||||
|
status, output = execute_cmd.exec_command_live(
|
||||||
|
cmd,
|
||||||
|
quiet=True,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
return_status_and_output=True,
|
||||||
|
)
|
||||||
|
has_find = False
|
||||||
|
for line in output:
|
||||||
|
if has_find:
|
||||||
|
print(line.strip())
|
||||||
|
if line.strip() == "Installed modules:":
|
||||||
|
has_find = True
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
@ -68,27 +68,15 @@ def main():
|
||||||
|
|
||||||
json_manifest_file = json.load(manifest_file)
|
json_manifest_file = json.load(manifest_file)
|
||||||
lst_module = set(json_manifest_file.get("modules").keys())
|
lst_module = set(json_manifest_file.get("modules").keys())
|
||||||
|
str_module = ";".join(lst_module)
|
||||||
cmd = "parallel ::: " + " ".join(
|
cmd = f'./script/database/get_repo_from_module.py --module "{str_module}"'
|
||||||
[
|
|
||||||
f"'./script/addons/check_addons_exist.py --output_path -m \"{a}\"'"
|
|
||||||
for a in lst_module
|
|
||||||
]
|
|
||||||
)
|
|
||||||
execute_cmd = execute.Execute()
|
execute_cmd = execute.Execute()
|
||||||
status, output = execute_cmd.exec_command_live(
|
status, output = execute_cmd.exec_command_live(
|
||||||
cmd,
|
cmd,
|
||||||
quiet=not config.debug,
|
|
||||||
source_erplibre=False,
|
source_erplibre=False,
|
||||||
single_source_erplibre=True,
|
single_source_erplibre=True,
|
||||||
return_status_and_output=True,
|
return_status_and_output=True,
|
||||||
)
|
)
|
||||||
set_path_repo = set()
|
|
||||||
for line_module_path in output:
|
|
||||||
line_repo = os.path.dirname(line_module_path)
|
|
||||||
set_path_repo.add(line_repo)
|
|
||||||
for path_repo in set_path_repo:
|
|
||||||
print(path_repo)
|
|
||||||
|
|
||||||
|
|
||||||
def die(cond, message, code=1):
|
def die(cond, message, code=1):
|
||||||
|
|
|
||||||
80
script/database/get_repo_from_module.py
Executable file
80
script/database/get_repo_from_module.py
Executable file
|
|
@ -0,0 +1,80 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# © 2021-2025 TechnoLibre (http://www.technolibre.ca)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
new_path = os.path.normpath(
|
||||||
|
os.path.join(os.path.dirname(__file__), "..", "..")
|
||||||
|
)
|
||||||
|
sys.path.append(new_path)
|
||||||
|
|
||||||
|
from script.execute import execute
|
||||||
|
|
||||||
|
logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO"))
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def get_config():
|
||||||
|
"""Parse command line arguments, extracting the config file name,
|
||||||
|
returning the union of config file and command line arguments
|
||||||
|
|
||||||
|
:return: dict of config file settings and command line arguments
|
||||||
|
"""
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
|
description="""\
|
||||||
|
Extract all repo path from installed module into backup.
|
||||||
|
Use --backup_path or --backup_name
|
||||||
|
""",
|
||||||
|
epilog="""\
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
parser.add_argument("--module", help="Module list separate by ;")
|
||||||
|
parser.add_argument("--debug", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
config = get_config()
|
||||||
|
|
||||||
|
lst_module = set(config.module.split(";"))
|
||||||
|
|
||||||
|
cmd = "parallel ::: " + " ".join(
|
||||||
|
[
|
||||||
|
f"'./script/addons/check_addons_exist.py --output_path -m \"{a}\"'"
|
||||||
|
for a in lst_module
|
||||||
|
]
|
||||||
|
)
|
||||||
|
execute_cmd = execute.Execute()
|
||||||
|
status, output = execute_cmd.exec_command_live(
|
||||||
|
cmd,
|
||||||
|
quiet=not config.debug,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
return_status_and_output=True,
|
||||||
|
)
|
||||||
|
set_path_repo = set()
|
||||||
|
for line_module_path in output:
|
||||||
|
line_repo = os.path.dirname(line_module_path)
|
||||||
|
set_path_repo.add(line_repo)
|
||||||
|
for path_repo in set_path_repo:
|
||||||
|
print(path_repo)
|
||||||
|
|
||||||
|
|
||||||
|
def die(cond, message, code=1):
|
||||||
|
if cond:
|
||||||
|
print(message, file=sys.stderr)
|
||||||
|
sys.exit(code)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
@ -138,7 +138,12 @@ class Execute:
|
||||||
return_status_and_output
|
return_status_and_output
|
||||||
or return_status_and_output_and_command
|
or return_status_and_output_and_command
|
||||||
):
|
):
|
||||||
lst_output.append(ligne)
|
# Remove last \n char
|
||||||
|
lst_output.append(
|
||||||
|
ligne.removesuffix("\r\n")
|
||||||
|
.removesuffix("\n")
|
||||||
|
.removesuffix("\r")
|
||||||
|
)
|
||||||
|
|
||||||
process.wait() # Attendre la fin du process
|
process.wait() # Attendre la fin du process
|
||||||
return_status = process.returncode
|
return_status = process.returncode
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,6 @@ import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import git
|
|
||||||
from git import Repo
|
|
||||||
|
|
||||||
new_path = os.path.normpath(
|
new_path = os.path.normpath(
|
||||||
os.path.join(os.path.dirname(__file__), "..", "..")
|
os.path.join(os.path.dirname(__file__), "..", "..")
|
||||||
)
|
)
|
||||||
|
|
@ -27,9 +24,6 @@ def get_config():
|
||||||
|
|
||||||
:return: dict of config file settings and command line arguments
|
:return: dict of config file settings and command line arguments
|
||||||
"""
|
"""
|
||||||
config = GitTool.get_project_config()
|
|
||||||
|
|
||||||
# TODO update description
|
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
description="""\
|
description="""\
|
||||||
|
|
@ -65,6 +59,10 @@ def get_config():
|
||||||
"--add_repo",
|
"--add_repo",
|
||||||
help="Add repo, separate by ; for list",
|
help="Add repo, separate by ; for list",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--database",
|
||||||
|
help="Add repo from module found into database.",
|
||||||
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
@ -72,12 +70,13 @@ def get_config():
|
||||||
def main():
|
def main():
|
||||||
config = get_config()
|
config = get_config()
|
||||||
git_tool = GitTool()
|
git_tool = GitTool()
|
||||||
|
execute_cmd = execute.Execute()
|
||||||
|
index_to_remove = len(os.getcwd()) + 1
|
||||||
|
|
||||||
filter_group = config.group if config.group else None
|
filter_group = config.group if config.group else None
|
||||||
|
|
||||||
lst_whitelist = []
|
lst_whitelist = []
|
||||||
if config.from_backup_path or config.from_backup_name:
|
if config.from_backup_path or config.from_backup_name:
|
||||||
execute_cmd = execute.Execute()
|
|
||||||
# script/database/get_repo_from_backup.py
|
# script/database/get_repo_from_backup.py
|
||||||
# --backup_name bpir_prod_5_dec_2025_2026-02-04_14h27m54s.zip
|
# --backup_name bpir_prod_5_dec_2025_2026-02-04_14h27m54s.zip
|
||||||
if config.from_backup_path:
|
if config.from_backup_path:
|
||||||
|
|
@ -91,7 +90,28 @@ def main():
|
||||||
single_source_erplibre=True,
|
single_source_erplibre=True,
|
||||||
return_status_and_output=True,
|
return_status_and_output=True,
|
||||||
)
|
)
|
||||||
index_to_remove = len(os.getcwd()) + 1
|
for line in output:
|
||||||
|
repo_name = line[index_to_remove:].strip()
|
||||||
|
lst_whitelist.append(repo_name)
|
||||||
|
|
||||||
|
if config.database:
|
||||||
|
cmd = f"./script/database/get_module_list_from_database.py --database {config.database}"
|
||||||
|
status, output = execute_cmd.exec_command_live(
|
||||||
|
cmd,
|
||||||
|
quiet=True,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
return_status_and_output=True,
|
||||||
|
)
|
||||||
|
str_module = ";".join(output)
|
||||||
|
cmd = f'./script/database/get_repo_from_module.py --module "{str_module}"'
|
||||||
|
status, output = execute_cmd.exec_command_live(
|
||||||
|
cmd,
|
||||||
|
quiet=True,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
return_status_and_output=True,
|
||||||
|
)
|
||||||
for line in output:
|
for line in output:
|
||||||
repo_name = line[index_to_remove:].strip()
|
repo_name = line[index_to_remove:].strip()
|
||||||
lst_whitelist.append(repo_name)
|
lst_whitelist.append(repo_name)
|
||||||
|
|
|
||||||
|
|
@ -457,7 +457,9 @@ class GitTool:
|
||||||
continue
|
continue
|
||||||
# groups = repo.get("group")
|
# groups = repo.get("group")
|
||||||
# Use variable instead of hardcoded path
|
# Use variable instead of hardcoded path
|
||||||
if update_repo.startswith(os.path.join(filter_group, "addons")):
|
if update_repo.startswith(
|
||||||
|
os.path.join(self.odoo_version_long, "addons")
|
||||||
|
):
|
||||||
lst_path = update_repo.split("/", 1)
|
lst_path = update_repo.split("/", 1)
|
||||||
update_repo = f"${{EL_HOME_ODOO_PROJECT}}/" + lst_path[1]
|
update_repo = f"${{EL_HOME_ODOO_PROJECT}}/" + lst_path[1]
|
||||||
# str_repo = (
|
# str_repo = (
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Run this script when doing database migration. Example :
|
Run this script when doing database migration. Example :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
source ./.venv.odoo15.0_python3.8.20/bin/activate && cat ./script/migration/fix_migration_odoo140_to_odoo150.py | ./odoo15.0/odoo/odoo-bin shell -d DATABASE
|
source ./.venv.odoo15.0_python3.8.20/bin/activate && cat ./script/odoo/migration/fix_migration_odoo140_to_odoo150.py | ./odoo15.0/odoo/odoo-bin shell -d DATABASE
|
||||||
```
|
```
|
||||||
|
|
||||||
Check [uninstall_module_list_odoo140_to_odoo150.txt](uninstall_module_list_odoo140_to_odoo150.txt)
|
Check [uninstall_module_list_odoo140_to_odoo150.txt](uninstall_module_list_odoo140_to_odoo150.txt)
|
||||||
|
|
|
||||||
|
|
@ -206,6 +206,7 @@ class TODO:
|
||||||
[5] Doc - Recherche de documentation
|
[5] Doc - Recherche de documentation
|
||||||
[6] Database - Outils sur les bases de données
|
[6] Database - Outils sur les bases de données
|
||||||
[7] Process - Outils sur les exécutions
|
[7] Process - Outils sur les exécutions
|
||||||
|
[8] Config - Traitement du fichier de configuration
|
||||||
[0] Retour
|
[0] Retour
|
||||||
"""
|
"""
|
||||||
while True:
|
while True:
|
||||||
|
|
@ -241,6 +242,10 @@ class TODO:
|
||||||
status = self.prompt_execute_process()
|
status = self.prompt_execute_process()
|
||||||
if status is not False:
|
if status is not False:
|
||||||
return
|
return
|
||||||
|
elif status == "8":
|
||||||
|
status = self.prompt_execute_config()
|
||||||
|
if status is not False:
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
print("Commande non trouvée 🤖!")
|
print("Commande non trouvée 🤖!")
|
||||||
|
|
||||||
|
|
@ -436,10 +441,10 @@ class TODO:
|
||||||
if callback:
|
if callback:
|
||||||
callback(dct_instance)
|
callback(dct_instance)
|
||||||
|
|
||||||
def fill_help_info(self, lst_instance):
|
def fill_help_info(self, lst_choice):
|
||||||
help_info = "Commande :\n"
|
help_info = "Commande :\n"
|
||||||
help_end = "[0] Retour\n"
|
help_end = "[0] Retour\n"
|
||||||
for i, dct_instance in enumerate(lst_instance):
|
for i, dct_instance in enumerate(lst_choice):
|
||||||
help_info += (
|
help_info += (
|
||||||
f"[{i + 1}] " + dct_instance["prompt_description"] + "\n"
|
f"[{i + 1}] " + dct_instance["prompt_description"] + "\n"
|
||||||
)
|
)
|
||||||
|
|
@ -450,16 +455,16 @@ class TODO:
|
||||||
# TODO proposer le déploiement à distance
|
# TODO proposer le déploiement à distance
|
||||||
# TODO proposer l'exécution de docker
|
# TODO proposer l'exécution de docker
|
||||||
# TODO proposer la création de docker
|
# TODO proposer la création de docker
|
||||||
lst_instance = self.config_file.get_config("instance")
|
lst_choice = self.config_file.get_config("instance")
|
||||||
init_len = len(lst_instance)
|
init_len = len(lst_choice)
|
||||||
|
|
||||||
if os.path.exists(MOBILE_HOME_PATH):
|
if os.path.exists(MOBILE_HOME_PATH):
|
||||||
dct_upgrade_odoo_database = {
|
dct_upgrade_odoo_database = {
|
||||||
"prompt_description": "Mobile - Compile and run software",
|
"prompt_description": "Mobile - Compile and run software",
|
||||||
"callback": self.callback_make_mobile_home,
|
"callback": self.callback_make_mobile_home,
|
||||||
}
|
}
|
||||||
lst_instance.append(dct_upgrade_odoo_database)
|
lst_choice.append(dct_upgrade_odoo_database)
|
||||||
help_info = self.fill_help_info(lst_instance)
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
status = click.prompt(help_info)
|
status = click.prompt(help_info)
|
||||||
|
|
@ -475,15 +480,15 @@ class TODO:
|
||||||
status = click.confirm(
|
status = click.confirm(
|
||||||
"Voulez-vous une nouvelle instance?"
|
"Voulez-vous une nouvelle instance?"
|
||||||
)
|
)
|
||||||
dct_instance = lst_instance[int_cmd - 1]
|
dct_instance = lst_choice[int_cmd - 1]
|
||||||
self.execute_from_configuration(
|
self.execute_from_configuration(
|
||||||
dct_instance,
|
dct_instance,
|
||||||
exec_run_db=True,
|
exec_run_db=True,
|
||||||
ignore_makefile=not bool(status),
|
ignore_makefile=not bool(status),
|
||||||
)
|
)
|
||||||
elif int_cmd <= len(lst_instance):
|
elif int_cmd <= len(lst_choice):
|
||||||
# Execute dynamic instance
|
# Execute dynamic instance
|
||||||
dct_instance = lst_instance[int_cmd - 1]
|
dct_instance = lst_choice[int_cmd - 1]
|
||||||
self.execute_from_configuration(
|
self.execute_from_configuration(
|
||||||
dct_instance,
|
dct_instance,
|
||||||
)
|
)
|
||||||
|
|
@ -493,8 +498,8 @@ class TODO:
|
||||||
print("Commande non trouvée 🤖!")
|
print("Commande non trouvée 🤖!")
|
||||||
|
|
||||||
def prompt_execute_fonction(self):
|
def prompt_execute_fonction(self):
|
||||||
lst_instance = self.config_file.get_config("function")
|
lst_choice = self.config_file.get_config("function")
|
||||||
help_info = self.fill_help_info(lst_instance)
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
status = click.prompt(help_info)
|
status = click.prompt(help_info)
|
||||||
|
|
@ -505,9 +510,9 @@ class TODO:
|
||||||
cmd_no_found = True
|
cmd_no_found = True
|
||||||
try:
|
try:
|
||||||
int_cmd = int(status)
|
int_cmd = int(status)
|
||||||
if 0 < int_cmd <= len(lst_instance):
|
if 0 < int_cmd <= len(lst_choice):
|
||||||
cmd_no_found = False
|
cmd_no_found = False
|
||||||
dct_instance = lst_instance[int_cmd - 1]
|
dct_instance = lst_choice[int_cmd - 1]
|
||||||
self.execute_from_configuration(dct_instance)
|
self.execute_from_configuration(dct_instance)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
@ -525,34 +530,34 @@ class TODO:
|
||||||
# TODO faire la mise à jour de ERPLibre
|
# TODO faire la mise à jour de ERPLibre
|
||||||
# TODO faire l'upgrade d'un odoo vers un autre
|
# TODO faire l'upgrade d'un odoo vers un autre
|
||||||
|
|
||||||
lst_instance = self.config_file.get_config("update_from_makefile")
|
lst_choice = self.config_file.get_config("update_from_makefile")
|
||||||
dct_upgrade_odoo_database = {
|
dct_upgrade_odoo_database = {
|
||||||
"prompt_description": "Upgrade Odoo - Migration Database",
|
"prompt_description": "Upgrade Odoo - Migration Database",
|
||||||
}
|
}
|
||||||
lst_instance.append(dct_upgrade_odoo_database)
|
lst_choice.append(dct_upgrade_odoo_database)
|
||||||
dct_upgrade_poetry = {
|
dct_upgrade_poetry = {
|
||||||
"prompt_description": "Upgrade Poetry - Dependency of Odoo",
|
"prompt_description": "Upgrade Poetry - Dependency of Odoo",
|
||||||
}
|
}
|
||||||
lst_instance.append(dct_upgrade_poetry)
|
lst_choice.append(dct_upgrade_poetry)
|
||||||
help_info = self.fill_help_info(lst_instance)
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
status = click.prompt(help_info)
|
status = click.prompt(help_info)
|
||||||
print()
|
print()
|
||||||
if status == "0":
|
if status == "0":
|
||||||
return False
|
return False
|
||||||
elif status == str(len(lst_instance) - 1):
|
elif status == str(len(lst_choice) - 1):
|
||||||
upgrade = todo_upgrade.TodoUpgrade(self)
|
upgrade = todo_upgrade.TodoUpgrade(self)
|
||||||
upgrade.execute_odoo_upgrade()
|
upgrade.execute_odoo_upgrade()
|
||||||
elif status == str(len(lst_instance)):
|
elif status == str(len(lst_choice)):
|
||||||
self.upgrade_poetry()
|
self.upgrade_poetry()
|
||||||
else:
|
else:
|
||||||
cmd_no_found = True
|
cmd_no_found = True
|
||||||
try:
|
try:
|
||||||
int_cmd = int(status) - 1
|
int_cmd = int(status) - 1
|
||||||
if 0 < int_cmd <= len(lst_instance):
|
if 0 < int_cmd <= len(lst_choice):
|
||||||
cmd_no_found = False
|
cmd_no_found = False
|
||||||
dct_instance = lst_instance[int_cmd - 1]
|
dct_instance = lst_choice[int_cmd - 1]
|
||||||
self.execute_from_configuration(dct_instance)
|
self.execute_from_configuration(dct_instance)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
@ -573,27 +578,27 @@ class TODO:
|
||||||
# [0] Retour
|
# [0] Retour
|
||||||
# """
|
# """
|
||||||
|
|
||||||
lst_instance = self.config_file.get_config("code_from_makefile")
|
lst_choice = self.config_file.get_config("code_from_makefile")
|
||||||
dct_upgrade_odoo_database = {
|
dct_upgrade_odoo_database = {
|
||||||
"prompt_description": "Upgrade Module",
|
"prompt_description": "Upgrade Module",
|
||||||
}
|
}
|
||||||
lst_instance.append(dct_upgrade_odoo_database)
|
lst_choice.append(dct_upgrade_odoo_database)
|
||||||
help_info = self.fill_help_info(lst_instance)
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
status = click.prompt(help_info)
|
status = click.prompt(help_info)
|
||||||
print()
|
print()
|
||||||
if status == "0":
|
if status == "0":
|
||||||
return False
|
return False
|
||||||
elif status == str(len(lst_instance)):
|
elif status == str(len(lst_choice)):
|
||||||
self.upgrade_module()
|
self.upgrade_module()
|
||||||
else:
|
else:
|
||||||
cmd_no_found = True
|
cmd_no_found = True
|
||||||
try:
|
try:
|
||||||
int_cmd = int(status)
|
int_cmd = int(status)
|
||||||
if 0 < int_cmd <= len(lst_instance):
|
if 0 < int_cmd <= len(lst_choice):
|
||||||
cmd_no_found = False
|
cmd_no_found = False
|
||||||
dct_instance = lst_instance[int_cmd - 1]
|
dct_instance = lst_choice[int_cmd - 1]
|
||||||
self.execute_from_configuration(dct_instance)
|
self.execute_from_configuration(dct_instance)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
@ -602,13 +607,13 @@ class TODO:
|
||||||
|
|
||||||
def prompt_execute_doc(self):
|
def prompt_execute_doc(self):
|
||||||
print("🤖 Vous cherchez de la documentation?")
|
print("🤖 Vous cherchez de la documentation?")
|
||||||
lst_instance = [
|
lst_choice = [
|
||||||
{"prompt_description": "Migration module coverage"},
|
{"prompt_description": "Migration module coverage"},
|
||||||
{"prompt_description": "What change between version"},
|
{"prompt_description": "What change between version"},
|
||||||
{"prompt_description": "OCA guidelines"},
|
{"prompt_description": "OCA guidelines"},
|
||||||
{"prompt_description": "OCA migration Odoo 19 milestone"},
|
{"prompt_description": "OCA migration Odoo 19 milestone"},
|
||||||
]
|
]
|
||||||
help_info = self.fill_help_info(lst_instance)
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
status = click.prompt(help_info)
|
status = click.prompt(help_info)
|
||||||
|
|
@ -651,13 +656,13 @@ class TODO:
|
||||||
|
|
||||||
def prompt_execute_database(self):
|
def prompt_execute_database(self):
|
||||||
print("🤖 Faites des modifications sur les bases de données!")
|
print("🤖 Faites des modifications sur les bases de données!")
|
||||||
lst_instance = [
|
lst_choice = [
|
||||||
{
|
{
|
||||||
"prompt_description": "Download database to create backup (.zip)"
|
"prompt_description": "Download database to create backup (.zip)"
|
||||||
},
|
},
|
||||||
{"prompt_description": "Restore from backup (.zip)"},
|
{"prompt_description": "Restore from backup (.zip)"},
|
||||||
]
|
]
|
||||||
help_info = self.fill_help_info(lst_instance)
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
status = click.prompt(help_info)
|
status = click.prompt(help_info)
|
||||||
|
|
@ -673,10 +678,10 @@ class TODO:
|
||||||
|
|
||||||
def prompt_execute_process(self):
|
def prompt_execute_process(self):
|
||||||
print("🤖 Manipuler les processus d'exécution!")
|
print("🤖 Manipuler les processus d'exécution!")
|
||||||
lst_instance = [
|
lst_choice = [
|
||||||
{"prompt_description": "Kill process from actual port"},
|
{"prompt_description": "Kill process from actual port"},
|
||||||
]
|
]
|
||||||
help_info = self.fill_help_info(lst_instance)
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
status = click.prompt(help_info)
|
status = click.prompt(help_info)
|
||||||
|
|
@ -688,6 +693,122 @@ class TODO:
|
||||||
else:
|
else:
|
||||||
print("Commande non trouvée 🤖!")
|
print("Commande non trouvée 🤖!")
|
||||||
|
|
||||||
|
def prompt_execute_config(self):
|
||||||
|
print("🤖 Manipuler la configuration ERPLibre et Odoo!")
|
||||||
|
lst_choice = [
|
||||||
|
{"prompt_description": "Generate all configuration"},
|
||||||
|
{"prompt_description": "Generate from pre-configuration"},
|
||||||
|
{"prompt_description": "Generate from backup file"},
|
||||||
|
{"prompt_description": "Generate from database"},
|
||||||
|
]
|
||||||
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
status = click.prompt(help_info)
|
||||||
|
print()
|
||||||
|
if status == "0":
|
||||||
|
return False
|
||||||
|
elif status == "1":
|
||||||
|
self.generate_config()
|
||||||
|
elif status == "2":
|
||||||
|
self.generate_config_from_preconfiguration()
|
||||||
|
elif status == "3":
|
||||||
|
self.generate_config_from_backup()
|
||||||
|
elif status == "4":
|
||||||
|
self.generate_config_from_database()
|
||||||
|
else:
|
||||||
|
print("Commande non trouvée 🤖!")
|
||||||
|
|
||||||
|
def generate_config(self, add_arg=None):
|
||||||
|
# Repeating to get all item before get group
|
||||||
|
cmd = (
|
||||||
|
f"./script/git/git_repo_update_group.py;"
|
||||||
|
f"./script/generate_config.sh"
|
||||||
|
)
|
||||||
|
if add_arg:
|
||||||
|
cmd += (
|
||||||
|
f";./script/git/git_repo_update_group.py {add_arg};"
|
||||||
|
f"./script/generate_config.sh"
|
||||||
|
)
|
||||||
|
self.execute.exec_command_live(
|
||||||
|
cmd,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
def generate_config_from_preconfiguration(self):
|
||||||
|
lst_choice = [
|
||||||
|
{"prompt_description": "base"},
|
||||||
|
{"prompt_description": "base + code_generator"},
|
||||||
|
{"prompt_description": "base + image_db"},
|
||||||
|
{"prompt_description": "all"},
|
||||||
|
# {"prompt_description": "base + migration"},
|
||||||
|
]
|
||||||
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
status = click.prompt(help_info)
|
||||||
|
print()
|
||||||
|
if status == "0":
|
||||||
|
return False
|
||||||
|
elif status == "1":
|
||||||
|
group = "base"
|
||||||
|
str_group = f"--group {group}"
|
||||||
|
self.generate_config(add_arg=str_group)
|
||||||
|
elif status == "2":
|
||||||
|
group = "base,code_generator"
|
||||||
|
str_group = f"--group {group}"
|
||||||
|
self.generate_config(add_arg=str_group)
|
||||||
|
elif status == "3":
|
||||||
|
group = "base,image_db"
|
||||||
|
str_group = f"--group {group}"
|
||||||
|
self.generate_config(add_arg=str_group)
|
||||||
|
elif status == "4":
|
||||||
|
self.generate_config()
|
||||||
|
# elif status == "5":
|
||||||
|
# group = "base,migration"
|
||||||
|
# str_group = f"--group {group}"
|
||||||
|
# self.generate_config(add_arg=str_group)
|
||||||
|
else:
|
||||||
|
print("Commande non trouvée 🤖!")
|
||||||
|
|
||||||
|
def generate_config_from_backup(self):
|
||||||
|
file_name = self.open_file_image_db()
|
||||||
|
add_arg = f"--from_backup_name {file_name} --add_repo odoo18.0/addons/MathBenTech_development"
|
||||||
|
self.generate_config(add_arg=add_arg)
|
||||||
|
|
||||||
|
def generate_config_from_database(self):
|
||||||
|
cmd_server = f"./odoo_bin.sh db --list"
|
||||||
|
status, output = self.execute.exec_command_live(
|
||||||
|
cmd_server,
|
||||||
|
return_status_and_output=True,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
)
|
||||||
|
lst_choice = [{"prompt_description": a.strip()} for a in output]
|
||||||
|
|
||||||
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
|
lst_str_choice = [str(a) for a in range(len(lst_choice) + 1) if a]
|
||||||
|
|
||||||
|
while True:
|
||||||
|
status = click.prompt(help_info)
|
||||||
|
print()
|
||||||
|
if status == "0":
|
||||||
|
return False
|
||||||
|
elif status in lst_str_choice:
|
||||||
|
database_name = output[int(status) - 1].strip()
|
||||||
|
print(database_name)
|
||||||
|
str_arg = f"--database {database_name}"
|
||||||
|
self.generate_config(add_arg=str_arg)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
print("Commande non trouvée 🤖!")
|
||||||
|
# file_name = self.open_file_image_db()
|
||||||
|
# add_arg = f"--from_backup_name {file_name} --add_repo odoo18.0/addons/MathBenTech_development"
|
||||||
|
#
|
||||||
|
# self.generate_config(add_arg=add_arg)
|
||||||
|
|
||||||
def get_odoo_version(self):
|
def get_odoo_version(self):
|
||||||
with open(VERSION_DATA_FILE) as txt:
|
with open(VERSION_DATA_FILE) as txt:
|
||||||
data_version = json.load(txt)
|
data_version = json.load(txt)
|
||||||
|
|
@ -899,14 +1020,7 @@ class TODO:
|
||||||
if status == "1":
|
if status == "1":
|
||||||
file_name = status
|
file_name = status
|
||||||
else:
|
else:
|
||||||
self.dir_path = ""
|
file_name = self.open_file_image_db
|
||||||
|
|
||||||
file_browser = todo_file_browser.FileBrowser(
|
|
||||||
path_image_db, self.on_dir_selected
|
|
||||||
)
|
|
||||||
file_browser.run_main_frame()
|
|
||||||
file_name = os.path.basename(self.dir_path)
|
|
||||||
print(file_name)
|
|
||||||
|
|
||||||
database_name = input("💬 Database name : ")
|
database_name = input("💬 Database name : ")
|
||||||
if not database_name:
|
if not database_name:
|
||||||
|
|
@ -943,6 +1057,19 @@ class TODO:
|
||||||
source_erplibre=False,
|
source_erplibre=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def open_file_image_db(self):
|
||||||
|
self.dir_path = ""
|
||||||
|
path_image_db = os.path.join(os.getcwd(), "image_db")
|
||||||
|
|
||||||
|
# self.dir_path is over-write into on_dir_selected
|
||||||
|
file_browser = todo_file_browser.FileBrowser(
|
||||||
|
path_image_db, self.on_dir_selected
|
||||||
|
)
|
||||||
|
file_browser.run_main_frame()
|
||||||
|
file_name = os.path.basename(self.dir_path)
|
||||||
|
print(file_name)
|
||||||
|
return file_name
|
||||||
|
|
||||||
def process_kill_from_port(self):
|
def process_kill_from_port(self):
|
||||||
cfg = configparser.ConfigParser()
|
cfg = configparser.ConfigParser()
|
||||||
cfg.read("./config.conf")
|
cfg.read("./config.conf")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue