mirror of https://github.com/muk-it/muk_base
1 changed files with 103 additions and 102 deletions
@ -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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################### |
|||
|
|||
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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################### |
|||
|
|||
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() |
Write
Preview
Loading…
Cancel
Save
Reference in new issue