code: def get_free_project_name(self, base_name):
          
          names = [p.name for p in self._projects.values()]
          if base_name not in names:
              return base_name
          i = 1
  
          projects_path = self.projects_directory()
  
          while True:
              new_name = "{}-{}".format(base_name, i)
              if new_name not in names and not os.path.exists(os.path.join(projects_path, new_name)):
                  break
              i += 1
              if i > 1000000:
                  raise aiohttp.web.HTTPConflict(text="A project name could not be allocated (node limit reached?)")
          return new_name
docs: Generate a free project name base on the base name