Update httpagentparser-1.9.1

This commit is contained in:
JonnyWong16 2021-10-14 22:33:53 -07:00
commit e58aa40099
No known key found for this signature in database
GPG key ID: B1F1F9807184697A

View file

@ -8,7 +8,7 @@ Tries to
* assist python web apps to detect clients.
"""
__version__ = '1.7.8'
__version__ = '1.9.1'
class DetectorsHub(dict):
@ -31,7 +31,7 @@ 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 list(globals().values()) if DetectorBase in getattr(v, '__mro__', [])]
for d in detectors:
if d.can_register:
self.register(d)
@ -123,17 +123,6 @@ class Browser(DetectorBase):
can_register = False
class Firefox(Browser):
look_for = "Firefox"
version_markers = [('/', '')]
skip_if_found = ["SeaMonkey", "web/snippet"]
class SeaMonkey(Browser):
look_for = "SeaMonkey"
version_markers = [('/', '')]
class Konqueror(Browser):
look_for = "Konqueror"
version_markers = ["/", ";"]
@ -154,6 +143,7 @@ class OperaMobile(Browser):
class Opera(Browser):
look_for = "Opera"
skip_if_found = ['Opera Mobi']
def getVersion(self, agent, word):
try:
@ -171,6 +161,7 @@ class OperaNew(Browser):
"""
name = "Opera"
look_for = "OPR"
skip_if_found = ["Build/OPR"]
version_markers = [('/', '')]
@ -206,6 +197,14 @@ class MSEdge(Browser):
skip_if_found = ["MSIE"]
version_markers = ["/", ""]
class ChromiumEdge(Browser):
look_for = "Edg/"
def getVersion(self, agent, word):
if "Edg/" in agent:
return agent.split('Edg/')[-1].strip()
class Galeon(Browser):
look_for = "Galeon"
@ -219,10 +218,10 @@ class WOSBrowser(Browser):
class Safari(Browser):
look_for = "Safari"
skip_if_found = ["Edge"]
skip_if_found = ["Edge", "YaBrowser"]
def checkWords(self, agent):
unless_list = ["Chrome", "OmniWeb", "wOSBrowser", "Android"]
unless_list = ["Chrome", "OmniWeb", "wOSBrowser", "Android", "CriOS"]
if self.look_for in agent:
for word in unless_list:
if word in agent:
@ -274,6 +273,10 @@ class TwitterBot(Browser):
look_for = "Twitterbot"
bot = True
class TelegramBot(Browser):
look_for = "TelegramBot"
bot = True
class MJ12Bot(Browser):
look_for = "MJ12bot"
bot = True
@ -397,13 +400,24 @@ class NintendoBrowser(Browser):
class AndroidBrowser(Browser):
look_for = "Android"
skip_if_found = ['Chrome', 'Windows Phone']
skip_if_found = ['Chrome', 'Windows Phone', 'Opera', 'Firefox']
# http://decadecity.net/blog/2013/11/21/android-browser-versions
def getVersion(self, agent, word):
pass
class Firefox(Browser):
look_for = "Firefox"
version_markers = [('/', '')]
skip_if_found = ["SeaMonkey", "web/snippet"]
class SeaMonkey(Browser):
look_for = "SeaMonkey"
version_markers = [('/', '')]
class Linux(OS):
look_for = 'Linux'
platform = 'Linux'
@ -534,11 +548,10 @@ class Debian(Dist):
look_for = 'Debian'
version_markers = ["/", " "]
class Chrome(Browser):
look_for = "Chrome"
version_markers = ["/", " "]
skip_if_found = ["OPR", "Edge"]
skip_if_found = [" OPR", "Edge", "YaBrowser", "Edg/"]
def getVersion(self, agent, word):
part = agent.split(word + self.version_markers[0])[-1]
@ -547,6 +560,17 @@ class Chrome(Browser):
version = part.split('+')[0]
return version.strip()
class YaBrowser(Browser):
look_for = "YaBrowser"
name = "Yandex.Browser"
version_markers = ["/", " "]
def getVersion(self, agent, word):
part = agent.split(word + self.version_markers[0])[-1]
version = part.split(self.version_markers[1])[0]
if '+' in version:
version = part.split('+')[0]
return version.strip()
class ChromeiOS(Browser):
look_for = "CriOS"
@ -571,7 +595,7 @@ class Android(Dist):
skip_if_found = ['Windows Phone']
def getVersion(self, agent, word):
return agent.split(word)[-1].split(';')[0].strip()
return agent.split(word)[-1].replace(')', ';').split(';')[0].strip()
class WebOS(Dist):
@ -639,13 +663,10 @@ def detect(agent, fill_none=False):
pass
if fill_none:
attrs_d = {'name': None, 'version': None}
for key in ('os', 'browser'):
if key not in result:
result[key] = attrs_d
else:
for k, v in attrs_d.items():
result[k] = v
for outer_key in ('os', 'browser'):
outer_value = result.setdefault(outer_key, dict())
for inner_key in ('name', 'version'):
outer_value.setdefault(inner_key, None)
return result