<s> import functools <EOL> import sys <EOL> import types <EOL> from . import termcap <EOL> def eval_when ( when ) : <EOL> if isinstance ( when , file ) or when in ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , sys . stderr , sys . stdout ) : <EOL> if when == '<STR_LIT>' : <EOL> return True <EOL> elif when == '<STR_LIT>' : <EOL> return False <EOL> elif when == '<STR_LIT>' : <EOL> return sys . stderr . isatty ( ) <EOL> else : <EOL> return when . isatty ( ) <EOL> else : <EOL> raise ValueError ( '<STR_LIT>' ) <EOL> class Module ( types . ModuleType ) : <EOL> def __init__ ( self ) : <EOL> self . __file__ = __file__ <EOL> self . __name__ = __name__ <EOL> self . num_colors = termcap . get ( '<STR_LIT>' , default = <NUM_LIT:8> ) <EOL> self . has_bright = self . num_colors >= <NUM_LIT:16> <EOL> self . has_gray = self . has_bright <EOL> self . when = '<STR_LIT>' <EOL> self . _colors = { <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:2> , <EOL> '<STR_LIT>' : <NUM_LIT:3> , <EOL> '<STR_LIT>' : <NUM_LIT:4> , <EOL> '<STR_LIT>' : <NUM_LIT:5> , <EOL> '<STR_LIT>' : <NUM_LIT:6> , <EOL> '<STR_LIT>' : <NUM_LIT:7> , <EOL> } <EOL> self . _reset = '<STR_LIT>' <EOL> self . _attributes = { } <EOL> for x , y in [ ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) ] : <EOL> s = termcap . get ( y ) <EOL> self . _attributes [ x ] = s <EOL> self . _cache = { } <EOL> @ property <EOL> def when ( self ) : <EOL> return self . _when <EOL> @ when . setter <EOL> def when ( self , val ) : <EOL> self . _when = eval_when ( val ) <EOL> def _fg_color ( self , c ) : <EOL> return termcap . get ( '<STR_LIT>' , c ) or termcap . get ( '<STR_LIT>' , c ) <EOL> def _bg_color ( self , c ) : <EOL> return termcap . get ( '<STR_LIT>' , c ) or termcap . get ( '<STR_LIT>' , c ) <EOL> def _decorator ( self , desc , init ) : <EOL> def f ( self , s , when = None ) : <EOL> if when : <EOL> if eval_when ( when ) : <EOL> return init + s + self . _reset <EOL> else : <EOL> return s <EOL> else : <EOL> if self . when : <EOL> return init + s + self . _reset <EOL> else : <EOL> return s <EOL> setattr ( Module , desc , f ) <EOL> return functools . partial ( f , self ) <EOL> def __getattr__ ( self , desc ) : <EOL> try : <EOL> ds = desc . replace ( '<STR_LIT>' , '<STR_LIT>' ) . split ( '<STR_LIT:_>' ) <EOL> init = '<STR_LIT>' <EOL> while ds : <EOL> d = ds [ <NUM_LIT:0> ] <EOL> try : <EOL> init += self . _attributes [ d ] <EOL> ds . pop ( <NUM_LIT:0> ) <EOL> except KeyError : <EOL> break <EOL> def c ( ) : <EOL> bright = <NUM_LIT:0> <EOL> c = ds . pop ( <NUM_LIT:0> ) <EOL> if c == '<STR_LIT>' : <EOL> c = ds . pop ( <NUM_LIT:0> ) <EOL> if self . has_bright : <EOL> bright = <NUM_LIT:8> <EOL> return self . _colors [ c ] + bright <EOL> if ds : <EOL> if ds [ <NUM_LIT:0> ] == '<STR_LIT>' : <EOL> ds . pop ( <NUM_LIT:0> ) <EOL> init += self . _bg_color ( c ( ) ) <EOL> else : <EOL> init += self . _fg_color ( c ( ) ) <EOL> if len ( ds ) : <EOL> assert ds . pop ( <NUM_LIT:0> ) == '<STR_LIT>' <EOL> init += self . _bg_color ( c ( ) ) <EOL> return self . _decorator ( desc , init ) <EOL> except ( IndexError , KeyError ) : <EOL> raise AttributeError ( "<STR_LIT>" % desc ) <EOL> def get ( self , desc ) : <EOL> return self . __getattr__ ( desc ) <EOL> tether = sys . modules [ __name__ ] <EOL> sys . modules [ __name__ ] = Module ( ) </s>
