<s> import os <EOL> import logging <EOL> import click <EOL> from . utils import valid_underscore_name <EOL> COLORS = { <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> } <EOL> COLOR_RESET = '<STR_LIT>' <EOL> LOGGING_COLOR_MAPPING = { <EOL> '<STR_LIT>' : COLORS [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLORS [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLORS [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLORS [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLORS [ '<STR_LIT>' ] <EOL> } <EOL> COLUMN_TYPE_MAPPING = { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:float>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:date>' : '<STR_LIT>' , <EOL> '<STR_LIT:time>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:string>' : '<STR_LIT>' , <EOL> '<STR_LIT:text>' : '<STR_LIT>' <EOL> } <EOL> COLUMN_TYPE_MAPPING . update ( { <EOL> '<STR_LIT:int>' : COLUMN_TYPE_MAPPING [ '<STR_LIT>' ] , <EOL> '<STR_LIT:bool>' : COLUMN_TYPE_MAPPING [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_TYPE_MAPPING [ '<STR_LIT>' ] , <EOL> '<STR_LIT:str>' : COLUMN_TYPE_MAPPING [ '<STR_LIT:string>' ] <EOL> } ) <EOL> COLUMN_TYPE_DEFAULT = '<STR_LIT:string>' <EOL> COLUMN_TYPES_SUPPORTING_LENGTH = [ '<STR_LIT:string>' , '<STR_LIT:text>' , '<STR_LIT>' ] <EOL> COLUMN_FACTORY_MAPPING = { <EOL> '<STR_LIT>' : { '<STR_LIT:*>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT:*>' : '<STR_LIT>' } , <EOL> '<STR_LIT:float>' : { '<STR_LIT:*>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT:*>' : '<STR_LIT>' } , <EOL> '<STR_LIT:date>' : { '<STR_LIT:*>' : '<STR_LIT>' } , <EOL> '<STR_LIT:time>' : { '<STR_LIT:*>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT:*>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT:*>' : "<STR_LIT>" } , <EOL> '<STR_LIT:string>' : { <EOL> '<STR_LIT:*>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:password>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:name>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:email>' : '<STR_LIT>' , <EOL> '<STR_LIT:address>' : '<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:state>' : '<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> '<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:url>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> } , <EOL> '<STR_LIT:text>' : { '<STR_LIT:*>' : '<STR_LIT>' } <EOL> } <EOL> COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] . update ( { <EOL> '<STR_LIT:username>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT:name>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT:email>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : COLUMN_FACTORY_MAPPING [ '<STR_LIT:string>' ] [ '<STR_LIT>' ] <EOL> } ) <EOL> COLUMN_MODIFIER_MAPPING = { <EOL> '<STR_LIT:index>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> } <EOL> COLUMN_MODIFIER_PRIMARY_KEY = '<STR_LIT>' <EOL> def valid_project_directory ( directory = os . getcwd ( ) ) : <EOL> return ( <EOL> os . path . isdir ( os . path . join ( directory , '<STR_LIT>' ) ) and <EOL> os . path . isdir ( os . path . join ( directory , '<STR_LIT>' , '<STR_LIT>' ) ) and <EOL> os . path . isdir ( os . path . join ( directory , '<STR_LIT>' , '<STR_LIT>' ) ) and <EOL> os . path . isdir ( os . path . join ( directory , '<STR_LIT>' , '<STR_LIT>' ) ) and <EOL> os . path . isdir ( os . path . join ( directory , '<STR_LIT>' , '<STR_LIT>' ) ) and <EOL> os . path . isdir ( os . path . join ( directory , '<STR_LIT>' , '<STR_LIT>' ) ) and <EOL> os . path . isdir ( os . path . join ( directory , '<STR_LIT:test>' ) ) and <EOL> os . path . isfile ( os . path . join ( directory , '<STR_LIT>' ) ) <EOL> ) <EOL> class ColoredFormatter ( logging . Formatter ) : <EOL> def __init__ ( self , * args , ** kwargs ) : <EOL> self . use_color = kwargs . pop ( '<STR_LIT>' , True ) <EOL> logging . Formatter . __init__ ( self , * args , ** kwargs ) <EOL> def format ( self , record ) : <EOL> if self . use_color : <EOL> color = LOGGING_COLOR_MAPPING [ record . description ] <EOL> reset = COLOR_RESET <EOL> else : <EOL> color = '<STR_LIT>' <EOL> reset = '<STR_LIT>' <EOL> original_fmt = ( <EOL> self . _style . _fmt if hasattr ( self , '<STR_LIT>' ) else self . _fmt <EOL> ) <EOL> colored_fmt = original_fmt . replace ( '<STR_LIT>' , color ) . replace ( '<STR_LIT>' , reset ) <EOL> if hasattr ( self , '<STR_LIT>' ) : <EOL> self . _style . _fmt = colored_fmt <EOL> else : <EOL> self . _fmt = colored_fmt <EOL> formatted = logging . Formatter . format ( self , record ) <EOL> if hasattr ( self , '<STR_LIT>' ) : <EOL> self . _style . _fmt = original_fmt <EOL> else : <EOL> self . _fmt = original_fmt <EOL> return formatted <EOL> class ProjectNameParamType ( click . ParamType ) : <EOL> name = '<STR_LIT>' <EOL> def convert ( self , value , param , ctx ) : <EOL> name = os . path . basename ( value ) <EOL> directory = os . path . join ( <EOL> os . path . dirname ( value ) , name . replace ( '<STR_LIT:_>' , '<STR_LIT:->' ) <EOL> ) <EOL> if valid_underscore_name ( name ) : <EOL> return ( name , directory ) <EOL> else : <EOL> self . fail ( '<STR_LIT>' % name , param , ctx ) <EOL> def __repr__ ( self ) : <EOL> return '<STR_LIT>' <EOL> class ModelColumnParamType ( click . ParamType ) : <EOL> name = '<STR_LIT>' <EOL> def convert ( self , value , param , ctx ) : <EOL> column_properties = value . split ( '<STR_LIT::>' ) <EOL> name = column_properties [ <NUM_LIT:0> ] <EOL> if not valid_underscore_name ( name ) : <EOL> ctx . fail ( '<STR_LIT>' ) <EOL> try : <EOL> type_properties = column_properties [ <NUM_LIT:1> ] . split ( '<STR_LIT:U+002C>' ) <EOL> type = type_properties [ <NUM_LIT:0> ] . lower ( ) or COLUMN_TYPE_DEFAULT <EOL> except IndexError : <EOL> type_properties = [ ] <EOL> type = COLUMN_TYPE_DEFAULT <EOL> if type not in COLUMN_TYPE_MAPPING : <EOL> ctx . fail ( '<STR_LIT>' % name ) <EOL> try : <EOL> if type_properties [ <NUM_LIT:1> ] : <EOL> length = int ( type_properties [ <NUM_LIT:1> ] ) <EOL> else : <EOL> length = None <EOL> except IndexError : <EOL> length = None <EOL> except ValueError : <EOL> ctx . fail ( '<STR_LIT>' % name ) <EOL> if length and type not in COLUMN_TYPES_SUPPORTING_LENGTH : <EOL> ctx . fail ( <EOL> '<STR_LIT>' <EOL> '<STR_LIT>' % ( name , type ) <EOL> ) <EOL> try : <EOL> modifiers = column_properties [ <NUM_LIT:2> ] . lower ( ) . split ( '<STR_LIT:U+002C>' ) <EOL> except IndexError : <EOL> modifiers = [ ] <EOL> for modifier in modifiers : <EOL> if modifier not in COLUMN_MODIFIER_MAPPING : <EOL> ctx . fail ( <EOL> '<STR_LIT>' % <EOL> ( modifier , name ) <EOL> ) <EOL> return name , type , length , modifiers <EOL> def __repr__ ( self ) : <EOL> return '<STR_LIT>' <EOL> PROJECT_NAME = ProjectNameParamType ( ) <EOL> MODEL_COLUMN = ModelColumnParamType ( ) </s>
