many pep8 improvements
This commit is contained in:
@@ -15,6 +15,7 @@ Symbian.
|
||||
"""
|
||||
import sys
|
||||
|
||||
|
||||
class DetectorsHub(dict):
|
||||
_known_types = ['os', 'dist', 'flavor', 'browser']
|
||||
|
||||
@@ -38,6 +39,7 @@ class DetectorsHub(dict):
|
||||
return detectors
|
||||
else:
|
||||
prefs.insert(0, '')
|
||||
|
||||
def key_name(d):
|
||||
return d.name in prefs and prefs.index(d.name) or sys.maxint
|
||||
return sorted(detectors, key=key_name)
|
||||
@@ -46,24 +48,24 @@ class DetectorsHub(dict):
|
||||
return iter(self._known_types)
|
||||
|
||||
def registerDetectors(self):
|
||||
detectors = [v() for v in globals().values() \
|
||||
if DetectorBase in getattr(v, '__mro__', [])]
|
||||
detectors = [v() for v in globals().values()
|
||||
if DetectorBase in getattr(v, '__mro__', [])]
|
||||
for d in detectors:
|
||||
if d.can_register:
|
||||
self.register(d)
|
||||
|
||||
|
||||
class DetectorBase(object):
|
||||
name = "" # "to perform match in DetectorsHub object"
|
||||
info_type = '' #override me
|
||||
result_key = '' #override me
|
||||
order = 10 # 0 is highest
|
||||
look_for = [] # list of words to look for
|
||||
skip_if_found = [] # strings if present stop processin
|
||||
name = "" # "to perform match in DetectorsHub object"
|
||||
info_type = '' # override me
|
||||
result_key = '' # override me
|
||||
order = 10 # 0 is highest
|
||||
look_for = [] # list of words to look for
|
||||
skip_if_found = [] # strings if present stop processin
|
||||
can_register = False
|
||||
is_mobile = False
|
||||
is_tablet = False
|
||||
prefs = dict() # dict(info_type = [name1, name2], ..)
|
||||
prefs = dict() # dict(info_type = [name1, name2], ..)
|
||||
version_splitters = ["/", " "]
|
||||
_suggested_detectors = None
|
||||
|
||||
@@ -75,8 +77,8 @@ class DetectorBase(object):
|
||||
def detect(self, agent, result):
|
||||
if agent and self.checkWords(agent):
|
||||
result[self.info_type] = dict(name=self.name)
|
||||
is_mobile=self.is_mobile
|
||||
is_tablet=self.is_tablet
|
||||
is_mobile = self.is_mobile
|
||||
is_tablet = self.is_tablet
|
||||
if is_mobile:
|
||||
result['is_mobile'] = is_mobile
|
||||
if is_tablet:
|
||||
@@ -131,6 +133,7 @@ class Browser(DetectorBase):
|
||||
class Macintosh(OS):
|
||||
look_for = ['Macintosh']
|
||||
prefs = dict(dist=None)
|
||||
|
||||
def getVersion(self, agent):
|
||||
pass
|
||||
|
||||
@@ -146,12 +149,15 @@ class Konqueror(Browser):
|
||||
|
||||
class Opera(Browser):
|
||||
look_for = ["Opera"]
|
||||
|
||||
def getVersion(self, agent):
|
||||
return agent.partition(self.look_for[0])[2][1:].partition(' ')[0]
|
||||
|
||||
|
||||
class Netscape(Browser):
|
||||
look_for = ["Netscape"]
|
||||
|
||||
|
||||
class MSIE(Browser):
|
||||
look_for = ["MSIE"]
|
||||
skip_if_found = ["Opera"]
|
||||
@@ -171,6 +177,7 @@ class Safari(Browser):
|
||||
if "Version/" in agent:
|
||||
return agent.partition('Version/')[2].partition(' ')[0].strip()
|
||||
|
||||
|
||||
class SafariTablet(Browser):
|
||||
name = "Safari"
|
||||
look_for = ['Safari', 'Android']
|
||||
@@ -182,6 +189,7 @@ class SafariTablet(Browser):
|
||||
if "Version/" in agent:
|
||||
return agent.partition('Version/')[2].partition(' ')[0].strip()
|
||||
|
||||
|
||||
class SafariMobile(Browser):
|
||||
name = "Safari"
|
||||
look_for = ["Safari", "Mobile"]
|
||||
@@ -191,6 +199,7 @@ class SafariMobile(Browser):
|
||||
if "Version/" in agent:
|
||||
return agent.partition('Version/')[2].partition(' ')[0].strip()
|
||||
|
||||
|
||||
class SafariNokia(Browser):
|
||||
name = "Safari"
|
||||
look_for = ["Safari", "SymbianOS"]
|
||||
@@ -199,6 +208,7 @@ class SafariNokia(Browser):
|
||||
def getVersion(self, agent):
|
||||
pass
|
||||
|
||||
|
||||
class SafariiPad(Browser):
|
||||
name = "Safari"
|
||||
look_for = ["Safari", "iPad"]
|
||||
@@ -218,9 +228,10 @@ class Linux(OS):
|
||||
def getVersion(self, agent):
|
||||
pass
|
||||
|
||||
|
||||
class BlackBerry(OS):
|
||||
look_for = ['BlackBerry']
|
||||
prefs = dict( flavor=['PlayBook'])
|
||||
prefs = dict(flavor=['PlayBook'])
|
||||
is_mobile = True
|
||||
|
||||
# Manual check for tablet
|
||||
@@ -232,14 +243,16 @@ class BlackBerry(OS):
|
||||
def getVersion(self, agent):
|
||||
pass
|
||||
|
||||
|
||||
class PlayBook(Flavor):
|
||||
look_for = ['PlayBook']
|
||||
is_mobile=True
|
||||
is_tablet=True
|
||||
is_mobile = True
|
||||
is_tablet = True
|
||||
|
||||
def getVersion(self, agent):
|
||||
return agent.partition('Tablet OS')[2].partition(';')[0].strip()
|
||||
|
||||
|
||||
class Macintosh(OS):
|
||||
look_for = ['Macintosh']
|
||||
prefs = dict(dist=None, flavor=['MacOS'])
|
||||
@@ -250,7 +263,8 @@ class Macintosh(OS):
|
||||
|
||||
class MacOS(Flavor):
|
||||
look_for = ['Mac OS']
|
||||
prefs = dict(browser=['Safari','SafariMobile', 'SafariIpad', 'Firefox', 'Opera', "Microsoft Internet Explorer"])
|
||||
prefs = dict(browser=['Safari', 'SafariMobile', 'SafariIpad',
|
||||
'Firefox', 'Opera', "Microsoft Internet Explorer"])
|
||||
|
||||
def getVersion(self, agent):
|
||||
version_end_chars = [';', ')']
|
||||
@@ -269,7 +283,8 @@ class Windows(OS):
|
||||
|
||||
def getVersion(self, agent):
|
||||
v = agent.partition('NT')
|
||||
return v[1]+' '+v[2].replace(')',';').partition(';')[0].strip()
|
||||
return v[1] + ' ' + v[2].replace(')', ';').partition(';')[0].strip()
|
||||
|
||||
|
||||
class WindowsMobile(Dist):
|
||||
name = 'Phone'
|
||||
@@ -277,7 +292,8 @@ class WindowsMobile(Dist):
|
||||
is_mobile = True
|
||||
|
||||
def getVersion(self, agent):
|
||||
return agent.partition('Windows Phone')[2].replace(')','').partition(';')[0].strip()
|
||||
return agent.partition('Windows Phone')[2].replace(')', '').partition(';')[0].strip()
|
||||
|
||||
|
||||
class Ubuntu(Dist):
|
||||
look_for = ['Ubuntu']
|
||||
@@ -295,13 +311,16 @@ class Chrome(Browser):
|
||||
look_for = ['Chrome']
|
||||
version_splitters = ["/", " "]
|
||||
|
||||
|
||||
class ChromeOS(OS):
|
||||
look_for = ['CrOS']
|
||||
version_splitters = [" ", ")"]
|
||||
prefs = dict(browser=['Chrome'])
|
||||
|
||||
def getVersion(self, agent):
|
||||
vs = self.version_splitters
|
||||
return agent.partition(self.look_for[0]+vs[0])[2].partition(vs[1])[0].partition(" ")[2].strip()
|
||||
return agent.partition(self.look_for[0] + vs[0])[2].partition(vs[1])[0].partition(" ")[2].strip()
|
||||
|
||||
|
||||
class Android(Dist):
|
||||
look_for = ['Android']
|
||||
@@ -311,23 +330,27 @@ class Android(Dist):
|
||||
def getVersion(self, agent):
|
||||
return agent.partition('Android')[2].partition(';')[0].strip()
|
||||
|
||||
|
||||
class SymbianOS(OS):
|
||||
look_for = ['SymbianOS']
|
||||
prefs = dict(dist = ['Series'], browser = ['Safari', 'Opera'])
|
||||
prefs = dict(dist=['Series'], browser=['Safari', 'Opera'])
|
||||
is_mobile = True
|
||||
version_splitters = ['/', '; ']
|
||||
|
||||
|
||||
class Series(Flavor):
|
||||
look_for = ['SymbianOS', 'Series']
|
||||
version_splitters = ['/', ';']
|
||||
|
||||
def getVersion(self, agent):
|
||||
return agent.partition('Series')[2].partition(' ')[0].replace('/',' ')
|
||||
return agent.partition('Series')[2].partition(' ')[0].replace('/', ' ')
|
||||
|
||||
|
||||
class BrowserNG(Browser):
|
||||
look_for = ['BrowserNG']
|
||||
version_splitters = ['/', ';']
|
||||
|
||||
|
||||
class iPhone(Dist):
|
||||
look_for = ['iPhone']
|
||||
is_mobile = True
|
||||
@@ -344,6 +367,7 @@ class iPhone(Dist):
|
||||
break
|
||||
return version.replace('_', '.')
|
||||
|
||||
|
||||
class iPad(Dist):
|
||||
look_for = ['iPad']
|
||||
is_mobile = True
|
||||
@@ -362,6 +386,7 @@ class iPad(Dist):
|
||||
|
||||
detectorshub = DetectorsHub()
|
||||
|
||||
|
||||
def detect(agent):
|
||||
result = dict()
|
||||
prefs = dict()
|
||||
@@ -385,21 +410,26 @@ class Result(dict):
|
||||
def __missing__(self, k):
|
||||
return ""
|
||||
|
||||
|
||||
def simple_detect(agent):
|
||||
"""
|
||||
-> (os, browser, is_mobile) # tuple of strings
|
||||
"""
|
||||
result = detect(agent)
|
||||
os_list = []
|
||||
if 'flavor' in result: os_list.append(result['flavor']['name'])
|
||||
if 'dist' in result: os_list.append(result['dist']['name'])
|
||||
if 'os' in result: os_list.append(result['os']['name'])
|
||||
if 'flavor' in result:
|
||||
os_list.append(result['flavor']['name'])
|
||||
if 'dist' in result:
|
||||
os_list.append(result['dist']['name'])
|
||||
if 'os' in result:
|
||||
os_list.append(result['os']['name'])
|
||||
|
||||
os = os_list and " ".join(os_list) or "Unknown OS"
|
||||
os_version = os_list and ('flavor' in result and result['flavor'] and result['flavor'].get(
|
||||
'version')) or ('dist' in result and result['dist'] and result['dist'].get('version')) \
|
||||
or ('os' in result and result['os'] and result['os'].get('version')) or ""
|
||||
browser = 'browser' in result and result['browser']['name'] or 'Unknown Browser'
|
||||
'version')) or ('dist' in result and result['dist'] and result['dist'].get('version')) \
|
||||
or ('os' in result and result['os'] and result['os'].get('version')) or ""
|
||||
browser = 'browser' in result and result['browser'][
|
||||
'name'] or 'Unknown Browser'
|
||||
browser_version = 'browser' in result \
|
||||
and result['browser'].get('version') or ""
|
||||
if browser_version:
|
||||
@@ -417,64 +447,82 @@ if __name__ == '__main__':
|
||||
data = (
|
||||
|
||||
|
||||
('Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120c/3.83; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413',
|
||||
('Series SymbianOS 60 3.1', 'Safari', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'flavor': {'name': 'Series', 'version': '60 3.1'}, 'os': {'name': 'SymbianOS', 'version': '9.2'}, 'browser': {'name': 'Safari'}},),
|
||||
('Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124',
|
||||
('Series SymbianOS 60 5.0', 'BrowserNG 7.1.18124', True),
|
||||
(
|
||||
'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120c/3.83; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413',
|
||||
('Series SymbianOS 60 3.1', 'Safari', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'flavor': {'name': 'Series', 'version': '60 3.1'}, 'os': {'name': 'SymbianOS', 'version': '9.2'}, 'browser': {'name': 'Safari'}},),
|
||||
(
|
||||
'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124',
|
||||
('Series SymbianOS 60 5.0', 'BrowserNG 7.1.18124', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'flavor': {'name': 'Series', 'version': '60 5.0'}, 'os': {'name': 'SymbianOS', 'version': '9.4'}, 'browser': {'name': 'BrowserNG', 'version': '7.1.18124'}},),
|
||||
('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Windows Phone 6.5.3.5)',
|
||||
('Phone Windows 6.5.3.5', 'Microsoft Internet Explorer 6.0', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'dist': {'name': 'Phone', 'version': '6.5.3.5'}, 'os': {'name': 'Windows', 'version': 'NT 5.1'}, 'browser': {'name': 'Microsoft Internet Explorer', 'version': '6.0'}},),
|
||||
('Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+',
|
||||
('PlayBook BlackBerry 1.0.0', 'Safari 0.0.1', True),
|
||||
(
|
||||
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Windows Phone 6.5.3.5)',
|
||||
('Phone Windows 6.5.3.5', 'Microsoft Internet Explorer 6.0', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'dist': {'name': 'Phone', 'version': '6.5.3.5'}, 'os': {'name': 'Windows', 'version': 'NT 5.1'}, 'browser': {'name': 'Microsoft Internet Explorer', 'version': '6.0'}},),
|
||||
(
|
||||
'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+',
|
||||
('PlayBook BlackBerry 1.0.0', 'Safari 0.0.1', True),
|
||||
{'is_mobile': True, 'is_tablet': True, 'flavor': {'name': 'PlayBook', 'version': '1.0.0'}, 'os': {'name': 'BlackBerry'}, 'browser': {'name': 'Safari', 'version': '0.0.1'}},),
|
||||
('Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-US) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.246 Mobile Safari/534.1+',
|
||||
('BlackBerry', 'Safari 6.0.0.246', True),
|
||||
(
|
||||
'Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-US) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.246 Mobile Safari/534.1+',
|
||||
('BlackBerry', 'Safari 6.0.0.246', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'os': {'name': 'BlackBerry'}, 'browser': {'name': 'Safari', 'version': '6.0.0.246'}},),
|
||||
('Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.600 Mobile Safari/534.8+',
|
||||
('BlackBerry', 'Safari 6.0.0.600', True),
|
||||
(
|
||||
'Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.600 Mobile Safari/534.8+',
|
||||
('BlackBerry', 'Safari 6.0.0.600', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'os': {'name': 'BlackBerry'}, 'browser': {'name': 'Safari', 'version': '6.0.0.600'}},),
|
||||
('Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5',
|
||||
('MacOS iPad X', 'Safari 5.0.2', True),
|
||||
{'is_mobile': True, 'is_tablet': True, 'flavor': {'version': 'X', 'name': 'MacOS'}, 'dist': {'version': 'iOS 4.2.1', 'name': 'iPad'}, 'browser': {'name': 'Safari', 'version': '5.0.2'}},),
|
||||
('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127 Netscape/8.1',
|
||||
('Windows NT 5.1', 'Netscape 8.1', False),
|
||||
(
|
||||
'Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5',
|
||||
('MacOS iPad X', 'Safari 5.0.2', True),
|
||||
{'is_mobile': True, 'is_tablet': True, 'flavor': {'version': 'X', 'name': 'MacOS'}, 'dist': {'version': 'iOS 4.2.1', 'name': 'iPad'}, 'browser': {'name': 'Safari', 'version': '5.0.2'}},),
|
||||
(
|
||||
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127 Netscape/8.1',
|
||||
('Windows NT 5.1', 'Netscape 8.1', False),
|
||||
{'is_mobile': False, 'is_tablet': False, 'os': {'name': 'Windows', 'version': 'NT 5.1'}, 'browser': {'name': 'Netscape', 'version': '8.1'}},),
|
||||
('Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13',
|
||||
('Android Linux 3.0.1', 'Safari 4.0', True),
|
||||
(
|
||||
'Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13',
|
||||
('Android Linux 3.0.1', 'Safari 4.0', True),
|
||||
{'is_mobile': True, 'is_tablet': True, 'dist': {'version': '3.0.1', 'name': 'Android'}, 'os': {'name': 'Linux'}, 'browser': {'version': '4.0', 'name': 'Safari'}},),
|
||||
('Mozilla/5.0 (Linux; U; Android 2.3.7; it-it; Dream/Sapphire Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
||||
('Android Linux 2.3.7', 'Safari 4.0', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'dist': {'version': '2.3.7', 'name': 'Android'}, 'os': {'name': 'Linux'}, 'browser': {'version': '4.0', 'name': 'Safari'}},),
|
||||
('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10',
|
||||
('MacOS Macintosh X 10.5', 'Firefox 3.0.10', False),
|
||||
{ 'is_mobile': False, 'is_tablet': False, 'flavor': {'version': 'X 10.5', 'name': 'MacOS'}, 'os': {'name': 'Macintosh'}, 'browser': {'version': '3.0.10', 'name': 'Firefox'}},),
|
||||
('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.3 Safari/534.24,gzip(gfe)',
|
||||
('MacOS Macintosh X 10.6.6', 'Chrome 11.0.696.3', False),
|
||||
(
|
||||
'Mozilla/5.0 (Linux; U; Android 2.3.7; it-it; Dream/Sapphire Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
||||
('Android Linux 2.3.7', 'Safari 4.0', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'dist': {'version': '2.3.7', 'name': 'Android'}, 'os': {'name': 'Linux'}, 'browser': {'version': '4.0', 'name': 'Safari'}},),
|
||||
(
|
||||
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10',
|
||||
('MacOS Macintosh X 10.5', 'Firefox 3.0.10', False),
|
||||
{'is_mobile': False, 'is_tablet': False, 'flavor': {'version': 'X 10.5', 'name': 'MacOS'}, 'os': {'name': 'Macintosh'}, 'browser': {'version': '3.0.10', 'name': 'Firefox'}},),
|
||||
(
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.3 Safari/534.24,gzip(gfe)',
|
||||
('MacOS Macintosh X 10.6.6', 'Chrome 11.0.696.3', False),
|
||||
{'is_mobile': False, 'is_tablet': False, 'flavor': {'version': 'X 10.6.6', 'name': 'MacOS'}, 'os': {'name': 'Macintosh'}, 'browser': {'version': '11.0.696.3', 'name': 'Chrome'}},),
|
||||
('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2) Gecko/20100308 Ubuntu/10.04 (lucid) Firefox/3.6 GTB7.1',
|
||||
('Ubuntu Linux 10.04', 'Firefox 3.6', False),
|
||||
(
|
||||
'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2) Gecko/20100308 Ubuntu/10.04 (lucid) Firefox/3.6 GTB7.1',
|
||||
('Ubuntu Linux 10.04', 'Firefox 3.6', False),
|
||||
{'is_mobile': False, 'is_tablet': False, 'dist': {'version': '10.04', 'name': 'Ubuntu'}, 'os': {'name': 'Linux'}, 'browser': {'version': '3.6', 'name': 'Firefox'}},),
|
||||
('Mozilla/5.0 (Linux; U; Android 2.2.1; fr-ch; A43 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
||||
('Android Linux 2.2.1', 'Safari 4.0', True),
|
||||
(
|
||||
'Mozilla/5.0 (Linux; U; Android 2.2.1; fr-ch; A43 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
||||
('Android Linux 2.2.1', 'Safari 4.0', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'dist': {'version': '2.2.1', 'name': 'Android'}, 'os': {'name': 'Linux'}, 'browser': {'version': '4.0', 'name': 'Safari'}},),
|
||||
('Mozilla/5.0 (Linux; U; Android 2.3.4; it-it; LG-P990 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2',
|
||||
('Android Linux 2.3.4', 'Safari 4.0', True),
|
||||
(
|
||||
'Mozilla/5.0 (Linux; U; Android 2.3.4; it-it; LG-P990 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2',
|
||||
('Android Linux 2.3.4', 'Safari 4.0', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'dist': {'version': '2.3.4', 'name': 'Android'}, 'os': {'name': 'Linux'}, 'browser': {'version': '4.0', 'name': 'Safari'}},),
|
||||
('Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3',
|
||||
('MacOS iPhone X', 'Safari 3.0', True),
|
||||
(
|
||||
'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3',
|
||||
('MacOS iPhone X', 'Safari 3.0', True),
|
||||
{'is_mobile': True, 'is_tablet': False, 'flavor': {'version': 'X', 'name': 'MacOS'}, 'dist': {'version': 'X', 'name': 'iPhone'}, 'browser': {'version': '3.0', 'name': 'Safari'}},),
|
||||
('Mozilla/5.0 (X11; CrOS i686 0.0.0) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.27 Safari/534.24,gzip(gfe)',
|
||||
('ChromeOS 0.0.0', 'Chrome 11.0.696.27', False),
|
||||
(
|
||||
'Mozilla/5.0 (X11; CrOS i686 0.0.0) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.27 Safari/534.24,gzip(gfe)',
|
||||
('ChromeOS 0.0.0', 'Chrome 11.0.696.27', False),
|
||||
{'is_mobile': False, 'is_tablet': False, 'os': {'name': 'ChromeOS', 'version': '0.0.0'}, 'browser': {'name': 'Chrome', 'version': '11.0.696.27'}},),
|
||||
('Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.02 [en]',
|
||||
('Windows NT 5.1', 'Opera 7.02', False),
|
||||
(
|
||||
'Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.02 [en]',
|
||||
('Windows NT 5.1', 'Opera 7.02', False),
|
||||
{'is_mobile': False, 'is_tablet': False, 'os': {'name': 'Windows', 'version': 'NT 5.1'}, 'browser': {'name': 'Opera', 'version': '7.02'}},),
|
||||
('Opera/9.80 (X11; Linux i686; U; en) Presto/2.9.168 Version/11.50',
|
||||
('Linux', 'Opera 9.80', False),
|
||||
{'is_mobile': False, 'is_tablet': False, 'os': {'name': 'Linux'}, 'browser': {'name': 'Opera', 'version': '9.80'}},),
|
||||
)
|
||||
)
|
||||
|
||||
class TestHAP(unittest.TestCase):
|
||||
def setUp(self):
|
||||
@@ -513,6 +561,6 @@ class mobilize(object):
|
||||
user_agent = current.request.user_agent()
|
||||
if user_agent.is_mobile:
|
||||
items = current.response.view.split('.')
|
||||
items.insert(-1,'mobile')
|
||||
items.insert(-1, 'mobile')
|
||||
current.response.view = '.'.join(items)
|
||||
return self.func()
|
||||
|
||||
Reference in New Issue
Block a user