Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,14 @@ The following keys are supported:
external dependencies. Its value must be a dictionary with one ``python``
key, with value a dictionary mapping python external dependencies to
a python package requirement specifier or list of specifiers.
* ``additional_dependencies``, used to specify additional dependencies that are not
declared in the addons manifests. Its value must be a list of package requirement
specifiers. A typical use case is when you want to ensure that an auto installable
addon linked to your addon is installed into the python path at the same time as
your addon, but you don't want to declare it as a dependency in the manifest to
avoid it being installed in Odoo. In this way you ensure that it all the
dependencies of the auto installed addon are satisfied, it will be available
and installed in Odoo.
* ``odoo_version_override``, used to specify which Odoo series to use
(8.0, 9.0, 10.0, 11.0, ...) in case an addon version does not start with the Odoo
series number. Use this only as a last resort, if you have no way to
Expand Down
12 changes: 12 additions & 0 deletions setuptools_odoo/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,7 @@ def _get_install_requires(
no_depends=None,
depends_override=None,
external_dependencies_override=None,
additional_dependencies=None,
):
install_requires = []
# dependency on Odoo
Expand Down Expand Up @@ -295,6 +296,9 @@ def _get_install_requires(
install_requires.extend(dep)
else:
install_requires.append(dep)
# additional dependencies passed as options
if additional_dependencies:
install_requires.extend(additional_dependencies)
return sorted(install_requires)


Expand All @@ -304,6 +308,7 @@ def get_install_requires_odoo_addon(
depends_override=None,
external_dependencies_override=None,
odoo_version_override=None,
additional_dependencies=None,
):
"""Get the list of requirements for an addon"""
manifest = read_manifest(addon_dir)
Expand All @@ -316,6 +321,7 @@ def get_install_requires_odoo_addon(
no_depends,
depends_override,
external_dependencies_override,
additional_dependencies,
)


Expand Down Expand Up @@ -444,6 +450,7 @@ def get_addon_metadata(
odoo_version_override=None, # type: str
post_version_strategy_override=None, # type: str
precomputed_metadata_path=None, # type: str
additional_dependencies=None, # type: list[str]
):
# type: (...) -> Message
"""
Expand All @@ -466,6 +473,7 @@ def get_addon_metadata(
odoo_version_override=odoo_version_override,
post_version_strategy_override=post_version_strategy_override,
precomputed_metadata_path=precomputed_metadata_path,
additional_dependencies=additional_dependencies,
)
meta = Message()

Expand Down Expand Up @@ -502,6 +510,7 @@ def get_addon_setuptools_keywords(
odoo_version_override=None,
post_version_strategy_override=None,
precomputed_metadata_path=None,
additional_dependencies=None,
):
manifest = read_manifest(addon_dir)
if precomputed_metadata_path and os.path.exists(precomputed_metadata_path):
Expand All @@ -526,6 +535,7 @@ def get_addon_setuptools_keywords(
depends_override=depends_override,
external_dependencies_override=external_dependencies_override,
odoo_version_override=odoo_version_override,
additional_dependencies=additional_dependencies,
)
setup_keywords = {
"name": make_pkg_name(odoo_version_info, addon_name),
Expand Down Expand Up @@ -553,6 +563,7 @@ def prepare_odoo_addon(
external_dependencies_override=None,
odoo_version_override=None,
post_version_strategy_override=None,
additional_dependencies=None,
):
addons_dir, addons_ns = _find_addons_dir()
potential_addons = os.listdir(addons_dir)
Expand Down Expand Up @@ -590,6 +601,7 @@ def prepare_odoo_addon(
odoo_version_override=odoo_version_override,
post_version_strategy_override=post_version_strategy_override,
precomputed_metadata_path="./PKG-INFO",
additional_dependencies=additional_dependencies,
)


Expand Down
6 changes: 6 additions & 0 deletions setuptools_odoo/setup_keywords.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,13 @@ def _parse_options(value):
external_dependencies_override = {}
odoo_version_override = None
post_version_strategy_override = None
additional_dependencies = None
if isinstance(value, dict):
depends_override = value.get("depends_override", {})
external_dependencies_override = value.get("external_dependencies_override", {})
odoo_version_override = value.get("odoo_version_override")
post_version_strategy_override = value.get("post_version_strategy_override")
additional_dependencies = value.get("additional_dependencies", None)
if os.environ.get("SETUPTOOLS_ODOO_POST_VERSION_STRATEGY_OVERRIDE"):
post_version_strategy_override = os.environ[
"SETUPTOOLS_ODOO_POST_VERSION_STRATEGY_OVERRIDE"
Expand All @@ -54,6 +56,7 @@ def _parse_options(value):
external_dependencies_override,
odoo_version_override,
post_version_strategy_override,
additional_dependencies,
)


Expand All @@ -63,12 +66,14 @@ def odoo_addon(dist, attr, value):
external_dependencies_override,
odoo_version_override,
post_version_strategy_override,
additional_dependencies,
) = _parse_options(value)
setup_keywords = prepare_odoo_addon(
depends_override=depends_override,
external_dependencies_override=external_dependencies_override,
odoo_version_override=odoo_version_override,
post_version_strategy_override=post_version_strategy_override,
additional_dependencies=additional_dependencies,
)
_set_dist_keywords(dist, setup_keywords)
if compat_editable_wheel is not None:
Expand All @@ -81,6 +86,7 @@ def odoo_addons(dist, attr, value):
external_dependencies_override,
odoo_version_override,
_,
_,
) = _parse_options(value)
setup_keywords = prepare_odoo_addons(
depends_override=depends_override,
Expand Down
1 change: 1 addition & 0 deletions tests/data/setup_reusable_addons/addon4/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@
'astropy': 'astropy>=1.0',
},
},
'additional_dependencies': ['odoo8-addon-addon4-extra-dep>=8.0.1.0.0']
},
)
1 change: 1 addition & 0 deletions tests/test_setup_keywords.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ def test_odoo_addon4(self):
for r in [
"astropy>=1.0",
"odoo8-addon-addon1>=8.0.3.0.0",
"odoo8-addon-addon4-extra-dep>=8.0.1.0.0",
"odoo>=8.0a,<9.0a",
"python-dateutil",
]
Expand Down
Loading