code: def get_data_files(dname, ignore=None, parent=None):
      
      parent = parent or "."
      ignore = ignore or []
      result = []
      for directory, subdirectories, filenames in os.walk(dname):
          resultfiles = []
          for exname in EXCLUDE_NAMES:
              if exname in subdirectories:
                  subdirectories.remove(exname)
          for ig in ignore:
              if ig in subdirectories:
                  subdirectories.remove(ig)
          for filename in _filter_names(filenames):
              resultfiles.append(filename)
          if resultfiles:
              for filename in resultfiles:
                  file_path = os.path.join(directory, filename)
                  if parent:
                      file_path = file_path.replace(parent + os.sep, '')
                  result.append(file_path)
  
      return result
docs: Get all the data files that should be included in this distutils Project.
  
      'dname' should be the path to the package that you're distributing.
  
      'ignore' is a list of sub-packages to ignore.  This facilitates
      disparate package hierarchies.  That's a fancy way of saying that
      the 'twisted' package doesn't want to include the 'twisted.conch'
      package, so it will pass ['conch'] as the value.
  
      'parent' is necessary if you're distributing a subpackage like
      twisted.conch.  'dname' should point to 'twisted/conch' and 'parent'
      should point to 'twisted'.  This ensures that your data_files are
      generated correctly, only using relative paths for the first element
      of the tuple ('twisted/conch/*').
      The default 'parent' is the current working directory.