From 5e325f0750d04ad7b4f76b2c9e437181ba36655a Mon Sep 17 00:00:00 2001 From: Ivan Sokolov Date: Mon, 6 Nov 2023 19:23:04 +0100 Subject: [PATCH] Updated from template --- .copier-answers.yml | 9 +-- .eslintrc.yml | 1 + .flake8 | 12 ---- .github/workflows/pre-commit.yml | 13 +++- .github/workflows/test.yml | 6 +- .gitignore | 1 + .isort.cfg | 13 ---- .pre-commit-config.yaml | 69 +++++++------------ .pylintrc | 12 ++-- .pylintrc-mandatory | 12 ++-- .ruff.toml | 29 ++++++++ .../models/ir_attachment_action_download.py | 1 - attachment_zipped_download/pyproject.toml | 3 + .../test_ir_attachment_action_download.py | 2 +- document_knowledge/pyproject.toml | 3 + document_page/models/document_page.py | 4 +- document_page/models/document_page_history.py | 4 +- document_page/pyproject.toml | 3 + document_page/tests/test_document_page.py | 2 +- document_page_approval/pyproject.toml | 3 + document_page_group/models/document_page.py | 1 - document_page_group/pyproject.toml | 3 + .../models/document_page.py | 5 +- document_page_reference/pyproject.toml | 3 + .../tests/test_document_reference.py | 2 +- document_page_tag/pyproject.toml | 3 + document_url/pyproject.toml | 3 + 27 files changed, 122 insertions(+), 100 deletions(-) delete mode 100644 .flake8 delete mode 100644 .isort.cfg create mode 100644 .ruff.toml create mode 100644 attachment_zipped_download/pyproject.toml create mode 100644 document_knowledge/pyproject.toml create mode 100644 document_page/pyproject.toml create mode 100644 document_page_approval/pyproject.toml create mode 100644 document_page_group/pyproject.toml create mode 100644 document_page_reference/pyproject.toml create mode 100644 document_page_tag/pyproject.toml create mode 100644 document_url/pyproject.toml diff --git a/.copier-answers.yml b/.copier-answers.yml index 338431a8c3e..af87090078b 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,8 +1,8 @@ # Do NOT update manually; changes here will be overwritten by Copier -_commit: v1.14.2 +_commit: v1.17.2-11-g69f3b9a _src_path: gh:oca/oca-addons-repo-template +additional_ruff_rules: [] ci: GitHub -dependency_installation_mode: PIP generate_requirements_txt: true github_check_license: true github_ci_extra_env: {} @@ -11,6 +11,7 @@ github_enable_makepot: true github_enable_stale_action: true github_enforce_dev_status_compatibility: true include_wkhtmltopdf: false +odoo_test_flavor: Both odoo_version: 16.0 org_name: Odoo Community Association (OCA) org_slug: OCA @@ -19,6 +20,6 @@ repo_description: 'TODO: add repo description.' repo_name: knowledge repo_slug: knowledge repo_website: https://github.com/OCA/knowledge -travis_apt_packages: [] -travis_apt_sources: [] +use_pyproject_toml: true +use_ruff: true diff --git a/.eslintrc.yml b/.eslintrc.yml index 9429bc688aa..fed88d70d23 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -22,6 +22,7 @@ globals: odoo: readonly openerp: readonly owl: readonly + luxon: readonly # Styling is handled by Prettier, so we only need to enable AST rules; # see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890 diff --git a/.flake8 b/.flake8 deleted file mode 100644 index e397e8ed4e3..00000000000 --- a/.flake8 +++ /dev/null @@ -1,12 +0,0 @@ -[flake8] -max-line-length = 88 -max-complexity = 16 -# B = bugbear -# B9 = bugbear opinionated (incl line length) -select = C,E,F,W,B,B9 -# E203: whitespace before ':' (black behaviour) -# E501: flake8 line length (covered by bugbear B950) -# W503: line break before binary operator (black behaviour) -ignore = E203,E501,W503 -per-file-ignores= - __init__.py:F401 diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 23e6e58d6bc..38b0ba110e8 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -13,8 +13,10 @@ jobs: pre-commit: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: actions/setup-python@v2 + with: + python-version: "3.11" - name: Get python version run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV - uses: actions/cache@v1 @@ -25,6 +27,15 @@ jobs: run: pip install pre-commit - name: Run pre-commit run: pre-commit run --all-files --show-diff-on-failure --color=always + env: + # Consider valid a PR that changes README fragments but doesn't + # change the README.rst file itself. It's not really a problem + # because the bot will update it anyway after merge. This way, we + # lower the barrier for functional contributors that want to fix the + # readme fragments, while still letting developers get README + # auto-generated (which also helps functionals when using runboat). + # DOCS https://pre-commit.com/#temporarily-disabling-hooks + SKIP: oca-gen-addon-readme - name: Check that all files generated by pre-commit are in git run: | newfiles="$(git ls-files --others --exclude-from=.gitignore)" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f1b2b9fd6cc..e1af7438faf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest name: Detect unreleased dependencies steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - run: | for reqfile in requirements.txt test-requirements.txt ; do if [ -f ${reqfile} ] ; then @@ -36,10 +36,10 @@ jobs: matrix: include: - container: ghcr.io/oca/oca-ci/py3.10-odoo16.0:latest - makepot: "true" name: test with Odoo - container: ghcr.io/oca/oca-ci/py3.10-ocb16.0:latest name: test with OCB + makepot: "true" services: postgres: image: postgres:12.0 @@ -50,7 +50,7 @@ jobs: ports: - 5432:5432 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: persist-credentials: false - name: Install addons and dependencies diff --git a/.gitignore b/.gitignore index 9c283fd41f6..0090721f5d2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ __pycache__/ *.py[cod] /.venv /.pytest_cache +/.ruff_cache # C extensions *.so diff --git a/.isort.cfg b/.isort.cfg deleted file mode 100644 index 0ec187efd1b..00000000000 --- a/.isort.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[settings] -; see https://github.com/psf/black -multi_line_output=3 -include_trailing_comma=True -force_grid_wrap=0 -combine_as_imports=True -use_parentheses=True -line_length=88 -known_odoo=odoo -known_odoo_addons=odoo.addons -sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER -default_section=THIRDPARTY -ensure_newline_before_comments = True diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f27f10ca764..7ec39709802 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,6 +12,10 @@ exclude: | /static/(src/)?lib/| # Repos using Sphinx to generate docs don't need prettying ^docs/_templates/.*\.html$| + # Don't bother non-technical authors with formatting issues in docs + readme/.*\.(rst|md)$| + # Ignore build and dist directories in addons + /build/|/dist/| # You don't usually want a bot to modify your legal texts (LICENSE.*|COPYING.*) default_language_version: @@ -32,28 +36,30 @@ repos: entry: found a en.po file language: fail files: '[a-zA-Z0-9_]*/i18n/en\.po$' + - repo: https://github.com/sbidoul/whool + rev: v0.5 + hooks: + - id: whool-init - repo: https://github.com/oca/maintainer-tools - rev: 4cd2b852214dead80822e93e6749b16f2785b2fe + rev: 568cacd1d6eef453063a524a5ce63dcd49c7259b hooks: # update the NOT INSTALLABLE ADDONS section above - id: oca-update-pre-commit-excluded-addons - id: oca-fix-manifest-website args: ["https://github.com/OCA/knowledge"] - - repo: https://github.com/myint/autoflake - rev: v1.6.1 - hooks: - - id: autoflake + - id: oca-gen-addon-readme args: - - --expand-star-imports - - --ignore-init-module-imports - - --in-place - - --remove-all-unused-imports - - --remove-duplicate-keys - - --remove-unused-variables - - repo: https://github.com/psf/black - rev: 22.8.0 + - --addons-dir=. + - --branch=16.0 + - --org-name=OCA + - --repo-name=knowledge + - --if-source-changed + - id: oca-gen-external-dependencies + - repo: https://github.com/OCA/odoo-pre-commit-hooks + rev: v0.0.25 hooks: - - id: black + - id: oca-checks-odoo-module + - id: oca-checks-po - repo: https://github.com/pre-commit/mirrors-prettier rev: v2.7.1 hooks: @@ -95,37 +101,14 @@ repos: - id: check-xml - id: mixed-line-ending args: ["--fix=lf"] - - repo: https://github.com/asottile/pyupgrade - rev: v2.38.2 - hooks: - - id: pyupgrade - args: ["--keep-percent-format"] - - repo: https://github.com/PyCQA/isort - rev: 5.12.0 - hooks: - - id: isort - name: isort except __init__.py - args: - - --settings=. - exclude: /__init__\.py$ - - repo: https://github.com/acsone/setuptools-odoo - rev: 3.1.8 - hooks: - - id: setuptools-odoo-make-default - - id: setuptools-odoo-get-requirements - args: - - --output - - requirements.txt - - --header - - "# generated from manifests external_dependencies" - - repo: https://github.com/PyCQA/flake8 - rev: 3.9.2 + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.1.3 hooks: - - id: flake8 - name: flake8 - additional_dependencies: ["flake8-bugbear==21.9.2"] + - id: ruff + args: [--fix, --exit-non-zero-on-fix] + - id: ruff-format - repo: https://github.com/OCA/pylint-odoo - rev: 7.0.2 + rev: v8.0.19 hooks: - id: pylint_odoo name: pylint with optional checks diff --git a/.pylintrc b/.pylintrc index cad9c2f1b2b..554913276b4 100644 --- a/.pylintrc +++ b/.pylintrc @@ -5,12 +5,12 @@ load-plugins=pylint_odoo score=n [ODOOLINT] -readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst" -manifest_required_authors=Odoo Community Association (OCA) -manifest_required_keys=license -manifest_deprecated_keys=description,active -license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 -valid_odoo_versions=16.0 +readme-template-url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst" +manifest-required-authors=Odoo Community Association (OCA) +manifest-required-keys=license +manifest-deprecated-keys=description,active +license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 +valid-odoo-versions=16.0 [MESSAGES CONTROL] disable=all diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory index fa4b81c41e6..7a0cd4efefe 100644 --- a/.pylintrc-mandatory +++ b/.pylintrc-mandatory @@ -4,12 +4,12 @@ load-plugins=pylint_odoo score=n [ODOOLINT] -readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst" -manifest_required_authors=Odoo Community Association (OCA) -manifest_required_keys=license -manifest_deprecated_keys=description,active -license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 -valid_odoo_versions=16.0 +readme-template-url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst" +manifest-required-authors=Odoo Community Association (OCA) +manifest-required-keys=license +manifest-deprecated-keys=description,active +license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 +valid-odoo-versions=16.0 [MESSAGES CONTROL] disable=all diff --git a/.ruff.toml b/.ruff.toml new file mode 100644 index 00000000000..634db8e79b4 --- /dev/null +++ b/.ruff.toml @@ -0,0 +1,29 @@ + +target-version = "py310" +fix = true + +[lint] +extend-select = [ + "B", + "C90", + "I", # isort + "UP", # pyupgrade +] +exclude = ["setup/*"] + +[format] +exclude = ["setup/*"] + +[per-file-ignores] +"__init__.py" = ["F401", "I001"] # ignore unused and unsorted imports in __init__.py +"__manifest__.py" = ["B018"] # useless expression + +[isort] +section-order = ["future", "standard-library", "third-party", "odoo", "odoo-addons", "first-party", "local-folder"] + +[isort.sections] +"odoo" = ["odoo"] +"odoo-addons" = ["odoo.addons"] + +[mccabe] +max-complexity = 16 diff --git a/attachment_zipped_download/models/ir_attachment_action_download.py b/attachment_zipped_download/models/ir_attachment_action_download.py index 4316b4cb807..6e84206d1c0 100644 --- a/attachment_zipped_download/models/ir_attachment_action_download.py +++ b/attachment_zipped_download/models/ir_attachment_action_download.py @@ -5,7 +5,6 @@ class IrAttachmentActionDownloadMixin(models.AbstractModel): - _name = "ir.attachment.action_download" _description = """ Mixin to help download attachments linked to record(s). diff --git a/attachment_zipped_download/pyproject.toml b/attachment_zipped_download/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/attachment_zipped_download/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/attachment_zipped_download/tests/test_ir_attachment_action_download.py b/attachment_zipped_download/tests/test_ir_attachment_action_download.py index 1a595359273..5a5dc988cb0 100644 --- a/attachment_zipped_download/tests/test_ir_attachment_action_download.py +++ b/attachment_zipped_download/tests/test_ir_attachment_action_download.py @@ -11,7 +11,7 @@ class TestMixin(SavepointCase, TestAttachmentZippedDownloadBase): @classmethod def setUpClass(cls): - super(TestMixin, cls).setUpClass() + super().setUpClass() cls.loader = FakeModelLoader(cls.env, cls.__module__) cls.addClassCleanup(cls.loader.restore_registry) cls.loader.backup_registry() diff --git a/document_knowledge/pyproject.toml b/document_knowledge/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/document_knowledge/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/document_page/models/document_page.py b/document_page/models/document_page.py index bcb47411bfe..a1a7ca039c7 100644 --- a/document_page/models/document_page.py +++ b/document_page/models/document_page.py @@ -106,7 +106,7 @@ def _compute_backend_url(self): action = parent.menu_id.action parent = parent.parent_id if action: - url += "&action={}".format(action.id) + url += f"&action={action.id}" rec.backend_url = url @api.constrains("parent_id") @@ -122,7 +122,7 @@ def _get_page_index(self, link=True): ] r = "" if link: - r = '{}'.format(self.backend_url, self.name) + r = f'{self.name}' if index: r += "" return r diff --git a/document_page/models/document_page_history.py b/document_page/models/document_page_history.py index e767713b347..7b200e6abbb 100644 --- a/document_page/models/document_page_history.py +++ b/document_page/models/document_page_history.py @@ -61,8 +61,8 @@ def _get_diff(self, v1, v2): return diff.make_table( line1, line2, - "Revision-{}".format(v1), - "Revision-{}".format(v2), + f"Revision-{v1}", + f"Revision-{v2}", context=True, ) diff --git a/document_page/pyproject.toml b/document_page/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/document_page/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/document_page/tests/test_document_page.py b/document_page/tests/test_document_page.py index b67ee47c67a..22b03c2ae82 100644 --- a/document_page/tests/test_document_page.py +++ b/document_page/tests/test_document_page.py @@ -39,7 +39,7 @@ def test_page_link(self): page = self.page_obj.create({"name": "Test Page 3", "content": "Test content"}) self.assertEqual( page.backend_url, - "/web#id={}&model=document.page&view_type=form".format(page.id), + f"/web#id={page.id}&model=document.page&view_type=form", ) menu = self.env.ref("document_knowledge.menu_document") page.menu_id = menu diff --git a/document_page_approval/pyproject.toml b/document_page_approval/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/document_page_approval/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/document_page_group/models/document_page.py b/document_page_group/models/document_page.py index e81e4c2ccb4..3117af34d05 100644 --- a/document_page_group/models/document_page.py +++ b/document_page_group/models/document_page.py @@ -5,7 +5,6 @@ class DocumentPage(models.Model): - _inherit = "document.page" group_ids = fields.Many2many( diff --git a/document_page_group/pyproject.toml b/document_page_group/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/document_page_group/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/document_page_reference/models/document_page.py b/document_page_reference/models/document_page.py index 5dea1ea47d0..5c5fd37e267 100644 --- a/document_page_reference/models/document_page.py +++ b/document_page_reference/models/document_page.py @@ -47,7 +47,6 @@ class Environment(SandboxedEnvironment): class DocumentPage(models.Model): - _inherit = "document.page" reference = fields.Char( @@ -144,7 +143,7 @@ def create(self, vals_list): try: self._validate_reference(reference=reference) vals["reference"] = reference - except ValidationError: # pylint: disable=W7938 + except ValidationError: # pylint: disable=W8138 # Do not fill reference. pass - return super(DocumentPage, self).create(vals_list) + return super().create(vals_list) diff --git a/document_page_reference/pyproject.toml b/document_page_reference/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/document_page_reference/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/document_page_reference/tests/test_document_reference.py b/document_page_reference/tests/test_document_reference.py index cdaea8854b4..1a2ba268021 100644 --- a/document_page_reference/tests/test_document_reference.py +++ b/document_page_reference/tests/test_document_reference.py @@ -8,7 +8,7 @@ class TestDocumentReference(TransactionCase): @classmethod def setUpClass(cls): - super(TestDocumentReference, cls).setUpClass() + super().setUpClass() cls.page_obj = cls.env["document.page"] cls.history_obj = cls.env["document.page.history"] cls.page1 = cls.page_obj.create( diff --git a/document_page_tag/pyproject.toml b/document_page_tag/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/document_page_tag/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/document_url/pyproject.toml b/document_url/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/document_url/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi"