server-tools/attachment_synchronize/models/attachment_queue.py

51 lines
1.6 KiB
Python

# @ 2016 Florian DA COSTA @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import base64
from odoo import api, fields, models
class AttachmentQueue(models.Model):
_inherit = "attachment.queue"
task_id = fields.Many2one("attachment.synchronize.task", string="Task")
method_type = fields.Selection(related="task_id.method_type")
fs_storage_id = fields.Many2one(
"fs.storage",
string="Filestore Storage",
related="task_id.backend_id",
store=True,
)
file_type = fields.Selection(
selection_add=[("export", "Export File (External location)")]
)
def _run(self):
res = super()._run()
if self.file_type == "export":
fs = self.fs_storage_id.fs
folder_path = self.task_id.filepath
full_path = (
folder_path and fs.sep.join([folder_path, self.name]) or self.name
)
# create missing folders if necessary :
if folder_path and not fs.exists(folder_path):
fs.makedirs(folder_path)
data = base64.b64decode(self.datas)
with fs.open(full_path, "wb") as f:
f.write(data)
return res
def _get_failure_emails(self):
res = super()._get_failure_emails()
if self.task_id.failure_emails:
res = self.task_id.failure_emails
return res
@api.onchange("task_id")
def onchange_task_id(self):
for attachment in self:
if attachment.task_id.method_type == "export":
attachment.file_type = "export"