pylint-odoo


Namepylint-odoo JSON
Version 9.2.0 PyPI version JSON
download
home_pagehttps://github.com/OCA/pylint-odoo
SummaryPylint plugin for Odoo
upload_time2024-12-20 01:40:50
maintainerNone
docs_urlNone
authorOdoo Community Association (OCA)
requires_pythonNone
licenseAPGL3
keywords
VCS
bugtrack_url
requirements packaging pylint-plugin-utils pylint validators
Travis-CI No Travis.
coveralls test coverage
            [//]: # (start-badges)

[![Build Status](https://github.com/OCA/pylint-odoo/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/OCA/pylint-odoo/actions/workflows/test.yml?query=branch%3Amain)
[![codecov](https://codecov.io/gh/OCA/pylint-odoo/branch/main/graph/badge.svg)](https://codecov.io/gh/OCA/pylint-odoo)
[![code-style-black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![version](https://img.shields.io/pypi/v/pylint-odoo.svg)](https://pypi.org/project/pylint-odoo)
[![pypi-downloads-monthly](https://img.shields.io/pypi/dm/pylint-odoo.svg?style=flat)](https://pypi.python.org/pypi/pylint-odoo)
[![supported-versions](https://img.shields.io/pypi/pyversions/pylint-odoo.svg)](https://pypi.org/project/pylint-odoo)
[![wheel](https://img.shields.io/pypi/wheel/pylint-odoo.svg)](https://pypi.org/project/pylint-odoo)
[![commits-since](https://img.shields.io/github/commits-since/OCA/pylint-odoo/v9.2.0.svg)](https://github.com/OCA/pylint-odoo/compare/v9.2.0...main)

[//]: # (end-badges)


# Pylint Odoo plugin

Enable custom checks for Odoo modules.

[//]: # (start-checks)

Short Name | Description | Code
--- | --- | ---
attribute-deprecated | attribute "%s" deprecated | W8105
attribute-string-redundant | The attribute string is redundant. String parameter equal to name of variable | W8113
bad-builtin-groupby | Used builtin function `itertools.groupby`. Prefer `odoo.tools.groupby` instead. More info about https://github.com/odoo/odoo/issues/105376 | W8155
category-allowed | Category "%s" not allowed in manifest file. | C8114
consider-merging-classes-inherited | Consider merging classes inherited to "%s" from %s. | R8180
context-overridden | Context overridden using dict. Better using kwargs `with_context(**%s)` or `with_context(key=value)` | W8121
deprecated-odoo-model-method | %s has been deprecated by Odoo. Please look for alternatives. | W8160
development-status-allowed | Manifest key development_status "%s" not allowed. Use one of: %s. | C8111
except-pass | pass into block except. If you really need to use the pass consider logging that exception | W8138
external-request-timeout | Use of external request method `%s` without timeout. It could wait for a long time | E8106
invalid-commit | Use of cr.commit() directly - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#never-commit-the-transaction | E8102
license-allowed | License "%s" not allowed in manifest file. | C8105
manifest-author-string | The author key in the manifest file must be a string (with comma separated values) | E8101
manifest-behind-migrations | Manifest version (%s) is lower than migration scripts (%s) | E8145
manifest-data-duplicated | The file "%s" is duplicated in lines %s from manifest key "%s" | W8125
manifest-deprecated-key | Deprecated key "%s" in manifest file | C8103
manifest-maintainers-list | The maintainers key in the manifest file must be a list of strings | E8104
manifest-required-author | One of the following authors must be present in manifest: %s | C8101
manifest-required-key | Missing required key "%s" in manifest file | C8102
manifest-version-format | Wrong Version Format "%s" in manifest file. Regex to match: "%s" | C8106
method-compute | Name of compute method should start with "_compute_" | C8108
method-inverse | Name of inverse method should start with "_inverse_" | C8110
method-required-super | Missing `super` call in "%s" method. | W8106
method-search | Name of search method should start with "_search_" | C8109
missing-readme | Missing ./README.rst file. Template here: %s | C8112
missing-return | Missing `return` (`super` is used) in method %s. | W8110
no-raise-unlink | No exceptions should be raised inside unlink() functions | E8140
no-wizard-in-models | No wizard class for model directory. See the complete structure https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#complete-structure | C8113
no-write-in-compute | Compute method calling `write`. Use `update` instead. | E8135
odoo-addons-relative-import | Same Odoo module absolute import. You should use relative import with "." instead of "odoo.addons.%s" | W8150
odoo-exception-warning | `odoo.exceptions.Warning` is a deprecated alias to `odoo.exceptions.UserError` use `from odoo.exceptions import UserError` | R8101
print-used | Print used. Use `logger` instead. | W8116
prohibited-method-override | Prohibited override of "%s" method. | W8107
renamed-field-parameter | Field parameter "%s" is no longer supported. Use "%s" instead. | W8111
resource-not-exist | File "%s": "%s" not found. | F8101
sql-injection | SQL injection risk. Use parameters if you can. - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#no-sql-injection | E8103
test-folder-imported | Test folder imported in module %s | E8130
translation-contains-variable | Translatable term in "%s" contains variables. Use %s instead | W8115
translation-field | Translation method _("string") in fields is not necessary. | W8103
translation-format-interpolation | Use %s formatting in odoo._ functions | W8302
translation-format-truncated | Logging format string ends in middle of conversion specifier | E8301
translation-fstring-interpolation | Use %s formatting in odoo._ functions | W8303
translation-not-lazy | Use %s formatting in odoo._ functions | W8301
translation-positional-used | Translation method _(%s) is using positional string printf formatting with multiple arguments. Use named placeholder `_("%%(placeholder)s")` instead. | W8120
translation-required | String parameter on "%s" requires translation. Use %s_(%s) | C8107
translation-too-few-args | Not enough arguments for odoo._ format string | E8306
translation-too-many-args | Too many arguments for odoo._ format string | E8305
translation-unsupported-format | Unsupported odoo._ format character %r (%#02x) at index %d | E8300
use-vim-comment | Use of vim comment | W8202
website-manifest-key-not-valid-uri | Website "%s" in manifest key is not a valid URI | W8114


[//]: # (end-checks)


# Install

You do not need to install manually if you use pre-commit-config

But if you even need to install it

    pip install pylint-odoo

# Usage pre-commit-config.yaml

Add to your ".pre-commit-config.yaml" configuration file the following input


```yaml
    - repo: https://github.com/OCA/pylint-odoo
        rev: v9.2.0 # may be a tag or commit hash
        hooks:
        # Add to your .pylintrc file:
        # [MASTER]
        # load-plugins=pylint_odoo
        - id: pylint_odoo
```

# Usage

    pylint --load-plugins=pylint_odoo -e odoolint path/to/test

or use configuration file you can generate the OCA one using the following template repository:

    https://github.com/OCA/oca-addons-repo-template

Then running

    pylint --rcfile=.pylintrc path/to/test


Example to test only pylint_odoo checks:

    pylint --load-plugins=pylint_odoo -d all -e odoolint {ADDONS-PATH}/*

There are checks only valid for a particular Odoo version
To know what version of odoo are you running pylint needs the parameter

    pylint --load-plugins=pylint_odoo --valid-odoo-versions={YOUR_ODOO_VERSION}

with particular odoo version e.g. `"16.0"`

Checks valid only for odoo >= 14.0

    translation-format-interpolation
    translation-format-truncated
    translation-fstring-interpolation
    translation-not-lazy
    translation-too-few-args
    translation-too-many-args
    translation-unsupported-format

Checks valid only for odoo <= 13.0

    translation-contains-variable


[//]: # (start-example)

# Examples


 * attribute-deprecated

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L105 attribute "_columns" deprecated
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L106 attribute "_defaults" deprecated
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L107 attribute "length" deprecated

 * attribute-string-redundant

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L161 The attribute string is redundant. String parameter equal to name of variable
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L209 The attribute string is redundant. String parameter equal to name of variable
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L219 The attribute string is redundant. String parameter equal to name of variable

 * bad-builtin-groupby

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L110 Used builtin function `itertools.groupby`. Prefer `odoo.tools.groupby` instead. More info about https://github.com/odoo/odoo/issues/105376
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L111 Used builtin function `itertools.groupby`. Prefer `odoo.tools.groupby` instead. More info about https://github.com/odoo/odoo/issues/105376

 * consider-merging-classes-inherited

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/model_inhe2.py#L11 Consider merging classes inherited to "res.company" from testing/resources/test_repo/broken_module/models/model_inhe1.py:8:4, testing/resources/test_repo/broken_module/models/model_inhe2.py:7:4.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/model_inhe2.py#L19 Consider merging classes inherited to "res.partner" from testing/resources/test_repo/broken_module/models/model_inhe2.py:15:4.

 * context-overridden

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L192 Context overridden using dict. Better using kwargs `with_context(**{'overwrite_context': True})` or `with_context(key=value)`
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L194 Context overridden using dict. Better using kwargs `with_context(**ctx)` or `with_context(key=value)`
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L196 Context overridden using dict. Better using kwargs `with_context(**ctx2)` or `with_context(key=value)`

 * deprecated-odoo-model-method

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L91 fields_view_get has been deprecated by Odoo. Please look for alternatives.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/eleven_module/models.py#L17 fields_view_get has been deprecated by Odoo. Please look for alternatives.

 * development-status-allowed

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__openerp__.py#L6 Manifest key development_status "InvalidDevStatus" not allowed. Use one of: Alpha, Beta, Mature, Production/Stable.

 * except-pass

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/except_pass.py#L11 pass into block except. If you really need to use the pass consider logging that exception
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/except_pass.py#L53 pass into block except. If you really need to use the pass consider logging that exception
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/except_pass.py#L62 pass into block except. If you really need to use the pass consider logging that exception

 * external-request-timeout

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L690 Use of external request method `requests.delete` without timeout. It could wait for a long time
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L691 Use of external request method `requests.get` without timeout. It could wait for a long time
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L692 Use of external request method `requests.head` without timeout. It could wait for a long time

 * invalid-commit

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L409 Use of cr.commit() directly - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#never-commit-the-transaction
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L410 Use of cr.commit() directly - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#never-commit-the-transaction
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L411 Use of cr.commit() directly - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#never-commit-the-transaction

 * license-allowed

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__openerp__.py#L4 License "unknow license" not allowed in manifest file.

 * manifest-author-string

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module3/__openerp__.py#L5 The author key in the manifest file must be a string (with comma separated values)

 * manifest-behind-migrations

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__openerp__.py#L2 Manifest version (1.0) is lower than migration scripts (2.0)
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/eleven_module/__manifest__.py#L1 Manifest version (11.0.1.0.0) is lower than migration scripts (11.0.1.0.1)
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/__openerp__.py#L2 Manifest version (10.0.1.0.0) is lower than migration scripts (11.0.1.0.0)

 * manifest-data-duplicated

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L18 The file "duplicated.xml" is duplicated in lines 19 from manifest key "data"

 * manifest-deprecated-key

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L7 Deprecated key "description" in manifest file

 * manifest-maintainers-list

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module3/__openerp__.py#L6 The maintainers key in the manifest file must be a list of strings

 * manifest-required-author

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L5 One of the following authors must be present in manifest: 'Odoo Community Association (OCA)'

 * manifest-required-key

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L2 Missing required key "license" in manifest file

 * manifest-version-format

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L8 Wrong Version Format "8_0.1.0.0" in manifest file. Regex to match: "(4\.2|5\.0|6\.0|6\.1|7\.0|8\.0|9\.0|10\.0|11\.0|12\.0|13\.0|14\.0|15\.0|16\.0|17\.0|18\.0)\.\d+\.\d+\.\d+$"
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__openerp__.py#L8 Wrong Version Format "1.0" in manifest file. Regex to match: "(4\.2|5\.0|6\.0|6\.1|7\.0|8\.0|9\.0|10\.0|11\.0|12\.0|13\.0|14\.0|15\.0|16\.0|17\.0|18\.0)\.\d+\.\d+\.\d+$"
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module3/__openerp__.py#L8 Wrong Version Format "8.0.1.0.0foo" in manifest file. Regex to match: "(4\.2|5\.0|6\.0|6\.1|7\.0|8\.0|9\.0|10\.0|11\.0|12\.0|13\.0|14\.0|15\.0|16\.0|17\.0|18\.0)\.\d+\.\d+\.\d+$"

 * method-compute

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L155 Name of compute method should start with "_compute_"

 * method-inverse

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L157 Name of inverse method should start with "_inverse_"

 * method-required-super

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L40 Missing `super` call in "copy" method.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L44 Missing `super` call in "create" method.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L48 Missing `super` call in "write" method.

 * method-search

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L156 Name of search method should start with "_search_"

 * missing-readme

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L2 Missing ./README.rst file. Template here: https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst

 * missing-return

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L24 Missing `return` (`super` is used) in method inherited_method.

 * no-raise-unlink

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/res_partner_unlink.py#L9 No exceptions should be raised inside unlink() functions
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/sale_order_unlink.py#L14 No exceptions should be raised inside unlink() functions

 * no-wizard-in-models

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L829 No wizard class for model directory. See the complete structure https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#complete-structure

 * no-write-in-compute

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L114 Compute method calling `write`. Use `update` instead.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L116 Compute method calling `write`. Use `update` instead.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L119 Compute method calling `write`. Use `update` instead.

 * odoo-addons-relative-import

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L49 Same Odoo module absolute import. You should use relative import with "." instead of "odoo.addons.broken_module"
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L50 Same Odoo module absolute import. You should use relative import with "." instead of "odoo.addons.broken_module"
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L51 Same Odoo module absolute import. You should use relative import with "." instead of "odoo.addons.broken_module"

 * odoo-exception-warning

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L10 `odoo.exceptions.Warning` is a deprecated alias to `odoo.exceptions.UserError` use `from odoo.exceptions import UserError`
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L11 `odoo.exceptions.Warning` is a deprecated alias to `odoo.exceptions.UserError` use `from odoo.exceptions import UserError`
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L8 `odoo.exceptions.Warning` is a deprecated alias to `odoo.exceptions.UserError` use `from odoo.exceptions import UserError`

 * print-used

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/except_pass.py#L20 Print used. Use `logger` instead.

 * renamed-field-parameter

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L209 Field parameter "digits_compute" is no longer supported. Use "digits" instead.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L209 Field parameter "select" is no longer supported. Use "index" instead.

 * resource-not-exist

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L14 File "data": "file_no_exist.xml" not found.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L18 File "data": "duplicated.xml" not found.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L23 File "demo": "file_no_exist.xml" not found.

 * sql-injection

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L576 SQL injection risk. Use parameters if you can. - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#no-sql-injection
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L578 SQL injection risk. Use parameters if you can. - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#no-sql-injection
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L580 SQL injection risk. Use parameters if you can. - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#no-sql-injection

 * test-folder-imported

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__init__.py#L5 Test folder imported in module broken_module
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__init__.py#L3 Test folder imported in module broken_module2
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/eleven_module/__init__.py#L3 Test folder imported in module eleven_module

 * translation-contains-variable

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L371 Translatable term in "'Variable not translatable: %s' % variable1" contains variables. Use _('Variable not translatable: %s') % variable1 instead
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L372 Translatable term in "'Variables not translatable: %s, %s' % (variable1, variable2)" contains variables. Use _('Variables not translatable: %s, %s') % (variable1, variable2) instead
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L374 Translatable term in "'Variable not translatable: %s' % variable1" contains variables. Use _('Variable not translatable: %s') % variable1 instead

 * translation-field

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L143 Translation method _("string") in fields is not necessary.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L153 Translation method _("string") in fields is not necessary.

 * translation-format-interpolation

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L380 Use lazy % or .format() or % formatting in odoo._ functions
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L381 Use lazy % or .format() or % formatting in odoo._ functions
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L473 Use lazy % or .format() or % formatting in odoo._ functions

 * translation-format-truncated

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L484 Logging format string ends in middle of conversion specifier

 * translation-fstring-interpolation

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L482 Use lazy % or .format() or % formatting in odoo._ functions

 * translation-not-lazy

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L345 Use lazy % or .format() or % formatting in odoo._ functions
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L346 Use lazy % or .format() or % formatting in odoo._ functions
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L348 Use lazy % or .format() or % formatting in odoo._ functions

 * translation-positional-used

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L372 Translation method _('Variables not translatable: %s, %s' % (variable1, variable2)) is using positional string printf formatting with multiple arguments. Use named placeholder `_("%(placeholder)s")` instead.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L375 Translation method _('Variables not translatable: %s %s' % (variable1, variable2)) is using positional string printf formatting with multiple arguments. Use named placeholder `_("%(placeholder)s")` instead.
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L378 Translation method _('Variables not translatable: %s, %s' % (variable1, variable2)) is using positional string printf formatting with multiple arguments. Use named placeholder `_("%(placeholder)s")` instead.

 * translation-required

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L322 String parameter on "message_post" requires translation. Use body=_('Body not translatable %s')
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L322 String parameter on "message_post" requires translation. Use subject=_('Subject not translatable')
    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L324 String parameter on "message_post" requires translation. Use body=_('Body not translatable {}')

 * translation-too-few-args

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L480 Not enough arguments for odoo._ format string

 * translation-too-many-args

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L485 Too many arguments for odoo._ format string

 * translation-unsupported-format

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L483 Unsupported odoo._ format character 'y' (0x79) at index 30

 * use-vim-comment

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L108 Use of vim comment

 * website-manifest-key-not-valid-uri

    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module3/__openerp__.py#L7 Website "htt://odoo-community.com" in manifest key is not a valid URI

[//]: # (end-example)

# Development

To run all the tests run:

    tox

Use extra parameters to change the test behaviour

e.g. particular python version

    tox -e py310

e.g. particular unittest method

    tox -e py310 -- -k test_20_expected_errors

e.g. all the tests at the same time in parallel

    tox -p auto

## Licenses

This repository is licensed under [AGPL-3.0](LICENSE).

----
OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit
organization whose mission is to support the collaborative development of Odoo features
and promote its widespread use.

CHANGES
=======

v9.2.0
------

* [REF] tox: Using py3.13 for update-readme (#511)
* [FIX] pylint\_odoo: Fix parsing dictionary from manifest (#510)
* [FIX] translation-not-lazy: Fix AstroidSyntaxError (#509)
* [FIX] pylint\_odoo: Fix IndexError corner case (#508)
* [FIX] requirements.txt: Add missing 'packaging' package (#507)
* [REF] github: Updated codecov action version (#506)
* [REF] pylint\_odoo: Avoid reassigning self.linter.config (#505)
* [REF] tests: Detecting duplicated lines occurrences (#504)
* [REF] tests: Test "jobs" counting lines from the output (#503)
* [REF] tox: Add py3.13 environment
* [IMP] manifest-behind-migrations: Improve detection of the check only using odoo manifest file parsing
* [REF] pylint\_odoo: Enabling python version 3.13 compatibility (#501)

v9.1.4
------

* [FIX] pylint\_odoo: Fix walk-up normalizing windows OS separator // vs \\
* [IMP] pylint\_odoo: Supporting multi-jobs
* [REF] coverage: Remove "dynamic\_context=test\_function"
* [REM] pylint\_odoo: Remove requirements/requirements.txt from build

v9.1.3
------

* [REF] pylint-odoo: Add support for odoo 18.0 (#497)
* [REF] readme: translation-positional-used desc. (#496)
* [REF] setup: Add setuptools deps to build
* [REF] github-action: Add compatibility with MacOSX M1

v9.1.2
------

* [REF] setup: Add py3.12 support info (#490)

v9.1.1
------

* [REF] update-readme
* [ADD] prohibited-method-override: New check to avoid overriding methods (#485)
* [REF] .github: Update actions cache and fix pre-commit cache path (#489)

v9.1.0
------

* [REF] requirements: Update packages version (#488)

v9.0.6
------

* [REF] requirements: Compatibility with validators 0.22

v9.0.5
------

* [FIX] odoo-addons-relative-import: exclude migrations (#481)

v9.0.4
------

* [REF] readme: Update readme using 'tox -e update-readme'

v9.0.3
------

* [ADD] manifest-behind-migrations: check manifest version >= migrations  (#475)

v9.0.2
------

* [REF] Add support to Odoo v17.0 (#477)

v9.0.1
------

* [ADD] category-allowed: Add check to enforce the allowed Odoo modules categories (#459)

v9.0.0
------

* [REF]: update to pylint 3.0.0, drop support for py3.7 (#474)

v8.0.22
-------

* [REF] setup.py: Filter out "bump version" from CHANGELOG (#472)

v8.0.21
-------

* [ADD] deprecated-odoo-model-method: New check to detect deprecated method for each Odoo version (#470)
* [REF] ci: run only one tox env per job (#468)

v8.0.20
-------

* [REF] tox: Build ChangeLog again (#466)
* [ADD] no-raise-unlink: Check if there is raise sentence in unlink method  (#458)
* [FIX] correct README pre-commit usage (#463)

v8.0.19
-------

* [FIX] pre-commit-vauxoo: Fix isort hook - RuntimeError The Poetry configuration is invalid (#456)

v8.0.18
-------

* [FIX] Readme: new CLI command format --valid-odoo-version (#453)
* [REF] ci: Update gh actions .yml and tox.ini (#451)
* [FIX] pre-commit-config: Update flake8 repo (#446)

v8.0.17
-------

* [REM] Remove unused eslintrc file
* [REF] tests: Autogenerate readme with examples from test\_repo
* [REF] tox, pre-commit, readme: Small changes (#443)

v8.0.16
-------

* [ADD] bad-builtin-groupby: Prefer \`odoo.tools.groupby\` instead (#442)

v8.0.15
-------

* [FIX] setup: Add missing "requirements.txt" file to package (#441)

v8.0.14
-------

* [REF] no-wizard-in-models: Add exception for "res.config\*" inherited classes (#439)
* [ADD] no-wizard-in-models: Add new check for avoid adding wizards class in models directory (#437)

v8.0.13
-------

* [REF] consider-merging-classes-inherited: Improve message with relpath + column number (#436)

v8.0.12
-------

* [FIX] consider-merging-classes-inherited: Fix TODO Consider case where \_inherit is assigned before to \_name (#435)
* [FIX] custom\_logging: Fix AstroidSyntaxError using only binop related to '%' (#434)

v8.0.11
-------

* [REF] manifest-data-duplicated, resource-not-exist: Improve line number (lineno) of the duplicated node (#433)

v8.0.10
-------

* [FIX] pylint\_odoo: Using node.op instead of hardcoded % (#432)

v8.0.9
------

* [FIX] pylint\_odoo: "ImportError: No module named 'packaging'" (#431)
* [REF] readme: Add monthly downloads from pypi badge (#430)
* [REF] pylint\_odoo: Using new typing astroid.nodes instead of astroid.Class (#429)

v8.0.8
------

* [ADD] no-write-in-compute: Don't write on a computed field  (#427)

v8.0.7
------

* [REF] pylint\_odoo: Replace options name from "\_" to "-" because (#426)

v8.0.6
------

* [REF] README: Auto update README (#425)
* [REF] pylint\_odoo: Process max\_odoo\_version and min\_odoo\_version for checks (#424)
* [ADD] translation-\*: Add translation-\* checks with the same "logging" checks but for "odoo.\_" translate method (#423)
* [REF] CI: Enable py3.11 (#420)

v8.0.5
------

* [REF] tox: Enable lints from environment list (#418)
* [REF] setup: Match requires-python = ">=3.7.2" from pylint (#417)
* [REF] CI: Enable tox with parallels + codecov compatibility (#415)
* [REF] augmentations: Use message code instead of message id for supression of codes (#414)

v8.0.4
------

* [REF] README: Auto-update Using pylint\_odoo.messages2md()
* [REM] class-camelcase: Replaced by invalid-name (#413)
* [REF] tests: Remove 'score' (#412)
* [REF] openerp-exception-warning: Change to odoo-exception-warning (#411)
* [REF] pylint\_odoo: Sort items for utils.only\_required\_for\_messages (#410)
* [IMP] print-used: Speed-up 'print-used' check avoid inferring (#409)
* [REM] eval-referenced: Replaced by eval-used check from pylint (#408)
* [REF] pylint\_odoo: visit\_dict - Use the dictionary key node (#407)

v8.0.3
------

* [REF] Update "visit\_\*" methods availables and order code and update values (#406)
* [ADD] missing-readme: Add again missing-readme (#405)
* [REF] pylint\_odoo: Clean code (#404)
* [REF] pylint\_odoo: Clean code (#402)

v8.0.2
------

* [REF] codecov, README: Enable codecov again and fix URLs from README (#401)

v8.0.1
------

* [REF] readme: Migrate from RST to MARKDOWN format (#400)
* [REF] pylint\_odoo: Small changes for CI, lints, pytest and code (#399)
* [REF] requirements: Update pylint dependency (#398)
* [IMP] pylint\_odoo: black, isort, prettier (#397)

v8.0.0
------

* [IMP] pylint\_odoo: apocalintSYS - Full refactoring - v8.0.0 (#396)

7.0.4
-----

* [REF] translation-positional-used: Consider srt.format('{} {}') cases (#395)

7.0.3
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [REF] CI: Comment py3.7 travis with weird error unrelated
* [ADD] manifest-data-duplicated: Detect duplicated data file

7.0.2
-----

* [FIX] attribute-string-redundant: Only when field string is the same as title() format (#392)

7.0.1
-----

* [REF] pylint\_odoo: Update supported Odoo version 16.0 (#391)
* [REF] CI: Use py3.10 and 3.11 environments for travis (#389)
* [REF] tests: Add unittest to check only one check enabled (#385)

7.0.0
-----

* [REF] external-request-timeout: Add ftplib.FTP method (#388)
* Revert "[PERF] \*: Checkers only run when enabled #372 (#376)" (#386)
* [PERF] \*: Checkers only run when enabled #372 (#376)
* [FIX] missing-import-error: add xlrd to whitelist (#379)

6.2.0
-----

* [IMP] duplicate-po-message-definition: Detecting duplicated only with msgid (#374)
* [IMP] test-folder-imported: Consider 'from . import test' missing case (#373)

6.1.0
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [ADD] external-request-timeout: It could wait for a long time (#370)
* [FIX] .travis.yml: npm v18.0.0 is not compatible with ubuntu used from travis (#371)
* [REF] README: Use new travis URL (#369)

6.0.0
-----

* [ADD] pre-commit-hooks: Add pylint\_odoo hook to be used from pre-commit.yaml directly (#368)
* [REF] requirements: Bump pylint package from 2.11.1 to 2.13.5 for py3.x (#367)
* [FIX] CI: Fix pluggy error on py3.7 and running lint only in one build (#366)
* [IMP] sql-injection: Detect possible sql injections when using f-strings (#364)
* [FIX] Pinned lazy-object-proxy for Python 2.7 (#365)
* [FIX] missing-return: Incorrect check for tearDownClass (#362)

5.0.5
-----

* [FIX] OdooChecker: Discard migrations folder as odoo main module (#358)

5.0.4
-----

* Revert "[REVERT] requirements: Using pylint<2.11.0 because issue 5096 (#355)"

5.0.3
-----

* [REVERT] requirements: Using pylint<2.11.0 because issue 5096 (#355)

5.0.2
-----

* [REF] requirements: Upgrade pylint version 2.11.1 (#354)

5.0.1
-----

* [REF] manifest-version-format: Add new valid odoo v15.0 (#353)
* [REF] sql-injection: No sql-injection using constants (#351)
* [FIX] sql-injection: AttributeError: 'NoneType' object has no attribute 'parent' (#350)

5.0.0
-----

* [REF] requirements: Upgrade pylint version (#349)

4.0.0
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [ADD] dangerous-qweb-replace-wo-priority: Consider qweb view templates (#347)
* [ADD] context-overridden: Better using kwargs instead of dictionary (#256)
* [REF] invalid-name, unused-argument: Suppress check for migrations path (#348)

3.10.0
------

* [FIX] sql-injection: Fix false positives (#344)
* [FIX] pylint\_odoo: Fix manifest\_version\_format option ignored (#346)

3.9.0
-----

* [FIX] translation-required: Skip tests folder (#345)
* [FIX] xml-syntax-error: Fix crash if a xml has syntax errors (#343)
* [REF] pylint-odoo: Add .pylintrc example (#325)
* [FIX] attribute-deprecated: Check only "Model" class' attributes (#342)
* [FIX] attribute-string-redundant: "string" of related field is taken from the referenced one (#341)
* [FIX] file-not-used: Fix false positives on Windows (#335)

3.8.0
-----

* [FIX] Add pbr to requirements (#328)
* [REF] requirements: upgrade pylint version (#320)

3.7.1
-----

* [FIX] test-folder-imported: Support all import styles (#315)
* [FIX] misc.py: Properly support python namespace package when detecting the odoo addon directory (#317)

3.7.0
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [ADD] translation-positional-used: New check to valid the allow change the order of string formatting (#305)
* [ADD] str-format-used: Check if str.format was used in translated string (#304)
* [ADD] test-folder-imported: check if tests folder is imported in init file (#310)

3.6.0
-----

* [FIX] requirements: fix dependencies break with pip 20.3 Fix #306 (#313)
* [ADD] add compatibility to v14.0 (#312)

3.5.1
-----

* [REF] .travis.yml: Enable condition to deploy pypi
* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [FIX] dangerous-view-replace-wo-priority: check all child tags with replace (#309)
* [ADD] pylint-odoo: add new check to maintainers key in manifest must be a list of str (#308)
* [REF] development-status-allowed: Explicitly report possible values (#301)
* [REF]  odoo-addons-relative-import: does not apply in tests/ directory (#307)
* [REF] CI: Enable py3.8 and py3.9 (#294)

3.5.0
-----

* [FIX] messages2rst: Compatible with more than 3 message items
* [REF] no-utf8-coding-comment,unnecessary-utf8-coding-comment: Using python version to enable/disable them (#292)
* [REF] po-msgstr-variables: Check if there is missing 'module:' comment (#291)

3.4.0
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* Fixing pragma: no cover position
* [ADD] po-msgstr-variables: Check if string translated can be parsed correctly
* [ADD] duplicate-po-message-definition, po-syntax-error: Enable PO checks

3.3.2
-----

* [REF] missing-manifest-dependency: Add openupgradelib as a whitelist. (#288)
* [FIX] sql-injection: Consider valid arguments built with psycopg2.sql

3.3.1
-----

* [REF] missing-import-error: Add new packages for Odoo v13.0

3.3.0
-----

* [REF] requirements.txt: Update packages version (#285)

3.2.0
-----

* [FIX] get\_manifest\_file: Get manifest file correctly
* [FIX] Visit module: manage odoo subdirectories Better way to check whether a path is a path of a subdirectoy of a Odoo module. Before, '/a/b/cc/d' was considered as a subdirectoy of '/a/b/c' because '/a/b/c' in '/a/b/cc/d' == True

3.1.0
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [FIX] rst\_lint: Using UTF-8 encoding by default (#272)
* [ADD] Possibility of package name include dots
* [REF] .travis.yml: Using py3.7 stable instead of dev (#271)
* Improve incoherent-interpreter-exec-perm message
* Fix incompatibility with isort configuration file
* [FIX] rst-syntax-error: Using a 0 by default if line None is returned

3.0.3
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* Revert "[ADD] method-default prefix" (#254)

3.0.2
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [REF] CI: Fixing flake8, tests and clean requirements
* [REF] pylint\_odoo: Supports odoo 13.0
* [ADD] method-default prefix
* [FIX] .travis.yml: Upgrade nvm version supported for eslint
* Allow console statements
* [ADD] print-used: Use \_logger instead of print (#241)

3.0.1
-----

* [FIX] AttributeError: 'MessagesStore' object has no attribute '\_messages' related to https://github.com/PyCQA/pylint/commit/75cecdb1b88cc759223e83fd325aeafd09fec37e
* [IMP] added support Pylint 2.3.0 and Astroid 2.2.0

3.0.0
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [REF] sql-injection: Test private attributes (#226)
* [REF] tox: Upgrade new pylint for py3 (#215)

2.0.2
-----

* [REF] manifest-required-authors: Support old deprecated parameter

2.0.1
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [DEL] require-jsdoc, keep require-valid-jsdoc
* [FIX]change the location of Guidelines URL
* [ADD] development-status-allowed: New check to verity valid development status Fix https://github.com/OCA/pylint-odoo/issues/199
* [REF] missing-import-error: Check enabled just for odoo <= 11.0
* Add fuzzy to ES globals
* Allow usage of \`undefined\` (#214)
* Jslint jsdoc relax (#209)
* [REF] pylint-odoo: Compatibility with python3.7 (#205)
* [IMP] file-not-used: Ignore unused files into the migrations directory (#213)
* [IMP] manifest-required-author: Allow multiple possible required authors
* [FIX] missing-manifest-dependency: Exclude tests directory
* [FIX] manifest-version-format: Don't ignore valid Odoo versions
* [FIX] requirements: Include "six" package (#207)

2.0.0
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [DOC] README.rst: Adding documentation to the way to skip one check based on the Odoo Version
* [REF] requirements: Bump requirements version
* Add \_register\_hook in "no missing return" methods (#201)
* [ADD] Add new lint to detect variables within translatable strings (#198)
* [FIX] translation-required: Fix some false positives (#196)
* [REF] .travis.yml: Allow both W503 and W504 formats (#197)

1.9.5
-----

* [REF] .travis.yml: Just deploy a env and avoid cleanup before to deploy

1.9.4
-----

* [REF] pylint\_odoo: Increase coverage test
* [FIX] README.rst: Fix syntax and run check
* [FIX] don't complain about string attribute nodes in translation check
* [REF] javascript-lint: Allow to use moment (#189)
* Allow short ternary expressions
* [IMP] ESLint usability boost (#185)
* [REF] javascript-lint: Emit a message if there is internal error
* [REF] jslintrc: Use of property style for dot-location
* [REF] The method message\_post need the subject and body be translatable
* [FIX] duplicate-xml-fields: Now consider as duplicated using domain and context values (#172)

1.9.3
-----

* [REF] pylint\_odoo: Use check-name instead of check-code for add\_message method (#174)
* [FIX] pylint\_odoo: Change the number of the appearances of the check (#173)
* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [ADD] unnecessary-utf8-coding-comment: The utf8 comment is unnecessary if the version of odoo is 11.0 because use py3 (#168)
* [FIX] missing-external-dependency: Skip relative imports that starts with dot (#171)
* [ADD] character-not-valid-in-resource-link: To valid the character '?/#' into the in src/href link (#163)
* [REF] javascript-lint: Disable comma-dangle and prefer-rest-params checks
* [REF] .travis.yml: Freeze flake8 version In order to avoid false red if a new check is added
* [ADD] Add licence OEEL-1 into licence-allowed for module depending on Enterprise (#165)
* [ADD] xml-deprecated-qweb-directive: Deprecated QWeb directives (#157)
* [FIX] Add 11.0 as valid Odoo version
* [FIX] unicode error removing decode and use bytes with bytes  - Open file with rb and use bytes with bytes  - Use xml\_special\_char.xml: Use a special char to reproduce a decode  error

1.8.2
-----

* [REF] pylint\_odoo: Support python3

1.8.1
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [FIX] deprecated-data-xml-node: Fix false negative with data/record + record for xml nodes (#156)
* [FIX] disable xml check: get method called when the method is not called directly (#154)
* [FIX] misc: TypeError argument of type 'NoneType' is not iterable (#150)
* [FIX] manifest-version-format: Use real dot from regex (#153)
* [FIX] manifest-version-format: Adds matching for string end to default manifest version format (#155)
* [ADD] xml-deprecated-tree-attribute: Implements check for deprecated tree attributes (#149)
* [REF] jslintrc: Disable prefer-spread
* [IMP] missing-return: Skip missing return if function is a generator (#147)
* [IMP] missing-return/required-super: setUpClass (#143)
* [IMP] missing-readme: Check for other supported file names (#140)
* [REF] jslintrc: Disable prefer-reflect error (#141)
* [REF] file-not-used: Consider as used the files referenced from report xml files (#138)

1.8.0
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [REF] cache: Cache other extension files just if is a odoo module (#142)
* [IMP] pylint\_odoo: Skip pylint check on one xml file (#135)
* [ADD] website-manifest-key-not-valid-uri: For validate if the website into manifest is valid URI (#136)

1.7.0
-----

* [REF] README: Auto-update Using pylint\_odoo.messages2rst()
* [ADD] pylint\_odoo: Adding new check resource-not-exist (#130)
* [FIX] fields: Validate a assign directly from root class (#116)
* [FIX] jslintrc: Remove deprecated ecmaFeatures key
* [ADD] pylint\_odoo: Adding check detected <data> tag inside <odoo> tag and show warning  (#129)
* [REF] Fix typo
* [REF] jslint: Enable no-comma-dangle check
* [IMP] sql-injection: support new cases and ignore some false positives (#122)
* [FIX] xml-attribute-translatable: Skip if version is different 8.0 (#117)
* [FIX] deprecated-module: Consider 'from openerp.osv.expression'

1.6.0
-----

* [REF] README: Auto-update Using the following script: 'PYTHONPATH=~/odoo/pylint-odoo python -c "import pylint\_odoo;print pylint\_odoo.messages2rst()"'
* [REF] .travis.yml: Renamed flake8 error from F999 to F601 (#115)
* [FIX] Check file-not-used: Skip tests folders (#114)
* [FIX] incoherent-interpreter-exec-perm: Skip check for windows (#113)
* [ADD] except-pass: Emit message If a except:pass is used (#107)
* [FIX] attribute-string-redundant: Add "isinstance" validation for nodes
* [ADD] attribute-string-redundant: Check if "string" parameter is equal to variable name (#100)
* [ADD] renamed-field-parameter: Detect deprecated field values (digits\_compute, select) (#99)
* [REF] javascript-lint: Use eslint instead of jshint (#97)
* [ADD] xml-attribute-translatable: Check XML attribute without translation parameter (#105)
* [REF] incoherent-interpreter-exec-perm: Better message (#106)
* [IMP] pylint-odoo: Adding support for parameters --ignore and --ignore-patterns (#103)
* [ADD] eval-referenced: Detects if a "eval" is referenced (without call it) (#101)
* [FIX] duplicate-xml-fields: False red using 2 tree sub-views \*2M fields (#96)
* [FIX] method-NAME: Fix if value is not a string
* [REF] misc: Remove deprecated method
* [FIX] test: Never use global into test

1.5.0
-----

* [REF] duplicate-xml-record-id: Get xml section from manifest to skip different origin (#89)
* [FIX] method-NAME: Fix case compute=None Fix OCA/pylint-odoo#88

1.4.0
-----

* [REF] attribute-deprecated: Deprecate length class attribute (#86)
* [ADD] missing-return If you use call a \`super\` method then you will need return the original value. If you want overwrite a original method then you need add documentation of why and add a \`pylint: disable=missing-return\`
* [FIX] Whitelist \`anybox.testing.openerp\` \* Add \`anybox.testing.openerp\` - Fixes #81
* [FIX] manifest-version-format: Fix regex to use explicit dot instead of any char
* [FIX] manifest-version-format: Support -e manifest-version-format only
* [FIX] missing-import-error: Updating libraries used from requirements.txt but not imported or nested imported from odoo
* [IMP] manifest-version-format: Add valid\_odoo\_versions parameter to force a valid version of odoo in the manifest version
* [REF] missing-import-error: Skip test file since these files are loaded only when running tests and in such a case your module and their external dependencies are installed
* [ADD] Support for 10.0 manifest name
* [REF] requirements: Update developer version of pylint and astroid

1.3.5
-----

* Adding isort dependency (#70)

1.3.4
-----

* [REF] README: Update messages list

1.3.3
-----

* [ADD] missing-import-error, missing-manifest-dependency
* [FIX] rst-syntax-error: Skip unknown roles
* [FIX] rst-syntax-error: Skip unknown directives
* [REF] global refactoring: better message output and use real file and line number in non-py files (#62)
* [REF] README: Add examples special folder
* [REF] checkers: Skip example folder to check lints

1.3.2
-----

* [REF] README: Update messages list

1.3.1
-----

* [ADD] file-not-used: Emit message if there are xml, yml, sql or csv files but It isn't referenced from manifest (#53)
* [ADD] dangerous-view-replace-wo-priority: Check dangerous view with replace but defined with low priority (#55)
* [ADD] old-api7-method-defined: Emit message if the method defined have (self, cr, uid) (#52)
* [ADD] odoo-addons-relative-import (#56)
* [REF] tox: Freeze stable sha pylint20
* [FIX] consider-merging-classes-inherited: Skip check if has '\_name' and fix when you use '\_inherit' name out of class attribute . Add more tests
* [REF] missing-newline-extrafiles: Skip lib folder
* [FIX] consider-merging-classes-inherited: Fix leaving module isn't a good idea. Better close method
* [IMP] consider-merging-classes-inherited: Support disable comment
* [REF] consider-merging-classes-inherited: Use assign node and better message
* [ADD] consider-merging-classes-inherited
* [REF] Increase performance
* [IMP] pylint\_odoo: Enable cProfile print stats
* [IMP] deprecated-module: Add exception for the case of valid openerp.osv.expression (#40)
* [IMP] sql-injection: Add compatibility with .format (#44)
* [REF] translation-required: 100% coverage
* [IMP] translation-required: Support % strings
* [IMP] translation-required: Support .format
* [FIX] translation-required: Fix AttributeError 'Getattr' object has no attribute 'name'
* [IMP] translation-required: Just check odoo exceptions
* [FIX] odoolint: Remove unsafe eval and reduce mccabe rate

1.3.0
-----

* [REF] README: Add new checks (#36)
* [FIX] duplicate-xml-fields: Support security xml style (#35)
* [ADD] sql-injection: Add new check to avoid sql injection (#29)
* [FIX] missing-newline-extrafiles: Fix 'IOError: [Errno 22] Invalid argument' by files of size 2 (#37)
* [REF] README: Add new checks
* [ADD] method-param: Check param method starts with "\_param\_" (#33)
* [FIX] join\_node\_args\_kwargs: AttributeError (#30)
* [REF] duplicate-id-csv: Better message of error  - Message before: Duplicate id id\_example1 in ir.model.access.csv file  - Message now: security/ir.model.access.csv duplicated id id\_example1
* [REF] javascript-lint: Ignore /lib/ subfolder
* [ADD] invalid-commit: Add new check invalid-commit  - Verify the guideline https://github.com/oca/maintainer-tools/blob/master/CONTRIBUTING.md#never-commit-the-transaction

1.2.0
-----

* [REF] README.rst: Updating new checks
* [IMP] test: Add tox for multi-environment and add compatiblity with latest version
* [ADD] translation-required: Add check to required even a translation (#23)
* [IMP] Add pylint check missing newline in extra extension files
* [IMP] test: Add tox for multi-environment and add compatiblity with latest version
* [IMP] Add Check tabs identation instead of four spaces
* better\_msg
* merge
* [REF] test: better way to identify check error expected
* [IMP] Add check Duplicate field in xml record (#20)
* [IMP] Add pylint check Redundant module name reference in xml\_id
* [IMP] pylint\_odoo: Add check duplicate ids in ir.model.access.csv files
* [IMP] pylint\_odoo: Add check for manifest-version-format
* [FIX] OCA/MQT#302: Use of astroid version 1.3.8

1.1.0
-----

* [FIX] setup: Build ChangeLog file
* [ADD] Add check 'deprecated-openerp-xml-node'
* [ADD] ChangeLog: Empty file to support auto build
* [FIX] Change \_fields by \_columns
* [REF] Fix typo
* [IMP] Add check 'create-user-without-reset-password'
* [IMP] Support odoo tag in xml file
* [REF] Support of 'noupdate' in check 'duplicate-xml-record-id'
* [REF] setup.cfg: Enable ChangeLog
* [REF] README: Add new message manifest-author-string

1.0.2
-----

* check that author is a string

1.0.1
-----

* [REF] Migrate md to rst

1.0.0
-----

* [IMP] .travis.yml: Enable auto deploy of pypi package from travis
* [ADD] pylint\_odoo: Add main package
* [ADD] .gitignore: Add file gitignore for first commit

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/OCA/pylint-odoo",
    "name": "pylint-odoo",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": null,
    "author": "Odoo Community Association (OCA)",
    "author_email": "support@odoo-community.org",
    "download_url": "https://files.pythonhosted.org/packages/c8/cf/2b4c9565bb72aa047bdc4f25babe076c50741f4a93303c7e54256a35c307/pylint_odoo-9.2.0.tar.gz",
    "platform": null,
    "description": "[//]: # (start-badges)\n\n[![Build Status](https://github.com/OCA/pylint-odoo/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/OCA/pylint-odoo/actions/workflows/test.yml?query=branch%3Amain)\n[![codecov](https://codecov.io/gh/OCA/pylint-odoo/branch/main/graph/badge.svg)](https://codecov.io/gh/OCA/pylint-odoo)\n[![code-style-black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![version](https://img.shields.io/pypi/v/pylint-odoo.svg)](https://pypi.org/project/pylint-odoo)\n[![pypi-downloads-monthly](https://img.shields.io/pypi/dm/pylint-odoo.svg?style=flat)](https://pypi.python.org/pypi/pylint-odoo)\n[![supported-versions](https://img.shields.io/pypi/pyversions/pylint-odoo.svg)](https://pypi.org/project/pylint-odoo)\n[![wheel](https://img.shields.io/pypi/wheel/pylint-odoo.svg)](https://pypi.org/project/pylint-odoo)\n[![commits-since](https://img.shields.io/github/commits-since/OCA/pylint-odoo/v9.2.0.svg)](https://github.com/OCA/pylint-odoo/compare/v9.2.0...main)\n\n[//]: # (end-badges)\n\n\n# Pylint Odoo plugin\n\nEnable custom checks for Odoo modules.\n\n[//]: # (start-checks)\n\nShort Name | Description | Code\n--- | --- | ---\nattribute-deprecated | attribute \"%s\" deprecated | W8105\nattribute-string-redundant | The attribute string is redundant. String parameter equal to name of variable | W8113\nbad-builtin-groupby | Used builtin function `itertools.groupby`. Prefer `odoo.tools.groupby` instead. More info about https://github.com/odoo/odoo/issues/105376 | W8155\ncategory-allowed | Category \"%s\" not allowed in manifest file. | C8114\nconsider-merging-classes-inherited | Consider merging classes inherited to \"%s\" from %s. | R8180\ncontext-overridden | Context overridden using dict. Better using kwargs `with_context(**%s)` or `with_context(key=value)` | W8121\ndeprecated-odoo-model-method | %s has been deprecated by Odoo. Please look for alternatives. | W8160\ndevelopment-status-allowed | Manifest key development_status \"%s\" not allowed. Use one of: %s. | C8111\nexcept-pass | pass into block except. If you really need to use the pass consider logging that exception | W8138\nexternal-request-timeout | Use of external request method `%s` without timeout. It could wait for a long time | E8106\ninvalid-commit | Use of cr.commit() directly - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#never-commit-the-transaction | E8102\nlicense-allowed | License \"%s\" not allowed in manifest file. | C8105\nmanifest-author-string | The author key in the manifest file must be a string (with comma separated values) | E8101\nmanifest-behind-migrations | Manifest version (%s) is lower than migration scripts (%s) | E8145\nmanifest-data-duplicated | The file \"%s\" is duplicated in lines %s from manifest key \"%s\" | W8125\nmanifest-deprecated-key | Deprecated key \"%s\" in manifest file | C8103\nmanifest-maintainers-list | The maintainers key in the manifest file must be a list of strings | E8104\nmanifest-required-author | One of the following authors must be present in manifest: %s | C8101\nmanifest-required-key | Missing required key \"%s\" in manifest file | C8102\nmanifest-version-format | Wrong Version Format \"%s\" in manifest file. Regex to match: \"%s\" | C8106\nmethod-compute | Name of compute method should start with \"_compute_\" | C8108\nmethod-inverse | Name of inverse method should start with \"_inverse_\" | C8110\nmethod-required-super | Missing `super` call in \"%s\" method. | W8106\nmethod-search | Name of search method should start with \"_search_\" | C8109\nmissing-readme | Missing ./README.rst file. Template here: %s | C8112\nmissing-return | Missing `return` (`super` is used) in method %s. | W8110\nno-raise-unlink | No exceptions should be raised inside unlink() functions | E8140\nno-wizard-in-models | No wizard class for model directory. See the complete structure https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#complete-structure | C8113\nno-write-in-compute | Compute method calling `write`. Use `update` instead. | E8135\nodoo-addons-relative-import | Same Odoo module absolute import. You should use relative import with \".\" instead of \"odoo.addons.%s\" | W8150\nodoo-exception-warning | `odoo.exceptions.Warning` is a deprecated alias to `odoo.exceptions.UserError` use `from odoo.exceptions import UserError` | R8101\nprint-used | Print used. Use `logger` instead. | W8116\nprohibited-method-override | Prohibited override of \"%s\" method. | W8107\nrenamed-field-parameter | Field parameter \"%s\" is no longer supported. Use \"%s\" instead. | W8111\nresource-not-exist | File \"%s\": \"%s\" not found. | F8101\nsql-injection | SQL injection risk. Use parameters if you can. - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#no-sql-injection | E8103\ntest-folder-imported | Test folder imported in module %s | E8130\ntranslation-contains-variable | Translatable term in \"%s\" contains variables. Use %s instead | W8115\ntranslation-field | Translation method _(\"string\") in fields is not necessary. | W8103\ntranslation-format-interpolation | Use %s formatting in odoo._ functions | W8302\ntranslation-format-truncated | Logging format string ends in middle of conversion specifier | E8301\ntranslation-fstring-interpolation | Use %s formatting in odoo._ functions | W8303\ntranslation-not-lazy | Use %s formatting in odoo._ functions | W8301\ntranslation-positional-used | Translation method _(%s) is using positional string printf formatting with multiple arguments. Use named placeholder `_(\"%%(placeholder)s\")` instead. | W8120\ntranslation-required | String parameter on \"%s\" requires translation. Use %s_(%s) | C8107\ntranslation-too-few-args | Not enough arguments for odoo._ format string | E8306\ntranslation-too-many-args | Too many arguments for odoo._ format string | E8305\ntranslation-unsupported-format | Unsupported odoo._ format character %r (%#02x) at index %d | E8300\nuse-vim-comment | Use of vim comment | W8202\nwebsite-manifest-key-not-valid-uri | Website \"%s\" in manifest key is not a valid URI | W8114\n\n\n[//]: # (end-checks)\n\n\n# Install\n\nYou do not need to install manually if you use pre-commit-config\n\nBut if you even need to install it\n\n    pip install pylint-odoo\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/pylint-odoo\n        rev: v9.2.0 # may be a tag or commit hash\n        hooks:\n        #\u00a0Add to your .pylintrc file:\n        # [MASTER]\n        # load-plugins=pylint_odoo\n        - id: pylint_odoo\n```\n\n# Usage\n\n    pylint --load-plugins=pylint_odoo -e odoolint path/to/test\n\nor use configuration file you can generate the OCA one using the following template repository:\n\n    https://github.com/OCA/oca-addons-repo-template\n\nThen running\n\n    pylint --rcfile=.pylintrc path/to/test\n\n\nExample to test only pylint_odoo checks:\n\n    pylint --load-plugins=pylint_odoo -d all -e odoolint {ADDONS-PATH}/*\n\nThere are checks only valid for a particular Odoo version\nTo know what version of odoo are you running pylint needs the parameter\n\n    pylint --load-plugins=pylint_odoo --valid-odoo-versions={YOUR_ODOO_VERSION}\n\nwith particular odoo version e.g. `\"16.0\"`\n\nChecks valid only for odoo >= 14.0\n\n    translation-format-interpolation\n    translation-format-truncated\n    translation-fstring-interpolation\n    translation-not-lazy\n    translation-too-few-args\n    translation-too-many-args\n    translation-unsupported-format\n\nChecks valid only for odoo <= 13.0\n\n    translation-contains-variable\n\n\n[//]: # (start-example)\n\n# Examples\n\n\n * attribute-deprecated\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L105 attribute \"_columns\" deprecated\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L106 attribute \"_defaults\" deprecated\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L107 attribute \"length\" deprecated\n\n * attribute-string-redundant\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L161 The attribute string is redundant. String parameter equal to name of variable\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L209 The attribute string is redundant. String parameter equal to name of variable\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L219 The attribute string is redundant. String parameter equal to name of variable\n\n * bad-builtin-groupby\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L110 Used builtin function `itertools.groupby`. Prefer `odoo.tools.groupby` instead. More info about https://github.com/odoo/odoo/issues/105376\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L111 Used builtin function `itertools.groupby`. Prefer `odoo.tools.groupby` instead. More info about https://github.com/odoo/odoo/issues/105376\n\n * consider-merging-classes-inherited\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/model_inhe2.py#L11 Consider merging classes inherited to \"res.company\" from testing/resources/test_repo/broken_module/models/model_inhe1.py:8:4, testing/resources/test_repo/broken_module/models/model_inhe2.py:7:4.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/model_inhe2.py#L19 Consider merging classes inherited to \"res.partner\" from testing/resources/test_repo/broken_module/models/model_inhe2.py:15:4.\n\n * context-overridden\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L192 Context overridden using dict. Better using kwargs `with_context(**{'overwrite_context': True})` or `with_context(key=value)`\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L194 Context overridden using dict. Better using kwargs `with_context(**ctx)` or `with_context(key=value)`\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L196 Context overridden using dict. Better using kwargs `with_context(**ctx2)` or `with_context(key=value)`\n\n * deprecated-odoo-model-method\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L91 fields_view_get has been deprecated by Odoo. Please look for alternatives.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/eleven_module/models.py#L17 fields_view_get has been deprecated by Odoo. Please look for alternatives.\n\n * development-status-allowed\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__openerp__.py#L6 Manifest key development_status \"InvalidDevStatus\" not allowed. Use one of: Alpha, Beta, Mature, Production/Stable.\n\n * except-pass\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/except_pass.py#L11 pass into block except. If you really need to use the pass consider logging that exception\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/except_pass.py#L53 pass into block except. If you really need to use the pass consider logging that exception\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/except_pass.py#L62 pass into block except. If you really need to use the pass consider logging that exception\n\n * external-request-timeout\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L690 Use of external request method `requests.delete` without timeout. It could wait for a long time\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L691 Use of external request method `requests.get` without timeout. It could wait for a long time\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L692 Use of external request method `requests.head` without timeout. It could wait for a long time\n\n * invalid-commit\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L409 Use of cr.commit() directly - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#never-commit-the-transaction\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L410 Use of cr.commit() directly - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#never-commit-the-transaction\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L411 Use of cr.commit() directly - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#never-commit-the-transaction\n\n * license-allowed\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__openerp__.py#L4 License \"unknow license\" not allowed in manifest file.\n\n * manifest-author-string\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module3/__openerp__.py#L5 The author key in the manifest file must be a string (with comma separated values)\n\n * manifest-behind-migrations\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__openerp__.py#L2 Manifest version (1.0) is lower than migration scripts (2.0)\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/eleven_module/__manifest__.py#L1 Manifest version (11.0.1.0.0) is lower than migration scripts (11.0.1.0.1)\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/__openerp__.py#L2 Manifest version (10.0.1.0.0) is lower than migration scripts (11.0.1.0.0)\n\n * manifest-data-duplicated\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L18 The file \"duplicated.xml\" is duplicated in lines 19 from manifest key \"data\"\n\n * manifest-deprecated-key\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L7 Deprecated key \"description\" in manifest file\n\n * manifest-maintainers-list\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module3/__openerp__.py#L6 The maintainers key in the manifest file must be a list of strings\n\n * manifest-required-author\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L5 One of the following authors must be present in manifest: 'Odoo Community Association (OCA)'\n\n * manifest-required-key\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L2 Missing required key \"license\" in manifest file\n\n * manifest-version-format\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L8 Wrong Version Format \"8_0.1.0.0\" in manifest file. Regex to match: \"(4\\.2|5\\.0|6\\.0|6\\.1|7\\.0|8\\.0|9\\.0|10\\.0|11\\.0|12\\.0|13\\.0|14\\.0|15\\.0|16\\.0|17\\.0|18\\.0)\\.\\d+\\.\\d+\\.\\d+$\"\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__openerp__.py#L8 Wrong Version Format \"1.0\" in manifest file. Regex to match: \"(4\\.2|5\\.0|6\\.0|6\\.1|7\\.0|8\\.0|9\\.0|10\\.0|11\\.0|12\\.0|13\\.0|14\\.0|15\\.0|16\\.0|17\\.0|18\\.0)\\.\\d+\\.\\d+\\.\\d+$\"\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module3/__openerp__.py#L8 Wrong Version Format \"8.0.1.0.0foo\" in manifest file. Regex to match: \"(4\\.2|5\\.0|6\\.0|6\\.1|7\\.0|8\\.0|9\\.0|10\\.0|11\\.0|12\\.0|13\\.0|14\\.0|15\\.0|16\\.0|17\\.0|18\\.0)\\.\\d+\\.\\d+\\.\\d+$\"\n\n * method-compute\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L155 Name of compute method should start with \"_compute_\"\n\n * method-inverse\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L157 Name of inverse method should start with \"_inverse_\"\n\n * method-required-super\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L40 Missing `super` call in \"copy\" method.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L44 Missing `super` call in \"create\" method.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L48 Missing `super` call in \"write\" method.\n\n * method-search\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L156 Name of search method should start with \"_search_\"\n\n * missing-readme\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L2 Missing ./README.rst file. Template here: https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst\n\n * missing-return\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L24 Missing `return` (`super` is used) in method inherited_method.\n\n * no-raise-unlink\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/res_partner_unlink.py#L9 No exceptions should be raised inside unlink() functions\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/sale_order_unlink.py#L14 No exceptions should be raised inside unlink() functions\n\n * no-wizard-in-models\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L829 No wizard class for model directory. See the complete structure https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#complete-structure\n\n * no-write-in-compute\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L114 Compute method calling `write`. Use `update` instead.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L116 Compute method calling `write`. Use `update` instead.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L119 Compute method calling `write`. Use `update` instead.\n\n * odoo-addons-relative-import\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L49 Same Odoo module absolute import. You should use relative import with \".\" instead of \"odoo.addons.broken_module\"\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L50 Same Odoo module absolute import. You should use relative import with \".\" instead of \"odoo.addons.broken_module\"\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L51 Same Odoo module absolute import. You should use relative import with \".\" instead of \"odoo.addons.broken_module\"\n\n * odoo-exception-warning\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L10 `odoo.exceptions.Warning` is a deprecated alias to `odoo.exceptions.UserError` use `from odoo.exceptions import UserError`\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L11 `odoo.exceptions.Warning` is a deprecated alias to `odoo.exceptions.UserError` use `from odoo.exceptions import UserError`\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L8 `odoo.exceptions.Warning` is a deprecated alias to `odoo.exceptions.UserError` use `from odoo.exceptions import UserError`\n\n * print-used\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/test_module/except_pass.py#L20 Print used. Use `logger` instead.\n\n * renamed-field-parameter\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L209 Field parameter \"digits_compute\" is no longer supported. Use \"digits\" instead.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L209 Field parameter \"select\" is no longer supported. Use \"index\" instead.\n\n * resource-not-exist\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L14 File \"data\": \"file_no_exist.xml\" not found.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L18 File \"data\": \"duplicated.xml\" not found.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__openerp__.py#L23 File \"demo\": \"file_no_exist.xml\" not found.\n\n * sql-injection\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L576 SQL injection risk. Use parameters if you can. - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#no-sql-injection\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L578 SQL injection risk. Use parameters if you can. - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#no-sql-injection\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L580 SQL injection risk. Use parameters if you can. - More info https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#no-sql-injection\n\n * test-folder-imported\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/__init__.py#L5 Test folder imported in module broken_module\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module2/__init__.py#L3 Test folder imported in module broken_module2\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/eleven_module/__init__.py#L3 Test folder imported in module eleven_module\n\n * translation-contains-variable\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L371 Translatable term in \"'Variable not translatable: %s' % variable1\" contains variables. Use _('Variable not translatable: %s') % variable1 instead\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L372 Translatable term in \"'Variables not translatable: %s, %s' % (variable1, variable2)\" contains variables. Use _('Variables not translatable: %s, %s') % (variable1, variable2) instead\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L374 Translatable term in \"'Variable not translatable: %s' % variable1\" contains variables. Use _('Variable not translatable: %s') % variable1 instead\n\n * translation-field\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L143 Translation method _(\"string\") in fields is not necessary.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L153 Translation method _(\"string\") in fields is not necessary.\n\n * translation-format-interpolation\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L380 Use lazy % or .format() or % formatting in odoo._ functions\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L381 Use lazy % or .format() or % formatting in odoo._ functions\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L473 Use lazy % or .format() or % formatting in odoo._ functions\n\n * translation-format-truncated\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L484 Logging format string ends in middle of conversion specifier\n\n * translation-fstring-interpolation\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L482 Use lazy % or .format() or % formatting in odoo._ functions\n\n * translation-not-lazy\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L345 Use lazy % or .format() or % formatting in odoo._ functions\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L346 Use lazy % or .format() or % formatting in odoo._ functions\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L348 Use lazy % or .format() or % formatting in odoo._ functions\n\n * translation-positional-used\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L372 Translation method _('Variables not translatable: %s, %s' % (variable1, variable2)) is using positional string printf formatting with multiple arguments. Use named placeholder `_(\"%(placeholder)s\")` instead.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L375 Translation method _('Variables not translatable: %s %s' % (variable1, variable2)) is using positional string printf formatting with multiple arguments. Use named placeholder `_(\"%(placeholder)s\")` instead.\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L378 Translation method _('Variables not translatable: %s, %s' % (variable1, variable2)) is using positional string printf formatting with multiple arguments. Use named placeholder `_(\"%(placeholder)s\")` instead.\n\n * translation-required\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L322 String parameter on \"message_post\" requires translation. Use body=_('Body not translatable %s')\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L322 String parameter on \"message_post\" requires translation. Use subject=_('Subject not translatable')\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L324 String parameter on \"message_post\" requires translation. Use body=_('Body not translatable {}')\n\n * translation-too-few-args\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L480 Not enough arguments for odoo._ format string\n\n * translation-too-many-args\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L485 Too many arguments for odoo._ format string\n\n * translation-unsupported-format\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/models/broken_model.py#L483 Unsupported odoo._ format character 'y' (0x79) at index 30\n\n * use-vim-comment\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module/pylint_oca_broken.py#L108 Use of vim comment\n\n * website-manifest-key-not-valid-uri\n\n    - https://github.com/OCA/pylint-odoo/blob/v9.2.0/testing/resources/test_repo/broken_module3/__openerp__.py#L7 Website \"htt://odoo-community.com\" in manifest key is not a valid URI\n\n[//]: # (end-example)\n\n# Development\n\nTo run all the tests run:\n\n    tox\n\nUse extra parameters to change the test behaviour\n\ne.g. particular python version\n\n    tox -e py310\n\ne.g. particular unittest method\n\n    tox -e py310 -- -k test_20_expected_errors\n\ne.g. all the tests at the same time in parallel\n\n    tox -p auto\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\nCHANGES\n=======\n\nv9.2.0\n------\n\n* [REF] tox: Using py3.13 for update-readme (#511)\n* [FIX] pylint\\_odoo: Fix parsing dictionary from manifest (#510)\n* [FIX] translation-not-lazy: Fix AstroidSyntaxError (#509)\n* [FIX] pylint\\_odoo: Fix IndexError corner case (#508)\n* [FIX] requirements.txt: Add missing 'packaging' package (#507)\n* [REF] github: Updated codecov action version (#506)\n* [REF] pylint\\_odoo: Avoid reassigning self.linter.config (#505)\n* [REF] tests: Detecting duplicated lines occurrences (#504)\n* [REF] tests: Test \"jobs\" counting lines from the output (#503)\n* [REF] tox: Add py3.13 environment\n* [IMP] manifest-behind-migrations: Improve detection of the check only using odoo manifest file parsing\n* [REF] pylint\\_odoo: Enabling python version 3.13 compatibility (#501)\n\nv9.1.4\n------\n\n* [FIX] pylint\\_odoo: Fix walk-up normalizing windows OS separator // vs \\\\\n* [IMP] pylint\\_odoo: Supporting multi-jobs\n* [REF] coverage: Remove \"dynamic\\_context=test\\_function\"\n* [REM] pylint\\_odoo: Remove requirements/requirements.txt from build\n\nv9.1.3\n------\n\n* [REF] pylint-odoo: Add support for odoo 18.0 (#497)\n* [REF] readme: translation-positional-used desc. (#496)\n* [REF] setup: Add setuptools deps to build\n* [REF] github-action: Add compatibility with MacOSX M1\n\nv9.1.2\n------\n\n* [REF] setup: Add py3.12 support info (#490)\n\nv9.1.1\n------\n\n* [REF] update-readme\n* [ADD] prohibited-method-override: New check to avoid overriding methods (#485)\n* [REF] .github: Update actions cache and fix pre-commit cache path (#489)\n\nv9.1.0\n------\n\n* [REF] requirements: Update packages version (#488)\n\nv9.0.6\n------\n\n* [REF] requirements: Compatibility with validators 0.22\n\nv9.0.5\n------\n\n* [FIX] odoo-addons-relative-import: exclude migrations (#481)\n\nv9.0.4\n------\n\n* [REF] readme: Update readme using 'tox -e update-readme'\n\nv9.0.3\n------\n\n* [ADD] manifest-behind-migrations: check manifest version >= migrations  (#475)\n\nv9.0.2\n------\n\n* [REF] Add support to Odoo v17.0 (#477)\n\nv9.0.1\n------\n\n* [ADD] category-allowed: Add check to enforce the allowed Odoo modules categories (#459)\n\nv9.0.0\n------\n\n* [REF]: update to pylint 3.0.0, drop support for py3.7 (#474)\n\nv8.0.22\n-------\n\n* [REF] setup.py: Filter out \"bump version\" from CHANGELOG (#472)\n\nv8.0.21\n-------\n\n* [ADD] deprecated-odoo-model-method: New check to detect deprecated method for each Odoo version (#470)\n* [REF] ci: run only one tox env per job (#468)\n\nv8.0.20\n-------\n\n* [REF] tox: Build ChangeLog again (#466)\n* [ADD] no-raise-unlink: Check if there is raise sentence in unlink method  (#458)\n* [FIX] correct README pre-commit usage (#463)\n\nv8.0.19\n-------\n\n* [FIX] pre-commit-vauxoo: Fix isort hook - RuntimeError The Poetry configuration is invalid (#456)\n\nv8.0.18\n-------\n\n* [FIX] Readme: new CLI command format --valid-odoo-version (#453)\n* [REF] ci: Update gh actions .yml and tox.ini (#451)\n* [FIX] pre-commit-config: Update flake8 repo (#446)\n\nv8.0.17\n-------\n\n* [REM] Remove unused eslintrc file\n* [REF] tests: Autogenerate readme with examples from test\\_repo\n* [REF] tox, pre-commit, readme: Small changes (#443)\n\nv8.0.16\n-------\n\n* [ADD] bad-builtin-groupby: Prefer \\`odoo.tools.groupby\\` instead (#442)\n\nv8.0.15\n-------\n\n* [FIX] setup: Add missing \"requirements.txt\" file to package (#441)\n\nv8.0.14\n-------\n\n* [REF] no-wizard-in-models: Add exception for \"res.config\\*\" inherited classes (#439)\n* [ADD] no-wizard-in-models: Add new check for avoid adding wizards class in models directory (#437)\n\nv8.0.13\n-------\n\n* [REF] consider-merging-classes-inherited: Improve message with relpath + column number (#436)\n\nv8.0.12\n-------\n\n* [FIX] consider-merging-classes-inherited: Fix TODO Consider case where \\_inherit is assigned before to \\_name (#435)\n* [FIX] custom\\_logging: Fix AstroidSyntaxError using only binop related to '%' (#434)\n\nv8.0.11\n-------\n\n* [REF] manifest-data-duplicated, resource-not-exist: Improve line number (lineno) of the duplicated node (#433)\n\nv8.0.10\n-------\n\n* [FIX] pylint\\_odoo: Using node.op instead of hardcoded % (#432)\n\nv8.0.9\n------\n\n* [FIX] pylint\\_odoo: \"ImportError: No module named 'packaging'\" (#431)\n* [REF] readme: Add monthly downloads from pypi badge (#430)\n* [REF] pylint\\_odoo: Using new typing astroid.nodes instead of astroid.Class (#429)\n\nv8.0.8\n------\n\n* [ADD] no-write-in-compute: Don't write on a computed field  (#427)\n\nv8.0.7\n------\n\n* [REF] pylint\\_odoo: Replace options name from \"\\_\" to \"-\" because (#426)\n\nv8.0.6\n------\n\n* [REF] README: Auto update README (#425)\n* [REF] pylint\\_odoo: Process max\\_odoo\\_version and min\\_odoo\\_version for checks (#424)\n* [ADD] translation-\\*: Add translation-\\* checks with the same \"logging\" checks but for \"odoo.\\_\" translate method (#423)\n* [REF] CI: Enable py3.11 (#420)\n\nv8.0.5\n------\n\n* [REF] tox: Enable lints from environment list (#418)\n* [REF] setup: Match requires-python = \">=3.7.2\" from pylint (#417)\n* [REF] CI: Enable tox with parallels + codecov compatibility (#415)\n* [REF] augmentations: Use message code instead of message id for supression of codes (#414)\n\nv8.0.4\n------\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2md()\n* [REM] class-camelcase: Replaced by invalid-name (#413)\n* [REF] tests: Remove 'score' (#412)\n* [REF] openerp-exception-warning: Change to odoo-exception-warning (#411)\n* [REF] pylint\\_odoo: Sort items for utils.only\\_required\\_for\\_messages (#410)\n* [IMP] print-used: Speed-up 'print-used' check avoid inferring (#409)\n* [REM] eval-referenced: Replaced by eval-used check from pylint (#408)\n* [REF] pylint\\_odoo: visit\\_dict - Use the dictionary key node (#407)\n\nv8.0.3\n------\n\n* [REF] Update \"visit\\_\\*\" methods availables and order code and update values (#406)\n* [ADD] missing-readme: Add again missing-readme (#405)\n* [REF] pylint\\_odoo: Clean code (#404)\n* [REF] pylint\\_odoo: Clean code (#402)\n\nv8.0.2\n------\n\n* [REF] codecov, README: Enable codecov again and fix URLs from README (#401)\n\nv8.0.1\n------\n\n* [REF] readme: Migrate from RST to MARKDOWN format (#400)\n* [REF] pylint\\_odoo: Small changes for CI, lints, pytest and code (#399)\n* [REF] requirements: Update pylint dependency (#398)\n* [IMP] pylint\\_odoo: black, isort, prettier (#397)\n\nv8.0.0\n------\n\n* [IMP] pylint\\_odoo: apocalintSYS - Full refactoring - v8.0.0 (#396)\n\n7.0.4\n-----\n\n* [REF] translation-positional-used: Consider srt.format('{} {}') cases (#395)\n\n7.0.3\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [REF] CI: Comment py3.7 travis with weird error unrelated\n* [ADD] manifest-data-duplicated: Detect duplicated data file\n\n7.0.2\n-----\n\n* [FIX] attribute-string-redundant: Only when field string is the same as title() format (#392)\n\n7.0.1\n-----\n\n* [REF] pylint\\_odoo: Update supported Odoo version 16.0 (#391)\n* [REF] CI: Use py3.10 and 3.11 environments for travis (#389)\n* [REF] tests: Add unittest to check only one check enabled (#385)\n\n7.0.0\n-----\n\n* [REF] external-request-timeout: Add ftplib.FTP method (#388)\n* Revert \"[PERF] \\*: Checkers only run when enabled #372 (#376)\" (#386)\n* [PERF] \\*: Checkers only run when enabled #372 (#376)\n* [FIX] missing-import-error: add xlrd to whitelist (#379)\n\n6.2.0\n-----\n\n* [IMP] duplicate-po-message-definition: Detecting duplicated only with msgid (#374)\n* [IMP] test-folder-imported: Consider 'from . import test' missing case (#373)\n\n6.1.0\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [ADD] external-request-timeout: It could wait for a long time (#370)\n* [FIX] .travis.yml: npm v18.0.0 is not compatible with ubuntu used from travis (#371)\n* [REF] README: Use new travis URL (#369)\n\n6.0.0\n-----\n\n* [ADD] pre-commit-hooks: Add pylint\\_odoo hook to be used from pre-commit.yaml directly (#368)\n* [REF] requirements: Bump pylint package from 2.11.1 to 2.13.5 for py3.x (#367)\n* [FIX] CI: Fix pluggy error on py3.7 and running lint only in one build (#366)\n* [IMP] sql-injection: Detect possible sql injections when using f-strings (#364)\n* [FIX] Pinned lazy-object-proxy for Python 2.7 (#365)\n* [FIX] missing-return: Incorrect check for tearDownClass (#362)\n\n5.0.5\n-----\n\n* [FIX] OdooChecker: Discard migrations folder as odoo main module (#358)\n\n5.0.4\n-----\n\n* Revert \"[REVERT] requirements: Using pylint<2.11.0 because issue 5096 (#355)\"\n\n5.0.3\n-----\n\n* [REVERT] requirements: Using pylint<2.11.0 because issue 5096 (#355)\n\n5.0.2\n-----\n\n* [REF] requirements: Upgrade pylint version 2.11.1 (#354)\n\n5.0.1\n-----\n\n* [REF] manifest-version-format: Add new valid odoo v15.0 (#353)\n* [REF] sql-injection: No sql-injection using constants (#351)\n* [FIX] sql-injection: AttributeError: 'NoneType' object has no attribute 'parent' (#350)\n\n5.0.0\n-----\n\n* [REF] requirements: Upgrade pylint version (#349)\n\n4.0.0\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [ADD] dangerous-qweb-replace-wo-priority: Consider qweb view templates (#347)\n* [ADD] context-overridden: Better using kwargs instead of dictionary (#256)\n* [REF] invalid-name, unused-argument: Suppress check for migrations path (#348)\n\n3.10.0\n------\n\n* [FIX] sql-injection: Fix false positives (#344)\n* [FIX] pylint\\_odoo: Fix manifest\\_version\\_format option ignored (#346)\n\n3.9.0\n-----\n\n* [FIX] translation-required: Skip tests folder (#345)\n* [FIX] xml-syntax-error: Fix crash if a xml has syntax errors (#343)\n* [REF] pylint-odoo: Add .pylintrc example (#325)\n* [FIX] attribute-deprecated: Check only \"Model\" class' attributes (#342)\n* [FIX]\u00a0attribute-string-redundant: \"string\" of related field is taken from the referenced one (#341)\n* [FIX] file-not-used: Fix false positives on Windows (#335)\n\n3.8.0\n-----\n\n* [FIX] Add pbr to requirements (#328)\n* [REF] requirements: upgrade pylint version (#320)\n\n3.7.1\n-----\n\n* [FIX] test-folder-imported: Support all import styles (#315)\n* [FIX] misc.py: Properly support python namespace package when detecting the odoo addon directory (#317)\n\n3.7.0\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [ADD] translation-positional-used: New check to valid the allow change the order of string formatting (#305)\n* [ADD] str-format-used: Check if str.format was used in translated string (#304)\n* [ADD] test-folder-imported: check if tests folder is imported in init file (#310)\n\n3.6.0\n-----\n\n* [FIX] requirements: fix dependencies break with pip 20.3 Fix #306 (#313)\n* [ADD] add compatibility to v14.0 (#312)\n\n3.5.1\n-----\n\n* [REF] .travis.yml: Enable condition to deploy pypi\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [FIX] dangerous-view-replace-wo-priority: check all child tags with replace (#309)\n* [ADD] pylint-odoo: add new check to maintainers key in manifest must be a list of str (#308)\n* [REF] development-status-allowed: Explicitly report possible values (#301)\n* [REF]  odoo-addons-relative-import: does not apply in tests/ directory (#307)\n* [REF] CI: Enable py3.8 and py3.9 (#294)\n\n3.5.0\n-----\n\n* [FIX] messages2rst: Compatible with more than 3 message items\n* [REF] no-utf8-coding-comment,unnecessary-utf8-coding-comment: Using python version to enable/disable them (#292)\n* [REF] po-msgstr-variables: Check if there is missing 'module:' comment (#291)\n\n3.4.0\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* Fixing pragma: no cover position\n* [ADD] po-msgstr-variables: Check if string translated can be parsed correctly\n* [ADD] duplicate-po-message-definition, po-syntax-error: Enable PO checks\n\n3.3.2\n-----\n\n* [REF] missing-manifest-dependency: Add openupgradelib as a whitelist. (#288)\n* [FIX] sql-injection: Consider valid arguments built with psycopg2.sql\n\n3.3.1\n-----\n\n* [REF] missing-import-error: Add new packages for Odoo v13.0\n\n3.3.0\n-----\n\n* [REF] requirements.txt: Update packages version (#285)\n\n3.2.0\n-----\n\n* [FIX] get\\_manifest\\_file: Get manifest file correctly\n* [FIX] Visit module: manage odoo subdirectories Better way to check whether a path is a path of a subdirectoy of a Odoo module. Before, '/a/b/cc/d' was considered as a subdirectoy of '/a/b/c' because '/a/b/c' in '/a/b/cc/d' == True\n\n3.1.0\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [FIX] rst\\_lint: Using UTF-8 encoding by default (#272)\n* [ADD] Possibility of package name include dots\n* [REF] .travis.yml: Using py3.7 stable instead of dev (#271)\n* Improve incoherent-interpreter-exec-perm message\n* Fix incompatibility with isort configuration file\n* [FIX] rst-syntax-error: Using a 0 by default if line None is returned\n\n3.0.3\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* Revert \"[ADD] method-default prefix\" (#254)\n\n3.0.2\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [REF] CI: Fixing flake8, tests and clean requirements\n* [REF] pylint\\_odoo: Supports odoo 13.0\n* [ADD] method-default prefix\n* [FIX] .travis.yml: Upgrade nvm version supported for eslint\n* Allow console statements\n* [ADD] print-used: Use \\_logger instead of print (#241)\n\n3.0.1\n-----\n\n* [FIX] AttributeError: 'MessagesStore' object has no attribute '\\_messages' related to https://github.com/PyCQA/pylint/commit/75cecdb1b88cc759223e83fd325aeafd09fec37e\n* [IMP] added support Pylint 2.3.0 and Astroid 2.2.0\n\n3.0.0\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [REF] sql-injection: Test private attributes (#226)\n* [REF] tox: Upgrade new pylint for py3 (#215)\n\n2.0.2\n-----\n\n* [REF] manifest-required-authors: Support old deprecated parameter\n\n2.0.1\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [DEL] require-jsdoc, keep require-valid-jsdoc\n* [FIX]change the location of Guidelines URL\n* [ADD] development-status-allowed: New check to verity valid development status Fix https://github.com/OCA/pylint-odoo/issues/199\n* [REF] missing-import-error: Check enabled just for odoo <= 11.0\n* Add fuzzy to ES globals\n* Allow usage of \\`undefined\\` (#214)\n* Jslint jsdoc relax (#209)\n* [REF] pylint-odoo: Compatibility with python3.7 (#205)\n* [IMP] file-not-used: Ignore unused files into the migrations directory (#213)\n* [IMP] manifest-required-author: Allow multiple possible required authors\n* [FIX] missing-manifest-dependency: Exclude tests directory\n* [FIX] manifest-version-format: Don't ignore valid Odoo versions\n* [FIX] requirements: Include \"six\" package (#207)\n\n2.0.0\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [DOC] README.rst: Adding documentation to the way to skip one check based on the Odoo Version\n* [REF] requirements: Bump requirements version\n* Add \\_register\\_hook in \"no missing return\" methods (#201)\n* [ADD] Add new lint to detect variables within translatable strings (#198)\n* [FIX] translation-required: Fix some false positives (#196)\n* [REF] .travis.yml: Allow both W503 and W504 formats (#197)\n\n1.9.5\n-----\n\n* [REF] .travis.yml: Just deploy a env and avoid cleanup before to deploy\n\n1.9.4\n-----\n\n* [REF] pylint\\_odoo: Increase coverage test\n* [FIX] README.rst: Fix syntax and run check\n* [FIX] don't complain about string attribute nodes in translation check\n* [REF] javascript-lint: Allow to use moment (#189)\n* Allow short ternary expressions\n* [IMP] ESLint usability boost (#185)\n* [REF] javascript-lint: Emit a message if there is internal error\n* [REF] jslintrc: Use of property style for dot-location\n* [REF] The method message\\_post need the subject and body be translatable\n* [FIX] duplicate-xml-fields: Now consider as duplicated using domain and context values (#172)\n\n1.9.3\n-----\n\n* [REF] pylint\\_odoo: Use check-name instead of check-code for add\\_message method (#174)\n* [FIX] pylint\\_odoo: Change the number of the appearances of the check (#173)\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [ADD] unnecessary-utf8-coding-comment: The utf8 comment is unnecessary if the version of odoo is 11.0 because use py3 (#168)\n* [FIX] missing-external-dependency: Skip relative imports that starts with dot (#171)\n* [ADD] character-not-valid-in-resource-link: To valid the character '?/#' into the in src/href link (#163)\n* [REF] javascript-lint: Disable comma-dangle and prefer-rest-params checks\n* [REF] .travis.yml: Freeze flake8 version In order to avoid false red if a new check is added\n* [ADD] Add licence OEEL-1 into licence-allowed for module depending on Enterprise (#165)\n* [ADD] xml-deprecated-qweb-directive: Deprecated QWeb directives (#157)\n* [FIX] Add 11.0 as valid Odoo version\n* [FIX] unicode error removing decode and use bytes with bytes  - Open file with rb and use bytes with bytes  - Use xml\\_special\\_char.xml: Use a special char to reproduce a decode  error\n\n1.8.2\n-----\n\n* [REF] pylint\\_odoo: Support python3\n\n1.8.1\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [FIX] deprecated-data-xml-node: Fix false negative with data/record + record for xml nodes (#156)\n* [FIX] disable xml check: get method called when the method is not called directly (#154)\n* [FIX] misc: TypeError argument of type 'NoneType' is not iterable (#150)\n* [FIX] manifest-version-format: Use real dot from regex (#153)\n* [FIX] manifest-version-format: Adds matching for string end to default manifest version format (#155)\n* [ADD] xml-deprecated-tree-attribute: Implements check for deprecated tree attributes (#149)\n* [REF] jslintrc: Disable prefer-spread\n* [IMP] missing-return: Skip missing return if function is a generator (#147)\n* [IMP] missing-return/required-super: setUpClass (#143)\n* [IMP] missing-readme: Check for other supported file names (#140)\n* [REF] jslintrc: Disable prefer-reflect error (#141)\n* [REF] file-not-used: Consider as used the files referenced from report xml files (#138)\n\n1.8.0\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [REF] cache: Cache other extension files just if is a odoo module (#142)\n* [IMP] pylint\\_odoo: Skip pylint check on one xml file (#135)\n* [ADD] website-manifest-key-not-valid-uri: For validate if the website into manifest is valid URI (#136)\n\n1.7.0\n-----\n\n* [REF] README: Auto-update Using pylint\\_odoo.messages2rst()\n* [ADD] pylint\\_odoo: Adding new check resource-not-exist (#130)\n* [FIX] fields: Validate a assign directly from root class (#116)\n* [FIX]\u00a0jslintrc: Remove deprecated ecmaFeatures key\n* [ADD] pylint\\_odoo: Adding check detected <data> tag inside <odoo> tag and show warning  (#129)\n* [REF] Fix typo\n* [REF] jslint: Enable no-comma-dangle check\n* [IMP] sql-injection: support new cases and ignore some false positives (#122)\n* [FIX] xml-attribute-translatable: Skip if version is different 8.0 (#117)\n* [FIX] deprecated-module: Consider 'from openerp.osv.expression'\n\n1.6.0\n-----\n\n* [REF] README: Auto-update Using the following script: 'PYTHONPATH=~/odoo/pylint-odoo python -c \"import pylint\\_odoo;print pylint\\_odoo.messages2rst()\"'\n* [REF] .travis.yml: Renamed flake8 error from F999 to F601 (#115)\n* [FIX] Check file-not-used: Skip tests folders (#114)\n* [FIX] incoherent-interpreter-exec-perm: Skip check for windows (#113)\n* [ADD] except-pass: Emit message If a except:pass is used (#107)\n* [FIX] attribute-string-redundant: Add \"isinstance\" validation for nodes\n* [ADD] attribute-string-redundant: Check if \"string\" parameter is equal to variable name (#100)\n* [ADD] renamed-field-parameter: Detect deprecated field values (digits\\_compute, select) (#99)\n* [REF] javascript-lint: Use eslint instead of jshint (#97)\n* [ADD] xml-attribute-translatable: Check XML attribute without translation parameter (#105)\n* [REF] incoherent-interpreter-exec-perm: Better message (#106)\n* [IMP] pylint-odoo: Adding support for parameters --ignore and --ignore-patterns (#103)\n* [ADD] eval-referenced: Detects if a \"eval\" is referenced (without call it) (#101)\n* [FIX] duplicate-xml-fields: False red using 2 tree sub-views \\*2M fields (#96)\n* [FIX] method-NAME: Fix if value is not a string\n* [REF] misc: Remove deprecated method\n* [FIX] test: Never use global into test\n\n1.5.0\n-----\n\n* [REF] duplicate-xml-record-id: Get xml section from manifest to skip different origin (#89)\n* [FIX] method-NAME: Fix case compute=None Fix OCA/pylint-odoo#88\n\n1.4.0\n-----\n\n* [REF] attribute-deprecated: Deprecate length class attribute (#86)\n* [ADD] missing-return If you use call a \\`super\\` method then you will need return the original value. If you want overwrite a original method then you need add documentation of why and add a \\`pylint: disable=missing-return\\`\n* [FIX] Whitelist \\`anybox.testing.openerp\\` \\* Add \\`anybox.testing.openerp\\` - Fixes #81\n* [FIX] manifest-version-format: Fix regex to use explicit dot instead of any char\n* [FIX] manifest-version-format: Support -e manifest-version-format only\n* [FIX] missing-import-error: Updating libraries used from requirements.txt but not imported or nested imported from odoo\n* [IMP] manifest-version-format: Add valid\\_odoo\\_versions parameter to force a valid version of odoo in the manifest version\n* [REF] missing-import-error: Skip test file since these files are loaded only when running tests and in such a case your module and their external dependencies are installed\n* [ADD] Support for 10.0 manifest name\n* [REF] requirements: Update developer version of pylint and astroid\n\n1.3.5\n-----\n\n* Adding isort dependency (#70)\n\n1.3.4\n-----\n\n* [REF] README: Update messages list\n\n1.3.3\n-----\n\n* [ADD] missing-import-error, missing-manifest-dependency\n* [FIX] rst-syntax-error: Skip unknown roles\n* [FIX] rst-syntax-error: Skip unknown directives\n* [REF] global refactoring: better message output and use real file and line number in non-py files (#62)\n* [REF] README: Add examples special folder\n* [REF] checkers: Skip example folder to check lints\n\n1.3.2\n-----\n\n* [REF] README: Update messages list\n\n1.3.1\n-----\n\n* [ADD] file-not-used: Emit message if there are xml, yml, sql or csv files but It isn't referenced from manifest (#53)\n* [ADD] dangerous-view-replace-wo-priority: Check dangerous view with replace but defined with low priority (#55)\n* [ADD] old-api7-method-defined: Emit message if the method defined have (self, cr, uid) (#52)\n* [ADD] odoo-addons-relative-import (#56)\n* [REF] tox: Freeze stable sha pylint20\n* [FIX] consider-merging-classes-inherited: Skip check if has '\\_name' and fix when you use '\\_inherit' name out of class attribute . Add more tests\n* [REF] missing-newline-extrafiles: Skip lib folder\n* [FIX] consider-merging-classes-inherited: Fix leaving module isn't a good idea. Better close method\n* [IMP] consider-merging-classes-inherited: Support disable comment\n* [REF] consider-merging-classes-inherited: Use assign node and better message\n* [ADD] consider-merging-classes-inherited\n* [REF] Increase performance\n* [IMP] pylint\\_odoo: Enable cProfile print stats\n* [IMP] deprecated-module: Add exception for the case of valid openerp.osv.expression (#40)\n* [IMP] sql-injection: Add compatibility with .format (#44)\n* [REF] translation-required: 100% coverage\n* [IMP] translation-required: Support % strings\n* [IMP] translation-required: Support .format\n* [FIX] translation-required: Fix AttributeError 'Getattr' object has no attribute 'name'\n* [IMP] translation-required: Just check odoo exceptions\n* [FIX] odoolint: Remove unsafe eval and reduce mccabe rate\n\n1.3.0\n-----\n\n* [REF] README: Add new checks (#36)\n* [FIX] duplicate-xml-fields: Support security xml style (#35)\n* [ADD] sql-injection: Add new check to avoid sql injection (#29)\n* [FIX] missing-newline-extrafiles: Fix 'IOError: [Errno 22] Invalid argument' by files of size 2 (#37)\n* [REF] README: Add new checks\n* [ADD] method-param: Check param method starts with \"\\_param\\_\" (#33)\n* [FIX] join\\_node\\_args\\_kwargs: AttributeError (#30)\n* [REF] duplicate-id-csv: Better message of error  - Message before: Duplicate id id\\_example1 in ir.model.access.csv file  - Message now: security/ir.model.access.csv duplicated id id\\_example1\n* [REF] javascript-lint: Ignore /lib/ subfolder\n* [ADD] invalid-commit: Add new check invalid-commit  - Verify the guideline https://github.com/oca/maintainer-tools/blob/master/CONTRIBUTING.md#never-commit-the-transaction\n\n1.2.0\n-----\n\n* [REF] README.rst: Updating new checks\n* [IMP] test: Add tox for multi-environment and add compatiblity with latest version\n* [ADD] translation-required: Add check to required even a translation (#23)\n* [IMP] Add pylint check missing newline in extra extension files\n* [IMP] test: Add tox for multi-environment and add compatiblity with latest version\n* [IMP] Add Check tabs identation instead of four spaces\n* better\\_msg\n* merge\n* [REF] test: better way to identify check error expected\n* [IMP] Add check Duplicate field in xml record (#20)\n* [IMP] Add pylint check Redundant module name reference in xml\\_id\n* [IMP] pylint\\_odoo: Add check duplicate ids in ir.model.access.csv files\n* [IMP] pylint\\_odoo: Add check for manifest-version-format\n* [FIX] OCA/MQT#302: Use of astroid version 1.3.8\n\n1.1.0\n-----\n\n* [FIX] setup: Build ChangeLog file\n* [ADD] Add check 'deprecated-openerp-xml-node'\n* [ADD] ChangeLog: Empty file to support auto build\n* [FIX] Change \\_fields by \\_columns\n* [REF] Fix typo\n* [IMP] Add check 'create-user-without-reset-password'\n* [IMP] Support odoo tag in xml file\n* [REF] Support of 'noupdate' in check 'duplicate-xml-record-id'\n* [REF] setup.cfg: Enable ChangeLog\n* [REF] README: Add new message manifest-author-string\n\n1.0.2\n-----\n\n* check that author is a string\n\n1.0.1\n-----\n\n* [REF] Migrate md to rst\n\n1.0.0\n-----\n\n* [IMP] .travis.yml: Enable auto deploy of pypi package from travis\n* [ADD] pylint\\_odoo: Add main package\n* [ADD] .gitignore: Add file gitignore for first commit\n",
    "bugtrack_url": null,
    "license": "APGL3",
    "summary": "Pylint plugin for Odoo",
    "version": "9.2.0",
    "project_urls": {
        "Homepage": "https://github.com/OCA/pylint-odoo"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7ce8d7658477b815734f47793379e311a66770a5326aa635289bb97de85f0754",
                "md5": "14e839f894de346de8aafa08d527db14",
                "sha256": "87c51378e0b088a4676bb11577b21e7251e7a2229a6b1755cb7b9ce1816dcea3"
            },
            "downloads": -1,
            "filename": "pylint_odoo-9.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "14e839f894de346de8aafa08d527db14",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 35908,
            "upload_time": "2024-12-20T01:40:47",
            "upload_time_iso_8601": "2024-12-20T01:40:47.965100Z",
            "url": "https://files.pythonhosted.org/packages/7c/e8/d7658477b815734f47793379e311a66770a5326aa635289bb97de85f0754/pylint_odoo-9.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c8cf2b4c9565bb72aa047bdc4f25babe076c50741f4a93303c7e54256a35c307",
                "md5": "f879769b8c44334ac9ed11f693ecedf1",
                "sha256": "762de919ebb21f8476847e563bdc9dd0a8be53b05f0f9caaf9aef97176383ad5"
            },
            "downloads": -1,
            "filename": "pylint_odoo-9.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "f879769b8c44334ac9ed11f693ecedf1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 55981,
            "upload_time": "2024-12-20T01:40:50",
            "upload_time_iso_8601": "2024-12-20T01:40:50.834997Z",
            "url": "https://files.pythonhosted.org/packages/c8/cf/2b4c9565bb72aa047bdc4f25babe076c50741f4a93303c7e54256a35c307/pylint_odoo-9.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-20 01:40:50",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "OCA",
    "github_project": "pylint-odoo",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "requirements": [
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "24.2.*"
                ]
            ]
        },
        {
            "name": "pylint-plugin-utils",
            "specs": [
                [
                    "==",
                    "0.8.*"
                ]
            ]
        },
        {
            "name": "pylint",
            "specs": [
                [
                    "==",
                    "3.1.*"
                ]
            ]
        },
        {
            "name": "validators",
            "specs": [
                [
                    "==",
                    "0.24.*"
                ]
            ]
        }
    ],
    "tox": true,
    "lcname": "pylint-odoo"
}
        
Elapsed time: 0.48234s