Skip to content

Commit

Permalink
🐛 Python dependency install now takes odoo module dependencies into a…
Browse files Browse the repository at this point in the history
…ccount.
  • Loading branch information
joshkreud committed Mar 7, 2024
1 parent cc6792b commit 0d541b2
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 17 deletions.
14 changes: 7 additions & 7 deletions src/godoo_cli/commands/source_get.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,9 @@ def py_depends_by_db(
thirdparty_addon_path=thirdparty_addon_path,
)
module_list = [m for m in module_list]
modules = list(godooModules(odoo_addon_paths).get_modules(module_list))
_install_py_reqs_for_modules(modules)
module_reg = godooModules(odoo_addon_paths)
modules = list(module_reg.get_modules(module_list))
_install_py_reqs_for_modules(modules, module_reg)


@CLI.arg_annotator
Expand Down Expand Up @@ -175,11 +176,10 @@ def py_depends_by_modules(
)

if len(module_list) == 1 and module_list[0] == "all":
search_addon_paths = [p for p in odoo_addon_paths if odoo_main_path not in p.parents]
module_list = godooModules(search_addon_paths).get_modules()
else:
module_list = godooModules(odoo_addon_paths).get_modules(module_list)
_install_py_reqs_for_modules(module_list)
module_list = []
module_reg = godooModules(odoo_addon_paths)
modules = godooModules.get_modules(module_list)
_install_py_reqs_for_modules(modules, module_reg)


@CLI.unpacker
Expand Down
20 changes: 14 additions & 6 deletions src/godoo_cli/helpers/modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from ast import literal_eval
from logging import getLogger
from pathlib import Path
from typing import Dict, Generator, List, Optional
from typing import Any, Dict, Generator, List, Optional, Union

LOGGER = getLogger(__name__)

Expand Down Expand Up @@ -37,7 +37,7 @@ def manifest_file(self) -> Path:
return self.path / "__manifest__.py"

@property
def manifest(self):
def manifest(self) -> Dict[str, Any]:
return literal_eval(self.manifest_file.read_text())

@property
Expand Down Expand Up @@ -97,9 +97,17 @@ def get_module(self, name: str) -> Optional[godooModule]:
f"Module '{name}' not found in Paths: {[str(s.absolute()) for s in self.addon_paths]}"
)

def get_module_dependencies(self, module: godooModule, dont_follow: Optional[List[str]] = None) -> List[str]:
"""Get dependant modules of a module. Recursively follows dependencies."""
deps = module.odoo_depends
def get_module_dependencies(
self, module: Union[godooModule, List[godooModule]], dont_follow: Optional[List[str]] = None
) -> List[str]:
"""Get dependant modules of module(s). Recursively follows dependencies."""
if isinstance(module, godooModule):
module = [module]
deps = []
for mod in module:
deps += mod.odoo_depends
deps = list(set(deps))

if dont_follow:
deps = [d for d in deps if d not in dont_follow]
if deps:
Expand All @@ -108,7 +116,7 @@ def get_module_dependencies(self, module: godooModule, dont_follow: Optional[Lis
sub_dep_modules = []
for dep in dep_modules:
sub_dep_modules += self.get_module_dependencies(dep, dont_follow)
return dep_modules + sub_dep_modules
return list(set(dep_modules + sub_dep_modules))
return []


Expand Down
13 changes: 9 additions & 4 deletions src/godoo_cli/helpers/modules_py.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,33 @@
from pathlib import Path
from typing import List

from .modules import godooModules
from .modules import godooModule, godooModules
from .system import pip_install

LOGGER = logging.getLogger(__name__)


def _install_py_reqs_for_modules(modules: List[godooModules]):
def _install_py_reqs_for_modules(modules: List[godooModule], module_reg: godooModules):
"""Install Python Requirements mentioned in odoo module manifests of given modules
Parameters
----------
modules : List[godooModules]
List of modules in wiich to check __manifest__.py for python requirements
module_reg : godooModules
Module Registry for Dependency Search
Returns
-------
CompletedProcess
"""
reqs = []
for mod in modules:
all_modules = modules + module_reg.get_module_dependencies(modules)
all_modules = list(set(all_modules))
for mod in all_modules:
reqs += mod.py_depends
if reqs:
return pip_install(reqs)
return pip_install(set(reqs))


def _install_py_reqs_by_odoo_cmd(addon_paths: List[Path], odoo_bin_cmd: str):
Expand All @@ -46,6 +50,7 @@ def _install_py_reqs_by_odoo_cmd(addon_paths: List[Path], odoo_bin_cmd: str):
for m in re.finditer(r'(--init|-i) "?([^ \n]+)"?', odoo_bin_cmd):
install_modules += m.group(2).split(",")
if install_modules:
LOGGER.debug("Found Modules to install in odoo-bin command: %s", install_modules)
module_reg = godooModules(addon_paths)
modules = [module_reg.get_module(m) for m in install_modules]
return _install_py_reqs_for_modules(modules)

0 comments on commit 0d541b2

Please sign in to comment.