docs: def all_current_versions(self):  # type: () ->Dict[str,str]
          """
          Track down all the versions & compile into one dictionary
          :return:
          """
          if self.PROJECT is None:
              raise TypeError("self.PROJECT missing, can't continue")
  
          versions = {}  # type: Dict[str,str]
          files_to_check = [x for x in self.file_inventory.source_files]
          files_to_check.append(self.PROJECT + ".py")  # is this the 'central' module?
          for file in self.file_inventory.source_files:
  
              if not os.path.isfile(file):
                  continue
              vers = self.find_dunder_version_in_file(file)
              if vers:
                  versions = merge_two_dicts(versions, vers)
  
          for finder in [self.read_metadata, self.read_text, self.read_setup_py]:
              more_vers = finder()
              if more_vers:
                  versions = merge_two_dicts(versions, more_vers)
  
          bad_versions, good_versions = self.kick_out_bad_versions(versions)
  
          # get more versions here via risky routes
          if not good_versions:
              # desperate times, man...
              for folder in [self.file_inventory.project_root, self.file_inventory.src]:
                  if not os.path.isdir(folder):
                      print(os.listdir("."))
                      continue
  
                  if folder == "":
                      folder = "."
                  for file in [x for x in os.listdir(folder) if x.endswith(".py")]:
                      # not going to do the extensionsless py files, too slow.
                      file_path = os.path.join(folder, file)
                      if not os.path.isfile(file_path):
                          continue
                      vers = self.find_dunder_version_in_file(file_path)
                      if vers:
                          maybe_good = merge_two_dicts(good_versions, vers)
  
                          more_bad_versions, good_versions = self.kick_out_bad_versions(
                              maybe_good
                          )
  
          if not good_versions:
              vers = self.execute_setup()
              if vers:
                  try:
                      for key, value in vers.items():
                          _ = version_object_and_next(value)
                  except:
                      print(vers)
  
                  maybe_good = merge_two_dicts(good_versions, vers)
                  more_bad_versions, good_versions = self.kick_out_bad_versions(
                      maybe_good
                  )
  
          # more_bad_versions, good_versions = self.kick_out_bad_versions(versions)
          if not good_versions:
              vers = self.version_by_import(self.PROJECT)
              maybe_good = merge_two_dicts(good_versions, vers)
              more_bad_versions, good_versions = self.kick_out_bad_versions(maybe_good)
  
          # no new versions found!
          # for file in self.file_inventory.source_files:
          #
          #     if not os.path.isfile(file):
          #         continue
          #     vers = self.version_by_eval(file)
          #     maybe_good = merge_two_dicts(good_versions, vers)
          #     more_bad_versions, good_versions = self.kick_out_bad_versions(
          #         maybe_good
          #     )
  
          if bad_versions:
              print(unicode(bad_versions))
              logger.warning(unicode(bad_versions))
          return good_versions