mirror of
https://github.com/guohuadeng/app-odoo.git
synced 2025-02-23 04:11:36 +02:00
sync base from 16
This commit is contained in:
@@ -1,18 +1,19 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from odoo import models, fields, api, _
|
|
||||||
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
|
|
||||||
from odoo.http import request
|
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import base64
|
import base64
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import uuid
|
import uuid
|
||||||
|
from PIL import Image
|
||||||
from datetime import date, datetime, time
|
from datetime import date, datetime, time
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
|
||||||
|
from odoo.http import request
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# 常规的排除的fields
|
# 常规的排除的fields
|
||||||
@@ -75,7 +76,10 @@ class Base(models.AbstractModel):
|
|||||||
else:
|
else:
|
||||||
if not domain:
|
if not domain:
|
||||||
domain = self._fields[fieldname].domain or []
|
domain = self._fields[fieldname].domain or []
|
||||||
rec = self.env[self._fields[fieldname].comodel_name].sudo().search(domain, limit=1)
|
try:
|
||||||
|
rec = self.env[self._fields[fieldname].comodel_name].search(domain, limit=1)
|
||||||
|
except Exception as e:
|
||||||
|
rec = self.env[self._fields[fieldname].comodel_name].search([], limit=1)
|
||||||
return rec.id if rec else False
|
return rec.id if rec else False
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -127,6 +131,7 @@ class Base(models.AbstractModel):
|
|||||||
'website_id': False,
|
'website_id': False,
|
||||||
'res_model': self._name,
|
'res_model': self._name,
|
||||||
'res_id': self.id,
|
'res_id': self.id,
|
||||||
|
'public': True,
|
||||||
})
|
})
|
||||||
attachment.generate_access_token()
|
attachment.generate_access_token()
|
||||||
return attachment
|
return attachment
|
||||||
@@ -149,6 +154,7 @@ class Base(models.AbstractModel):
|
|||||||
'website_id': False,
|
'website_id': False,
|
||||||
'res_model': self._name,
|
'res_model': self._name,
|
||||||
'res_id': self.id,
|
'res_id': self.id,
|
||||||
|
'public': True,
|
||||||
})
|
})
|
||||||
attachment.generate_access_token()
|
attachment.generate_access_token()
|
||||||
return attachment
|
return attachment
|
||||||
@@ -158,10 +164,32 @@ class Base(models.AbstractModel):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _get_video_url2attachment(self, url):
|
||||||
|
if not self._app_check_sys_op():
|
||||||
|
return False
|
||||||
|
video, file_name = get_video_url2attachment(url)
|
||||||
|
if video and file_name:
|
||||||
|
try:
|
||||||
|
attachment = self.env['ir.attachment'].create({
|
||||||
|
'datas': video,
|
||||||
|
'name': file_name,
|
||||||
|
'website_id': False,
|
||||||
|
'res_model': self._name,
|
||||||
|
'res_id': self.id,
|
||||||
|
'public': True,
|
||||||
|
})
|
||||||
|
attachment.generate_access_token()
|
||||||
|
return attachment
|
||||||
|
except Exception as e:
|
||||||
|
_logger.error('get_video_url2attachment error: %s' % str(e))
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
def get_ua_type(self):
|
def get_ua_type(self):
|
||||||
return get_ua_type()
|
return get_ua_type()
|
||||||
|
|
||||||
|
|
||||||
def get_image_from_url(url):
|
def get_image_from_url(url):
|
||||||
if not url:
|
if not url:
|
||||||
return None
|
return None
|
||||||
@@ -179,7 +207,7 @@ def get_image_url2attachment(url):
|
|||||||
try:
|
try:
|
||||||
if url.startswith('//'):
|
if url.startswith('//'):
|
||||||
url = 'https:%s' % url
|
url = 'https:%s' % url
|
||||||
response = requests.get(url, timeout=30)
|
response = requests.get(url, timeout=90)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return None, None
|
return None, None
|
||||||
# 返回这个图片的base64编码
|
# 返回这个图片的base64编码
|
||||||
@@ -193,11 +221,31 @@ def get_image_base642attachment(data):
|
|||||||
return None
|
return None
|
||||||
try:
|
try:
|
||||||
image_data = data.split(',')[1]
|
image_data = data.split(',')[1]
|
||||||
file_name = str(uuid.uuid4()) + '.png'
|
img = Image.open(BytesIO(base64.b64decode(image_data)))
|
||||||
return image_data, file_name
|
img = img.convert('RGB')
|
||||||
|
output = BytesIO()
|
||||||
|
img.save(output, format='JPEG')
|
||||||
|
file_name = str(uuid.uuid4()) + '.jpeg'
|
||||||
|
jpeg_data = output.getvalue()
|
||||||
|
jpeg_base64 = base64.b64encode(jpeg_data)
|
||||||
|
return jpeg_base64, file_name
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
|
def get_video_url2attachment(url):
|
||||||
|
if not url:
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
if url.startswith('//'):
|
||||||
|
url = 'https:%s' % url
|
||||||
|
response = requests.get(url, timeout=90)
|
||||||
|
video_content = response.content
|
||||||
|
except Exception as e:
|
||||||
|
return None, None
|
||||||
|
# return this video in base64
|
||||||
|
base64_video = base64.b64encode(video_content)
|
||||||
|
file_name = url.split('/')[-1]
|
||||||
|
return base64_video, file_name
|
||||||
|
|
||||||
def get_ua_type():
|
def get_ua_type():
|
||||||
ua = request.httprequest.headers.get('User-Agent')
|
ua = request.httprequest.headers.get('User-Agent')
|
||||||
@@ -232,11 +280,15 @@ def get_ua_type():
|
|||||||
and ('miniProgram' in ua or 'MiniProgram' in ua or 'MiniProgramEnv' in ua or 'wechatdevtools' in ua):
|
and ('miniProgram' in ua or 'MiniProgram' in ua or 'MiniProgramEnv' in ua or 'wechatdevtools' in ua):
|
||||||
# 微信小程序及开发者工具
|
# 微信小程序及开发者工具
|
||||||
utype = 'wxapp'
|
utype = 'wxapp'
|
||||||
|
elif 'wxwork' in ua:
|
||||||
|
utype = 'qwapp'
|
||||||
elif 'MicroMessenger' in ua:
|
elif 'MicroMessenger' in ua:
|
||||||
# 微信浏览器
|
# 微信浏览器
|
||||||
utype = 'wxweb'
|
utype = 'wxweb'
|
||||||
elif 'cn.erpapp.o20sticks.App' in ua:
|
elif 'cn.erpapp.o20sticks.App' in ua:
|
||||||
# 安卓app
|
# 安卓app
|
||||||
utype = 'native_android'
|
utype = 'native_android'
|
||||||
|
elif 'BytedanceWebview' in ua:
|
||||||
|
utype = 'dyweb'
|
||||||
# _logger.warning('=========get ua %s,%s' % (utype, ua))
|
# _logger.warning('=========get ua %s,%s' % (utype, ua))
|
||||||
return utype
|
return utype
|
||||||
|
|||||||
Reference in New Issue
Block a user