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