mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-08-20 13:23:24 -07:00
Update httpagentparser-1.9.1
This commit is contained in:
parent
586fd15464
commit
e58aa40099
1 changed files with 47 additions and 26 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue