{"id":13734608,"url":"https://github.com/OCA/odoo-pre-commit-hooks","last_synced_at":"2025-05-08T10:32:46.989Z","repository":{"id":41277589,"uuid":"508621825","full_name":"OCA/odoo-pre-commit-hooks","owner":"OCA","description":"Linters of Odoo addons that complement pylint-odoo","archived":false,"fork":false,"pushed_at":"2024-09-09T16:23:38.000Z","size":281,"stargazers_count":9,"open_issues_count":9,"forks_count":11,"subscribers_count":17,"default_branch":"main","last_synced_at":"2024-09-10T19:57:53.978Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OCA.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"OCA"}},"created_at":"2022-06-29T09:11:56.000Z","updated_at":"2024-09-09T16:23:42.000Z","dependencies_parsed_at":"2024-09-09T18:58:07.700Z","dependency_job_id":"fd6a96bd-57c4-4372-89ee-f36a0a883a72","html_url":"https://github.com/OCA/odoo-pre-commit-hooks","commit_stats":{"total_commits":75,"total_committers":3,"mean_commits":25.0,"dds":0.1333333333333333,"last_synced_commit":"2ac83c224e9e8bfb98df9b692762d6cdbb6762fa"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OCA%2Fodoo-pre-commit-hooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OCA%2Fodoo-pre-commit-hooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OCA%2Fodoo-pre-commit-hooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OCA%2Fodoo-pre-commit-hooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OCA","download_url":"https://codeload.github.com/OCA/odoo-pre-commit-hooks/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253046004,"owners_count":21845824,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T03:00:57.993Z","updated_at":"2025-05-08T10:32:46.971Z","avatar_url":"https://github.com/OCA.png","language":"Python","readme":"[//]: # (start-badges)\n\n[![Build Status](https://github.com/OCA/odoo-pre-commit-hooks/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/OCA/odoo-pre-commit-hooks/actions/workflows/test.yml?query=branch%3Amain)\n[![codecov](https://codecov.io/gh/OCA/odoo-pre-commit-hooks/branch/main/graph/badge.svg)](https://codecov.io/gh/OCA/odoo-pre-commit-hooks)\n[![version](https://img.shields.io/pypi/v/oca-odoo-pre-commit-hooks.svg)](https://pypi.org/project/oca-odoo-pre-commit-hooks)\n[![wheel](https://img.shields.io/pypi/wheel/oca-odoo-pre-commit-hooks.svg)](https://pypi.org/project/oca-odoo-pre-commit-hooks)\n[![supported-versions](https://img.shields.io/pypi/pyversions/oca-odoo-pre-commit-hooks.svg)](https://pypi.org/project/oca-odoo-pre-commit-hooks)\n[![commits-since](https://img.shields.io/github/commits-since/OCA/odoo-pre-commit-hooks/v0.1.1.svg)](https://github.com/OCA/odoo-pre-commit-hooks/compare/v0.1.1...main)\n[![code-style-black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n[//]: # (end-badges)\n\n# odoo-pre-commit-hooks\n\nOCA's custom pre-commit hooks for Odoo modules\n\n\n# Installation\n\nYou don't need to install it directly only configure your \".pre-commit-config.yaml\" file\n\nYou even can install it directly:\n - Installing from pypi:\n   - `pip install -U oca-odoo-pre-commit-hooks`\n\n - Installing from github:\n   - `pip install --force-reinstall -U git+https://github.com/OCA/odoo-pre-commit-hooks.git@main`\n\n\n# Usage pre-commit-config.yaml\n\nAdd to your \".pre-commit-config.yaml\" configuration file the following input\n\n\n```yaml\n    - repo: https://github.com/OCA/odoo-pre-commit-hooks\n        rev: v0.1.1\n        hooks:\n        - id: oca-checks-odoo-module\n        - id: oca-checks-po\n          args: [\"--fix\"]\n```\n\n# Usage directly the entry points\n\nIf you install directly the package use the entry point:\n\n    oca-checks-odoo-module --help\n    oca-checks-po --help\n\n\n# Skip one xml-check for only one file\n\nIf you need to skip one check in one particular XML file you can use the follow comment\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003c!-- oca-hooks:disable=xml-check-to-skip --\u003e\n\u003codoo\u003e\n...\n\u003c/odoo\u003e\n```\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003c!-- oca-hooks:disable=xml-check-to-skip,\n                       xml-check-to-skip2 --\u003e\n\u003codoo\u003e\n...\n\u003c/odoo\u003e\n```\n\nThe position of the comment it is not relative to the line that throw the check\n\nIt disable the entire file\n\n# Configuration\nBehavior can be configured through several methods and as of now only consists of enabling/disabling checks.\n\n## Enabling or Disabling Checks\nEach available hook consists of multiple checks which can be enabled/disabled using any of the following methods (ordered by priority):\n\n1. As an argument e.g., `oca-checks-odoo --enable=check-to-enable --disable=check-to-disable1,check-to-disable2`\n2. Using environment variables `OCA_HOOKS_ENABLE` or `OCA_HOOKS_DISABLE` e.g., `export OCA_HOOKS_ENABLE=check1,check2`\n3. A configuration file. The path to it can be specified with the argument `--config`. Alternatively a file named `.oca_hooks.cfg`\nwill be looked for (by default) in the following locations (in order):\n   1. Current working directory\n   2. Repo's root\n   3. User's home\n\n### Using a Configuration File\nTo enable or disable checks using a configuration file, add a `disable` or `enable` key under the `MESSAGES_CONTROL` section.\nFor example:\n```\n[MESSAGES_CONTROL]\nenable=check-enable1,check-enable2\ndisable=check-to-disable\n```\n\nAs stated before, each source has a certain priority. This means that if the environment variable `OCA_HOOKS_ENABLE=check1`\nexists, the configuration file above would not have any effect when it comes to enabling checks, and the only enabled\ncheck will be `check1`.\n\nHowever, if `OCA_HOOKS_DISABLE` is not set, the configuration file will still have an effect and `check-to-disable` will\nbe disabled.\n\n[//]: # (start-checks)\n\n# Checks\n\n* Check manifest-syntax-error\nCheck if the manifest file has syntax error\n\n* Check csv-duplicate-record-id\nduplicate CSV \"id\" AKA xmlid but for CSV files\n\n* Check csv-syntax-error\nCheck syntax error for CSV files declared in the manifest\n\n* Check xml-deprecated-data-node\nDeprecated \u003cdata\u003e node inside \u003codoo\u003e xml node\n\n* Check xml-deprecated-oe-chatter\n\nOdoo 18 introduced a new XML tag `\u003cchatter/\u003e` which replaces the old way to declare\nchatters on form views. For more information, see:\nhttps://github.com/odoo/odoo/pull/156463\n\n* Check xml-deprecated-openerp-node\ndeprecated \u003copenerp\u003e xml node\n\n* Check xml-deprecated-qweb-directive\nfor use of deprecated QWeb directives t-*-options\n\n* Check xml-not-valid-char-link\nThe resource in in src/href contains a not valid character.\n\n* Check xml-oe-structure-missing-id\n\nEnsure all tags with class 'oe_structure' have an ID. For more information on the rationale, see:\nhttps://github.com/OCA/odoo-pre-commit-hooks/issues/27\n\n* Check xml-redundant-module-name\n\nIf the module is called \"module_a\" and the xmlid is\n`\u003crecord id=\"module_a.xmlid_name1\" ...`\n\nThe \"module_a.\" is redundant it could be replaced to only\n`\u003crecord id=\"xmlid_name1\" ...`\n\n* Check xml-dangerous-filter-wo-user\nCheck dangerous filter without a user assigned.\n\n* Check xml-create-user-wo-reset-password\nrecords of user without `context=\"{'no_reset_password': True}\"`\nThis context avoid send email and mail log warning\n\n* Check xml-view-dangerous-replace-low-priority in ir.ui.view\n\n    \u003cfield name=\"priority\" eval=\"10\"/\u003e\n    ...\n        \u003cfield name=\"name\" position=\"replace\"/\u003e\n\n* Check xml-deprecated-tree-attribute\n  The tree-view declaration is using a deprecated attribute.\n\n* Check xml-record-missing-id\nGenerated when a \u003crecord\u003e tag has no id.\n\n* Check xml-duplicate-record-id\n\nIf a module has duplicated record_id AKA xml_ids\nfile1.xml\n    \u003crecord id=\"xmlid_name1\"\nfile2.xml\n    \u003crecord id=\"xmlid_name1\"\n\n* Check xml-duplicate-fields in all record nodes\n    \u003crecord id=\"xmlid_name1\"...\n        \u003cfield name=\"field_name1\"...\n        \u003cfield name=\"field_name1\"...\n\n* Check xml-syntax-error\nCheck syntax of XML files declared in the Odoo manifest\n\n* Check xml-dangerous-qweb-replace-low-priority\nDangerous qweb view defined with low priority\n\n* Check xml-duplicate-template-id\nTriggered when two templates share the same ID\n\n* Check xml-xpath-translatable-item check `xpath` nodes using `contains(text(), 'Text translatable')`\nSince that the text could be translated so it is a mutable value.\nIt could raise `ValueError` exception if the language is changed.\n\n\n[//]: # (end-checks)\n\n\n[//]: # (start-checks-po)\n\n# Checks PO\n\n* Check po-requires-module\nTranslation entry requires comment `#. module: MODULE`\n\n* Check po-python-parse-printf\nCheck if `msgid` is using `str` variables like `%s`\nSo translation `msgstr` must be the same number of variables too\n\n* Check po-python-parse-format\nCheck if `msgid` is using `str` variables like `{}`\nSo translation `msgstr` must be the same number of variables too\n\n* Check po-duplicate-message-definition (message-id)\nin all entries of PO files\n\n* Check po-duplicate-model-definition\nVerify that no entries share the same 'model:' tag\n\n* Check po-pretty-format\nCheck the following:\n1. Entries sorted alphabetically\n2. Lines are wrapped at 78 columns (same as Odoo)\n3. Clear msgstr when it is the same as msgid\n\n* Check po-syntax-error\nCheck syntax of PO files from i18n* folders\n\n\n[//]: # (end-checks-po)\n\n\n[//]: # (start-help)\n\n# Help\n```bash\nusage: oca-checks-odoo-module [-h] [--no-verbose] [--no-exit] [--disable DISABLE] [--enable ENABLE] [--config CONFIG] [--list-msgs] [--fix] [files_or_modules ...]\n\npositional arguments:\n files_or_modules Odoo __manifest__.py paths or Odoo module paths.\n\noptions:\n -h, --help show this help message and exit\n --no-verbose If enabled so disable verbose mode.\n --no-exit If enabled so it will not call exit.\n --disable, -d DISABLE Disable the checker with the given 'check-name', separated by commas.\n --enable, -e ENABLE Enable the checker with the given 'check-name', separated by commas. Default: All checks are enabled by default\n --config, -c CONFIG Path to a configuration file (default: .oca_hooks.cfg)\n --list-msgs List all currently enabled messages.\n --fix Automatically fix files when possible\n\n```\n\n[//]: # (end-help)\n\n\n[//]: # (start-help-po)\n\n# Help PO\n```bash\nusage: oca-checks-po [-h] [--no-verbose] [--no-exit] [--disable DISABLE] [--enable ENABLE] [--config CONFIG] [--list-msgs] [--fix] [po_files ...]\n\npositional arguments:\n po_files PO files.\n\noptions:\n -h, --help show this help message and exit\n --no-verbose If enabled so disable verbose mode.\n --no-exit If enabled so it will not call exit.\n --disable, -d DISABLE Disable the checker with the given 'check-name', separated by commas.\n --enable, -e ENABLE Enable the checker with the given 'check-name', separated by commas. Default: All checks are enabled by default\n --config, -c CONFIG Path to a configuration file (default: .oca_hooks.cfg)\n --list-msgs List all currently enabled messages.\n --fix Automatically fix files when possible\n\n```\n\n[//]: # (end-help-po)\n\n\n[//]: # (start-example)\n\n# Examples\n\n\n * csv-duplicate-record-id\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/ir.model.access.csv#L5 Duplicate CSV record `access_account_account_type`\n\n * csv-syntax-error\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/syntax_err_module/ir.model.access.csv#L1 'utf-8' codec can't decode byte 0xf1 in position 47: invalid continuation byte\n\n * manifest-syntax-error\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/manifest_werror/__manifest__.py#L1 Manifest could not be loaded\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/woinit_module/__manifest__.py#L1 Manifest could not be loaded\n\n * xml-create-user-wo-reset-password\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/res_users.xml#L10 record res.users without `context=\"{'no_reset_password': True}\"`\n\n * xml-dangerous-filter-wo-user\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view_odoo.xml#L60 Dangerous filter without explicit `user_id`\n\n * xml-dangerous-qweb-replace-low-priority\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L4 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L7 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L18 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1_copy.xml#L4 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1_copy.xml#L7 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1_copy.xml#L18 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1_copy2.xml#L4 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1_copy2.xml#L7 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1_copy2.xml#L18 Dangerous use of `replace` from view with priority 0 \u003c 99\n\n * xml-deprecated-data-node\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/demo/duplicated_id_demo.xml#L3 Deprecated `\u003cdata\u003e` node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view.xml#L3 Deprecated `\u003cdata\u003e` node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L3 Deprecated `\u003cdata\u003e` node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view_odoo.xml#L3 Deprecated `\u003cdata\u003e` node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view_odoo2.xml#L3 Deprecated `\u003cdata\u003e` node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/skip_xml_check.xml#L5 Deprecated `\u003cdata\u003e` node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/skip_xml_check_2.xml#L3 Deprecated `\u003cdata\u003e` node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/model_view.xml#L3 Deprecated `\u003cdata\u003e` node\n\n * xml-deprecated-oe-chatter\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/odoo18_module/views/deprecated_chatter.xml#L6 Please replace old style chatters with the new tag \u003cchatter/\u003e.\n\n * xml-deprecated-openerp-node\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view.xml#L2 Deprecated `\u003copenerp\u003e` xml node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L2 Deprecated `\u003copenerp\u003e` xml node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/model_view.xml#L2 Deprecated `\u003copenerp\u003e` xml node\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/res_users.xml#L2 Deprecated `\u003copenerp\u003e` xml node\n\n * xml-deprecated-qweb-directive\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L7 Deprecated QWeb directive `t-esc-options`. Use `t-options` instead\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L20 Deprecated QWeb directive `t-field-options`. Use `t-options` instead\n\n * xml-deprecated-tree-attribute\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view_odoo.xml#L31 Deprecated \"\u003ctree string=...\"\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view_odoo.xml#L42 Deprecated \"\u003ctree colors=...\"\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view_odoo.xml#L53 Deprecated \"\u003ctree fonts=...\"\n\n * xml-duplicate-fields\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view_odoo2.xml#L6 Duplicate xml field `name`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view_odoo2.xml#L19 Duplicate xml field `model`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view_odoo2.xml#L74 Duplicate xml field `arch`\n\n * xml-duplicate-record-id\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view.xml#L5 Duplicate xml record id `view_model_form`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L5 Duplicate xml record id `view_model_form2`\n\n * xml-duplicate-template-id\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L3 Duplicate xml template id `qweb/my_template1_noupdate_0`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L10 Duplicate xml template id `qweb/my_template2_noupdate_0`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L17 Duplicate xml template id `qweb/my_template3_noupdate_0`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L21 Duplicate xml template id `qweb/my_template4_noupdate_0`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L25 Duplicate xml template id `qweb/my_template5_noupdate_0`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L29 Duplicate xml template id `qweb/my_duplicate_template_noupdate_0`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L5 Duplicate xml template id `data/test_template_1_noupdate_0`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L18 Duplicate xml template id `data/test_template_2_noupdate_0`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L36 Duplicate xml template id `data/assets_backend_noupdate_0`\n\n * xml-not-valid-char-link\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L39 The resource in in src/href contains a not valid character\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L41 The resource in in src/href contains a not valid character\n\n * xml-oe-structure-missing-id\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L9 Consider removing the class `oe_structure` or adding a proper id to the tag. The id must contain `oe_structure`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L13 Consider removing the class `oe_structure` or adding a proper id to the tag. The id must contain `oe_structure`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L24 Consider removing the class `oe_structure` or adding a proper id to the tag. The id must contain `oe_structure`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L27 Consider removing the class `oe_structure` or adding a proper id to the tag. The id must contain `oe_structure`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates.xml#L30 Consider removing the class `oe_structure` or adding a proper id to the tag. The id must contain `oe_structure`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/website_templates_disable.xml#L21 Consider removing the class `oe_structure` or adding a proper id to the tag. The id must contain `oe_structure`\n\n * xml-record-missing-id\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view.xml#L25 Record has no id, add a unique one to create a new record, use an existing one to update it\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view.xml#L28 Record has no id, add a unique one to create a new record, use an existing one to update it\n\n * xml-redundant-module-name\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L15 Redundant module name `\u003crecord id=\"broken_module.view_model_form2\" /\u003e`\n\n * xml-syntax-error\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/file_no_exist.xml#L1 [Errno 2] No such file or directory: ''\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/file_no_exist.xml#L1 [Errno 2] No such file or directory: ''\n\n * xml-view-dangerous-replace-low-priority\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L25 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L37 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L47 Dangerous use of `replace` from view with priority 0 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L70 Dangerous use of `replace` from view with priority 10 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L92 Dangerous use of `replace` from view with priority 10 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view2.xml#L108 Dangerous use of `replace` from view with priority 10 \u003c 99\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/skip_xml_check_3.xml#L15 Dangerous use of `replace` from view with priority 0 \u003c 99\n\n * xml-xpath-translatable-item\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/model_view.xml#L11 Use of translatable xpath `text()`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1.xml#L39 Use of translatable xpath `text()`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1_copy.xml#L31 Use of translatable xpath `text()`\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/template1_copy2.xml#L31 Use of translatable xpath `text()`\n\n[//]: # (end-example)\n\n\n[//]: # (start-example-po)\n\n# Examples PO\n\n\n * po-duplicate-message-definition\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L17 Duplicate PO message definition `Branch` in lines 23, 29. Odoo exports these items by msgid and delete one of them. Use the `i18n_extra` folder instead of `i18n` to ignore this message.\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L35 Duplicate PO message definition `Message id toooooooooooooooooooooooooooo...` in lines 41. Odoo exports these items by msgid and delete one of them. Use the `i18n_extra` folder instead of `i18n` to ignore this message.\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L65 Duplicate PO message definition `One variable {variable1}` in lines 71. Odoo exports these items by msgid and delete one of them. Use the `i18n_extra` folder instead of `i18n` to ignore this message.\n\n * po-duplicate-model-definition\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L17 Translation for model:ir.model.fields,field_description:broken_module.field_wizard_description has been defined more than once in line(s) 29\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L35 Translation for model:ir.model.fields,field_description2:broken_module.field_wizard_description2 has been defined more than once in line(s) 41\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L59 Translation for model:ir.model.fields,field_description5:broken_module.field_wizard_description5 has been defined more than once in line(s) 65\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/i18n/fr.po#L24 Translation for model:ir.model.fields,field_description2:test_module.field_description2 has been defined more than once in line(s) 24\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/i18n/fr.po#L31 Translation for model:ir.model.fields,field_description5:test_module.field_description5 has been defined more than once in line(s) 31\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/i18n/fr.po#L38 Translation for model:ir.model.fields,field_description3:test_module.field_description3 has been defined more than once in line(s) 38\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/i18n/fr.po#L45 Translation for model:ir.model.fields,field_description4:test_module.field_description4 has been defined more than once in line(s) 45\n\n * po-pretty-format\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/ar_unicode.po Wrong formatting\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/broken_module.pot Wrong formatting\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po Wrong formatting\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/xml_semi_empty.po Wrong formatting\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/eleven_module/i18n/ugly.po Wrong formatting\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/test_module/i18n/fr.po Wrong formatting\n\n * po-python-parse-format\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L53 Translation string couldn't be parsed correctly using str.format IndexError('Replacement index 1 out of range for positional args tuple')\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L59 Translation string couldn't be parsed correctly using str.format IndexError('Replacement index 1 out of range for positional args tuple')\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L65 Translation string couldn't be parsed correctly using str.format KeyError('variable2')\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L71 Translation string couldn't be parsed correctly using str.format KeyError('variable2')\n\n * po-python-parse-printf\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L47 Translation string couldn't be parsed correctly using str%variables TypeError('not all arguments converted during string formatting')\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/es.po#L83 Translation string couldn't be parsed correctly using str%variables TypeError('%d format: a real number is required, not str')\n\n * po-requires-module\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module/i18n/broken_module.pot#L14 Translation entry requires comment `#. module: MODULE`\n\n * po-syntax-error\n\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/broken_module2/i18n/en.po#L1 Syntax error in po file\n    - https://github.com/OCA/odoo-pre-commit-hooks/blob/v0.1.1/test_repo/syntax_err_module/i18n/es.po#L19 Syntax error in po file\n\n[//]: # (end-example-po)\n\n## Licenses\n\nThis repository is licensed under [AGPL-3.0](LICENSE).\n\n----\nOCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit\norganization whose mission is to support the collaborative development of Odoo features\nand promote its widespread use.\n","funding_links":["https://github.com/sponsors/OCA"],"categories":["Linters"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOCA%2Fodoo-pre-commit-hooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOCA%2Fodoo-pre-commit-hooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOCA%2Fodoo-pre-commit-hooks/lists"}