<s> """<STR_LIT>""" <EOL> import re <EOL> class UserAgentParser ( object ) : <EOL> """<STR_LIT>""" <EOL> platforms = ( <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( r'<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( r'<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( r'<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( r'<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) <EOL> ) <EOL> browsers = ( <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( r'<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( r'<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) <EOL> ) <EOL> _browser_version_re = r'<STR_LIT>' <EOL> _language_re = re . compile ( <EOL> r'<STR_LIT>' <EOL> r'<STR_LIT>' <EOL> ) <EOL> def __init__ ( self ) : <EOL> self . platforms = [ ( b , re . compile ( a , re . I ) ) for a , b in self . platforms ] <EOL> self . browsers = [ ( b , re . compile ( self . _browser_version_re % a ) ) <EOL> for a , b in self . browsers ] <EOL> def __call__ ( self , user_agent ) : <EOL> for platform , regex in self . platforms : <EOL> match = regex . search ( user_agent ) <EOL> if match is not None : <EOL> break <EOL> else : <EOL> platform = None <EOL> for browser , regex in self . browsers : <EOL> match = regex . search ( user_agent ) <EOL> if match is not None : <EOL> version = match . group ( <NUM_LIT:1> ) <EOL> break <EOL> else : <EOL> browser = version = None <EOL> match = self . _language_re . search ( user_agent ) <EOL> if match is not None : <EOL> language = match . group ( <NUM_LIT:1> ) or match . group ( <NUM_LIT:2> ) <EOL> else : <EOL> language = None <EOL> return platform , browser , version , language <EOL> class UserAgent ( object ) : <EOL> """<STR_LIT>""" <EOL> _parser = UserAgentParser ( ) <EOL> def __init__ ( self , environ_or_string ) : <EOL> if isinstance ( environ_or_string , dict ) : <EOL> environ_or_string = environ_or_string . get ( '<STR_LIT>' , '<STR_LIT>' ) <EOL> self . string = environ_or_string <EOL> self . platform , self . browser , self . version , self . language = self . _parser ( environ_or_string ) <EOL> def to_header ( self ) : <EOL> return self . string <EOL> def __str__ ( self ) : <EOL> return self . string <EOL> def __nonzero__ ( self ) : <EOL> return bool ( self . browser ) <EOL> __bool__ = __nonzero__ <EOL> def __repr__ ( self ) : <EOL> return '<STR_LIT>' % ( <EOL> self . __class__ . __name__ , <EOL> self . browser , <EOL> self . version <EOL> ) <EOL> from werkzeug . wrappers import UserAgentMixin </s>
