#NEWLINE# def steps( self ) : #NEWLINE# #INDENT# "Re-define this to make a multi-step job.\n\n        If you don't re-define this, we'll automatically create a one-step\n        job using any of :py:meth:`mapper`, :py:meth:`mapper_init`,\n        :py:meth:`mapper_final`, :py:meth:`reducer_init`,\n        :py:meth:`reducer_final`, and :py:meth:`reducer` that you've\n        re-defined. For example::\n\n            def steps(self):\n                return [self.mr(mapper=self.transform_input,\n                                reducer=self.consolidate_1),\n                        self.mr(reducer_init=self.log_mapper_init,\n                                reducer=self.consolidate_2)]\n\n        :return: a list of steps constructed with :py:meth:`mr`\n        " #NEWLINE# kwargs = dict ( ( ( func_name , getattr ( self , func_name ) ) for func_name in _JOB_STEP_FUNC_PARAMS if ( _im_func ( getattr ( self , func_name ) ) is not _im_func ( getattr ( MRJob , func_name ) ) ) ) ) #NEWLINE# updates = { #NEWLINE# #INDENT# #NEWLINE# #UNINDENT# } #NEWLINE# for ( k , v ) in kwargs . items ( ) : #NEWLINE# #INDENT# if k . endswith ( '_cmd' ) : #NEWLINE# #INDENT# updates [ k ] = v ( ) #NEWLINE# #UNINDENT# #UNINDENT# kwargs . update ( updates ) #NEWLINE# return [ MRStep ( ** kwargs ) ]