Skip to content

Commit 17d4dc8

Browse files
committed
Harmonize with upstream 111b0b7
1 parent 04feebc commit 17d4dc8

38 files changed

Lines changed: 2614 additions & 504 deletions

README.md

Lines changed: 6 additions & 6 deletions
Large diffs are not rendered by default.

device_detector/parser/device/base.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,7 @@
384384
'DB': 'Dbtel',
385385
'DBP': 'DbPhone',
386386
'DCO': 'Dcode',
387+
'DEC': 'DEC',
387388
'DL': 'Dell',
388389
'DL0': 'DL',
389390
'DE': 'Denver',
@@ -460,6 +461,7 @@
460461
'DTE': 'D-Tech',
461462
'DLI': 'D-Link',
462463
'ENO': 'eNOVA',
464+
'IN4': 'Inno Hit',
463465
'IN2': 'iNOVA',
464466
'IN3': 'inovo',
465467
'INH': 'Inhon',
@@ -612,6 +614,7 @@
612614
'FR': 'Forstar',
613615
'RF': 'Fortis',
614616
'FRT': 'FortuneShip',
617+
'FOX': 'FOX',
615618
'FO': 'Foxconn',
616619
'FOD': 'FoxxD',
617620
'FJ': 'FOODO',
@@ -904,7 +907,7 @@
904907
'JA': 'JAY-Tech',
905908
'JAM': 'Jambo',
906909
'KJ': 'Jiake',
907-
'JD': 'Jedi',
910+
'JD': 'Jide',
908911
'JEE': 'Jeep',
909912
'J6': 'Jeka',
910913
'JF': 'JFone',
@@ -1126,6 +1129,7 @@
11261129
'MEO': 'MEO',
11271130
'MX': 'MEU',
11281131
'MES': 'MESWAO',
1132+
'MII': 'MIIA',
11291133
'MI': 'MicroMax',
11301134
'MIP': 'mipo',
11311135
'MS': 'Microsoft',
@@ -1423,7 +1427,8 @@
14231427
'PPD': 'PPDS',
14241428
'P3': 'PPTV',
14251429
'FP': 'Premio',
1426-
'PR1': 'Premier',
1430+
'PR2': 'PREMIER',
1431+
'PR1': 'Premier Star',
14271432
'PR': 'Prestigio',
14281433
'P9': 'Primepad',
14291434
'PRM': 'PRIME',
@@ -1683,6 +1688,7 @@
16831688
'06': 'Subor',
16841689
'SUT': 'SULPICE TV',
16851690
'SZ': 'Sumvision',
1691+
'SNG': 'SUNGATE',
16861692
'0H': 'Sunstech',
16871693
'S3': 'SunVan',
16881694
'5S': 'Sunvell',
@@ -1706,6 +1712,7 @@
17061712
'1W': 'Swisstone',
17071713
'SWO': 'SWOFY',
17081714
'SSK': 'SSKY',
1715+
'SSM': 'Ssmart',
17091716
'SYC': 'Syco',
17101717
'SM': 'Symphony',
17111718
'4S': 'Syrox',
@@ -2100,6 +2107,7 @@
21002107
'ZIK': 'ZIK',
21012108
'ZKI': 'Z-Kai',
21022109
'ZIG': 'Zigo',
2110+
'ZIM': 'Zimmer',
21032111
'ZIN': 'Zinox',
21042112
'ZO': 'Zonda',
21052113
'ZW': 'Zonko',

device_detector/parser/extractors.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from device_detector.enums import AppType
44
from device_detector.utils import normalize_app_name
55

6-
APP_ID = RegexLazyIgnore(r'\b([a-z]{2,5}\.[\w\d\.\-]+)')
6+
APP_ID_SANS_VERSION = RegexLazyIgnore(r'\b([a-z][a-z_]+(?:\.[a-z0-9_-]+){2,})')
77

88
# 6H4HRTU5E3.com.avast.osx.secureline.avastsecurelinehelper/47978 CFNetwork/976 Darwin/18.2.0 (x86_64)
99
# YMobile/1.0(com.kitkatandroid.keyboard/4.3.2;Android/6.0.1;lv1;LGE;LG-M153;;792x480
@@ -88,7 +88,7 @@ def match_regexes(self) -> list[tuple[str, str]]:
8888
if app_ids := APP_ID_VERSION.findall(self.user_agent):
8989
return app_ids
9090

91-
if app_ids := [(app_id, '') for app_id in APP_ID.findall(self.user_agent)]:
91+
if app_ids := [(app_id, '') for app_id in APP_ID_SANS_VERSION.findall(self.user_agent)]:
9292
return app_ids
9393

9494
return []

device_detector/parser/operating_system.py

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@
2828
BOUNDED_REGEX.format('64-?bit|WOW64|(?:Intel)?x64|WINDOWS_64|win64|.*amd64|.*x86_?64')
2929
)
3030
x86_REGEX = RegexLazyIgnore(BOUNDED_REGEX.format('.*32bit|.*win32|(?:i[0-9]|x)86|i86pc'))
31-
CORASICK_COVERED_PLATFORMS = RegexLazyIgnore(
32-
r'RazoDroiD|MildWild|CyanogenMod|gNewSense|Coolita OS QJY|ClearPHONE|RokuBrowser|centos|playstation'
33-
)
3431

3532

3633
class OS(Parser):
@@ -69,37 +66,35 @@ def check_all_regexes(self) -> bool | list:
6966
def platform(self) -> str:
7067
if ch := self.client_hints:
7168
ch_architecture = self.client_hints.architecture.lower()
72-
if 'arm' in ch_architecture:
73-
return 'ARM'
74-
if 'loongarch64' in ch_architecture:
75-
return 'LoongArch64'
76-
if 'mips' in ch_architecture:
77-
return 'MIPS'
78-
if 'sh4' in ch_architecture:
79-
return 'SuperH'
80-
if 'sparc64' in ch_architecture:
81-
return 'SPARC64'
69+
for fragment, code in (
70+
('arm', 'ARM'),
71+
('loongarch64', 'LoongArch64'),
72+
('mips', 'MIPS'),
73+
('sh4', 'SuperH'),
74+
('sparc64', 'SPARC64'),
75+
):
76+
if fragment in ch_architecture:
77+
return code
78+
8279
if 'x64' in ch_architecture or (ch.bitness == '64' and 'x86' in ch_architecture):
8380
return 'x64'
8481
if ch_architecture == 'x86':
8582
return 'x86'
8683
return ch_architecture
8784

8885
user_agent = self.user_agent
89-
if ARM_REGEX.search(user_agent):
90-
return 'ARM'
91-
if LOONGARCH_REGEX.search(user_agent):
92-
return 'LoongArch64'
93-
if MIPS_REGEX.search(user_agent):
94-
return 'MIPS'
95-
if SUPERH_REGEX.search(user_agent):
96-
return 'SuperH'
97-
if SPARK_REGEX.search(user_agent):
98-
return 'SPARC64'
99-
if WINDOWS_REGEX.search(user_agent):
100-
return 'x64'
101-
if x86_REGEX.search(user_agent):
102-
return 'x86'
86+
for platform_regex, code in (
87+
(ARM_REGEX, 'ARM'),
88+
(LOONGARCH_REGEX, 'LoongArch64'),
89+
(MIPS_REGEX, 'MIPS'),
90+
(SUPERH_REGEX, 'SuperH'),
91+
(SPARK_REGEX, 'SPARC64'),
92+
(WINDOWS_REGEX, 'x64'),
93+
(x86_REGEX, 'x86'),
94+
):
95+
if platform_regex.search(user_agent):
96+
return code
97+
10398
return ''
10499

105100
def _parse(self) -> None:

device_detector/parser/settings.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
# Operating system families that are known as desktop only
3131
DESKTOP_OS = {
3232
'AmigaOS', 'IBM', 'GNU/Linux', 'Mac', 'Unix', 'Windows', 'BeOS', 'Chrome OS', 'Chromium OS',
33+
'OpenVMS',
3334
}
3435

3536
# Sub-list of Desktop OS that never falsely appear in UAs
@@ -48,6 +49,9 @@
4849

4950
# Fire OS version mapping
5051
FIREOS_VERSION_MAPPING = {
52+
'14' : '14',
53+
'13' : '14',
54+
'12' : '14',
5155
'11' : '8',
5256
'10' : '8',
5357
'9' : '7',
@@ -259,6 +263,7 @@
259263
'SY3': 'Symbian^3',
260264
'TEN': 'TencentOS',
261265
'TDX': 'ThreadX',
266+
'TIT': 'Titan OS',
262267
'TIZ': 'Tizen',
263268
'TIV': 'TiVo OS',
264269
'TOS': 'TmaxOS',
@@ -336,7 +341,7 @@
336341
'WebTV': ('WTV',),
337342
'Windows': ('WIN',),
338343
'Windows Mobile': ('WPH', 'WMO', 'WCE', 'WRT', 'WIO', 'KIN'),
339-
'Other Smart TV': ('WHS',),
344+
'Other Smart TV': ('WHS', 'TIT'),
340345
'Unknown': ('UNK',),
341346
}
342347
# fmt: on
@@ -477,6 +482,7 @@
477482
'9B': 'BizBrowser',
478483
'BC': 'Black Browser',
479484
'BH': 'BlackHawk',
485+
'Z1': 'Blazer',
480486
'B0': 'Bloket',
481487
'BJ': 'Bunjalloo',
482488
'BL': 'B-Line',
@@ -507,13 +513,15 @@
507513
'C6': 'Chedot',
508514
'C9': 'Cherry Browser',
509515
'C0': 'Centaury',
516+
'ZC': 'Clario Browser',
510517
'9C': 'Clear TV Browser',
511518
'CQ': 'Cliqz',
512519
'CC': 'Coc Coc',
513520
'C4': 'CoolBrowser',
514521
'C2': 'Colibri',
515522
'6C': 'Columbus Browser',
516523
'CD': 'Comodo Dragon',
524+
'XC': 'Comet',
517525
'C1': 'Coast',
518526
'CX': 'Charon',
519527
'G0': 'ChatGPT Atlas',
@@ -609,6 +617,7 @@
609617
'FO': 'Flow',
610618
'F2': 'Flow Browser',
611619
'FM': 'Firefox Mobile',
620+
'3F': 'FireSend Browser',
612621
'FW': 'Fireweb',
613622
'FN': 'Fireweb Navigator',
614623
'FH': 'Flash Browser',
@@ -1131,6 +1140,7 @@
11311140
'W2', 'ZB', 'HN', 'Q6', 'Q7', 'G0', '00', 'R6', 'D8',
11321141
'PQ', 'LM', 'T5', '2N', 'SJ', 'X6', 'SM', 'AY', 'BQ',
11331142
'BC', 'NQ', 'VQ', '9C', 'KA', 'YS', 'D4', 'PZ', '0I',
1143+
'3F', 'Z1', 'XC', 'ZC',
11341144
),
11351145
'Firefox': (
11361146
'FF', 'BI', 'BF', 'BH', 'BN', 'C0', 'CU', 'EI', 'F1',
@@ -1192,6 +1202,7 @@
11921202
'Kylo', 'Espial TV Browser', 'LUJO TV Browser', 'LogicUI TV Browser', 'Open TV Browser',
11931203
'Seraphic Sraf', 'Opera Devices', 'Crow Browser', 'Vewd Browser', 'TiviMate',
11941204
'Quick Search TV', 'QJY TV Browser', 'TV Bro',
1205+
'Redline',
11951206
}
11961207

11971208
# Taken from ChromeOS regex in oss.yml

device_detector/regexes/ahocorasick/classes/MobileApp.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Words:
2525
- downcast/
2626
- empresas/
2727
- google/
28+
- com.google
2829
- hp smart/
2930
- instacast/
3031
- instacasthd

0 commit comments

Comments
 (0)