summaryrefslogtreecommitdiff
path: root/semantic_version/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'semantic_version/base.py')
-rw-r--r--semantic_version/base.py26
1 files changed, 14 insertions, 12 deletions
diff --git a/semantic_version/base.py b/semantic_version/base.py
index 7451e14..cf85d86 100644
--- a/semantic_version/base.py
+++ b/semantic_version/base.py
@@ -406,7 +406,13 @@ class SpecItem(object):
KIND_CARET = '^'
KIND_TILDE = '~'
- re_spec = re.compile(r'^(<|<=|={,2}|>=|>|!=|\^|~)(\d.*)$')
+ # Map a kind alias to its full version
+ KIND_ALIASES = {
+ KIND_SHORTEQ: KIND_EQUAL,
+ KIND_EMPTY: KIND_EQUAL,
+ }
+
+ re_spec = re.compile(r'^(<|<=||=|==|>=|>|!=|\^|~)(\d.*)$')
def __init__(self, requirement_string):
kind, spec = self.parse(requirement_string)
@@ -427,6 +433,9 @@ class SpecItem(object):
raise ValueError("Invalid requirement specification: %r" % requirement_string)
kind, version = match.groups()
+ if kind in cls.KIND_ALIASES:
+ kind = cls.KIND_ALIASES[kind]
+
spec = Version(version, partial=True)
if spec.build is not None and kind not in (cls.KIND_EQUAL, cls.KIND_NEQ):
raise ValueError(
@@ -441,7 +450,7 @@ class SpecItem(object):
return version < self.spec
elif self.kind == self.KIND_LTE:
return version <= self.spec
- elif self.kind in [self.KIND_EQUAL, self.KIND_SHORTEQ, self.KIND_EMPTY]:
+ elif self.kind == self.KIND_EQUAL:
return version == self.spec
elif self.kind == self.KIND_GTE:
return version >= self.spec
@@ -450,20 +459,13 @@ class SpecItem(object):
elif self.kind == self.KIND_NEQ:
return version != self.spec
elif self.kind == self.KIND_CARET:
- return self.caretCompare(version)
+ return self.spec <= version < self.spec.next_major()
+ return self.caret_compare(version)
elif self.kind == self.KIND_TILDE:
- return self.tildeCompare(version)
+ return self.spec <= version < self.spec.next_minor()
else: # pragma: no cover
raise ValueError('Unexpected match kind: %r' % self.kind)
- def caretCompare(self, version):
- max_version = version.next_major()
- return version >= self.spec and version < max_version
-
- def tildeCompare(self, version):
- max_version = version.next_minor()
- return version >= self.spec and version < max_version
-
def __str__(self):
return '%s%s' % (self.kind, self.spec)