docs: def walk_dirs(path, include=None, include_ext=None, exclude=None,
          exclude_ext=None, recursion=True, file_only=False,
          use_default_pattern=True, patterns=None):
      """
      path directory path
      resursion True will extract all sub module of mod
      """
      default_exclude = ['.svn', '_svn', '.git']
      default_exclude_ext = ['.pyc', '.pyo', '.bak', '.tmp']
      exclude = exclude or []
      exclude_ext = exclude_ext or []
      include_ext = include_ext or []
      include = include or []
  
      if not os.path.exists(path):
          raise StopIteration
  
      for r in os.listdir(path):
          if match(r, exclude) or (use_default_pattern and r in default_exclude):
              continue
          if include and r not in include:
              continue
          fpath = os.path.join(path, r)
          if os.path.isdir(fpath):
              if not file_only:
                  if patterns and match(r, patterns):
                      yield os.path.normpath(fpath).replace('\\', '/')
              if recursion:
                  for f in walk_dirs(fpath, include, include_ext, exclude,
                      exclude_ext, recursion, file_only, use_default_pattern, patterns):
                      yield os.path.normpath(f).replace('\\', '/')
          else:
              ext = os.path.splitext(fpath)[1]
              if ext in exclude_ext or (use_default_pattern and ext in default_exclude_ext):
                  continue
              if include_ext and ext not in include_ext:
                  continue
              if patterns:
                  if not match(r, patterns):
                      continue
              yield os.path.normpath(fpath).replace('\\', '/')