docs: def list_gtfs(path: Path) -> DataFrame:
      """
      Given a path (string or Path object) to a GTFS zip file or
      directory, record the file names and file sizes of the contents,
      and return the result in a DataFrame with the columns:
  
      - ``'file_name'``
      - ``'file_size'``
      """
      path = Path(path)
      if not path.exists():
          raise ValueError(f"Path {path} does not exist")
  
      # Collect rows of DataFrame
      rows = []
      if path.is_file():
          # Zip file
          with zipfile.ZipFile(str(path)) as src:
              for x in src.infolist():
                  if x.filename == "./":
                      continue
                  d = {}
                  d["file_name"] = x.filename
                  d["file_size"] = x.file_size
                  rows.append(d)
      else:
          # Directory
          for x in path.iterdir():
              d = {}
              d["file_name"] = x.name
              d["file_size"] = x.stat().st_size
              rows.append(d)
  
      return pd.DataFrame(rows)