From 992741c0a096edfc87e789834460ae9cf563bcfa Mon Sep 17 00:00:00 2001 From: MuK IT GmbH Date: Sun, 29 Nov 2020 22:26:40 +0000 Subject: [PATCH] publish muk_utils - 13.0 --- muk_utils/models/ir_attachment.py | 205 +++++++++++++++--------------- 1 file changed, 103 insertions(+), 102 deletions(-) diff --git a/muk_utils/models/ir_attachment.py b/muk_utils/models/ir_attachment.py index 57e396d..ecb1d85 100644 --- a/muk_utils/models/ir_attachment.py +++ b/muk_utils/models/ir_attachment.py @@ -1,102 +1,103 @@ -################################################################################### -# -# Copyright (c) 2017-2019 MuK IT GmbH. -# -# This file is part of MuK Utils -# (see https://mukit.at). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . -# -################################################################################### - -import logging - -from odoo import _, api, models -from odoo.exceptions import AccessError -from odoo.osv import expression - -_logger = logging.getLogger(__name__) - - -class IrAttachment(models.Model): - - _inherit = "ir.attachment" - - # ---------------------------------------------------------- - # Helper - # ---------------------------------------------------------- - - @api.model - def _get_storage_domain(self, storage): - return { - "db": [("db_datas", "=", False)], - "file": [("store_fname", "=", False)], - }[storage] - - # ---------------------------------------------------------- - # Actions - # ---------------------------------------------------------- - - def action_migrate(self): - self.migrate() - - # ---------------------------------------------------------- - # Functions - # ---------------------------------------------------------- - - @api.model - def storage_locations(self): - return ["db", "file"] - - @api.model - def force_storage(self): - """Force all attachments to be stored in the currently configured storage""" - if not self.env.user._is_admin(): - raise AccessError(_("Only administrators can execute this action.")) - self.search( - expression.AND( - [ - self._get_storage_domain(self._storage()), - [ - "&", - "|", - ("res_field", "=", False), - ("res_field", "!=", False), - ("type", "=", "binary"), - ], - ] - ) - ).migrate(batch_size=100) - return True - - def migrate(self, batch_size=None): - commit_on_batch = bool(batch_size) - attachments_to_migrate = len(self) - batch_size = batch_size or len(self) or 1 - storage_location = self._storage().upper() - for index, attachment in enumerate(self, start=1): - _logger.info( - "Migrate Attachment {index} of {total} to {storage}".format( - **{ - "index": index, - "total": attachments_to_migrate, - "storage": storage_location, - } - ) - ) - attachment.write( - {"datas": attachment.datas, "mimetype": attachment.mimetype} - ) - if commit_on_batch and not index % batch_size: - self.env.cr.commit() +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +import logging + +from odoo import _, api, models +from odoo.exceptions import AccessError +from odoo.osv import expression + +_logger = logging.getLogger(__name__) + + +class IrAttachment(models.Model): + + _inherit = "ir.attachment" + + # ---------------------------------------------------------- + # Helper + # ---------------------------------------------------------- + + @api.model + def _get_storage_domain(self, storage): + return { + "db": [("db_datas", "=", False)], + "file": [("store_fname", "=", False)], + }[storage] + + # ---------------------------------------------------------- + # Actions + # ---------------------------------------------------------- + + def action_migrate(self): + self.migrate() + + # ---------------------------------------------------------- + # Functions + # ---------------------------------------------------------- + + @api.model + def storage_locations(self): + return ["db", "file"] + + @api.model + def force_storage(self): + if not self._storage() in self.storage_locations(): + return super(IrAttachment, self).force_storage() + if not self.env.user._is_admin(): + raise AccessError(_("Only administrators can execute this action.")) + self.search( + expression.AND( + [ + self._get_storage_domain(self._storage()), + [ + "&", + "|", + ("res_field", "=", False), + ("res_field", "!=", False), + ("type", "=", "binary"), + ], + ] + ) + ).migrate(batch_size=100) + return True + + def migrate(self, batch_size=None): + commit_on_batch = bool(batch_size) + attachments_to_migrate = len(self) + batch_size = batch_size or len(self) or 1 + storage_location = self._storage().upper() + for index, attachment in enumerate(self, start=1): + _logger.info( + "Migrate Attachment {index} of {total} to {storage}".format( + **{ + "index": index, + "total": attachments_to_migrate, + "storage": storage_location, + } + ) + ) + attachment.write( + {"datas": attachment.datas, "mimetype": attachment.mimetype} + ) + if commit_on_batch and not index % batch_size: + self.env.cr.commit()