odoo-addons-parser 0.7__tar.gz → 0.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/.github/workflows/pre-commit.yml +3 -3
  2. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/.github/workflows/publish.yml +2 -2
  3. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/.github/workflows/test.yml +4 -4
  4. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/PKG-INFO +3 -3
  5. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/data_xml.py +16 -4
  6. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/common.py +18 -1
  7. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/__manifest__.py +1 -0
  8. odoo_addons_parser-0.9/odoo_addons_parser/tests/repo/module_test/data/nested_root_tags.xml +21 -0
  9. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser.egg-info/PKG-INFO +3 -3
  10. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser.egg-info/SOURCES.txt +3 -0
  11. odoo_addons_parser-0.9/odoo_addons_parser.egg-info/scm_file_list.json +41 -0
  12. odoo_addons_parser-0.9/odoo_addons_parser.egg-info/scm_version.json +8 -0
  13. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/pyproject.toml +2 -2
  14. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/.gitignore +0 -0
  15. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/.pre-commit-config.yaml +0 -0
  16. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/LICENSE +0 -0
  17. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/MANIFEST.in +0 -0
  18. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/README.md +0 -0
  19. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/__init__.py +0 -0
  20. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/code.py +0 -0
  21. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/data_csv.py +0 -0
  22. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/module.py +0 -0
  23. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/odoo.py +0 -0
  24. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/repository.py +0 -0
  25. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/__init__.py +0 -0
  26. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/__init__.py +0 -0
  27. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/data/res_partner.xml +0 -0
  28. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/demo/res_partner.xml +0 -0
  29. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/models/__init__.py +0 -0
  30. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/models/res_partner.py +0 -0
  31. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/models/res_users.py +0 -0
  32. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/reports/reports.xml +0 -0
  33. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/reports/templates.xml +0 -0
  34. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/security/ir.model.access.csv +0 -0
  35. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/tests/test.xml +0 -0
  36. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/views/assets.xml +0 -0
  37. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/repo/module_test/views/res_partner.xml +0 -0
  38. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/test_module.py +0 -0
  39. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/test_odoo.py +0 -0
  40. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/test_repository.py +0 -0
  41. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/tests/test_treesitter_utils.py +0 -0
  42. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser/treesitter_utils.py +0 -0
  43. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser.egg-info/dependency_links.txt +0 -0
  44. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser.egg-info/requires.txt +0 -0
  45. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/odoo_addons_parser.egg-info/top_level.txt +0 -0
  46. {odoo_addons_parser-0.7 → odoo_addons_parser-0.9}/setup.cfg +0 -0
@@ -12,11 +12,11 @@ jobs:
12
12
  pre-commit:
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
- - uses: actions/checkout@v2
16
- - uses: actions/setup-python@v2
15
+ - uses: actions/checkout@v7
16
+ - uses: actions/setup-python@v7
17
17
  - name: Get python version
18
18
  run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV
19
- - uses: actions/cache@v4
19
+ - uses: actions/cache@v6
20
20
  with:
21
21
  path: ~/.cache/pre-commit
22
22
  key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
@@ -15,8 +15,8 @@ jobs:
15
15
  permissions:
16
16
  id-token: write
17
17
  steps:
18
- - uses: actions/checkout@v2
19
- - uses: actions/setup-python@v2
18
+ - uses: actions/checkout@v7
19
+ - uses: actions/setup-python@v7
20
20
  - name: Install pypa/build
21
21
  run: python -m pip install build
22
22
  - name: Build a binary wheel and a source tarball
@@ -15,10 +15,10 @@ jobs:
15
15
  strategy:
16
16
  fail-fast: false
17
17
  matrix:
18
- python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
18
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
19
19
  steps:
20
- - uses: actions/checkout@v2
21
- - uses: actions/setup-python@v2
20
+ - uses: actions/checkout@v7
21
+ - uses: actions/setup-python@v7
22
22
  with:
23
23
  python-version: ${{ matrix.python-version }}
24
24
  - name: Install dependencies
@@ -28,7 +28,7 @@ jobs:
28
28
  mkdir -p ${{ env.ODOO_DOWNLOAD_DIR_PATH }}
29
29
  - name: Cache Odoo CE tarballs
30
30
  id: cache-odoo-src
31
- uses: actions/cache@v4
31
+ uses: actions/cache@v6
32
32
  with:
33
33
  key: cache-odoo-src
34
34
  path: ${{ env.ODOO_DOWNLOAD_DIR_PATH }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: odoo-addons-parser
3
- Version: 0.7
3
+ Version: 0.9
4
4
  Summary: Collect data from Odoo module folders.
5
5
  Author: Sébastien Alix
6
6
  License: GNU LESSER GENERAL PUBLIC LICENSE
@@ -178,15 +178,15 @@ Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGP
178
178
  Classifier: Operating System :: OS Independent
179
179
  Classifier: Programming Language :: Python
180
180
  Classifier: Programming Language :: Python :: 3
181
- Classifier: Programming Language :: Python :: 3.9
182
181
  Classifier: Programming Language :: Python :: 3.10
183
182
  Classifier: Programming Language :: Python :: 3.11
184
183
  Classifier: Programming Language :: Python :: 3.12
185
184
  Classifier: Programming Language :: Python :: 3.13
186
185
  Classifier: Programming Language :: Python :: 3.14
186
+ Classifier: Programming Language :: Python :: 3.15
187
187
  Classifier: Programming Language :: Python :: 3 :: Only
188
188
  Classifier: Framework :: Odoo
189
- Requires-Python: >=3.9
189
+ Requires-Python: >=3.10
190
190
  Description-Content-Type: text/markdown
191
191
  License-File: LICENSE
192
192
  Requires-Dist: pygount<1.7.0
@@ -8,6 +8,10 @@ import logging
8
8
 
9
9
  _logger = logging.getLogger(__name__)
10
10
 
11
+ # Root tags can be found in 'odoo/tools/convert.py',
12
+ # method 'xml_import.parse()'. They can be nested in data files.
13
+ ROOT_TAGS = ("data", "odoo", "openerp")
14
+
11
15
 
12
16
  class XmlParseError(Exception):
13
17
  """Exception raised for XML parsing errors."""
@@ -43,7 +47,7 @@ class XmlFile:
43
47
  tree = ET.parse(self.file_path)
44
48
  root = tree.getroot()
45
49
  # Handle both 'odoo' and 'openerp' root tags
46
- if root.tag not in ("odoo", "openerp"):
50
+ if root.tag not in ROOT_TAGS:
47
51
  _logger.warning(f"Unexpected root tag '{root.tag}' in {self.file_path}")
48
52
  return {tag: [] for tag in TAGS}
49
53
  return self._parse_root_node(root)
@@ -64,8 +68,10 @@ class XmlFile:
64
68
  for node in root:
65
69
  if node.tag in IGNORED_TAGS:
66
70
  continue
67
- # <data> could exist alongside other tags, process it as a root node
68
- if node.tag == "data":
71
+ # Root tags ('odoo', 'openerp', 'data') can be nested in data files
72
+ # (see 'odoo/tools/convert.py', method 'xml_import.parse()'):
73
+ # process them as root nodes
74
+ if node.tag in ROOT_TAGS:
69
75
  data_elements = self._parse_root_node(node)
70
76
  for tag, elts in data_elements.items():
71
77
  elements[tag].extend(elts)
@@ -399,7 +405,8 @@ class XmlActWindow(XmlSpecialTag):
399
405
  # method 'xml_import.__init__()'.
400
406
  # NOTE:
401
407
  # - only tags from Odoo >= 11.0 are supported. Tags such as <workflow> or
402
- # <ir_set> are not part of them (dropped in Odoo 11.0).
408
+ # <ir_set> are not part of them (dropped in Odoo 11.0), and are ignored
409
+ # (see IGNORED_TAGS).
403
410
  # - <delete>, <function> and <assert> tags are not added neither as they're not
404
411
  # representing resources that can be used in code or reverse dependencies
405
412
  TAGS = {
@@ -414,4 +421,9 @@ IGNORED_TAGS = [
414
421
  "delete",
415
422
  "function",
416
423
  "assert", # Odoo <= 12.0, old way of writing tests
424
+ "xpath", # OCA/OpenUpgrade#19.0 using it in noupdate.xml files
425
+ "wizard", # Odoo <= 7.0, dead code (not handled by Odoo >= 8.0 either)
426
+ "workflow", # Odoo <= 10.0, dropped in Odoo 11.0
427
+ "ir_set", # Odoo <= 10.0, deprecated since 9.0, dropped in Odoo 11.0
428
+ "url", # Odoo 8.0 only
417
429
  ]
@@ -22,7 +22,7 @@ class CommonCase(unittest.TestCase):
22
22
  "CSS": 0,
23
23
  "JavaScript": 0,
24
24
  "Python": 42,
25
- "XML": 115,
25
+ "XML": 128,
26
26
  }
27
27
  cls.module_manifest = {
28
28
  "author": "Camptocamp, Odoo Community Association (OCA)",
@@ -30,6 +30,7 @@ class CommonCase(unittest.TestCase):
30
30
  "data": [
31
31
  "security/ir.model.access.csv",
32
32
  "data/res_partner.xml",
33
+ "data/nested_root_tags.xml",
33
34
  "views/res_partner.xml",
34
35
  "views/assets.xml",
35
36
  "reports/reports.xml",
@@ -357,6 +358,22 @@ class CommonCase(unittest.TestCase):
357
358
  "loaded": True,
358
359
  "data": {"name": "Accountant"},
359
360
  },
361
+ {
362
+ "id": "partner_alongside_root_tags",
363
+ "model": "res.partner",
364
+ "name": "Partner Alongside Root Tags",
365
+ "file_path": "data/nested_root_tags.xml",
366
+ "loaded": True,
367
+ "data": {"name": "Partner Alongside Root Tags"},
368
+ },
369
+ {
370
+ "id": "partner_nested_in_data",
371
+ "model": "res.partner",
372
+ "name": "Nested Partner in Data",
373
+ "file_path": "data/nested_root_tags.xml",
374
+ "loaded": True,
375
+ "data": {"name": "Nested Partner in Data"},
376
+ },
360
377
  ],
361
378
  }
362
379
  cls.module_demo = {
@@ -11,6 +11,7 @@
11
11
  "data": [
12
12
  "security/ir.model.access.csv",
13
13
  "data/res_partner.xml",
14
+ "data/nested_root_tags.xml",
14
15
  "views/res_partner.xml",
15
16
  "views/assets.xml",
16
17
  "reports/reports.xml",
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Copyright 2026 Sebastien Alix <https://github.com/sebalix
3
+ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
4
+ <odoo>
5
+
6
+ <!-- Root tags can be nested in data files
7
+ (see 'odoo/tools/convert.py', method 'xml_import.parse()') -->
8
+ <data>
9
+ <openerp>
10
+ <record id="partner_nested_in_data" model="res.partner">
11
+ <field name="name">Nested Partner in Data</field>
12
+ </record>
13
+ </openerp>
14
+ </data>
15
+
16
+ <!-- Record tags can exist alongside nested root tags -->
17
+ <record id="partner_alongside_root_tags" model="res.partner">
18
+ <field name="name">Partner Alongside Root Tags</field>
19
+ </record>
20
+
21
+ </odoo>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: odoo-addons-parser
3
- Version: 0.7
3
+ Version: 0.9
4
4
  Summary: Collect data from Odoo module folders.
5
5
  Author: Sébastien Alix
6
6
  License: GNU LESSER GENERAL PUBLIC LICENSE
@@ -178,15 +178,15 @@ Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGP
178
178
  Classifier: Operating System :: OS Independent
179
179
  Classifier: Programming Language :: Python
180
180
  Classifier: Programming Language :: Python :: 3
181
- Classifier: Programming Language :: Python :: 3.9
182
181
  Classifier: Programming Language :: Python :: 3.10
183
182
  Classifier: Programming Language :: Python :: 3.11
184
183
  Classifier: Programming Language :: Python :: 3.12
185
184
  Classifier: Programming Language :: Python :: 3.13
186
185
  Classifier: Programming Language :: Python :: 3.14
186
+ Classifier: Programming Language :: Python :: 3.15
187
187
  Classifier: Programming Language :: Python :: 3 :: Only
188
188
  Classifier: Framework :: Odoo
189
- Requires-Python: >=3.9
189
+ Requires-Python: >=3.10
190
190
  Description-Content-Type: text/markdown
191
191
  License-File: LICENSE
192
192
  Requires-Dist: pygount<1.7.0
@@ -19,6 +19,8 @@ odoo_addons_parser.egg-info/PKG-INFO
19
19
  odoo_addons_parser.egg-info/SOURCES.txt
20
20
  odoo_addons_parser.egg-info/dependency_links.txt
21
21
  odoo_addons_parser.egg-info/requires.txt
22
+ odoo_addons_parser.egg-info/scm_file_list.json
23
+ odoo_addons_parser.egg-info/scm_version.json
22
24
  odoo_addons_parser.egg-info/top_level.txt
23
25
  odoo_addons_parser/tests/__init__.py
24
26
  odoo_addons_parser/tests/common.py
@@ -28,6 +30,7 @@ odoo_addons_parser/tests/test_repository.py
28
30
  odoo_addons_parser/tests/test_treesitter_utils.py
29
31
  odoo_addons_parser/tests/repo/module_test/__init__.py
30
32
  odoo_addons_parser/tests/repo/module_test/__manifest__.py
33
+ odoo_addons_parser/tests/repo/module_test/data/nested_root_tags.xml
31
34
  odoo_addons_parser/tests/repo/module_test/data/res_partner.xml
32
35
  odoo_addons_parser/tests/repo/module_test/demo/res_partner.xml
33
36
  odoo_addons_parser/tests/repo/module_test/models/__init__.py
@@ -0,0 +1,41 @@
1
+ {
2
+ "files": [
3
+ ".github/workflows/pre-commit.yml",
4
+ ".github/workflows/publish.yml",
5
+ ".github/workflows/test.yml",
6
+ ".gitignore",
7
+ ".pre-commit-config.yaml",
8
+ "LICENSE",
9
+ "MANIFEST.in",
10
+ "README.md",
11
+ "odoo_addons_parser/__init__.py",
12
+ "odoo_addons_parser/code.py",
13
+ "odoo_addons_parser/data_csv.py",
14
+ "odoo_addons_parser/data_xml.py",
15
+ "odoo_addons_parser/module.py",
16
+ "odoo_addons_parser/odoo.py",
17
+ "odoo_addons_parser/repository.py",
18
+ "odoo_addons_parser/tests/__init__.py",
19
+ "odoo_addons_parser/tests/common.py",
20
+ "odoo_addons_parser/tests/repo/module_test/__init__.py",
21
+ "odoo_addons_parser/tests/repo/module_test/__manifest__.py",
22
+ "odoo_addons_parser/tests/repo/module_test/data/nested_root_tags.xml",
23
+ "odoo_addons_parser/tests/repo/module_test/data/res_partner.xml",
24
+ "odoo_addons_parser/tests/repo/module_test/demo/res_partner.xml",
25
+ "odoo_addons_parser/tests/repo/module_test/models/__init__.py",
26
+ "odoo_addons_parser/tests/repo/module_test/models/res_partner.py",
27
+ "odoo_addons_parser/tests/repo/module_test/models/res_users.py",
28
+ "odoo_addons_parser/tests/repo/module_test/reports/reports.xml",
29
+ "odoo_addons_parser/tests/repo/module_test/reports/templates.xml",
30
+ "odoo_addons_parser/tests/repo/module_test/security/ir.model.access.csv",
31
+ "odoo_addons_parser/tests/repo/module_test/tests/test.xml",
32
+ "odoo_addons_parser/tests/repo/module_test/views/assets.xml",
33
+ "odoo_addons_parser/tests/repo/module_test/views/res_partner.xml",
34
+ "odoo_addons_parser/tests/test_module.py",
35
+ "odoo_addons_parser/tests/test_odoo.py",
36
+ "odoo_addons_parser/tests/test_repository.py",
37
+ "odoo_addons_parser/tests/test_treesitter_utils.py",
38
+ "odoo_addons_parser/treesitter_utils.py",
39
+ "pyproject.toml"
40
+ ]
41
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.9",
3
+ "distance": 0,
4
+ "node": "g7a02bb09495ee5c76fb02b1e0dbfb4766d7c0117",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-11-12"
8
+ }
@@ -11,12 +11,12 @@ classifiers = [
11
11
  "Operating System :: OS Independent",
12
12
  "Programming Language :: Python",
13
13
  "Programming Language :: Python :: 3",
14
- "Programming Language :: Python :: 3.9",
15
14
  "Programming Language :: Python :: 3.10",
16
15
  "Programming Language :: Python :: 3.11",
17
16
  "Programming Language :: Python :: 3.12",
18
17
  "Programming Language :: Python :: 3.13",
19
18
  "Programming Language :: Python :: 3.14",
19
+ "Programming Language :: Python :: 3.15",
20
20
  "Programming Language :: Python :: 3 :: Only",
21
21
  "Framework :: Odoo",
22
22
  ]
@@ -25,7 +25,7 @@ dependencies = [
25
25
  "tree-sitter>=0.20.0",
26
26
  "tree-sitter-python>=0.20.0",
27
27
  ]
28
- requires-python = ">=3.9"
28
+ requires-python = ">=3.10"
29
29
  dynamic = ["version"]
30
30
 
31
31
  [project.urls]