[IMP] upgrade_coverage : generate coverage module file
parent
7ea1edc7a1
commit
56903660f7
|
@ -21,7 +21,7 @@
|
|||
"installable": True,
|
||||
"depends": ["base"],
|
||||
"external_dependencies": {
|
||||
"python": ["dataclasses", "odoorpc", "openupgradelib"],
|
||||
"python": ["mako", "dataclasses", "odoorpc", "openupgradelib"],
|
||||
},
|
||||
"license": "AGPL-3",
|
||||
}
|
||||
|
|
|
@ -10,8 +10,9 @@ import os
|
|||
from copy import deepcopy
|
||||
|
||||
from lxml import etree
|
||||
from mako.template import Template
|
||||
|
||||
from odoo import fields, models
|
||||
from odoo import fields, models, release
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.modules import get_module_path
|
||||
from odoo.tools import config
|
||||
|
@ -265,6 +266,12 @@ class UpgradeAnalysis(models.Model):
|
|||
_logger.exception("Error generating noupdate changes: %s" % e)
|
||||
general_log += "ERROR: error when generating noupdate changes: %s\n" % e
|
||||
|
||||
try:
|
||||
self.generate_module_coverage_file()
|
||||
except Exception as e:
|
||||
_logger.exception("Error generating module coverage file: %s" % e)
|
||||
general_log += "ERROR: error when generating module coverage file: %s\n" % e
|
||||
|
||||
self.write(
|
||||
{
|
||||
"state": "done",
|
||||
|
@ -494,3 +501,65 @@ class UpgradeAnalysis(models.Model):
|
|||
filename="noupdate_changes.xml",
|
||||
)
|
||||
return True
|
||||
|
||||
def generate_module_coverage_file(self):
|
||||
self.ensure_one()
|
||||
|
||||
module_coverage_file_folder = config.get("module_coverage_file_folder", False)
|
||||
|
||||
if not module_coverage_file_folder:
|
||||
return
|
||||
|
||||
file_template = Template(
|
||||
filename=os.path.join(
|
||||
get_module_path("upgrade_analysis"),
|
||||
"static",
|
||||
"src",
|
||||
"module_coverage_template.rst.mako",
|
||||
)
|
||||
)
|
||||
|
||||
module_domain = [
|
||||
("state", "=", "installed"),
|
||||
("name", "not in", ["upgrade_analysis", "openupgrade_records"]),
|
||||
]
|
||||
|
||||
connection = self.config_id.get_connection()
|
||||
all_local_modules = (
|
||||
self.env["ir.module.module"].search(module_domain).mapped("name")
|
||||
)
|
||||
all_remote_modules = (
|
||||
connection.env["ir.module.module"]
|
||||
.browse(connection.env["ir.module.module"].search(module_domain))
|
||||
.mapped("name")
|
||||
)
|
||||
|
||||
start_version = connection.version
|
||||
end_version = release.major_version
|
||||
|
||||
all_modules = sorted(list(set(all_remote_modules + all_local_modules)))
|
||||
module_descriptions = []
|
||||
for module in all_modules:
|
||||
if module in all_local_modules and module in all_remote_modules:
|
||||
module_description = " %s" % module
|
||||
elif module in all_local_modules:
|
||||
module_description = " |new| %s" % module
|
||||
else:
|
||||
module_description = " |del| %s" % module
|
||||
module_descriptions.append(module_description.ljust(49, " "))
|
||||
|
||||
rendered_text = file_template.render(
|
||||
start_version=start_version,
|
||||
end_version=end_version,
|
||||
module_descriptions=module_descriptions,
|
||||
)
|
||||
|
||||
file_name = "modules{}-{}.rst".format(
|
||||
start_version.replace(".", ""),
|
||||
end_version.replace(".", ""),
|
||||
)
|
||||
|
||||
file_path = os.path.join(module_coverage_file_folder, file_name)
|
||||
f = open(file_path, "w+")
|
||||
f.write(rendered_text)
|
||||
f.close()
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
Module coverage ${start_version} -> ${end_version}
|
||||
============================
|
||||
|
||||
.. include:: coverage_legend.rst
|
||||
|
||||
+-------------------------------------------------+-------------------------------------------------+
|
||||
|Module |Status |
|
||||
+=================================================+=================================================+
|
||||
% for module_description in module_descriptions:
|
||||
|${module_description}| |
|
||||
+-------------------------------------------------+-------------------------------------------------+
|
||||
% endfor
|
Loading…
Reference in New Issue