A tool to reason about Odoo addons manifests.
Using pipx (recommended):
pipx install manifestoo
Using pip:
pip install --user manifestoo
Manifestoo is a command line tool that provides the following features:
For a full list of commands an options, run manifestoo --help
.
For more information, read the documentation.
Let's create a directory (/tmp/myaddons
) containing addons a
, b
and c
,
where a
depends on b
and c
, and b
and c
respectively depend on the
contacts
and mail
core Odoo modules.
Using bash
you can do it like this:
mkdir -p /tmp/myaddons/{a,b,c}
echo '{"name": "A", "version": "14.0.1.0.0", "depends": ["b", "c"], "license": "GPL-3"}' > /tmp/myaddons/a/__manifest__.py
echo '{"name": "B", "version": "14.0.1.0.0", "depends": ["crm"], "license": "Other Proprietary"}' > /tmp/myaddons/b/__manifest__.py
echo '{"name": "C", "version": "14.0.1.0.0", "depends": ["mail"], "license": "LGPL-3"}' > /tmp/myaddons/c/__manifest__.py
The manifestoo list
command is useful to list all installable addons in a
directory. This can be useful to install them all at once, for instance.
$ manifestoo --select-addons-dir /tmp/myaddons list
a
b
c
The list-depends
command shows the direct dependencies. It is handy to
pre-install a database before running tests.
$ manifestoo -d /tmp/myaddons list-depends --separator=,
crm,mail
The list-codepends
command shows the transitive co-dependencies.
It is handy to know which modules are impacted by changes in selected modules.
$ manifestoo --addons-path /tmp/myaddons --select a list-codepends --separator=,
b,c
You can explore the dependency tree of module a
like this:
$ manifestoo --addons-path /tmp/myaddons --select a tree
a (14.0.1.0.0)
├── b (14.0.1.0.0)
│ └── contacts (14.0+c)
│ └── mail (14.0+c)
│ ├── base_setup (14.0+c)
│ │ └── web (14.0+c)
│ ├── bus (14.0+c)
│ │ └── web ⬆
│ └── web_tour (14.0+c)
│ └── web ⬆
└── c (14.0.1.0.0)
└── mail ⬆
To check that licenses are compatibles, use the check-licenses
command:
$ moo -d /tmp/myaddons check-licenses
a (GPL-3) depends on b (Other Proprietary)
And much more... See the documentation for more information.