def read(self): fqn = os.path.abspath(os.path.normpath(self.filename)) if not os.path.exists(fqn): raise exceptions.InvalidDistribution("No such file: %s" % fqn) if fqn.endswith(".exe"): archive = zipfile.ZipFile(fqn) names = archive.namelist() def read_file(name): return archive.read(name) else: raise exceptions.InvalidDistribution( "Not a known archive format: %s" % fqn) try: tuples = [ x.split("/") for x in names if x.endswith(".egg-info") or x.endswith("PKG-INFO") ] schwarz = sorted([(len(x), x) for x in tuples]) for path in [x[1] for x in schwarz]: candidate = "/".join(path) data = read_file(candidate) if b"Metadata-Version" in data: return data finally: archive.close() raise exceptions.InvalidDistribution( "No PKG-INFO/.egg-info in archive: %s" % fqn)
def from_filename(cls, filename: str, comment: Optional[str]) -> "PackageFile": # Extract the metadata from the package for ext, dtype in DIST_EXTENSIONS.items(): if filename.endswith(ext): meta = DIST_TYPES[dtype](filename) break else: raise exceptions.InvalidDistribution( "Unknown distribution format: '%s'" % os.path.basename(filename)) # If pkginfo encounters a metadata version it doesn't support, it may # give us back empty metadata. At the very least, we should have a name # and version if not (meta.name and meta.version): raise exceptions.InvalidDistribution( "Invalid distribution metadata. Try upgrading twine if possible." ) py_version: Optional[str] if dtype == "bdist_egg": pkgd = pkg_resources.Distribution.from_filename(filename) py_version = pkgd.py_version elif dtype == "bdist_wheel": py_version = meta.py_version elif dtype == "bdist_wininst": py_version = meta.py_version else: py_version = None return cls(filename, comment, meta, py_version, dtype)
def read(self) -> bytes: fqn = os.path.abspath(os.path.normpath(self.filename)) if not os.path.exists(fqn): raise exceptions.InvalidDistribution("No such file: %s" % fqn) if fqn.endswith(".whl"): archive = zipfile.ZipFile(fqn) names = archive.namelist() def read_file(name: str) -> bytes: return archive.read(name) else: raise exceptions.InvalidDistribution( "Not a known archive format for file: %s" % fqn ) try: for path in self.find_candidate_metadata_files(names): candidate = "/".join(path) data = read_file(candidate) if b"Metadata-Version" in data: return data finally: archive.close() raise exceptions.InvalidDistribution("No METADATA in archive: %s" % fqn)
def add_gpg_signature(self, signature_filepath, signature_filename): if self.gpg_signature is not None: raise exceptions.InvalidDistribution( 'GPG Signature can only be added once') with open(signature_filepath, "rb") as gpg: self.gpg_signature = (signature_filename, gpg.read())
def from_filename(cls, filename: str, comment: Optional[str]) -> "PackageFile": # Extract the metadata from the package for ext, dtype in DIST_EXTENSIONS.items(): if filename.endswith(ext): try: meta = DIST_TYPES[dtype](filename) except EOFError: raise exceptions.InvalidDistribution( "Invalid distribution file: '%s'" % os.path.basename(filename)) else: break else: raise exceptions.InvalidDistribution( "Unknown distribution format: '%s'" % os.path.basename(filename)) # If pkginfo encounters a metadata version it doesn't support, it may # give us back empty metadata. At the very least, we should have a name # and version if not (meta.name and meta.version): supported_metadata = list(pkginfo.distribution.HEADER_ATTRS) raise exceptions.InvalidDistribution( "Invalid distribution metadata. " "This version of twine supports Metadata-Version " f"{', '.join(supported_metadata[:-1])}, and {supported_metadata[-1]}" ) py_version: Optional[str] if dtype == "bdist_egg": ( dist, ) = importlib_metadata.Distribution.discover( # type: ignore[no-untyped-call] # python/importlib_metadata#288 # noqa: E501 path=[filename]) py_version = dist.metadata["Version"] elif dtype == "bdist_wheel": py_version = meta.py_version elif dtype == "bdist_wininst": py_version = meta.py_version else: py_version = None return cls(filename, comment, meta, py_version, dtype)
def _find_dists(dists): uploads = [] for filename in dists: if os.path.exists(filename): uploads.append(filename) continue # The filename didn't exist so it may be a glob files = glob.glob(filename) # If nothing matches, files is [] if not files: raise exceptions.InvalidDistribution( "Cannot find file (or expand pattern): '%s'" % filename) # Otherwise, files will be filenames that exist uploads.extend(files) return _group_wheel_files_first(uploads)
def from_filename(cls, filename, comment): # Extract the metadata from the package for ext, dtype in DIST_EXTENSIONS.items(): if filename.endswith(ext): meta = DIST_TYPES[dtype](filename) break else: raise exceptions.InvalidDistribution( "Unknown distribution format: '%s'" % os.path.basename(filename)) if dtype == "bdist_egg": pkgd = pkg_resources.Distribution.from_filename(filename) py_version = pkgd.py_version elif dtype == "bdist_wheel": py_version = meta.py_version elif dtype == "bdist_wininst": py_version = meta.py_version else: py_version = None return cls(filename, comment, meta, py_version, dtype)