def _try_combine_upper_bound_with_exact(self, upper, exact): comparison = upper.compare(exact) if (comparison > 0 or (comparison == 0 and upper.matcher == Matchers.LESS_THAN_OR_EQUAL)): return exact raise VersionsNotCompatibleException()
def _try_combine_lower_bound_with_exact(self, lower, exact): comparison = lower.compare(exact) if (comparison < 0 or (comparison == 0 and lower.matcher == Matchers.GREATER_THAN_OR_EQUAL)): return exact raise VersionsNotCompatibleException()
def reduce(self, other): start = None if (self.start.is_exact and other.start.is_exact): start = end = self._try_combine_exact(self.start, other.start) else: start = self._try_combine_lower_bound(self.start, other.start) end = self._try_combine_upper_bound(self.end, other.end) if start.compare(end) > 0: raise VersionsNotCompatibleException() return VersionRange(start=start, end=end)
def reduce_versions(*args): version_specifiers = [] for version in args: if isinstance(version, UnboundedVersionSpecifier) or version is None: continue elif isinstance(version, VersionSpecifier): version_specifiers.append(version) elif isinstance(version, VersionRange): if not isinstance(version.start, UnboundedVersionSpecifier): version_specifiers.append(version.start) if not isinstance(version.end, UnboundedVersionSpecifier): version_specifiers.append(version.end) else: version_specifiers.append( VersionSpecifier.from_version_string(version)) for version_specifier in version_specifiers: if not isinstance(version_specifier, VersionSpecifier): raise Exception(version_specifier) if not version_specifiers: return VersionRange(start=UnboundedVersionSpecifier(), end=UnboundedVersionSpecifier()) try: to_return = version_specifiers.pop().to_range() for version_specifier in version_specifiers: to_return = to_return.reduce(version_specifier.to_range()) except VersionsNotCompatibleException as e: raise VersionsNotCompatibleException( 'Could not find a satisfactory version from options: {}'.format( [str(a) for a in args])) return to_return
def _try_combine_exact(self, a, b): if a.compare(b) == 0: return a else: raise VersionsNotCompatibleException()