def extract_from_server_meta(self, meta): ''' Will extract information for the "ip_address", "user_agent" and "locale" properties from the given WSGI REQUEST META variable or equivalent. ''' if 'REMOTE_ADDR' in meta and meta['REMOTE_ADDR']: ip = None for key in ('HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'): if key in meta and not ip: ips = meta.get(key, '').split(',') ip = ips[-1].strip() if not utils.is_valid_ip(ip): ip = '' if utils.is_private_ip(ip): ip = '' if ip: self.ip_address = ip if 'HTTP_USER_AGENT' in meta and meta['HTTP_USER_AGENT']: self.user_agent = meta['HTTP_USER_AGENT'] if 'HTTP_ACCEPT_LANGUAGE' in meta and meta['HTTP_ACCEPT_LANGUAGE']: user_locals = [] matched_locales = utils.validate_locale(meta['HTTP_ACCEPT_LANGUAGE']) if matched_locales: lang_lst = map((lambda x: x.replace('-', '_')), (i[1] for i in matched_locales)) quality_lst = map((lambda x: x and x or 1), (float(i[4] and i[4] or '0') for i in matched_locales)) lang_quality_map = map((lambda x, y: (x, y)), lang_lst, quality_lst) user_locals = [x[0] for x in sorted(lang_quality_map, key=itemgetter(1), reverse=True)] if user_locals: self.locale = user_locals[0] return self
def extract_from_server_meta(self, meta): ''' Will extract information for the "ip_address", "user_agent" and "locale" properties from the given WSGI REQUEST META variable or equivalent. ''' if 'REMOTE_ADDR' in meta and meta['REMOTE_ADDR']: ip = None for key in ('HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'): if key in meta and not ip: ips = meta.get(key, '').split(',') ip = ips[len(ips) - 1].strip() if not utils.is_valid_ip(ip): ip = '' if utils.is_private_ip(ip): ip = '' if ip: self.ip_address = ip if 'HTTP_USER_AGENT' in meta and meta['HTTP_USER_AGENT']: self.user_agent = meta['HTTP_USER_AGENT'] if 'HTTP_ACCEPT_LANGUAGE' in meta and meta['HTTP_ACCEPT_LANGUAGE']: user_locals = [] matched_locales = utils.validate_locale(meta['HTTP_ACCEPT_LANGUAGE']) if matched_locales: lang_lst = map((lambda x: x.replace('-', '_')), (i[1] for i in matched_locales)) quality_lst = map((lambda x: x and x or 1), (float(i[4] and i[4] or '0') for i in matched_locales)) lang_quality_map = map((lambda x, y: (x, y)), lang_lst, quality_lst) user_locals = [x[0] for x in sorted(lang_quality_map, key=itemgetter(1), reverse=True)] if user_locals: self.locale = user_locals[0] return self