示例#1
0
    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])
示例#2
0
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)"
    )
示例#3
0
 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')
示例#4
0
    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])
示例#5
0
    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')
示例#6
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')
示例#7
0
 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')
示例#8
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')
示例#9
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)
示例#11
0
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()
示例#12
0
    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])
示例#13
0
 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)
示例#14
0
    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))
示例#15
0
 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')
示例#16
0
 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))
示例#17
0
    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')
示例#18
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')