NextERP-scripts/services/odoo/module.py
2025-04-03 16:20:17 +07:00

57 lines
2.4 KiB
Python

from services.git.handler import GitHandler
from services.odoo.connection import OdooConnection
import subprocess
class OdooModuleManager:
def __init__(self, config_path="config/settings.yaml"):
self.config = OdooConnection(config_path)
# Use OdooConnection instead of Config directly
self.git = GitHandler(
repo_url=self.config.config.get("git", "repo_url"),
local_path=self.config.config.get("git", "local_path"),
branch=self.config.config.get("git", "branch", "main"),
)
def update_and_upgrade(self, instance_name=None):
"""Update and upgrade multiple modules for the specified instance(s)."""
self.config.connect(instance_name) # Connect to the target instance(s)
for instance in self.config.get_instances():
if instance_name and instance["name"] != instance_name:
continue
print(f"Processing instance: {instance['name']}")
module_names = instance.get("module_names", [])
if not module_names:
print(f"No modules specified for {instance['name']}, skipping upgrade.")
continue
for module_name in module_names:
print(f"Upgrading module: {module_name} in {instance['name']}")
try:
# Use OdooConnection.execute to upgrade the module
module_ids = self.config.execute(
instance["name"],
"ir.module.module",
"search",
[("name", "=", module_name), ("state", "=", "installed")],
)
if module_ids:
self.config.execute(
instance["name"],
"ir.module.module",
"button_upgrade",
[module_ids],
)
print(
f"Module {module_name} upgraded successfully in {instance['name']}"
)
else:
print(
f"Module {module_name} not found or not installed in {instance['name']}"
)
except Exception as e:
print(f"Failed to upgrade {module_name} in {instance['name']}: {e}")
# Continue with other modules
return True