docs: def create(self, datapath, tracker_urls, comment=None, root_name=None,
                       created_by=None, private=False, no_date=False, progress=None,
                       callback=None):
          """ Create a metafile with the path given on object creation.
              Returns the last metafile dict that was written (as an object, not bencoded).
          """
          if datapath:
              self.datapath = datapath
  
          try:
              tracker_urls = ['' + tracker_urls]
          except TypeError:
              tracker_urls = list(tracker_urls)
          multi_mode = len(tracker_urls) > 1
  
          # TODO add optimization so the hashing happens only once for multiple URLs!
          for tracker_url in tracker_urls:
              # Lookup announce URLs from config file
              try:
                  if urlparse.urlparse(tracker_url).scheme:
                      tracker_alias = urlparse.urlparse(tracker_url).netloc.split(':')[0].split('.')
                      tracker_alias = tracker_alias[-2 if len(tracker_alias) > 1 else 0]
                  else:
                      tracker_alias, tracker_url = config.lookup_announce_alias(tracker_url)
                      tracker_url = tracker_url[0]
              except (KeyError, IndexError):
                  raise error.UserError("Bad tracker URL %r, or unknown alias!" % (tracker_url,))
  
              # Determine metafile name
              output_name = self.filename
              if multi_mode:
                  # Add 2nd level of announce URL domain to metafile name
                  output_name = list(os.path.splitext(output_name))
                  try:
                      output_name[1:1] = '-' + tracker_alias
                  except (IndexError,):
                      self.LOG.error("Malformed announce URL %r, skipping!" % (tracker_url,))
                      continue
                  output_name = ''.join(output_name)
  
              # Hash the data
              self.LOG.info("Creating %r for %s %r..." % (
                  output_name, "filenames read from" if self._fifo else "data in", self.datapath,
              ))
              meta, _ = self._make_meta(tracker_url, root_name, private, progress)
  
              # Add optional fields
              if comment:
                  meta["comment"] = comment
              if created_by:
                  meta["created by"] = created_by
              if not no_date:
                  meta["creation date"] = int(time.time())
              if callback:
                  callback(meta)
  
              # Write metafile to disk
              self.LOG.debug("Writing %r..." % (output_name,))
              bencode.bwrite(output_name, meta)
  
          return meta