# HG changeset patch # User Vincent Hatakeyama <vincent.hatakeyama@xcg-consulting.fr> # Date 1655989743 -7200 # Thu Jun 23 15:09:03 2022 +0200 # Branch 15.0 # Node ID d4aff7c4e681dd6baa2b4b3afe03bf5e40eaea6c # Parent 77996d1a76d6bf88d6a8a818c7a9e354f59fa6bb ✨ migration to Odoo v15 diff --git a/.badges/maturity.svg b/.badges/maturity.svg --- a/.badges/maturity.svg +++ b/.badges/maturity.svg @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="UTF-8" ?> -<svg xmlns="http://www.w3.org/2000/svg" width="177" height="20"> +<svg xmlns="http://www.w3.org/2000/svg" width="97" height="20"> <linearGradient id="b" x2="0" y2="100%"> <stop offset="0" stop-color="#bbb" stop-opacity=".1" /> <stop offset="1" stop-opacity=".1" /> </linearGradient> <mask id="anybadge_1"> - <rect width="177" height="20" rx="3" fill="#fff" /> + <rect width="97" height="20" rx="3" fill="#fff" /> </mask> <g mask="url(#anybadge_1)"> <path fill="#555" d="M0 0h61v20H0z" /> - <path fill="#4c1" d="M61 0h116v20H61z" /> - <path fill="url(#b)" d="M0 0h177v20H0z" /> + <path fill="#dfb317" d="M61 0h36v20H61z" /> + <path fill="url(#b)" d="M0 0h97v20H0z" /> </g> <g fill="#fff" @@ -27,7 +27,7 @@ font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11" > - <text x="120.0" y="15" fill="#010101" fill-opacity=".3">Production/Stable</text> - <text x="119.0" y="14">Production/Stable</text> + <text x="80.0" y="15" fill="#010101" fill-opacity=".3">Beta</text> + <text x="79.0" y="14">Beta</text> </g> </svg> diff --git a/.flake8 b/.flake8 new file mode 100644 --- /dev/null +++ b/.flake8 @@ -0,0 +1,2 @@ +[flake8] +max-line-length = 88 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,3 +1,3 @@ include: - project: xcg/ci-templates - file: /odoo/13.0/gitlab-ci.yaml + file: /odoo/15.0/gitlab-ci.yaml diff --git a/NEWS.rst b/NEWS.rst --- a/NEWS.rst +++ b/NEWS.rst @@ -1,44 +1,7 @@ Changelog ========= -13.0.3.0.0 ----------- - -Removed previously deprecated send_items method. - -13.0.2.0.3 ----------- - -Update to latest template version and change tests to use TransactionCase whenever possible. - -forward port of 11.0 -~~~~~~~~~~~~~~~~~~~~ - -Indicate clearly that send_items only send a unique item, unlike what the documentation indicated before and the name implied. - -Corrected the "export" method for Xbus emissions for "One2many" exports contents. - -13.0.2.0.2 +15.0.1.0.0 ---------- -Remove header and body from job view as they are not base64 encoded and incompatible with what Odoo expects. - -13.0.2.0.1 ----------- - -Corrected the translations of cardinality incompatibilities. - -13.0.2.0.0 (2021-08-25) ------------------------ - -Change chunking to be automatic by default. - -Add new method to send data, mainly for sending files. - -13.0.1.0.0 (2020-06-23) ------------------------ - -* Migrate to Odoo 13.0.1.0 - * remove @api.multi, returns - * remove view_type form - +Port to Odoo 15 from 13.0.3.0.0. diff --git a/README.rst b/README.rst --- a/README.rst +++ b/README.rst @@ -4,11 +4,11 @@ .. Update the path to the module bellow and to the branch .. |coverage| image:: .badges/coverage.svg - :target: https://orus.io/xcg/odoo-modules/xbus_emitter/-/pipelines?ref=branch/13.0 + :target: https://orus.io/xcg/odoo-modules/xbus_emitter/-/pipelines?ref=branch/15.0 :alt: Coverage report .. the image is updated by the CI when building the documentation .. |pylint| image:: .badges/pylint.svg - :target: https://orus.io/xcg/odoo-modules/xbus_emitter/-/pipelines?ref=branch/13.0 + :target: https://orus.io/xcg/odoo-modules/xbus_emitter/-/pipelines?ref=branch/15.0 :alt: pylint score .. Update the badge bellow depending on status .. |maturity| image:: .badges/maturity.svg diff --git a/__manifest__.py b/__manifest__.py --- a/__manifest__.py +++ b/__manifest__.py @@ -21,7 +21,7 @@ "name": "Xbus Emitter", "license": "AGPL-3", "summary": "Emit messages from Odoo to Xbus", - "version": "13.0.3.0.0", + "version": "15.0.1.0.0", "category": "Technical", "author": "XCG Consulting", "website": "https://odoo.consulting/", @@ -30,10 +30,12 @@ "security/ir.model.access.csv", "data/xbus.emitter.csv", "menu.xml", - "views/assets.xml", "views/xbus_emitter.xml", "views/xbus_emitter_job.xml", ], - "qweb": ["static/src/xml/debug_manager.xml"], + "assets": { + "web.assets_backend": ["/xbus_emitter/static/src/js/debug_manager_xbus.js"], + "web.assets_qweb": ["/xbus_emitter/static/src/xml/debug_manager.xml"], + }, "installable": True, } diff --git a/doc/autotodo.py b/doc/autotodo.py --- a/doc/autotodo.py +++ b/doc/autotodo.py @@ -22,6 +22,7 @@ import os import os.path import sys +from typing import Dict, Mapping, Tuple def main(): @@ -33,13 +34,14 @@ exts = sys.argv[2].split(",") tags = sys.argv[3].split(",") todolist = {tag: [] for tag in tags} + path_file_length: Mapping[str, int] = {} for root, _dirs, files in os.walk(folder): - scan_folder((exts, tags, todolist), root, files) - create_autotodo(folder, todolist) + scan_folder((exts, tags, todolist, path_file_length), root, files) + create_autotodo(folder, todolist, path_file_length) -def write_info(f, infos, folder): +def write_info(f, infos, folder, path_file_length: Mapping[str, int]): # Check sphinx version for lineno-start support import sphinx @@ -52,10 +54,8 @@ for i in infos: path = i[0] line = i[1] - lines = (line - 3, line + 4) - class_name = ":class:`%s`" % os.path.basename( - os.path.splitext(path)[0] - ) + lines = (line - 3, min(line + 4, path_file_length[path])) + class_name = ":class:`%s`" % os.path.basename(os.path.splitext(path)[0]) f.write( "%s\n" "%s\n\n" @@ -71,7 +71,7 @@ path, lines[0], lines[1], - line, + 4, ) ) if lineno_start: @@ -79,33 +79,34 @@ f.write("\n") -def create_autotodo(folder, todolist): +def create_autotodo(folder, todolist, path_file_length: Mapping[str, int]): with open("autotodo", "w+") as f: for tag, info in list(todolist.items()): f.write("%s\n%s\n\n" % (tag, "=" * len(tag))) - write_info(f, info, folder) + write_info(f, info, folder, path_file_length) def scan_folder(data_tuple, dirname, names): - (exts, tags, res) = data_tuple - file_info = {} + (exts, tags, res, path_file_length) = data_tuple for name in names: (root, ext) = os.path.splitext(name) if ext in exts: - file_info = scan_file(os.path.join(dirname, name), tags) + path = os.path.join(dirname, name) + file_info, length = scan_file(path, tags) + path_file_length[path] = length for tag, info in list(file_info.items()): if info: res[tag].extend(info) -def scan_file(filename, tags): +def scan_file(filename, tags) -> Tuple[Dict[str, Tuple[str, int, str]], int]: res = {tag: [] for tag in tags} with open(filename, "r") as f: for line_num, line in enumerate(f): for tag in tags: if tag in line: res[tag].append((filename, line_num, line[:-1].strip())) - return res + return res, line_num if __name__ == "__main__": diff --git a/doc/conf.py b/doc/conf.py --- a/doc/conf.py +++ b/doc/conf.py @@ -12,9 +12,9 @@ import os import sys -import odoo +from odoo_scripts.config import Configuration -from odoo_scripts.config import Configuration +import odoo # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the @@ -121,9 +121,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, module_lowercase, "%s Documentation" % project, [author], 1) -] +man_pages = [(master_doc, module_lowercase, "%s Documentation" % project, [author], 1)] # -- Options for Texinfo output ------------------------------------------- @@ -157,9 +155,7 @@ ) sphinxodoo_addons = [this_module] # sphinxodoo_root_path : Path of the Odoo root directory -sphinxodoo_root_path = os.path.dirname( - os.path.dirname(os.path.abspath(odoo.__file__)) -) +sphinxodoo_root_path = os.path.dirname(os.path.dirname(os.path.abspath(odoo.__file__))) # sphinxodoo_addons_path : List of paths were Odoo addons to load are located c = None # find setup file of superproject, if any @@ -189,9 +185,7 @@ sphinxodoo_addons_path.append(os.path.join(directory, line)) else: # add this directory top dir - sphinxodoo_addons_path.append( - os.path.dirname(os.path.dirname(os.getenv("PWD"))) - ) + sphinxodoo_addons_path.append(os.path.dirname(os.path.dirname(os.getenv("PWD")))) other_addons = os.getenv("ODOO_ADDONS_PATH", default=None) if other_addons: for addon_path in other_addons.split(","): diff --git a/doc/index.rst b/doc/index.rst --- a/doc/index.rst +++ b/doc/index.rst @@ -3,7 +3,7 @@ Contents: .. toctree:: - :maxdepth: 2 + :maxdepth: 4 modules NEWS diff --git a/doc/modules.rst b/doc/modules.rst new file mode 100644 --- /dev/null +++ b/doc/modules.rst @@ -0,0 +1,7 @@ +xbus_emitter +============ + +.. toctree:: + :maxdepth: 4 + + xbus_emitter diff --git a/doc/xbus_emitter.models.rst b/doc/xbus_emitter.models.rst new file mode 100644 --- /dev/null +++ b/doc/xbus_emitter.models.rst @@ -0,0 +1,37 @@ +odoo.addons.xbus\_emitter.models package +======================================== + +Submodules +---------- + +odoo.addons.xbus\_emitter.models.ir\_autovacuum module +------------------------------------------------------ + +.. automodule:: odoo.addons.xbus_emitter.models.ir_autovacuum + :members: + :undoc-members: + :show-inheritance: + +odoo.addons.xbus\_emitter.models.xbus\_emitter module +----------------------------------------------------- + +.. automodule:: odoo.addons.xbus_emitter.models.xbus_emitter + :members: + :undoc-members: + :show-inheritance: + +odoo.addons.xbus\_emitter.models.xbus\_emitter\_job module +---------------------------------------------------------- + +.. automodule:: odoo.addons.xbus_emitter.models.xbus_emitter_job + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: odoo.addons.xbus_emitter.models + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/xbus_emitter.rst b/doc/xbus_emitter.rst new file mode 100644 --- /dev/null +++ b/doc/xbus_emitter.rst @@ -0,0 +1,30 @@ +odoo.addons.xbus\_emitter package +================================= + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + xbus_emitter.models + xbus_emitter.tests + +Submodules +---------- + +odoo.addons.xbus\_emitter.export module +--------------------------------------- + +.. automodule:: odoo.addons.xbus_emitter.export + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: odoo.addons.xbus_emitter + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/xbus_emitter.tests.rst b/doc/xbus_emitter.tests.rst new file mode 100644 --- /dev/null +++ b/doc/xbus_emitter.tests.rst @@ -0,0 +1,37 @@ +odoo.addons.xbus\_emitter.tests package +======================================= + +Submodules +---------- + +odoo.addons.xbus\_emitter.tests.test\_export module +--------------------------------------------------- + +.. automodule:: odoo.addons.xbus_emitter.tests.test_export + :members: + :undoc-members: + :show-inheritance: + +odoo.addons.xbus\_emitter.tests.test\_xbus\_emitter module +---------------------------------------------------------- + +.. automodule:: odoo.addons.xbus_emitter.tests.test_xbus_emitter + :members: + :undoc-members: + :show-inheritance: + +odoo.addons.xbus\_emitter.tests.test\_xbus\_emitter\_job module +--------------------------------------------------------------- + +.. automodule:: odoo.addons.xbus_emitter.tests.test_xbus_emitter_job + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: odoo.addons.xbus_emitter.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/export.py b/export.py --- a/export.py +++ b/export.py @@ -8,11 +8,10 @@ def sql_map(query_result, psql_mapping): """Extract the data from a PostgreSQL query for export. - :param query_result: the result dictionary of the executed PostgreSQL - query. + :param query_result: the result dictionary of the executed PostgreSQL query. :param psql_mapping: the dictionary, mapping the way data must be extracted - from the PostgreSQL query result to return an output dictionary for - export. + from the PostgreSQL query result to return an output dictionary for + export. """ if not query_result: @@ -46,6 +45,7 @@ ``custom`` option is set, the key is used as the ``source``. The field options are: + - ``source``: name of the odoo object to copy. If the name contains dots ("."), it is used as a path to navigate on relation fields. - ``custom``: a function that takes the value found in the 'source' field, @@ -153,10 +153,7 @@ if i != len(path) - 1: value = value[0] - if ( - value_datatype in ("char", "text", "html") - and value is False - ): + if value_datatype in ("char", "text", "html") and value is False: value = None break @@ -179,11 +176,7 @@ islist = True if islist: - value = ( - [export(item, submapping) for item in value] - if value - else [] - ) + value = [export(item, submapping) for item in value] if value else [] else: if value is not None: value = export(value, submapping) diff --git a/i18n/fr.po b/i18n/fr.po --- a/i18n/fr.po +++ b/i18n/fr.po @@ -5,10 +5,10 @@ # Vincent Hatakeyama <vincent.hatakeyama@xcg-consulting.fr>, 2021. msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-06-23 10:18+0000\n" -"PO-Revision-Date: 2022-06-23 12:23+0200\n" +"PO-Revision-Date: 2022-06-23 14:56+0200\n" "Last-Translator: Vincent Hatakeyama <vincent.hatakeyama@xcg-consulting.fr>\n" "Language-Team: XCG Consulting\n" "Language: fr\n" diff --git a/models/xbus_emitter.py b/models/xbus_emitter.py --- a/models/xbus_emitter.py +++ b/models/xbus_emitter.py @@ -27,8 +27,7 @@ class XbusEmitter(models.Model): - """Configuration profile to emit Xbus messages from Odoo. - """ + """Configuration profile to emit Xbus messages from Odoo.""" _name = "xbus.emitter" _description = "Xbus Emitter Profile" @@ -116,9 +115,7 @@ # factorized method used by the various send_ methods job_values["event_type"] = event_type if record: - job_values.update( - {"record_id": record.id, "record_model": record._name} - ) + job_values.update({"record_id": record.id, "record_model": record._name}) # Remove default value fillers from the context. This can be called # from various places so safer / easier right here than upstream. emitter_context = self.get_clean_context() diff --git a/models/xbus_emitter_job.py b/models/xbus_emitter_job.py --- a/models/xbus_emitter_job.py +++ b/models/xbus_emitter_job.py @@ -1,7 +1,7 @@ ############################################################################## # # Xbus emitter for Odoo -# Copyright (C) 2015, 2020 XCG Consulting <https://xcg-consulting.fr> +# Copyright (C) 2015, 2020, 2022 XCG Consulting <https://xcg-consulting.fr> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -33,8 +33,7 @@ class XbusEmitterJob(models.Model): - """Message to be emitted (or already emitted) to Xbus. - """ + """Message to be emitted (or already emitted) to Xbus.""" _name = "xbus.emitter.job" _description = "Xbus Emitter Job" @@ -101,7 +100,6 @@ ], string="State", required=True, - track_visibility="onchange", default="to_send", index=True, ) @@ -115,7 +113,6 @@ string="Chunking", required=True, help="Specify how the item can or cannot be chunked.", - track_visibility="onchange", default="auto", ) @@ -128,14 +125,11 @@ process_id = fields.Char( string="Process ID", - help="The ID of the process that was created by the sending of the " - "envelope", + help="The ID of the process that was created by the sending of the " "envelope", ) date_sent = fields.Datetime(string="Envelope Sending Date", readonly=True) - date_done = fields.Datetime( - string="Process Termination Date", readonly=True - ) + date_done = fields.Datetime(string="Process Termination Date", readonly=True) _sql_constraints = ( ( @@ -146,26 +140,24 @@ ), ( "header_body", - "CHECK((header IS NULL AND items IS NOT NULL) OR " - "body IS NOT NULL)", + "CHECK((header IS NULL AND items IS NOT NULL) OR body IS NOT NULL)", "Header can only be used with body", ), ( "body_chunking_auto", - "CHECK(body IS NULL OR chunking = '{}')".format( - SELECTION_CHUNKING_AUTO - ), + "CHECK(body IS NULL OR chunking = '{}')".format(SELECTION_CHUNKING_AUTO), "Chunking must be automatic when using body", ), ) + # id is used but Odoo does not want a depends on it. as it does not change + # it is not added in the :meth:depends + @api.depends("event_type") def name_get(self): # nicer name than the default result = [] for record in self: - result.append( - (record.id, "%s: %d" % (record.event_type, record.id)) - ) + result.append((record.id, "%s: %d" % (record.event_type, record.id))) return result @api.model @@ -180,9 +172,7 @@ """ deadline = datetime.now() - timedelta(days=self._removal_interval) - jobs = self.search( - [("date_done", "<=", fields.Datetime.to_string(deadline))] - ) + jobs = self.search([("date_done", "<=", fields.Datetime.to_string(deadline))]) log.info("%s, %s", len(jobs), jobs) jobs.unlink() diff --git a/pyproject.toml b/pyproject.toml --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,17 @@ +[tool.isort] +py_version = 39 +profile = "black" +known_odoo = ['odoo'] +known_odoo_addons = ['odoo.addons'] +sections = [ + 'FUTURE', + 'STDLIB', + 'THIRDPARTY', + 'ODOO', + 'ODOO_ADDONS', + 'FIRSTPARTY', + 'LOCALFOLDER' +] + [tool.black] -line-length = 79 -target = 3.8 +target = 3.9 diff --git a/tests/__init__.py b/tests/__init__.py --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,5 +1,1 @@ -from . import ( # noqa: F401 - test_export, - test_xbus_emitter, - test_xbus_emitter_job, -) +from . import test_export, test_xbus_emitter, test_xbus_emitter_job # noqa: F401 diff --git a/tests/test_export.py b/tests/test_export.py --- a/tests/test_export.py +++ b/tests/test_export.py @@ -27,9 +27,7 @@ record = self.env["res.partner"].create({"name": "my name"}) self.assertEqual( {"name": "my name", "company": None}, - export( - record, {"name": {}, "company": {"source": "company_name"}} - ), + export(record, {"name": {}, "company": {"source": "company_name"}}), ) def test_export_integer_field(self): @@ -47,21 +45,17 @@ def test_export_text_field(self): record = self.env["res.partner"].create({"name": "my name"}) self.assertEqual({"comment": None}, export(record, {"comment": {}})) - record.comment = "A comment" + record.comment = "<p>A comment</p>" self.assertEqual( - {"comment": "A comment"}, export(record, {"comment": {}}) + {"comment": "<p>A comment</p>"}, export(record, {"comment": {}}) ) def test_export_float_field(self): record = self.env["res.partner"].create({"name": "my name"}) - self.assertEqual( - {"credit_limit": 0.0}, export(record, {"credit_limit": {}}) - ) + self.assertEqual({"credit_limit": 0.0}, export(record, {"credit_limit": {}})) record.credit_limit = 4.5 - self.assertEqual( - {"credit_limit": 4.5}, export(record, {"credit_limit": {}}) - ) + self.assertEqual({"credit_limit": 4.5}, export(record, {"credit_limit": {}})) def test_export_selection_field(self): record = self.env["res.partner"].create({"name": "my name"}) @@ -89,31 +83,21 @@ ) def test_export_one2many_field(self): - mapping = { - "children": {"source": "child_ids", "mapping": {"name": {}}} - } + mapping = {"children": {"source": "child_ids", "mapping": {"name": {}}}} parent = self.env["res.partner"].create({"name": "my parent"}) self.assertEqual({"children": []}, export(parent, mapping)) - self.env["res.partner"].create( - {"name": "Child1", "parent_id": parent.id} - ) - self.assertEqual( - {"children": [{"name": "Child1"}]}, export(parent, mapping) - ) - self.env["res.partner"].create( - {"name": "Child2", "parent_id": parent.id} - ) + self.env["res.partner"].create({"name": "Child1", "parent_id": parent.id}) + self.assertEqual({"children": [{"name": "Child1"}]}, export(parent, mapping)) + self.env["res.partner"].create({"name": "Child2", "parent_id": parent.id}) self.assertEqual( {"children": [{"name": "Child1"}, {"name": "Child2"}]}, export(parent, mapping), ) def test_export_many2many_field(self): - mapping = { - "categories": {"source": "category_id", "mapping": {"name": {}}} - } + mapping = {"categories": {"source": "category_id", "mapping": {"name": {}}}} category1 = self.env["res.partner.category"].create({"name": "cat1"}) category2 = self.env["res.partner.category"].create({"name": "cat2"}) @@ -124,9 +108,7 @@ record.category_id = [category1.id] - self.assertEqual( - {"categories": [{"name": "cat1"}]}, export(record, mapping) - ) + self.assertEqual({"categories": [{"name": "cat1"}]}, export(record, mapping)) record.category_id = [category1.id, category2.id] @@ -136,7 +118,7 @@ ) def test_export_deep_relation(self): - m = { + mapping = { "company": { "source": "partner_ids.company_id", "mapping": {"name": {}}, @@ -155,9 +137,7 @@ category1.partner_ids = [partner1.id] - self.assertEqual( - {"company": {"name": "company"}}, export(category1, m) - ) + self.assertEqual({"company": {"name": "company"}}, export(category1, mapping)) def test_export_custom_char(self): record = self.env["res.partner"].create({"name": "my name"}) @@ -202,29 +182,21 @@ record = self.env["res.partner"].create({"name": "my name"}) self.assertEqual( {"name": "my namemy name"}, - export( - record, {"name": {"source": "name", "custom": lambda s: s * 2}} - ), + export(record, {"name": {"source": "name", "custom": lambda s: s * 2}}), ) def test_export_custom_with_source_list(self): """Custom list built out of a field.""" - mapping = { - "list": {"source": "child_ids", "custom": lambda user: user.id} - } + mapping = {"list": {"source": "child_ids", "custom": lambda user: user.id}} # Build 2 partners, 1 child of the other. record = self.env["res.partner"].create({"name": "a parent"}) - self.env["res.partner"].create( - {"name": "a child", "parent_id": record.id} - ) + self.env["res.partner"].create({"name": "a child", "parent_id": record.id}) self.assertTrue(record.child_ids) # Export the record & check the child list. - self.assertEqual( - {"list": [record.child_ids.id]}, export(record, mapping) - ) + self.assertEqual({"list": [record.child_ids.id]}, export(record, mapping)) # Special case when the source field is empty; used to return null. record = self.env["res.partner"].create({"name": "my name"}) @@ -235,9 +207,7 @@ record = self.env["res.partner"].create({"name": "my name"}) self.assertEqual( {}, - export( - record, {"name": {"source": "name", "custom": lambda s: SKIP}} - ), + export(record, {"name": {"source": "name", "custom": lambda s: SKIP}}), ) def test_export_custom_with_relation_source(self): @@ -255,9 +225,7 @@ parent = self.env["res.partner"].create({"name": "the parent name"}) record.parent_id = parent.id - self.assertEqual( - {"parent_name": "the parent name"}, export(record, mapping) - ) + self.assertEqual({"parent_name": "the parent name"}, export(record, mapping)) def test_export_nested_fields(self): mapping = { diff --git a/tests/test_xbus_emitter_job.py b/tests/test_xbus_emitter_job.py --- a/tests/test_xbus_emitter_job.py +++ b/tests/test_xbus_emitter_job.py @@ -27,9 +27,7 @@ def test_0001_autovacuum(self): def past_dt(time_delta): return ( - (datetime.now() - time_delta) - .replace(microsecond=0) - .isoformat(sep=" ") + (datetime.now() - time_delta).replace(microsecond=0).isoformat(sep=" ") ) class_ = self.env["xbus.emitter.job"] @@ -67,9 +65,7 @@ def test_0002_autovacuum(self): def past_dt(time_delta): return ( - (datetime.now() - time_delta) - .replace(microsecond=0) - .isoformat(sep=" ") + (datetime.now() - time_delta).replace(microsecond=0).isoformat(sep=" ") ) class_ = self.env["xbus.emitter.job"] diff --git a/views/assets.xml b/views/assets.xml deleted file mode 100644 --- a/views/assets.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<odoo> - <!-- Include assets provided by this module. --> - - <template - id="assets_backend" - name="xbus_emitter assets" - inherit_id="web.assets_backend" - > - <xpath expr="//script[last()]" position="after"> - <script - type="text/javascript" - src="/xbus_emitter/static/src/js/debug_manager_xbus.js" - /> - </xpath> - </template> -</odoo>