from odoo import models from odoo.http import request import datetime from pytz import timezone import hashlib import base64 class RestApi(models.TransientModel): _name = 'rest.api' def datetime_to_str(self, object, format): time = '' if isinstance(object, datetime.datetime): time = object.astimezone(timezone('Asia/Jakarta')).strftime(format) return time def md5_salt(self, value, salt): return hashlib.md5((salt + '$' + str(value)).encode()).hexdigest() def md5_salt_valid(self, value, salt, token): return hashlib.md5((salt + '$' + str(value)).encode()).hexdigest() == token def get_single_attachment(self, model, field, id): domain = [ ('res_model', '=', model), ('res_field', '=', field), ('res_id', '=', id), ] fields = ['datas', 'mimetype'] result = self.env['ir.attachment'].sudo().search_read(domain, fields) return result[0] if len(result) > 0 else None def response_attachment(self, data = {}): decode_content = data.get('decode_content', False) if decode_content: data['content'] = base64.b64decode(data['content']) return request.make_response( data['content'], [ ('Content-Type', data['mimetype']), ('Content-Disposition', 'attachment; filename=%s' % data['filename']), ('Content-Length', len(data['content'])) ] )