Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .copier-answers.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Do NOT update manually; changes here will be overwritten by Copier
_commit: v1.34
_commit: v1.35
_src_path: git+https://github.com/OCA/oca-addons-repo-template
additional_ruff_rules: []
ci: GitHub
Expand Down
2 changes: 0 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
exclude: |
(?x)
# NOT INSTALLABLE ADDONS
^fs_attachment/|
^fs_attachment_s3/|
^fs_file/|
^fs_folder/|
^fs_folder_demo/|
^fs_folder_ms_drive/|
^fs_image/|
^fs_storage/|
^fs_storage_ms_drive/|
^image_tag/|
^microsoft_drive_account/|
Expand Down
32 changes: 0 additions & 32 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,12 @@ disable=all
# config as a blocking check.

enable=anomalous-backslash-in-string,
api-one-deprecated,
api-one-multi-together,
assignment-from-none,
attribute-deprecated,
class-camelcase,
dangerous-default-value,
dangerous-view-replace-wo-priority,
development-status-allowed,
duplicate-id-csv,
duplicate-key,
duplicate-xml-fields,
duplicate-xml-record-id,
eval-referenced,
eval-used,
incoherent-interpreter-exec-perm,
license-allowed,
manifest-author-string,
manifest-deprecated-key,
Expand All @@ -48,56 +39,33 @@ enable=anomalous-backslash-in-string,
method-inverse,
method-required-super,
method-search,
openerp-exception-warning,
pointless-statement,
pointless-string-statement,
print-used,
redundant-keyword-arg,
redundant-modulename-xml,
reimported,
relative-import,
return-in-init,
rst-syntax-error,
sql-injection,
too-few-format-args,
translation-field,
translation-required,
unreachable,
use-vim-comment,
wrong-tabs-instead-of-spaces,
xml-syntax-error,
attribute-string-redundant,
character-not-valid-in-resource-link,
consider-merging-classes-inherited,
context-overridden,
create-user-wo-reset-password,
dangerous-filter-wo-user,
dangerous-qweb-replace-wo-priority,
deprecated-data-xml-node,
deprecated-openerp-xml-node,
duplicate-po-message-definition,
except-pass,
file-not-used,
invalid-commit,
manifest-maintainers-list,
missing-newline-extrafiles,
missing-readme,
missing-return,
odoo-addons-relative-import,
old-api7-method-defined,
po-msgstr-variables,
po-syntax-error,
renamed-field-parameter,
resource-not-exist,
str-format-used,
test-folder-imported,
translation-contains-variable,
translation-positional-used,
unnecessary-utf8-coding-comment,
website-manifest-key-not-valid-uri,
xml-attribute-translatable,
xml-deprecated-qweb-directive,
xml-deprecated-tree-attribute,
external-request-timeout,
bad-builtin-groupby,
category-allowed,
Expand Down
32 changes: 0 additions & 32 deletions .pylintrc-mandatory
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,12 @@ valid-odoo-versions=19.0
disable=all

enable=anomalous-backslash-in-string,
api-one-deprecated,
api-one-multi-together,
assignment-from-none,
attribute-deprecated,
class-camelcase,
dangerous-default-value,
dangerous-view-replace-wo-priority,
development-status-allowed,
duplicate-id-csv,
duplicate-key,
duplicate-xml-fields,
duplicate-xml-record-id,
eval-referenced,
eval-used,
incoherent-interpreter-exec-perm,
license-allowed,
manifest-author-string,
manifest-deprecated-key,
Expand All @@ -40,56 +31,33 @@ enable=anomalous-backslash-in-string,
method-inverse,
method-required-super,
method-search,
openerp-exception-warning,
pointless-statement,
pointless-string-statement,
print-used,
redundant-keyword-arg,
redundant-modulename-xml,
reimported,
relative-import,
return-in-init,
rst-syntax-error,
sql-injection,
too-few-format-args,
translation-field,
translation-required,
unreachable,
use-vim-comment,
wrong-tabs-instead-of-spaces,
xml-syntax-error,
attribute-string-redundant,
character-not-valid-in-resource-link,
consider-merging-classes-inherited,
context-overridden,
create-user-wo-reset-password,
dangerous-filter-wo-user,
dangerous-qweb-replace-wo-priority,
deprecated-data-xml-node,
deprecated-openerp-xml-node,
duplicate-po-message-definition,
except-pass,
file-not-used,
invalid-commit,
manifest-maintainers-list,
missing-newline-extrafiles,
missing-readme,
missing-return,
odoo-addons-relative-import,
old-api7-method-defined,
po-msgstr-variables,
po-syntax-error,
renamed-field-parameter,
resource-not-exist,
str-format-used,
test-folder-imported,
translation-contains-variable,
translation-positional-used,
unnecessary-utf8-coding-comment,
website-manifest-key-not-valid-uri,
xml-attribute-translatable,
xml-deprecated-qweb-directive,
xml-deprecated-tree-attribute,
external-request-timeout,
bad-builtin-groupby,
category-allowed,
Expand Down
10 changes: 5 additions & 5 deletions fs_attachment/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ Base Attachment Object Store
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstorage-lightgray.png?logo=github
:target: https://github.com/OCA/storage/tree/18.0/fs_attachment
:target: https://github.com/OCA/storage/tree/19.0/fs_attachment
:alt: OCA/storage
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-fs_attachment
:target: https://translation.odoo-community.org/projects/storage-19-0/storage-19-0-fs_attachment
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/storage&target_branch=18.0
:target: https://runboat.odoo-community.org/builds?repo=OCA/storage&target_branch=19.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|
Expand Down Expand Up @@ -422,7 +422,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/storage/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/storage/issues/new?body=module:%20fs_attachment%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/OCA/storage/issues/new?body=module:%20fs_attachment%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Expand Down Expand Up @@ -475,6 +475,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-lmignon|

This module is part of the `OCA/storage <https://github.com/OCA/storage/tree/18.0/fs_attachment>`_ project on GitHub.
This module is part of the `OCA/storage <https://github.com/OCA/storage/tree/19.0/fs_attachment>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
4 changes: 2 additions & 2 deletions fs_attachment/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{
"name": "Base Attachment Object Store",
"summary": "Store attachments on external object store",
"version": "18.0.2.1.0",
"version": "19.0.1.0.0",
"author": "Camptocamp, ACSONE SA/NV, Odoo Community Association (OCA)",
"license": "AGPL-3",
"development_status": "Beta",
Expand All @@ -17,7 +17,7 @@
"views/fs_storage.xml",
],
"external_dependencies": {"python": ["python_slugify", "fsspec>=2025.3.0"]},
"installable": False,
"installable": True,
"auto_install": False,
"maintainers": ["lmignon"],
"pre_init_hook": "pre_init_hook",
Expand Down
25 changes: 11 additions & 14 deletions fs_attachment/models/fs_file_gc.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import threading
from contextlib import closing, contextmanager

from odoo import api, fields, models
from odoo import api, fields, models, modules
from odoo.sql_db import Cursor

_logger = logging.getLogger(__name__)
Expand All @@ -17,21 +17,18 @@ class FsFileGC(models.Model):
store_fname = fields.Char("Stored Filename")
fs_storage_code = fields.Char("Storage Code")

_sql_constraints = [
(
"store_fname_uniq",
"unique (store_fname)",
"The stored filename must be unique!",
),
]
_store_fname_uniq = models.Constraint(
"unique (store_fname)",
"The stored filename must be unique!",
)

def _is_test_mode(self) -> bool:
"""Return True if we are running the tests, so we do not mark files for
garbage collection into a separate transaction.
"""
return (
getattr(threading.current_thread(), "testing", False)
or self.env.registry.in_test_mode()
or modules.module.current_test
)

@contextmanager
Expand Down Expand Up @@ -101,7 +98,7 @@ def _gc_files(self) -> None:
# the LOCK statement will wait until those concurrent transactions end.
# But this transaction will not see the new attachements if it has done
# other requests before the LOCK (like the method _storage() above).
cr = self._cr
cr = self.env.cr
cr.commit() # pylint: disable=invalid-commit

# prevent all concurrent updates on ir_attachment and fs_file_gc
Expand All @@ -120,12 +117,12 @@ def _gc_files(self) -> None:
def _gc_files_unsafe(self) -> None:
# get the list of fs.storage codes that must be autovacuumed
codes = (
self.env["fs.storage"].search([]).filtered("autovacuum_gc").mapped("code")
self.env["fs.storage"].search([]).filtered("autovacuum_gc").mapped("code") # pylint: disable=no-search-all
)
if not codes:
return
# we process by batch of storage codes.
self._cr.execute(
self.env.cr.execute(
"""
SELECT
fs_storage_code,
Expand All @@ -145,7 +142,7 @@ def _gc_files_unsafe(self) -> None:
""",
(tuple(codes),),
)
for code, store_fnames in self._cr.fetchall():
for code, store_fnames in self.env.cr.fetchall():
self.env["fs.storage"].get_by_code(code)
fs = self.env["fs.storage"].get_fs_by_code(code)
for store_fname in store_fnames:
Expand All @@ -156,7 +153,7 @@ def _gc_files_unsafe(self) -> None:
_logger.debug("Failed to remove file %s", store_fname)

# delete the records from the table fs_file_gc
self._cr.execute(
self.env.cr.execute(
"""
DELETE FROM
fs_file_gc
Expand Down
12 changes: 6 additions & 6 deletions fs_attachment/models/fs_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from __future__ import annotations

from odoo import _, api, fields, models, tools
from odoo import api, fields, models, tools
from odoo.exceptions import ValidationError
from odoo.tools.safe_eval import const_eval

Expand Down Expand Up @@ -82,10 +82,10 @@ class FsStorage(models.Model):
def _check_use_as_default_for_attachments(self):
# constrains are checked in python since values can be provided by
# the server environment
defaults = self.search([]).filtered("use_as_default_for_attachments")
defaults = self.search([]).filtered("use_as_default_for_attachments") # pylint: disable=no-search-all
if len(defaults) > 1:
raise ValidationError(
_("Only one storage can be used as default for attachments")
self.env._("Only one storage can be used as default for attachments")
)

@property
Expand Down Expand Up @@ -165,7 +165,7 @@ def _check_force_db_for_default_attachment_rules(self):
continue
if not rec.use_as_default_for_attachments:
raise ValidationError(
_(
self.env._(
"The force_db_for_default_attachment_rules can only be set "
"if the storage is used as default for attachments."
)
Expand All @@ -174,7 +174,7 @@ def _check_force_db_for_default_attachment_rules(self):
const_eval(rec.force_db_for_default_attachment_rules)
except (SyntaxError, TypeError, ValueError) as e:
raise ValidationError(
_(
self.env._(
"The force_db_for_default_attachment_rules is not a valid "
"python dict."
)
Expand All @@ -184,7 +184,7 @@ def _check_force_db_for_default_attachment_rules(self):
@tools.ormcache()
def get_storage_code_for_attachments_fallback(self):
storages = (
self.sudo()
self.sudo() # pylint: disable=no-search-all
.search([])
.filtered_domain([("use_as_default_for_attachments", "=", True)])
)
Expand Down
Loading
Loading