def test_method_does_not_filter_android_4(self): data = self.get_mock_data(USER_AGENTS['android_4']) ua_data = self.filter_cls(self.project).get_user_agent(data) ua = Parse(ua_data) browser = ua['user_agent'] assert self.filter_cls( self.project).filter_android_pre_4(browser) is False
def test(self, data): if data.get('platform') != 'javascript': return False value = self.get_user_agent(data) if not value: return False ua = Parse(value) if not ua: return False browser = ua['user_agent'] if not browser['family']: return False try: minimum_version = MIN_VERSIONS[browser['family']] except KeyError: return False try: major_browser_version = int(browser['major']) except (TypeError, ValueError): return False if minimum_version > major_browser_version: return True return False
def test_dont_filter_opera_mini_8(self): data = self.get_mock_data(USER_AGENTS['opera_mini_8']) ua_data = self.filter_cls(self.project).get_user_agent(data) ua = Parse(ua_data) browser = ua['user_agent'] assert self.filter_cls( self.project).filter_opera_mini_pre_8(browser) is False
def test_filters_safari_method(self): data = self.get_mock_data(USER_AGENTS['safari_5']) ua_data = self.filter_cls(self.project).get_user_agent(data) ua = Parse(ua_data) browser = ua['user_agent'] assert self.filter_cls( self.project).filter_safari_pre_6(browser) is True
def test_filter_opera_method(self): data = self.get_mock_data(USER_AGENTS['opera_12']) ua_data = self.filter_cls(self.project).get_user_agent(data) ua = Parse(ua_data) browser = ua['user_agent'] assert self.filter_cls( self.project).filter_opera_pre_15(browser) is True
def get_tag_values(self, event): contexts = event.interfaces.get('contexts') # disable tagging if contexts are present if contexts: return [] http = event.interfaces.get('request') if not http: return [] if not http.headers: return [] headers = http.headers # XXX: transitional support for workers if isinstance(headers, dict): headers = headers.items() output = [] for key, value in headers: if key != 'User-Agent': continue ua = Parse(value) if not ua: continue result = self.get_tag_from_ua(ua) if result: output.append(result) return output
def test_plugins(self): for row in self.data: ua = Parse(row["user_agent"]) assert BrowserPlugin().get_tag_from_ua( ua) == row["browser_plugin_output"] assert DevicePlugin().get_tag_from_ua( ua) == row["device_plugin_output"] assert OsPlugin().get_tag_from_ua(ua) == row["os_plugin_output"]
def _parse_user_agent(data): try: for key, value in get_path(data, 'request', 'headers', filter=True) or (): if key != 'User-Agent': continue if not value: continue ua = Parse(value) if not ua: continue return ua except ValueError: pass return None
def get_tag_values(self, event): http = event.interfaces.get('sentry.interfaces.Http') if not http: return [] if not http.headers: return [] if 'User-Agent' not in http.headers: return [] ua = Parse(http.headers['User-Agent']) if not ua: return [] result = self.get_tag_from_ua(ua) if not result: return [] return [result]
def parse_user_agent(data): http = data.get('sentry.interfaces.Http') if not http: return None headers = http.get('headers') if not headers: return None for key, value in headers: if key != 'User-Agent': continue ua = Parse(value) if not ua: continue return ua return None
def _legacy_browsers_filter(project_config, data): def get_user_agent(data): try: for key, value in get_path(data, "request", "headers", filter=True) or (): if key.lower() == "user-agent": return value except LookupError: return "" if data.get("platform") != "javascript": return False value = get_user_agent(data) if not value: return False ua = Parse(value) if not ua: return False browser = ua["user_agent"] if not browser["family"]: return False # IE Desktop and IE Mobile use the same engines, therefore we can treat them as one if browser["family"] == "IE Mobile": browser["family"] = "IE" filter_settings = _get_filter_settings(project_config, _legacy_browsers_filter) # handle old style config if filter_settings is None: return _filter_default(browser) enabled_sub_filters = filter_settings.get("options") if isinstance(enabled_sub_filters, collections.Sequence): for sub_filter_name in enabled_sub_filters: sub_filter = _legacy_browsers_sub_filters.get(sub_filter_name) if sub_filter is not None and sub_filter(browser): return True return False
def test(self, data): if data.get('platform') != 'javascript': return False opts = ProjectOption.objects.get_value( project=self.project, key=u'filters:{}'.format(self.id), ) value = self.get_user_agent(data) if not value: return False ua = Parse(value) if not ua: return False browser = ua['user_agent'] if not browser['family']: return False # IE Desktop and IE Mobile use the same engines, therefore we can treat them as one if browser['family'] == "IE Mobile": browser['family'] = "IE" # handle old style config if opts == '1': return self.filter_default(browser) # New style is not a simple boolean, but a list of # specific filters to apply if opts: for key in opts: try: fn = getattr(self, 'filter_' + key) except AttributeError: pass else: if fn(browser): return True return False
def _legacy_browsers_filter(relay_config, data): def get_user_agent(data): try: for key, value in get_path(data, 'request', 'headers', filter=True) or (): if key.lower() == 'user-agent': return value except LookupError: return '' if data.get('platform') != 'javascript': return False value = get_user_agent(data) if not value: return False ua = Parse(value) if not ua: return False browser = ua['user_agent'] if not browser['family']: return False # IE Desktop and IE Mobile use the same engines, therefore we can treat them as one if browser['family'] == "IE Mobile": browser['family'] = "IE" filter_settings = _get_filter_settings(relay_config, _legacy_browsers_filter) # handle old style config if filter_settings is None or filter_settings.get('default_filter', False): return _filter_default(browser) enabled_sub_filters = filter_settings.get('options') if isinstance(enabled_sub_filters, collections.Sequence): for sub_filter_name in enabled_sub_filters: sub_filter = _legacy_browsers_sub_filters.get(sub_filter_name) if sub_filter is not None and sub_filter(browser): return True return False
def _parse_user_agent(data): http = data.get('request') if not http: return None headers = http.get('headers') if not headers: return None try: for key, value in headers: if key != 'User-Agent': continue ua = Parse(value) if not ua: continue return ua except ValueError: pass return None
def test_does_not_filter_ie10(self): data = self.get_mock_data(USER_AGENTS['ie_10']) ua_data = self.filter_cls(self.project).get_user_agent(data) ua = Parse(ua_data) browser = ua['user_agent'] assert self.filter_cls(self.project).filter_ie_pre_9(browser) is False