Beispiel #1
0
    def test_version_invalid_values(self):

        self.assertRaises(ValueError, Version, '-0')
        self.assertRaises(ValueError, Version, '0.a')
        self.assertRaises(ValueError, Version('1.0').__eq__, None)
        self.assertRaises(ValueError, Version('1.0').__eq__, 5)
        self.assertRaises(ValueError, Version('1.0').__eq__, {})
Beispiel #2
0
    def test_version_le(self):
        self.assertLessEqual(Version('1'), '1')
        self.assertLessEqual(Version('1'), '1.0.0')
        self.assertLessEqual(Version('1'), Version('1.0.0'))
        self.assertLessEqual(Version('1'), '1.1')
        self.assertLessEqual(Version('1'), Version('1.1'))

        self.assertFalse(Version('1') <= '0.9')
        self.assertFalse(Version('1') <= Version('0.9'))
Beispiel #3
0
    def test_version_ne(self):
        self.assertNotEqual(Version('1'), '1.1')
        self.assertNotEqual(Version('1'), Version('1.1'))
        self.assertNotEqual(Version('1'), '0.9')
        self.assertNotEqual(Version('1'), Version('0.9'))

        self.assertFalse(Version('1') != '1.0')
        self.assertFalse(Version('1') != Version('1'))
Beispiel #4
0
    def test_version_ge(self):
        self.assertGreaterEqual(Version('1'), '1.0.0')
        self.assertGreaterEqual(Version('1'), Version('1.0.0'))
        self.assertGreaterEqual(Version('1'), '0.9')
        self.assertGreaterEqual(Version('1'), Version('0.9'))

        self.assertFalse(Version('1') >= '1.1')
        self.assertFalse(Version('1') >= Version('1.1'))
Beispiel #5
0
def get_latest_resource_version(name, vendor):

    resources = CatalogueResource.objects.filter(vendor=vendor,
                                                 short_name=name)
    if resources.count() > 0:
        newest_version = Version(resources[0].version)
        newest_resource = resources[0]
        for resource in resources[1:]:
            current_version = Version(resource.version)
            if current_version > newest_version:
                newest_version = current_version
                newest_resource = resource

        return newest_resource

    return None
Beispiel #6
0
    def read(self, request, vendor, name, version):

        from_version = request.GET.get('from')
        if from_version is not None:
            try:
                from_version = Version(from_version)
            except:
                return build_error_response(
                    request, 422, _("Missing parameter: template_uri or file"))

        resource = get_object_or_404(CatalogueResource,
                                     vendor=vendor,
                                     short_name=name,
                                     version=version)
        resource_info = resource.get_processed_info(process_urls=False)
        if resource_info['changelog'] == '':
            raise Http404

        doc_relative_path = url2pathname(resource_info['changelog'])
        doc_base_url = force_trailing_slash(
            urljoin(resource.get_template_url(request=request, for_base=True),
                    pathname2url(os.path.dirname(doc_relative_path))))
        doc_path = os.path.join(
            catalogue_utils.wgt_deployer.get_base_dir(vendor, name, version),
            doc_relative_path)

        (doc_filename_root, doc_filename_ext) = os.path.splitext(doc_path)
        localized_doc_path = doc_filename_root + '.' + get_language(
        ) + doc_filename_ext

        try:
            doc_code = download_local_file(localized_doc_path).decode('utf-8')
        except:
            try:
                doc_code = download_local_file(doc_path).decode('utf-8')
            except:
                msg = _('Error opening the changelog file')
                doc_code = '<div class="margin-top: 10px"><p>%s</p></div>' % msg

        doc_pre_html = markdown.markdown(doc_code,
                                         output_format='xhtml5',
                                         extensions=[
                                             'markdown.extensions.codehilite',
                                             'markdown.extensions.fenced_code'
                                         ])

        if from_version:
            doc_pre_html = filter_changelog(doc_pre_html, from_version)
            if doc_pre_html.strip() == '':
                raise Http404

        doc = clean_html(doc_pre_html, base_url=doc_base_url)
        return HttpResponse(
            doc, content_type='application/xhtml+xml; charset=UTF-8')
Beispiel #7
0
def filter_changelog(code, from_version):

    parser = XHTMLParser()
    doc = fragment_fromstring(code, create_parent=True, parser=parser)

    parentelement = None
    for header in doc.xpath('/div/h1|/div/h2|/div/h3'):
        title = header.text[1:] if header.text.startswith('v') else header.text
        try:
            version = Version(VERSION_HEADER_RE.split(title, 1)[0])
        except:
            continue

        parentelement = header.getparent()
        headerelement = header.tag
        for elem in header.itersiblings(preceding=True):
            elem.tail = ""
            elem.drop_tree()
        break

    if parentelement is not None:

        for header in parentelement.xpath(headerelement):
            title = header.text[1:] if header.text.startswith(
                'v') else header.text
            try:
                version = Version(VERSION_HEADER_RE.split(title, 1)[0])
            except:
                continue

            if version <= from_version:
                for elem in header.itersiblings():
                    elem.drop_tree()
                header.tail = ""
                header.drop_tree()
                break

    return (doc.text or '') + ''.join([
        etree.tostring(child, method='xml').decode('utf-8')
        for child in doc.iterchildren()
    ])
Beispiel #8
0
def buildVersionSortable(version, length=5):

    code = 0
    ver = Version(version)

    code += ver.version[0] * 1000 * 1000
    code += ver.version[1] * 1000 if len(ver.version) > 1 else 0
    code += ver.version[2] if len(ver.version) > 2 else 0

    # Prerelease
    prerelease = ver.prerelease
    if prerelease is None:
        code += .999
    elif prerelease[0] == "a":
        code += prerelease[1] / 1000
    elif prerelease[0] == "b":
        code += (100 + prerelease[1]) / 1000
    else:  # prerelease[0:1] == "rc"
        code += (200 + prerelease[1]) / 1000

    return code
Beispiel #9
0
def order_by_version(searcher, docnum):

    return Version(searcher.stored_fields(docnum)['version'], reverse=True)
Beispiel #10
0
 def test_filter_changelog(self):
     initial_code = '<h1>1.0.2</h1><p>1.0.2 change list</p><h1>1.0.1</h1><p>1.0.1 change list</p><h1>1.0.0</h1><p>Initial release</p>'
     expected_code = '<h1>1.0.2</h1><p>1.0.2 change list</p>'
     self.assertEqual(filter_changelog(initial_code, Version('1.0.1')),
                      expected_code)
Beispiel #11
0
    def test_version_order(self):

        self.assertLess(Version('1.0'), Version('1.11a1'))
        self.assertLess(Version('1.11a1'), Version('1.11a2'))
        self.assertLess(Version('1.11a2'), Version('1.11b1'))
        self.assertLess(Version('1.11b1'), Version('1.11rc1'))
        self.assertLess(Version('1.11rc1'), Version('1.11'))
        self.assertLess(Version('1.11'), Version('1.11.5.1'))
        self.assertLess(Version('1.11.5.1'), Version('1.11.5.4'))
        self.assertLess(Version('1.11.5.4'), Version('1.100'))
        self.assertLess(Version('1.0.0-dev'), Version("1.0.1-dev"))
        self.assertLess(Version('1.0.0-dev'), Version("1.0.0"))

        self.assertGreater(Version('1.0'), Version('1.0a1'))
        self.assertGreater(Version('1.0', reverse=True),
                           Version('1.11a1', reverse=True))
        self.assertGreater(Version('1.11b1', reverse=True),
                           Version('1.11rc1', reverse=True))
        self.assertGreater(Version('1.0.0'), Version("1.0.0-dev"))

        self.assertEqual(Version('1'), '1.0.0')
        self.assertEqual(Version('1.0'), '1.0.0')
        self.assertEqual(Version('1.0'), Version('1.0.0'))
        self.assertEqual(Version('1.0', reverse=True),
                         Version('1.0.0', reverse=True))
Beispiel #12
0
 def test_filter_changelog_not_exact_version_v(self):
     # Filter html, exact version not found, but there is a lower version.
     initial_code = '<h1>v1.0.2</h1><p>v1.0.2 change list</p><h1>v1.0.1</h1><p>v1.0.1 change list</p><h1>v1.0.0</h1><p>Initial release</p>'
     expected_code = '<h1>v1.0.2</h1><p>v1.0.2 change list</p><h1>v1.0.1</h1><p>v1.0.1 change list</p>'
     self.assertEqual(filter_changelog(initial_code, Version('1.0.0.1')),
                      expected_code)
Beispiel #13
0
 def test_filter_changelog_headers_with_extra_content_v(self):
     initial_code = '<h1>v1.0.2 (2015-05-01)</h1><p>v1.0.2 change list</p><h1>v1.0.1 (2015-04-01)</h1><p>v1.0.1 change list</p><h1>v1.0.0 (2015-03-01)</h1><p>Initial release</p>'
     expected_code = '<h1>v1.0.2 (2015-05-01)</h1><p>v1.0.2 change list</p>'
     self.assertEqual(filter_changelog(initial_code, Version('1.0.1')),
                      expected_code)
Beispiel #14
0
 def test_filter_changelog_mixed(self):
     # Filter html, there are mixed sections between version sections
     initial_code = '<h2>v1.0.2</h2><p>v1.0.2 change list</p><h2>Extra header</h2><p>my extra info</p><h2>v1.0.1</h2><p>v1.0.1 change list</p><h2>v1.0.0</h2><p>Initial release</p>'
     expected_code = '<h2>v1.0.2</h2><p>v1.0.2 change list</p><h2>Extra header</h2><p>my extra info</p>'
     self.assertEqual(filter_changelog(initial_code, Version('1.0.1')),
                      expected_code)
Beispiel #15
0
 def test_filter_changelog_nested(self):
     # Filter html, exact version found, there is extra info before that must be discarded
     initial_code = '<h1>My Widgets changes</h1> my intro<h2>v1.0.2</h2><p>v1.0.2 change list</p><h2>v1.0.1</h2><p>v1.0.1 change list</p><h2>v1.0.0</h2><p>Initial release</p>'
     expected_code = '<h2>v1.0.2</h2><p>v1.0.2 change list</p>'
     self.assertEqual(filter_changelog(initial_code, Version('1.0.1')),
                      expected_code)
Beispiel #16
0
 def test_filter_changelog_no_changes_v(self):
     # Filter html, exact version found, but there are no change info before
     initial_code = '<h2>v1.0.2</h2> tail <p>v1.0.2 change list</p><h2>v1.0.1</h2><p>v1.0.1 change list</p><h2>v1.0.0</h2><p>Initial release</p> tail'
     expected_code = ''
     self.assertEqual(filter_changelog(initial_code, Version('1.0.2')),
                      expected_code)