Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions twine/_installed.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Copyright 2013 Tres Seaver
# Copyright 2015 Ian Cordasco
# This code was originally licensed under the Python Software Foudation
# License by Tres Seaver. In order to facilitate finding the metadata of
# installed packages, part of the most current implementation of the
# pkginfo.Installed class is reproduced here with bug fixes from
# https://bugs.launchpad.net/pkginfo/+bug/1437570.
import glob
import os
import sys
import warnings

import pkginfo


class Installed(pkginfo.Installed):

def read(self):
opj = os.path.join
if self.package is not None:
package = self.package.__package__
if package is None:
package = self.package.__name__
egg_pattern = '%s*.egg-info' % package
dist_pattern = '%s*.dist-info' % package
file = getattr(self.package, '__file__', None)
if file is not None:
candidates = []

def _add_candidate(where):
candidates.extend(glob.glob(where))

for entry in sys.path:
if file.startswith(entry):
_add_candidate(opj(entry, 'METADATA')) # egg?
_add_candidate(opj(entry, 'EGG-INFO')) # egg?
# dist-installed?
_add_candidate(opj(entry, egg_pattern))
_add_candidate(opj(entry, dist_pattern))
dir, name = os.path.split(self.package.__file__)
_add_candidate(opj(dir, egg_pattern))
_add_candidate(opj(dir, dist_pattern))
_add_candidate(opj(dir, '..', egg_pattern))
_add_candidate(opj(dir, '..', dist_pattern))

for candidate in candidates:
if os.path.isdir(candidate):
path = opj(candidate, 'PKG-INFO')
if not os.path.exists(path):
path = opj(candidate, 'METADATA')
else:
path = candidate
if os.path.exists(path):
with open(path) as f:
return f.read()

warnings.warn('No PKG-INFO or METADATA found for package: %s' %
self.package_name)
3 changes: 2 additions & 1 deletion twine/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import pkginfo

import twine
from twine._installed import Installed


def _registered_commands(group='twine.registered_commands'):
Expand All @@ -31,7 +32,7 @@ def _registered_commands(group='twine.registered_commands'):

def dep_versions():
return 'pkginfo: {0}, requests: {1}, setuptools: {2}'.format(
pkginfo.Installed(pkginfo).version,
Installed(pkginfo).version,
# __version__ is always defined but requests does not always have
# PKG-INFO to read from
requests.__version__,
Expand Down