diff --git a/tests/browser-test.json b/tests/browser-test.json index 60f2662..bd1f098 100644 --- a/tests/browser-test.json +++ b/tests/browser-test.json @@ -170,15 +170,6 @@ "major": "20" } }, - { - "desc": "Chrome", - "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4758.102 Safari/537.36", - "expect": { - "name": "Chrome", - "version": "100.0.4758.102", - "major": "100" - } - }, { "desc": "Chrome Headless", "ua": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome Safari/537.36", @@ -377,15 +368,6 @@ "major": "15" } }, - { - "desc": "Firefox", - "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0", - "expect": { - "name": "Firefox", - "version": "100.0", - "major": "100" - } - }, { "desc": "Firefox Reality", "ua": "Mozilla/5.0 (Android 7.1.2; Mobile VR; rv:65.0) Gecko/65.0 Firefox/65.0", @@ -1151,15 +1133,6 @@ "major": "18" } }, - { - "desc": "Microsoft Edge 100", - "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.1108.55 Safari/537.36 Edg/100.0.1108.55", - "expect": { - "name": "Edge", - "version": "100.0.1108.55", - "major": "100" - } - }, { "desc": "Microsoft Edge on iOS", "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 EdgiOS/42.1.1.0 Mobile/15F79 Safari/605.1.15", @@ -1348,14 +1321,5 @@ "version": "4.2.7", "major": "4" } - }, - { - "desc": "IE11 on Windows 7 (ua length >255)", - "ua": "Mozilla/5.0 (Windows NT 6.1; WOW64; APCPMS=^N201205020840572565478A37A6F9C41BD33F_9975^; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; MARKANYEPS#25118; Zoom 3.6.0; rv:11.0) like Gecko", - "expect": { - "name": "IE", - "version": "11.0", - "major": "11" - } } ] diff --git a/tests/device-test.json b/tests/device-test.json index cd5a17b..84c5431 100644 --- a/tests/device-test.json +++ b/tests/device-test.json @@ -269,24 +269,6 @@ "type": "mobile" } }, - { - "desc": "Huawei Honor 20 Pro", - "ua": "Mozilla/5.0 (Linux; Android 10; YAL-L41) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "YAL-L41", - "type": "mobile" - } - }, - { - "desc": "Huawei Honor 20 Pro", - "ua": "Mozilla/5.0 (Linux; Android 10; YAL-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "YAL-AL10", - "type": "mobile" - } - }, { "desc": "Huawei Nexus 6P", "ua": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6P Build/MTC19V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.81 Mobile Safari/537", @@ -440,42 +422,6 @@ "type": "mobile" } }, - { - "desc": "Huawei Mate 20 Pro", - "ua": "Mozilla/5.0 (Linux; Android 9; LYA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "LYA-AL10", - "type": "mobile" - } - }, - { - "desc": "Huawei Mate 20 Pro", - "ua": "Mozilla/5.0 (Linux; Android 9; LYA-L0C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "LYA-L0C", - "type": "mobile" - } - }, - { - "desc": "Huawei Mate 20 Pro", - "ua": "Mozilla/5.0 (Linux; Android 9; LYA-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "LYA-L29", - "type": "mobile" - } - }, - { - "desc": "Huawei Mate 20 Pro", - "ua": "Mozilla/5.0 (Linux; Android 9; LYA-TL00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "LYA-TL00", - "type": "mobile" - } - }, { "desc": "Huawei P20 Lite", "ua": "Mozilla/5.0 (Linux; Android 8.0.0; ANE-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36", @@ -557,69 +503,6 @@ "type": "mobile" } }, - { - "desc": "Huawei Nova 5T", - "ua": "Mozilla/5.0 (Linux; Android 10; YAL-L21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "YAL-L21", - "type": "mobile" - } - }, - { - "desc": "Huawei Nova 5T", - "ua": "Mozilla/5.0 (Linux; Android 10; YAL-L61) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "YAL-L61", - "type": "mobile" - } - }, - { - "desc": "Huawei Nova 5T", - "ua": "Mozilla/5.0 (Linux; Android 10; YAL-L71) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "YAL-L71", - "type": "mobile" - } - }, - { - "desc": "Huawei Nova 5T", - "ua": "Mozilla/5.0 (Linux; Android 10; YAL-L61D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "YAL-L61D", - "type": "mobile" - } - }, - { - "desc": "Huawei Nova 5T", - "ua": "Mozilla/5.0 (Linux; Android 10; YALE-L61A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "YALE-L61A", - "type": "mobile" - } - }, - { - "desc": "Huawei Nova 5T", - "ua": "Mozilla/5.0 (Linux; Android 10; YALE-L61D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "YALE-L61D", - "type": "mobile" - } - }, - { - "desc": "Huawei Nova 5T", - "ua": "Mozilla/5.0 (Linux; Android 10; YALE-L71A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36", - "expect": { - "vendor": "Huawei", - "model": "YALE-L71A", - "type": "mobile" - } - }, { "desc": "Huawei Enjoy10e", "ua": "Dalvik/2.1.0 (Linux; U; Android 10; MED-AL00 Build/HUAWEIMED-AL00)", @@ -1718,15 +1601,6 @@ "type": "mobile" } }, - { - "desc": "SONY Xperia 1 III", - "ua": "Mozilla/5.0 (Linux; Android 11; A101SO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36", - "expect": { - "vendor": "Sony", - "model": "A101SO", - "type": "mobile" - } - }, { "desc": "Sony G8141 (Xperia XZ Premium)", "ua": "Mozilla/5.0 (Linux; Android 8.0.0; G8141) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Mobile Safari/537.36", @@ -1862,15 +1736,6 @@ "type": "tablet" } }, - { - "desc": "Sony BRAVIA 4K GB ATV3", - "ua": "Mozilla/5.0 (Linux; Andr0id 9; BRAVIA 4K GB ATV3 Build/PTT1.190515.001.S38) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 OPR/46.0.2207.0 OMI/4.13.0.180.DIA5.104 Model/Sony-BRAVIA-4K-GB-ATV3", - "expect": { - "vendor": "Sony", - "model": "BRAVIA 4K GB ATV3", - "type": "smarttv" - } - }, { "desc": "Tesla", "ua": "Mozilla/5.0 (X11; GNU/Linux) AppleWebKit/601.1 (KHTML, like Gecko) Tesla QtCarBrowser Safari/601.1", @@ -2015,15 +1880,6 @@ "type": "mobile" } }, - { - "desc": "Xiaomi Mi CC9", - "ua": "Mozilla/5.0 (Linux; U; Android 11; zh-cn; MI CC 9 Build/RKQ1.200826.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.116 Mobile Safari/537.36 XiaoMi/MiuiBrowser/15.5.18", - "expect": { - "vendor": "Xiaomi", - "model": "MI CC 9", - "type": "mobile" - } - }, { "desc": "Xiaomi MI PAD 2", "ua": "Mozilla/5.0 (Linux; Android 5.1; MI PAD 2 Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.107 Safari/537.36 [FB_IAB/FB4A;FBAV/137.0.0.24.91;]", diff --git a/tests/test_uaparser.py b/tests/test_uaparser.py index 340d253..426c0f4 100644 --- a/tests/test_uaparser.py +++ b/tests/test_uaparser.py @@ -93,4 +93,4 @@ def test_ua_max_length(): actual = UAParser(ua) - assert len(actual.ua) == 275 + assert len(actual.ua) == 255 diff --git a/uaparser/__init__.py b/uaparser/__init__.py index 32caa4a..baca838 100644 --- a/uaparser/__init__.py +++ b/uaparser/__init__.py @@ -2,7 +2,7 @@ UAParser ) -__version__ = '0.7.31' +__version__ = '1.0.2' __all__ = ( 'UAParser', diff --git a/uaparser/_uaparser.py b/uaparser/_uaparser.py index 4ede8dd..23310a6 100644 --- a/uaparser/_uaparser.py +++ b/uaparser/_uaparser.py @@ -15,7 +15,7 @@ SMARTTV = 'smarttv' WEARABLE = 'wearable' EMBEDDED = 'embedded' -UA_MAX_LENGTH = 275 +UA_MAX_LENGTH = 255 AMAZON = 'Amazon' APPLE = 'Apple' @@ -250,7 +250,7 @@ def str_mapper(string, mapping): r'\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)' ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [ r'(?:huawei|honor)([-\w ]+)[;\)]', - r'\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)' + r'\b(nexus 6p|\w{2,4}-[atu]?[ln][01259x][012359][an]?)\b(?!.+d\/s)' ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [ # Xiaomi @@ -258,7 +258,7 @@ def str_mapper(string, mapping): r'\b; (\w+) build\/hm\1', # Xiaomi Hongmi 'numeric' models r'\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui', # Xiaomi Hongmi r'\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))', # Xiaomi Redmi - r'\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))' # Xiaomi Mi + r'\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))' # Xiaomi Mi ], [[MODEL, '_', ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [ r'\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))' # Mi Pad tablets ], [[MODEL, '_', ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [ @@ -310,7 +310,7 @@ def str_mapper(string, mapping): ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [ # Sony - r'droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))' + r'droid.+ ([c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))' ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [ r'sony tablet [ps]', r'\b(?:sony)?sgp\w+(?: bui|\))' @@ -349,7 +349,7 @@ def str_mapper(string, mapping): # ZTE r'(zte)[- ]([\w ]+?)(?: bui|\/|\))', - r'(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\w]*)' # Alcatel/GeeksPhone/Nexian/Panasonic/Sony + r'(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\w]*)' # Alcatel/GeeksPhone/Nexian/Panasonic/Sony ], [VENDOR, [MODEL, '_', ' '], [TYPE, MOBILE]], [ # Acer @@ -469,8 +469,6 @@ def str_mapper(string, mapping): ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [ r'\(dtv[\);].+(aquos)' # Sharp ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [ - r'(bravia[\w\- ]+) bui' # Sony - ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [ r'\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)', # Roku r'hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)' # HbbTV devices ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [