diff --git a/.copier-answers.yml b/.copier-answers.yml index f23d2e3a..31160093 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,25 +1,27 @@ # Do NOT update manually; changes here will be overwritten by Copier -_commit: v1.14.2 +_commit: v1.22 _src_path: https://github.com/OCA/oca-addons-repo-template.git +additional_ruff_rules: [] ci: GitHub -dependency_installation_mode: PIP -generate_requirements_txt: false -github_check_license: true +convert_readme_fragments_to_markdown: true +generate_requirements_txt: true +github_check_license: false github_ci_extra_env: {} -github_enable_codecov: true +github_enable_codecov: false github_enable_makepot: false github_enable_stale_action: true github_enforce_dev_status_compatibility: false include_wkhtmltopdf: false -odoo_version: 16.0 +odoo_test_flavor: Both +odoo_version: 17.0 org_name: Camptocamp org_slug: camptocamp rebel_module_groups: - attachment_azure,cloud_platform_azure -repo_description: '' +repo_description: 'Tools to run Odoo on a cloud platform. Mainly Azure at the moment. ' repo_name: Odoo Cloud Addons repo_slug: odoo-cloud-platform repo_website: https://github.com/camptocamp/odoo-cloud-platform -travis_apt_packages: [] -travis_apt_sources: [] +use_pyproject_toml: true +use_ruff: true diff --git a/.eslintrc.yml b/.eslintrc.yml index 9429bc68..0b382039 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -4,7 +4,7 @@ env: # See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449 parserOptions: - ecmaVersion: 2019 + ecmaVersion: 2022 overrides: - files: @@ -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 e397e8ed..00000000 --- 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 f4f16d33..c58f6292 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -3,11 +3,11 @@ name: pre-commit on: pull_request: branches: - - "16.0*" + - "17.0*" push: branches: - - "16.0" - - "16.0-ocabot-*" + - "17.0" + - "17.0-ocabot-*" jobs: pre-commit: @@ -15,6 +15,8 @@ jobs: steps: - 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/stale.yml b/.github/workflows/stale.yml index 1693a125..fa17fcd4 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Stale PRs and issues policy - uses: actions/stale@v4 + uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} # General settings. @@ -48,7 +48,7 @@ jobs: # * Issues that are pending more information # * Except Issues marked as "no stale" - name: Needs more information stale issues policy - uses: actions/stale@v4 + uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} ascending: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d2e29c9d..269fdaa7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,11 +3,11 @@ name: tests on: pull_request: branches: - - "16.0*" + - "17.0*" push: branches: - - "16.0" - - "16.0-ocabot-*" + - "17.0" + - "17.0-ocabot-*" jobs: unreleased-deps: @@ -35,20 +35,20 @@ jobs: fail-fast: false matrix: include: - - container: ghcr.io/oca/oca-ci/py3.10-odoo16.0:latest + - container: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest include: "attachment_azure,cloud_platform_azure" - makepot: "false" - name: test azure with Odoo - - container: ghcr.io/oca/oca-ci/py3.10-ocb16.0:latest + name: test with Odoo + - container: ghcr.io/oca/oca-ci/py3.10-ocb17.0:latest include: "attachment_azure,cloud_platform_azure" - name: test azure with OCA - - container: ghcr.io/oca/oca-ci/py3.10-odoo16.0:latest - exclude: "attachment_s3,cloud_platform_exoscale,attachment_swift,cloud_platform_ovh,attachment_azure,cloud_platform_azure" + name: test with OCB + makepot: "false" + - container: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest + exclude: "attachment_azure,cloud_platform_azure" + name: test with Odoo + - container: ghcr.io/oca/oca-ci/py3.10-ocb17.0:latest + exclude: "attachment_azure,cloud_platform_azure" + name: test with OCB makepot: "false" - name: test others with Odoo - - container: ghcr.io/oca/oca-ci/py3.10-ocb16.0:latest - exclude: "attachment_s3,cloud_platform_exoscale,attachment_swift,cloud_platform_ovh,attachment_azure,cloud_platform_azure" - name: test others with OCB services: postgres: image: postgres:12.0 @@ -69,6 +69,7 @@ jobs: run: oca_install_addons - name: Check licenses run: manifestoo -d . check-licenses + continue-on-error: true - name: Check development status run: manifestoo -d . check-dev-status --default-dev-status=Beta continue-on-error: true @@ -76,7 +77,3 @@ jobs: run: oca_init_test_database - name: Run tests run: oca_run_tests - - uses: codecov/codecov-action@v1 - - name: Update .pot files - run: oca_export_and_push_pot https://x-access-token:${{ secrets.GIT_PUSH_TOKEN }}@github.com/${{ github.repository }} - if: ${{ matrix.makepot == 'true' && github.event_name == 'push' && github.repository_owner == 'camptocamp' }} diff --git a/.gitignore b/.gitignore index 9c283fd4..0090721f 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 0ec187ef..00000000 --- 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 18a030da..df9807ce 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,11 +1,7 @@ exclude: | (?x) # NOT INSTALLABLE ADDONS - ^attachment_s3/| - ^attachment_swift/| ^base_fileurl_field/| - ^cloud_platform_exoscale/| - ^cloud_platform_ovh/| ^monitoring_log_requests/| ^monitoring_statsd/| ^test_base_fileurl_field/| @@ -20,6 +16,12 @@ 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/| + # Ignore test files in addons + /tests/samples/.*| # You don't usually want a bot to modify your legal texts (LICENSE.*|COPYING.*) default_language_version: @@ -40,28 +42,32 @@ 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: 9a170331575a265c092ee6b24b845ec508e8ef75 hooks: # update the NOT INSTALLABLE ADDONS section above - id: oca-update-pre-commit-excluded-addons - id: oca-fix-manifest-website args: ["https://github.com/camptocamp/odoo-cloud-platform"] - - 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=17.0 + - --org-name=camptocamp + - --repo-name=odoo-cloud-platform + - --if-source-changed + - --keep-source-digest + - --convert-fragments-to-markdown + - 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: @@ -103,31 +109,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 - - 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: v9.0.4 hooks: - id: pylint_odoo name: pylint with optional checks diff --git a/.pylintrc b/.pylintrc index 54a5e915..ac622438 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=Camptocamp -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=Camptocamp +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=17.0 [MESSAGES CONTROL] disable=all diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory index fedc3ea6..3272fed7 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=Camptocamp -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=Camptocamp +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=17.0 [MESSAGES CONTROL] disable=all diff --git a/.ruff.toml b/.ruff.toml new file mode 100644 index 00000000..0240c75f --- /dev/null +++ b/.ruff.toml @@ -0,0 +1,30 @@ + +target-version = "py310" +fix = true + +[lint] +extend-select = [ + "B", + "C90", + "E501", # line too long (default 88) + "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_azure/models/ir_attachment.py b/attachment_azure/models/ir_attachment.py index fd15a21e..ee0741fc 100644 --- a/attachment_azure/models/ir_attachment.py +++ b/attachment_azure/models/ir_attachment.py @@ -32,7 +32,7 @@ class IrAttachment(models.Model): _inherit = "ir.attachment" def _get_stores(self): - return ["azure"] + super(IrAttachment, self)._get_stores() + return ["azure"] + super()._get_stores() @api.model def _get_blob_service_client(self): @@ -111,7 +111,7 @@ def _get_blob_service_client(self): @api.model def _get_container_name(self): # Container naming rules: - # https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names # noqa: B950 + # https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names # noqa: E501 running_env = os.environ.get("RUNNING_ENV", "dev") storage_name = os.environ.get("AZURE_STORAGE_NAME", r"{env}-{db}") storage_name = storage_name.format(env=running_env, db=self.env.cr.dbname) @@ -162,14 +162,14 @@ def _store_file_read(self, fname, bin_size=False): _logger.info("Attachment '%s' missing on object storage", fname) return read else: - return super(IrAttachment, self)._store_file_read(fname, bin_size) + return super()._store_file_read(fname, bin_size) @api.model def _store_file_write(self, key, bin_data): location = self.env.context.get("storage_location") or self._storage() if location == "azure": container_client = self._get_azure_container() - filename = "azure://%s/%s" % (container_client.container_name, key) + filename = f"azure://{container_client.container_name}/{key}" with io.BytesIO() as file: blob_client = container_client.get_blob_client(key.lower()) file.write(bin_data) @@ -189,7 +189,7 @@ def _store_file_write(self, key, bin_data): _("The file could not be stored: %s") % str(error) ) from None else: - _super = super(IrAttachment, self) + _super = super() filename = _super._store_file_write(key, bin_data) return filename @@ -215,4 +215,4 @@ def _store_file_delete(self, fname): # user _logger.exception("Error during deletion of the file %s" % fname) else: - super(IrAttachment, self)._store_file_delete(fname) + super()._store_file_delete(fname) diff --git a/attachment_azure/pyproject.toml b/attachment_azure/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/attachment_azure/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/base_attachment_object_storage/models/ir_attachment.py b/base_attachment_object_storage/models/ir_attachment.py index 9f0605f9..49c31f66 100644 --- a/base_attachment_object_storage/models/ir_attachment.py +++ b/base_attachment_object_storage/models/ir_attachment.py @@ -30,10 +30,6 @@ def clean_fs(files): try: os.unlink(full_path) except OSError: - _logger.info( - "_file_delete could not unlink %s", full_path, exc_info=True - ) - except IOError: # Harmless and needed for race conditions _logger.info( "_file_delete could not unlink %s", full_path, exc_info=True @@ -124,7 +120,7 @@ def _store_in_db_instead_of_object_storage_domain(self): domain = [] storage_config = self._get_storage_force_db_config() for mimetype_key, limit in storage_config.items(): - part = [("mimetype", "=like", "{}%".format(mimetype_key))] + part = [("mimetype", "=like", f"{mimetype_key}%")] if limit: part = AND([part, [("file_size", "<=", limit)]]) domain = OR([domain, part]) @@ -207,15 +203,15 @@ def _file_read(self, fname): def _store_file_read(self, fname): storage = fname.partition("://")[0] - raise NotImplementedError("No implementation for %s" % (storage,)) + raise NotImplementedError(f"No implementation for {storage}") def _store_file_write(self, key, bin_data): storage = self.storage() - raise NotImplementedError("No implementation for %s" % (storage,)) + raise NotImplementedError(f"No implementation for {storage}") def _store_file_delete(self, fname): storage = fname.partition("://")[0] - raise NotImplementedError("No implementation for %s" % (storage,)) + raise NotImplementedError(f"No implementation for {storage}") @api.model def _file_write(self, bin_data, checksum): @@ -249,7 +245,7 @@ def _is_file_from_a_store(self, fname): for store_name in self._get_stores(): if self.is_storage_disabled(store_name): continue - uri = "{}://".format(store_name) + uri = f"{store_name}://" if fname.startswith(uri): return True return False @@ -339,7 +335,7 @@ def force_storage_to_db_for_special_fields(self, new_cr=False): ( normalize_domain( [ - ("store_fname", "=like", "{}://%".format(storage)), + ("store_fname", "=like", f"{storage}://%"), # for res_field, see comment in # _force_storage_to_object_storage "|", @@ -394,11 +390,11 @@ def _force_storage_to_object_storage(self, new_cr=False): # is required! It's because of an override of _search in ir.attachment # which adds ('res_field', '=', False) when the domain does not # contain 'res_field'. - # https://github.com/odoo/odoo/blob/9032617120138848c63b3cfa5d1913c5e5ad76db/odoo/addons/base/ir/ir_attachment.py#L344-L347 # noqa: B950 + # https://github.com/odoo/odoo/blob/17.0/odoo/addons/base/models/ir_attachment.py#L523 domain = [ "!", - ("store_fname", "=like", "{}://%".format(storage)), + ("store_fname", "=like", f"{storage}://%"), "|", ("res_field", "=", False), ("res_field", "!=", False), diff --git a/base_attachment_object_storage/models/strtobool.py b/base_attachment_object_storage/models/strtobool.py index 12f4b828..1a7ad558 100644 --- a/base_attachment_object_storage/models/strtobool.py +++ b/base_attachment_object_storage/models/strtobool.py @@ -18,4 +18,4 @@ def strtobool(value): try: return _MAP[str(value).lower()] except KeyError as error: - raise ValueError('"{}" is not a valid bool value'.format(value)) from error + raise ValueError(f'"{value}" is not a valid bool value') from error diff --git a/base_attachment_object_storage/pyproject.toml b/base_attachment_object_storage/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/base_attachment_object_storage/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/cloud_platform/models/cloud_platform.py b/cloud_platform/models/cloud_platform.py index e55cfa51..5df8dd7c 100644 --- a/cloud_platform/models/cloud_platform.py +++ b/cloud_platform/models/cloud_platform.py @@ -70,7 +70,7 @@ def _install(self, platform_kind): self.check() if configs.filestore.location == "remote": self.env["ir.attachment"].sudo().force_storage() - _logger.info("cloud platform configured for {}".format(platform_kind)) + _logger.info(f"cloud platform configured for {platform_kind}") @api.model def install(self): @@ -105,7 +105,7 @@ def _check_redis(self, environment_name): prefix = os.environ["ODOO_SESSION_REDIS_PREFIX"] assert re.match(r"^[a-z-0-9]+-odoo-[a-z-0-9]+$", prefix), ( "ODOO_SESSION_REDIS_PREFIX must match '-odoo-'" - ", we got: '%s'" % (prefix,) + f", we got: '{prefix}'" ) @api.model @@ -126,5 +126,5 @@ def check(self): self._check_redis(environment_name) def _register_hook(self): - super(CloudPlatform, self)._register_hook() + super()._register_hook() self.sudo().check() diff --git a/cloud_platform/models/strtobool.py b/cloud_platform/models/strtobool.py index 12f4b828..1a7ad558 100644 --- a/cloud_platform/models/strtobool.py +++ b/cloud_platform/models/strtobool.py @@ -18,4 +18,4 @@ def strtobool(value): try: return _MAP[str(value).lower()] except KeyError as error: - raise ValueError('"{}" is not a valid bool value'.format(value)) from error + raise ValueError(f'"{value}" is not a valid bool value') from error diff --git a/cloud_platform/pyproject.toml b/cloud_platform/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/cloud_platform/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/cloud_platform_azure/models/cloud_platform.py b/cloud_platform_azure/models/cloud_platform.py index b72d2294..8d8725cf 100644 --- a/cloud_platform_azure/models/cloud_platform.py +++ b/cloud_platform_azure/models/cloud_platform.py @@ -19,13 +19,13 @@ class CloudPlatform(models.AbstractModel): @api.model def _filestore_kinds(self): - kinds = super(CloudPlatform, self)._filestore_kinds() + kinds = super()._filestore_kinds() kinds["azure"] = AZURE_STORE_KIND return kinds @api.model def _platform_kinds(self): - kinds = super(CloudPlatform, self)._platform_kinds() + kinds = super()._platform_kinds() kinds.append("azure") return kinds @@ -103,14 +103,14 @@ def _check_filestore(self, environment_name): if environment_name == "prod": assert prod_bucket, ( "AZURE_STORAGE_NAME should match '^[a-z]+\\-[a-z]+\\-\\d+$', " - "we got: '%s'" % (storage_name,) + f"we got: '{storage_name}'" ) else: # if we are using the prod bucket on another instance # such as an integration, we must be sure to be in read only! assert not prod_bucket, ( "AZURE_STORAGE_NAME should not match '^[a-z]+\\-[a-z]+\\-\\d+$', " - "we got: '%s'" % (storage_name,) + f"we got: '{storage_name}'" ) elif environment_name == "test": diff --git a/cloud_platform_azure/pyproject.toml b/cloud_platform_azure/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/cloud_platform_azure/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/logging_json/json_log.py b/logging_json/json_log.py index cc7efcb4..7df4c0b2 100644 --- a/logging_json/json_log.py +++ b/logging_json/json_log.py @@ -29,7 +29,7 @@ def add_fields(self, log_record, record, message_dict): record.dbname = getattr(threading.currentThread(), "dbname", "?") record.request_id = getattr(threading.current_thread(), "request_uuid", None) record.uid = getattr(threading.current_thread(), "uid", None) - _super = super(OdooJsonFormatter, self) + _super = super() return _super.add_fields(log_record, record, message_dict) diff --git a/logging_json/pyproject.toml b/logging_json/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/logging_json/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/logging_json/strtobool.py b/logging_json/strtobool.py index 12f4b828..1a7ad558 100644 --- a/logging_json/strtobool.py +++ b/logging_json/strtobool.py @@ -18,4 +18,4 @@ def strtobool(value): try: return _MAP[str(value).lower()] except KeyError as error: - raise ValueError('"{}" is not a valid bool value'.format(value)) from error + raise ValueError(f'"{value}" is not a valid bool value') from error diff --git a/monitoring_prometheus/pyproject.toml b/monitoring_prometheus/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/monitoring_prometheus/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/monitoring_status/pyproject.toml b/monitoring_status/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/monitoring_status/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/requirements.txt b/requirements.txt index 3078c554..d99c37b1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,6 @@ -azure-storage-blob==12.17.0 -azure-identity==1.13.0 -boto3==1.26.7 -redis==4.3.4 -python-json-logger==2.0.4 -statsd==4.0.1 -python-swiftclient==4.1.0 -python-keystoneclient==5.0.0 -keystoneauth1==5.0.0 -# error with 5.x (ConstructorError: could not determine a constructor for the tag '!record') -PyYAML==6.0 -prometheus_client==0.15.0 -pyopenssl==22.1.0 +# generated from manifests external_dependencies +azure-identity +azure-storage-blob +prometheus_client +python-json-logger +redis diff --git a/session_redis/json_encoding.py b/session_redis/json_encoding.py index bb1c57a1..a263b74f 100644 --- a/session_redis/json_encoding.py +++ b/session_redis/json_encoding.py @@ -27,7 +27,7 @@ class SessionDecoder(json.JSONDecoder): """Decode json, recomposing recordsets and date/datetime""" def __init__(self, *args, **kwargs): - super().__init__(object_hook=self.object_hook, *args, **kwargs) + super().__init__(*args, object_hook=self.object_hook, **kwargs) def object_hook(self, obj): if "_type" not in obj: diff --git a/session_redis/pyproject.toml b/session_redis/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/session_redis/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/session_redis/session.py b/session_redis/session.py index 9854268c..2b6bfbaf 100644 --- a/session_redis/session.py +++ b/session_redis/session.py @@ -40,10 +40,10 @@ def __init__( self.anon_expiration = anon_expiration self.prefix = "session:" if prefix: - self.prefix = "%s:%s:" % (self.prefix, prefix) + self.prefix = f"{self.prefix}:{prefix}:" def build_key(self, sid): - return "%s%s" % (self.prefix, sid) + return f"{self.prefix}{sid}" def save(self, session): key = self.build_key(session.sid) @@ -56,7 +56,7 @@ def save(self, session): expiration = session.expiration or self.anon_expiration if _logger.isEnabledFor(logging.DEBUG): if session.uid: - user_msg = "user '%s' (id: %s)" % (session.login, session.uid) + user_msg = f"user '{session.login}' (id: {session.uid})" else: user_msg = "anonymous user" _logger.debug( diff --git a/session_redis/strtobool.py b/session_redis/strtobool.py index 12f4b828..1a7ad558 100644 --- a/session_redis/strtobool.py +++ b/session_redis/strtobool.py @@ -18,4 +18,4 @@ def strtobool(value): try: return _MAP[str(value).lower()] except KeyError as error: - raise ValueError('"{}" is not a valid bool value'.format(value)) from error + raise ValueError(f'"{value}" is not a valid bool value') from error diff --git a/setup/.setuptools-odoo-make-default-ignore b/setup/.setuptools-odoo-make-default-ignore deleted file mode 100644 index 207e6153..00000000 --- a/setup/.setuptools-odoo-make-default-ignore +++ /dev/null @@ -1,2 +0,0 @@ -# addons listed in this file are ignored by -# setuptools-odoo-make-default (one addon per line) diff --git a/setup/README b/setup/README deleted file mode 100644 index a63d633e..00000000 --- a/setup/README +++ /dev/null @@ -1,2 +0,0 @@ -To learn more about this directory, please visit -https://pypi.python.org/pypi/setuptools-odoo diff --git a/setup/attachment_azure/odoo/addons/attachment_azure b/setup/attachment_azure/odoo/addons/attachment_azure deleted file mode 120000 index b6be12c0..00000000 --- a/setup/attachment_azure/odoo/addons/attachment_azure +++ /dev/null @@ -1 +0,0 @@ -../../../../attachment_azure \ No newline at end of file diff --git a/setup/attachment_azure/setup.py b/setup/attachment_azure/setup.py deleted file mode 100644 index 28c57bb6..00000000 --- a/setup/attachment_azure/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon=True, -) diff --git a/setup/base_attachment_object_storage/odoo/addons/base_attachment_object_storage b/setup/base_attachment_object_storage/odoo/addons/base_attachment_object_storage deleted file mode 120000 index 2e30a179..00000000 --- a/setup/base_attachment_object_storage/odoo/addons/base_attachment_object_storage +++ /dev/null @@ -1 +0,0 @@ -../../../../base_attachment_object_storage \ No newline at end of file diff --git a/setup/base_attachment_object_storage/setup.py b/setup/base_attachment_object_storage/setup.py deleted file mode 100644 index 28c57bb6..00000000 --- a/setup/base_attachment_object_storage/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon=True, -) diff --git a/setup/cloud_platform/odoo/addons/cloud_platform b/setup/cloud_platform/odoo/addons/cloud_platform deleted file mode 120000 index c065b916..00000000 --- a/setup/cloud_platform/odoo/addons/cloud_platform +++ /dev/null @@ -1 +0,0 @@ -../../../../cloud_platform \ No newline at end of file diff --git a/setup/cloud_platform/setup.py b/setup/cloud_platform/setup.py deleted file mode 100644 index 28c57bb6..00000000 --- a/setup/cloud_platform/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon=True, -) diff --git a/setup/cloud_platform_azure/odoo/addons/cloud_platform_azure b/setup/cloud_platform_azure/odoo/addons/cloud_platform_azure deleted file mode 120000 index 5d297223..00000000 --- a/setup/cloud_platform_azure/odoo/addons/cloud_platform_azure +++ /dev/null @@ -1 +0,0 @@ -../../../../cloud_platform_azure \ No newline at end of file diff --git a/setup/cloud_platform_azure/setup.py b/setup/cloud_platform_azure/setup.py deleted file mode 100644 index 28c57bb6..00000000 --- a/setup/cloud_platform_azure/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon=True, -) diff --git a/setup/logging_json/odoo/addons/logging_json b/setup/logging_json/odoo/addons/logging_json deleted file mode 120000 index 7e261fb7..00000000 --- a/setup/logging_json/odoo/addons/logging_json +++ /dev/null @@ -1 +0,0 @@ -../../../../logging_json \ No newline at end of file diff --git a/setup/logging_json/setup.py b/setup/logging_json/setup.py deleted file mode 100644 index ebf59b81..00000000 --- a/setup/logging_json/setup.py +++ /dev/null @@ -1,10 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon={ - 'external_dependencies_override': { - 'python': {'pythonjsonlogger': 'python-json-logger',}, - }, - }, -) diff --git a/setup/monitoring_prometheus/odoo/addons/monitoring_prometheus b/setup/monitoring_prometheus/odoo/addons/monitoring_prometheus deleted file mode 120000 index 34b5ef7f..00000000 --- a/setup/monitoring_prometheus/odoo/addons/monitoring_prometheus +++ /dev/null @@ -1 +0,0 @@ -../../../../monitoring_prometheus \ No newline at end of file diff --git a/setup/monitoring_prometheus/setup.py b/setup/monitoring_prometheus/setup.py deleted file mode 100644 index 28c57bb6..00000000 --- a/setup/monitoring_prometheus/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon=True, -) diff --git a/setup/monitoring_status/odoo/addons/monitoring_status b/setup/monitoring_status/odoo/addons/monitoring_status deleted file mode 120000 index b5a85e74..00000000 --- a/setup/monitoring_status/odoo/addons/monitoring_status +++ /dev/null @@ -1 +0,0 @@ -../../../../monitoring_status \ No newline at end of file diff --git a/setup/monitoring_status/setup.py b/setup/monitoring_status/setup.py deleted file mode 100644 index 28c57bb6..00000000 --- a/setup/monitoring_status/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon=True, -) diff --git a/setup/session_redis/odoo/addons/session_redis b/setup/session_redis/odoo/addons/session_redis deleted file mode 120000 index c8732c21..00000000 --- a/setup/session_redis/odoo/addons/session_redis +++ /dev/null @@ -1 +0,0 @@ -../../../../session_redis \ No newline at end of file diff --git a/setup/session_redis/setup.py b/setup/session_redis/setup.py deleted file mode 100644 index 28c57bb6..00000000 --- a/setup/session_redis/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon=True, -)