From 42d4deb469094294adec8c747bb8a3a20c026410 Mon Sep 17 00:00:00 2001 From: ivan deng Date: Mon, 14 Jun 2021 18:02:56 +0800 Subject: [PATCH] fix common --- app_common/__init__.py | 2 +- app_common/__manifest__.py | 13 ++++--- app_common/controllers/__init__.py | 1 + app_common/controllers/main.py | 56 +++++++++++++++++++++++++++++- app_common/models/base.py | 2 +- 5 files changed, 66 insertions(+), 8 deletions(-) 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