a generator method of file paths on localhost from walk of directories

        :param walk_root: string with path from which to root walk of localhost directories
        :param reverse_order: boolean to determine alphabetical direction of walk
        :param previous_file: string with path of file after which to start walk
        :return: string with absolute path to file

def walk(self, walk_root='', reverse_order=False, previous_file=''):

        ''' a generator method of file paths on localhost from walk of directories

        :param walk_root: string with path from which to root walk of localhost directories
        :param reverse_order: boolean to determine alphabetical direction of walk
        :param previous_file: string with path of file after which to start walk
        :return: string with absolute path to file
        '''

        __name__ = '%s.walk(...)' % self.__class__.__name__

    # validate input
        input_kwargs = [walk_root, previous_file]
        input_names = ['.walk_root', '.previous_file']
        for i in range(len(input_kwargs)):
            if input_kwargs[i]:
                self.fields.validate(input_kwargs[i], input_names[i])

    # validate that previous file exists
        file_exists = False
        previous_found = False
        if previous_file:
            if os.path.exists(previous_file):
                if os.path.isfile(previous_file):
                    file_exists = True
                    previous_file = os.path.abspath(previous_file)
            if not file_exists:
                err_msg = __name__.replace('...', 'previous_file="%s"' % previous_file)
                raise ValueError('%s must be a valid file.' % err_msg)

    # construct empty result
        file_path = ''

    # determine root for walk
        if walk_root:
            if not os.path.isdir(walk_root):
                err_msg = __name__.replace('...', 'walk_root="%s"' % walk_root)
                raise ValueError('%s msut be a valid directory.' % err_msg)
        else:
            walk_root = './'

    # walk directory structure to find files
        for current_dir, sub_dirs, dir_files in os.walk(walk_root):
            dir_files.sort()
            sub_dirs.sort()
            if reverse_order:
                sub_dirs.reverse()
                dir_files.reverse()
            if previous_file and not previous_found:
                key_path = previous_file.split(os.sep)
                current_path = os.path.abspath(current_dir)
                for i in range(len(current_path.split(os.sep))):
                    del key_path[0]
                if key_path:
                    if key_path[0] in sub_dirs:
                        path_index = sub_dirs.index(key_path[0])
                        sub_dirs[0:path_index] = []
                        dir_files = []
                    elif key_path[0] in dir_files:
                        file_index = dir_files.index(key_path[0]) + 1
                        dir_files[0:file_index] = []
                        previous_found = True

    # yield file path
            for file in dir_files:
                file_path = os.path.join(os.path.abspath(current_dir), file)
                yield file_path