<s> from robot . utils import is_list_like , is_dict_like <EOL> class ListenerArguments ( object ) : <EOL> def __init__ ( self , arguments ) : <EOL> self . _arguments = arguments <EOL> self . _version2 = None <EOL> self . _version3 = None <EOL> def get_arguments ( self , version ) : <EOL> if version == <NUM_LIT:2> : <EOL> if self . _version2 is None : <EOL> self . _version2 = self . _get_version2_arguments ( * self . _arguments ) <EOL> return self . _version2 <EOL> else : <EOL> if self . _version3 is None : <EOL> self . _version3 = self . _get_version3_arguments ( * self . _arguments ) <EOL> return self . _version3 <EOL> def _get_version2_arguments ( self , * arguments ) : <EOL> return arguments <EOL> def _get_version3_arguments ( self , * arguments ) : <EOL> return arguments <EOL> @ classmethod <EOL> def by_method_name ( cls , name , arguments ) : <EOL> Arguments = { '<STR_LIT>' : StartSuiteArguments , <EOL> '<STR_LIT>' : EndSuiteArguments , <EOL> '<STR_LIT>' : StartTestArguments , <EOL> '<STR_LIT>' : EndTestArguments , <EOL> '<STR_LIT>' : StartKeywordArguments , <EOL> '<STR_LIT>' : EndKeywordArguments , <EOL> '<STR_LIT>' : MessageArguments , <EOL> '<STR_LIT:message>' : MessageArguments } . get ( name , ListenerArguments ) <EOL> return Arguments ( arguments ) <EOL> class MessageArguments ( ListenerArguments ) : <EOL> def _get_version2_arguments ( self , msg ) : <EOL> attributes = { '<STR_LIT>' : msg . timestamp , <EOL> '<STR_LIT:message>' : msg . message , <EOL> '<STR_LIT>' : msg . level , <EOL> '<STR_LIT:html>' : '<STR_LIT:yes>' if msg . html else '<STR_LIT>' } <EOL> return attributes , <EOL> def _get_version3_arguments ( self , msg ) : <EOL> return msg , <EOL> class _ListenerArgumentsFromItem ( ListenerArguments ) : <EOL> _attribute_names = None <EOL> def _get_version2_arguments ( self , item ) : <EOL> attributes = dict ( ( name , self . _get_attribute_value ( item , name ) ) <EOL> for name in self . _attribute_names ) <EOL> attributes . update ( self . _get_extra_attributes ( item ) ) <EOL> return item . name , attributes <EOL> def _get_attribute_value ( self , item , name ) : <EOL> value = getattr ( item , name ) <EOL> return self . _take_copy_of_mutable_value ( value ) <EOL> def _take_copy_of_mutable_value ( self , value ) : <EOL> if is_dict_like ( value ) : <EOL> return dict ( value ) <EOL> if is_list_like ( value ) : <EOL> return list ( value ) <EOL> return value <EOL> def _get_extra_attributes ( self , item ) : <EOL> return { } <EOL> def _get_version3_arguments ( self , item ) : <EOL> return item . data , item . result <EOL> class StartSuiteArguments ( _ListenerArgumentsFromItem ) : <EOL> _attribute_names = ( '<STR_LIT:id>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) <EOL> def _get_extra_attributes ( self , suite ) : <EOL> return { '<STR_LIT>' : [ t . name for t in suite . tests ] , <EOL> '<STR_LIT>' : [ s . name for s in suite . suites ] , <EOL> '<STR_LIT>' : suite . test_count , <EOL> '<STR_LIT:source>' : suite . source or '<STR_LIT>' } <EOL> class EndSuiteArguments ( StartSuiteArguments ) : <EOL> _attribute_names = ( '<STR_LIT:id>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:status>' , '<STR_LIT:message>' ) <EOL> def _get_extra_attributes ( self , suite ) : <EOL> attrs = StartSuiteArguments . _get_extra_attributes ( self , suite ) <EOL> attrs [ '<STR_LIT>' ] = suite . stat_message <EOL> return attrs <EOL> class StartTestArguments ( _ListenerArgumentsFromItem ) : <EOL> _attribute_names = ( '<STR_LIT:id>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) <EOL> def _get_extra_attributes ( self , test ) : <EOL> return { '<STR_LIT>' : '<STR_LIT:yes>' if test . critical else '<STR_LIT>' , <EOL> '<STR_LIT>' : test . template or '<STR_LIT>' } <EOL> class EndTestArguments ( StartTestArguments ) : <EOL> _attribute_names = ( '<STR_LIT:id>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:status>' , '<STR_LIT:message>' ) <EOL> class StartKeywordArguments ( _ListenerArgumentsFromItem ) : <EOL> _attribute_names = ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:args>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> _types = { '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' } <EOL> def _get_extra_attributes ( self , kw ) : <EOL> return { '<STR_LIT:type>' : self . _types [ kw . type ] } <EOL> class EndKeywordArguments ( StartKeywordArguments ) : <EOL> _attribute_names = ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:args>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:status>' ) </s>
