summaryrefslogtreecommitdiff
path: root/pkg_resources.py
diff options
context:
space:
mode:
Diffstat (limited to 'pkg_resources.py')
-rw-r--r--pkg_resources.py30
1 files changed, 15 insertions, 15 deletions
diff --git a/pkg_resources.py b/pkg_resources.py
index 927b7942..a9697bbc 100644
--- a/pkg_resources.py
+++ b/pkg_resources.py
@@ -54,6 +54,9 @@ class InvalidOption(ResolutionError):
_provider_factories = {}
PY_MAJOR = sys.version[:3]
+EGG_DIST = 2
+SOURCE_DIST = 1
+
def register_loader_type(loader_type, provider_factory):
"""Register `provider_factory` to make providers for `loader_type`
@@ -77,9 +80,6 @@ def get_provider(moduleName):
-
-
-
def get_platform():
"""Return this platform's string for platform-specific distributions
@@ -1146,23 +1146,21 @@ def parse_version(s):
-EGG_DIST = 2
-SOURCE_DIST = 1
-
class Distribution(object):
"""Wrap an actual or potential sys.path entry w/metadata"""
- typecode = EGG_DIST
+
def __init__(self,
path_str, metadata=None, name=None, version=None,
- py_version=PY_MAJOR, platform=None
+ py_version=PY_MAJOR, platform=None, distro_type = EGG_DIST
):
if name:
- self.name = name.replace('_','-')
+ self.name = safe_name(name)
if version:
- self._version = version.replace('_','-')
+ self._version = safe_version(version)
self.py_version = py_version
self.platform = platform
self.path = path_str
+ self.distro_type = distro_type
self.metadata = metadata
def installed_on(self,path=None):
@@ -1187,6 +1185,8 @@ class Distribution(object):
)
from_filename = classmethod(from_filename)
+
+
# These properties have to be lazy so that we don't have to load any
# metadata until/unless it's actually needed. (i.e., some distributions
# may not know their name or version without loading PKG-INFO)
@@ -1330,7 +1330,7 @@ def parse_requirements(strs):
def _sort_dists(dists):
- tmp = [(dist.version,dist.typecode,dist) for dist in dists]
+ tmp = [(dist.version,dist.distro_type,dist) for dist in dists]
tmp.sort()
dists[::-1] = [d for v,t,d in tmp]
@@ -1382,16 +1382,16 @@ class Requirement:
item = item.parsed_version
elif isinstance(item,basestring):
item = parse_version(item)
- last = True
+ last = None
for parsed,trans,op,ver in self.index:
action = trans[cmp(item,parsed)]
if action=='F': return False
elif action=='T': return True
elif action=='+': last = True
- elif action=='-': last = False
+ elif action=='-' or last is None: last = False
+ if last is None: last = True # no rules encountered
return last
-
def __hash__(self):
return self.__hash
@@ -1414,7 +1414,7 @@ state_machine = {
'>' : 'F+F',
'>=': 'T+F',
'==': 'T..',
- '!=': 'F..',
+ '!=': 'F++',
}