summaryrefslogtreecommitdiff
path: root/pkg_resources/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'pkg_resources/__init__.py')
-rw-r--r--pkg_resources/__init__.py37
1 files changed, 26 insertions, 11 deletions
diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py
index ae363755..0c024f1b 100644
--- a/pkg_resources/__init__.py
+++ b/pkg_resources/__init__.py
@@ -1410,6 +1410,7 @@ class MarkerEvaluation(object):
'python_version': lambda: platform.python_version()[:3],
'platform_version': platform.version,
'platform_machine': platform.machine,
+ 'platform_python_implementation': platform.python_implementation,
'python_implementation': platform.python_implementation,
}
@@ -1525,6 +1526,17 @@ class MarkerEvaluation(object):
"""
return cls.interpret(parser.expr(text).totuple(1)[1])
+ @staticmethod
+ def _translate_metadata2(env):
+ """
+ Markerlib implements Metadata 1.2 (PEP 345) environment markers.
+ Translate the variables to Metadata 2.0 (PEP 426).
+ """
+ return dict(
+ (key.replace('.', '_'), value)
+ for key, value in env
+ )
+
@classmethod
def _markerlib_evaluate(cls, text):
"""
@@ -1533,12 +1545,8 @@ class MarkerEvaluation(object):
Raise SyntaxError if marker is invalid.
"""
import _markerlib
- # markerlib implements Metadata 1.2 (PEP 345) environment markers.
- # Translate the variables to Metadata 2.0 (PEP 426).
- env = _markerlib.default_environment()
- for key in env.keys():
- new_key = key.replace('.', '_')
- env[new_key] = env.pop(key)
+
+ env = cls._translate_metadata2(_markerlib.default_environment())
try:
result = _markerlib.interpret(text, env)
except NameError as e:
@@ -1708,7 +1716,7 @@ class EggProvider(NullProvider):
path = self.module_path
old = None
while path!=old:
- if path.lower().endswith('.egg'):
+ if _is_unpacked_egg(path):
self.egg_name = os.path.basename(path)
self.egg_info = os.path.join(path, 'EGG-INFO')
self.egg_root = path
@@ -2091,7 +2099,7 @@ def find_eggs_in_zip(importer, path_item, only=False):
# don't yield nested distros
return
for subitem in metadata.resource_listdir('/'):
- if subitem.endswith('.egg'):
+ if _is_unpacked_egg(subitem):
subpath = os.path.join(path_item, subitem)
for dist in find_eggs_in_zip(zipimport.zipimporter(subpath), subpath):
yield dist
@@ -2107,8 +2115,7 @@ def find_on_path(importer, path_item, only=False):
path_item = _normalize_cached(path_item)
if os.path.isdir(path_item) and os.access(path_item, os.R_OK):
- if path_item.lower().endswith('.egg'):
- # unpacked egg
+ if _is_unpacked_egg(path_item):
yield Distribution.from_filename(
path_item, metadata=PathMetadata(
path_item, os.path.join(path_item,'EGG-INFO')
@@ -2128,7 +2135,7 @@ def find_on_path(importer, path_item, only=False):
yield Distribution.from_location(
path_item, entry, metadata, precedence=DEVELOP_DIST
)
- elif not only and lower.endswith('.egg'):
+ elif not only and _is_unpacked_egg(entry):
dists = find_distributions(os.path.join(path_item, entry))
for dist in dists:
yield dist
@@ -2275,6 +2282,14 @@ def _normalize_cached(filename, _cache={}):
_cache[filename] = result = normalize_path(filename)
return result
+def _is_unpacked_egg(path):
+ """
+ Determine if given path appears to be an unpacked egg.
+ """
+ return (
+ path.lower().endswith('.egg')
+ )
+
def _set_parent_ns(packageName):
parts = packageName.split('.')
name = parts.pop()