You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.3 KiB
59 lines
2.3 KiB
5 years ago
|
# 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)
|