diff --git a/app_common/__init__.py b/app_common/__init__.py
index a3657ef9..7f49029b 100644
--- a/app_common/__init__.py
+++ b/app_common/__init__.py
@@ -4,4 +4,4 @@ from . import controllers
from . import models
from .hooks import pre_init_hook
from .hooks import post_init_hook
-from .hooks import uninstall_hook
\ No newline at end of file
+from .hooks import uninstall_hook
diff --git a/app_common/__manifest__.py b/app_common/__manifest__.py
index c313e426..163bac17 100644
--- a/app_common/__manifest__.py
+++ b/app_common/__manifest__.py
@@ -33,7 +33,7 @@
{
'name': "Sunpop Odooapp Common Func",
- 'version': '13.21.01.27',
+ 'version': '13.21.06.13',
'author': 'Sunpop.cn',
'category': 'Base',
'website': 'https://www.sunpop.cn',
@@ -42,10 +42,6 @@
'price': 0.00,
'currency': 'EUR',
'images': ['static/description/banner.png'],
- 'depends': [
- 'base',
- 'web',
- ],
'summary': '''
Core for common use sunpop apps.
基础核心,必须没有要被依赖字段及视图等,实现auto_install
@@ -64,6 +60,13 @@
4. 多公司支持
5. Odoo 13, 12, 企业版,社区版,多版本支持
''',
+ 'depends': [
+ 'base',
+ 'web',
+ ],
+ 'external_dependencies': {
+ 'python': ['pyyaml', 'ua-parser', 'user-agents'],
+ },
'data': [
# 'security/*.xml',
# 'security/ir.model.access.csv',
diff --git a/app_common/controllers/__init__.py b/app_common/controllers/__init__.py
index cd4d6a8b..6920e202 100644
--- a/app_common/controllers/__init__.py
+++ b/app_common/controllers/__init__.py
@@ -1,2 +1,3 @@
# -*- coding: utf-8 -*-
+
from . import main
\ No newline at end of file
diff --git a/app_common/controllers/main.py b/app_common/controllers/main.py
index c52e75fb..47f06242 100644
--- a/app_common/controllers/main.py
+++ b/app_common/controllers/main.py
@@ -3,10 +3,16 @@
import base64
from io import BytesIO
import requests
+from user_agents import parse
from odoo import api, http, SUPERUSER_ID, _
+from odoo import http, exceptions
+from odoo.http import request
-class ImageController(http.Controller):
+import logging
+_logger = logging.getLogger(__name__)
+
+class AppController(http.Controller):
def get_image_from_url(self, url):
if not url:
@@ -17,3 +23,51 @@ class ImageController(http.Controller):
return None
# 返回这个图片的base64编码
return base64.b64encode(BytesIO(response.content).read())
+
+ @http.route('/web/ua/show', auth='public', methods=['GET'])
+ def app_ua_show(self):
+ # https://github.com/selwin/python-user-agents
+ ua_string = request.httprequest.headers.get('User-Agent')
+ user_agent = parse(ua_string)
+ ua_type = self.get_ua_type()
+ ustr = "Request UA:
%s
Parse UA:
%s
UA Type:
%s
" % (ua_string, str(user_agent), ua_type)
+ return request.make_response(ustr, [('Content-Type', 'text/html')])
+
+ def get_ua_type(self):
+ ua = request.httprequest.headers.get('User-Agent')
+ # 临时用 agent 处理,后续要前端中正确处理或者都从后台来
+ # 微信浏览器
+ # MicroMessenger: Mozilla/5.0 (Linux; Android 10; ELE-AL00 Build/HUAWEIELE-AL00; wv)
+ # AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120
+ # MQQBrowser/6.2 TBS/045525 Mobile Safari/537.36 MMWEBID/3135 MicroMessenger/8.0.2.1860(0x2800023B) Process/tools WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64
+ # 微信浏览器,开发工具,网页 iphone
+ # ,Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
+ # wechatdevtools/1.03.2011120 MicroMessenger/7.0.4 Language/zh_CN webview/16178807094901773
+ # webdebugger port/27772 token/b91f4a234b918f4e2a5d1a835a09c31e
+
+ # 微信小程序
+ # MicroMessenger: Mozilla/5.0 (Linux; Android 10; ELE-AL00 Build/HUAWEIELE-AL00; wv)
+ # AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.62 XWEB/2767 MMWEBSDK/20210302 Mobile Safari/537.36 MMWEBID/6689 MicroMessenger/8.0.2.1860(0x2800023B) Process/appbrand2 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64
+ # MiniProgramEnv/android
+ # 微信浏览器,开发工具,小程序,iphone
+ # Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
+ # wechatdevtools/1.03.2011120 MicroMessenger/7.0.4 Language/zh_CN webview/
+ # 微信内,iphone web
+ # Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+ # MicroMessenger/8.0.3(0x1800032a) NetType/WIFI Language/zh_CN
+ # 安卓app,h5
+ # ELE-AL00(Android/10) (cn.erpapp.o20sticks.App/13.20.12.09) Weex/0.26.0 1080x2265
+
+ utype = 'web'
+ # todo: 引入现成 py lib,处理企业微信
+ if 'MicroMessenger' in ua and 'webdebugger' not in ua and ('MiniProgramEnv' in ua or 'wechatdevtools' in ua):
+ # 微信小程序及开发者工具
+ utype = 'wxapp'
+ elif 'MicroMessenger' in ua:
+ # 微信浏览器
+ utype = 'wxweb'
+ elif 'cn.erpapp.o20sticks.App' in ua:
+ # 安卓app
+ utype = 'native_android'
+ _logger.warning('=========get ua %s,%s' % (utype, ua))
+ return utype
diff --git a/app_common/models/base.py b/app_common/models/base.py
index 4ea24d44..8b927b2f 100644
--- a/app_common/models/base.py
+++ b/app_common/models/base.py
@@ -48,5 +48,5 @@ class Base(models.AbstractModel):
@api.model
def get_image_from_url(self, url):
- res = imgc.ImageController.get_image_from_url(url)
+ res = imgc.AppController.get_image_from_url(url)
return res
\ No newline at end of file