def test_perl_version_comparisons(self): """test comparison operators on PerlVersionScheme""" # load versions with increasing version numbers versions = [Version(vstr, scheme=PerlVersionScheme) for vstr in [ '0.00', '0.01', '0.20', '0.90', '3.00', '3.04', '3.50', '4.00', '4.09', '10.00', '10.18', '999.999' ]] # check each adjacent version numbers for index, version in enumerate(versions[0:-1]): assert versions[index] < versions[index + 1], \ "{v1} < {v2}".format(v1=versions[index], v2=versions[index + 1]) assert versions[index + 1] > versions[index], \ "{v1} > {v2}".format(v1=versions[index + 1], v2=versions[index]) assert versions[index] <= versions[index + 1], \ "{v1} <= {v2}".format(v1=versions[index], v2=versions[index + 1]) assert versions[index + 1] >= versions[index], \ "{v1} >= {v2}".format(v1=versions[index + 1], v2=versions[index]) assert versions[index] != versions[index + 1], \ "{v1} != {v2}".format(v1=versions[index], v2=versions[index + 1]) assert Version(str(versions[index]), scheme=PerlVersionScheme) == versions[index], \ "{v1} == {v2}".format(v1=Version(str(versions[index])), v2=versions[index])
def test_four_part(): string = "1.7.1.3" print(string) Version.supported_version_schemes = [Pep440VersionScheme, Simple4VersionScheme] version = Version(string, scheme=Simple4VersionScheme) version.bump() # _ = Version(str(next_version), scheme=Simple4VersionScheme) print( Version(string, scheme=Simple4VersionScheme), version, "simple-4 part (versio)" )
def test_simple3_bump_errors(self): """bad bump commands""" v1 = Version('1.2.3', scheme=Simple3VersionScheme) assert (not v1.bump('')) assert (str(v1) == '1.2.3') assert (not v1.bump('foo')) assert (str(v1) == '1.2.3')
def test_simple4_version_comparisons(self): """test comparison operators on Simple4VersionScheme""" # load versions with increasing version numbers versions = [Version(vstr, scheme=Simple4VersionScheme) for vstr in [ '0.0.0.0', '0.0.0.1', '0.0.0.2', '0.0.0.9', '0.0.3.0', '0.0.3.4', '0.0.3.5', '0.0.4.0', '0.0.4.9', '0.1.0.0', '0.1.0.1', '0.1.10.0', '0.2.0.0', '0.2.0.11', '0.2.3.0', '0.10.0.0', '0.10.0.18', '0.10.22.0', '1.0.0.0', '1.0.0.1', '1.0.1.0', '1.1.0.0', '1.10.0.0', '1.10.10.0', '1.10.10.10', '10.10.10.10', '999.999.999.999' ]] # check each adjacent version numbers for index, version in enumerate(versions[0:-1]): assert versions[index] < versions[index + 1], \ "{v1} < {v2}".format(v1=versions[index], v2=versions[index + 1]) assert versions[index + 1] > versions[index], \ "{v1} > {v2}".format(v1=versions[index + 1], v2=versions[index]) assert versions[index] <= versions[index + 1], \ "{v1} <= {v2}".format(v1=versions[index], v2=versions[index + 1]) assert versions[index + 1] >= versions[index], \ "{v1} >= {v2}".format(v1=versions[index + 1], v2=versions[index]) assert versions[index] != versions[index + 1], \ "{v1} != {v2}".format(v1=versions[index], v2=versions[index + 1]) assert Version(str(versions[index]), scheme=Simple4VersionScheme) == versions[index], \ "{v1} == {v2}".format(v1=Version(str(versions[index])), v2=versions[index])
def test_pep440_bump_subfields(self): """PEP 440 subfield bumps""" v1 = Version('1.2.3.4', scheme=Pep440VersionScheme) v1.bump('Tiny2') assert (str(v1) == '1.2.3.5') v1.bump('Tiny') assert (str(v1) == '1.2.4.0') v1.bump('Minor') assert (str(v1) == '1.3.0.0') v1.bump('Major') assert (str(v1) == '2.0.0.0')
def test_pep440_bump_pre(self): """PEP 440 field bumps that start new version parts""" v1 = Version('1.2.3', scheme=Pep440VersionScheme) assert (v1.bump('pre', 0), str(v1)) assert (str(v1) == '1.2.3a1') assert (v1.bump('pre', 1), str(v1)) assert (str(v1) == '1.2.3a2') assert (v1.bump('post', 0), str(v1)) assert (str(v1) == '1.2.3a2.post1') assert (v1.bump('dev', 0), str(v1)) assert (str(v1) == '1.2.3a2.post1.dev1')
def test_simple3_bump(self): """version bumps""" v1 = Version('1.2.3', scheme=Simple3VersionScheme) assert (v1.bump()) assert (str(v1) == '1.2.4') assert (v1.bump('Minor')) assert (str(v1) == '1.3.0') assert (v1.bump('minor')) assert (str(v1) == '1.4.0') assert (v1.bump('Tiny')) assert (str(v1) == '1.4.1') assert (v1.bump('tiny')) assert (str(v1) == '1.4.2') assert (v1.bump('Major')) assert (str(v1) == '2.0.0')
def test_simple4_bump(self): """version bumps""" v1 = Version('1.2.3.4', scheme=Simple4VersionScheme) assert (v1.bump()) assert (str(v1) == '1.2.3.5') assert (v1.bump('Minor')) assert (str(v1) == '1.3.0.0') assert (v1.bump('Tiny')) assert (str(v1) == '1.3.1.0') assert (v1.bump('Tiny2')) assert (str(v1) == '1.3.1.1') assert (v1.bump('Major')) assert (str(v1) == '2.0.0.0')
def test_pep440_bump_sequences(self): """PEP 440 sequence bumps""" v1 = Version('1.2.3a4.post5.dev6', scheme=Pep440VersionScheme) assert (not v1.bump('dev', 0)) assert (str(v1) == '1.2.3a4.post5.dev6') assert (not v1.bump('post', 0)) assert (str(v1) == '1.2.3a4.post5.dev6') assert (v1.bump('pre', 0)) assert (str(v1) == '1.2.3b1') assert (v1.bump('pre', 0)) assert (str(v1) == '1.2.3c1') assert (v1.bump('pre', 0)) assert (str(v1) == '1.2.3rc1') assert (not v1.bump('pre', 0)) assert (str(v1) == '1.2.3rc1')
def do(self, ver): Debug("do(%s) self.bump: %s" % (ver, self.bump)) # If bump is a list of bumps to perform, create a new class instance # and set its bump, do the bump, then return result if isinstance(self.bump, list): for item in self.bump: classn = self.__class__ Debug("Creating v2 classn(%s)" % item) v2 = classn(item) Debug("Running v2.do(%s)" % ver) ver = v2.do(str(ver)) Debug("v2.do() result: %s" % ver) return str(ver) myver = Version(ver, scheme=self.scheme) myver.bump(self.bump) Debug("ForceSemanticVer(%s) bump '%s': %s" % (ver, self.bump, myver)) # Make sure we return a string, not a Version() object return str(myver)
def handle_register_or_upload(post_data, files, user, repository): """Process a `register` or `upload` comment issued via distutils. This method is called with the authenticated user. """ name = post_data.get('name') version = post_data.get('version') if settings.LOCALSHOP_VERSIONING_TYPE: scheme = get_versio_versioning_scheme( settings.LOCALSHOP_VERSIONING_TYPE) try: Version(version, scheme=scheme) except AttributeError: response = HttpResponseBadRequest( reason="Invalid version supplied '{!s}' for '{!s}' scheme.". format(version, settings.LOCALSHOP_VERSIONING_TYPE)) return response if not name or not version: logger.info("Missing name or version for package") return HttpResponseBadRequest('No name or version given') try: condition = Q() for search_name in get_search_names(name): condition |= Q(name__iexact=search_name) package = repository.packages.get(condition) # Error out when we try to override a mirror'ed package for now # not sure what the best thing is if not package.is_local: return HttpResponseBadRequest('%s is a pypi package!' % package.name) try: release = package.releases.get(version=version) except ObjectDoesNotExist: release = None except ObjectDoesNotExist: package = None release = None # Validate the data form = forms.ReleaseForm(post_data, instance=release) if not form.is_valid(): return HttpResponseBadRequest(reason=form.errors.values()[0][0]) if not package: pkg_form = forms.PackageForm(post_data, repository=repository) if not pkg_form.is_valid(): return HttpResponseBadRequest( reason=six.next(six.itervalues(pkg_form.errors))[0]) package = pkg_form.save() release = form.save(commit=False) release.package = package release.save() # If this is an upload action then process the uploaded file if files: filename = files['distribution']._name try: release_file = release.files.get(filename=filename) if settings.LOCALSHOP_RELEASE_OVERWRITE is False: message = 'That it already released, please bump version.' return HttpResponseBadRequest(message) except ObjectDoesNotExist: release_file = models.ReleaseFile(release=release, filename=filename) form_file = forms.ReleaseFileForm(post_data, files, instance=release_file) if not form_file.is_valid(): return HttpResponseBadRequest('ERRORS %s' % form_file.errors) release_file = form_file.save(commit=False) release_file.save() return HttpResponse()
def test_pep440_version_comparisons(self): """test comparison operators on Pep440VersionScheme""" # load versions with increasing version numbers versions = [Version(vstr, scheme=Pep440VersionScheme) for vstr in [ '0.0.0.0', '0.0.0.1', '0.0.0.2', '0.0.0.9', '0.0.3.0', '0.0.3.4', '0.0.3.5', '0.0.4.0', '0.0.4.9', '0.1.0.0', '0.1.0.1', '0.1.10.0', '0.2.0.0', '0.2.0.11', '0.2.3.0', '0.10.0.0', '0.10.0.18', '0.10.22.0', '1.0.0.0', '1.0.0.1', '1.0.0.1+2', '1.0.0.1+3', '1.0.1.0a1', '1.0.1.0a2', '1.0.1.0b1', '1.0.1.0b2', '1.0.1.0c1', '1.0.1.0c2', '1.0.1.0rc1', '1.0.1.0rc2.dev1', '1.0.1.0rc2.dev1+a', '1.0.1.0rc2.dev1+b', '1.0.1.0rc2.dev2', '1.0.1.0rc2', '1.0.1.0rc2.post1.dev1', '1.0.1.0rc2.post1.dev1+1.2', '1.0.1.0rc2.post1.dev1+1.3', '1.0.1.0rc2.post1.dev2', '1.0.1.0rc2.post1', '1.0.1.0.dev1', '1.0.1.0.dev2', '1.0.1.0', '1.1.0.0', '1.10.0.0', '1.10.10.0', '1.10.10.10', '10.10.10.10', '999.999.999.999' ]] # check each adjacent version numbers for index, version in enumerate(versions[0:-1]): assert versions[index] < versions[index + 1], \ self.compare_to_str(op='<', v1=versions[index], v2=versions[index + 1]) assert versions[index + 1] > versions[index], \ self.compare_to_str(op='>', v1=versions[index + 1], v2=versions[index]) assert versions[index] <= versions[index + 1], \ self.compare_to_str(op='<=', v1=versions[index], v2=versions[index + 1]) assert versions[index + 1] >= versions[index], \ self.compare_to_str(op='>=', v1=versions[index + 1], v2=versions[index]) assert versions[index] != versions[index + 1], \ self.compare_to_str(op='!=', v1=versions[index], v2=versions[index + 1]) assert Version(str(versions[index]), scheme=Pep440VersionScheme) == versions[index], \ self.compare_to_str(op='==', v1=Version(str(versions[index])), v2=versions[index])
def _round_trip(version_str): """roundtrip, parse then convert back to string""" assert (str(Version(version_str, scheme=Pep440VersionScheme)) == version_str) assert (str(Version(version_str)) == version_str)
def test_pep440_version_errors(self): """garbage in check, bad versions""" raises(AttributeError, lambda: Version('1.', scheme=Pep440VersionScheme)) raises(AttributeError, lambda: Version('1-2', scheme=Pep440VersionScheme)) raises(AttributeError, lambda: Version('1_2', scheme=Pep440VersionScheme)) raises(AttributeError, lambda: Version('1.2.3.a4', scheme=Pep440VersionScheme)) raises(AttributeError, lambda: Version('1.2.3-a4', scheme=Pep440VersionScheme)) raises(AttributeError, lambda: Version('1.2.3_a4', scheme=Pep440VersionScheme)) raises(AttributeError, lambda: Version('1.2.3a4-foo5', scheme=Pep440VersionScheme)) raises(AttributeError, lambda: Version('1.2.3a4.foo5', scheme=Pep440VersionScheme)) # invalid local versions raises(AttributeError, lambda: Version('1.2.3.dev6+.1', scheme=Pep440VersionScheme)) raises(AttributeError, lambda: Version('1.2.3.dev6+1.', scheme=Pep440VersionScheme)) raises(AttributeError, lambda: Version('1.2.3.dev6+1(a)2', scheme=Pep440VersionScheme))
def test_simple4_version(self): """roundtrip, parse then convert back to string""" assert (str(Version('1.2.3.4', scheme=Simple4VersionScheme)) == '1.2.3.4')
def test_simple4_version_errors(self): """garbage in check, bad versions""" raises(AttributeError, lambda: Version('1.2.3', scheme=Simple4VersionScheme)) raises(AttributeError, lambda: Version('1.2.3.', scheme=Simple4VersionScheme)) raises(AttributeError, lambda: Version('1.2.3.4.', scheme=Simple4VersionScheme)) raises(AttributeError, lambda: Version('1.2.3.4.5', scheme=Simple4VersionScheme))
def test_pep440_bump(self): """version bumps""" v1 = Version('1.2.3a4.post5.dev6+7', scheme=Pep440VersionScheme) assert (v1.bump('local')) assert (str(v1) == '1.2.3a4.post5.dev6+8') assert (not v1.bump('local', 0)) # can't bump '+' assert (str(v1) == '1.2.3a4.post5.dev6+8') assert (v1.bump('local', 1)) assert (str(v1) == '1.2.3a4.post5.dev6+9') assert (v1.bump('dev')) assert (str(v1) == '1.2.3a4.post5.dev7') assert (not v1.bump('dev', 0)) # can't bump 'dev' assert (str(v1) == '1.2.3a4.post5.dev7') assert (v1.bump('dev', 1)) assert (str(v1) == '1.2.3a4.post5.dev8') assert (v1.bump('post')) assert (str(v1) == '1.2.3a4.post6') assert (not v1.bump('post', 0)) # can't bump 'post' assert (str(v1) == '1.2.3a4.post6') assert (v1.bump('post', 1)) assert (str(v1) == '1.2.3a4.post7') assert (v1.bump('pre')) assert (str(v1) == '1.2.3a5') assert (v1.bump('pre', 0)) assert (str(v1) == '1.2.3b1') assert (v1.bump('pre', 0)) assert (str(v1) == '1.2.3c1') assert (v1.bump('pre', 0)) assert (str(v1) == '1.2.3rc1') assert (not v1.bump('pre', 0)) assert (str(v1) == '1.2.3rc1') assert (v1.bump('release')) assert (str(v1) == '1.2.4') assert (v1.bump('release', 2)) assert (str(v1) == '1.2.5') assert (v1.bump('release', 1)) assert (str(v1) == '1.3.0') assert (v1.bump('release', 0)) assert (str(v1) == '2.0.0') v1 = Version('1.2.3a4.post5.dev6') assert (v1.bump('post')) assert (str(v1) == '1.2.3a4.post6') v1 = Version('1.2.3a4.post5.dev6') assert (v1.bump('pre')) assert (str(v1) == '1.2.3a5') v1 = Version('1.2.3a4.post5.dev6') assert (v1.bump('pre', 0)) assert (str(v1) == '1.2.3b1') v1 = Version('1.2.3a4.post5.dev6') assert (v1.bump('release')) assert (str(v1) == '1.2.4') v1 = Version('1.2.3a4.post5.dev6') assert (v1.bump('release', 2)) assert (str(v1) == '1.2.4') v1 = Version('1.2.3a4.post5.dev6') assert (v1.bump('release', 1)) assert (str(v1) == '1.3.0') v1 = Version('1.2.3a4.post5.dev6') assert (v1.bump('release', 0)) assert (str(v1) == '2.0.0')
def test_pep440_bump_errors(self): """PEP 440 bump errors""" v1 = Version('1.2.3a4.post5.dev6', scheme=Pep440VersionScheme) assert (not v1.bump('release', 3)) assert (str(v1) == '1.2.3a4.post5.dev6')