[
https://issues.apache.org/jira/browse/ARIA-140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15999891#comment-15999891
]
ASF GitHub Bot commented on ARIA-140:
-------------------------------------
Github user AviaE commented on a diff in the pull request:
https://github.com/apache/incubator-ariatosca/pull/100#discussion_r115144550
--- Diff: aria/utils/versions.py ---
@@ -0,0 +1,162 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+General-purpose version string handling
+"""
+
+import re
+
+
+_INF = float('inf')
+
+_NULL = (), _INF
+
+_DIGITS_RE = re.compile(r'^\d+$')
+
+_PREFIXES = {
+ 'dev': 0.0001,
+ 'alpha': 0.001,
+ 'beta': 0.01,
+ 'rc': 0.1
+}
+
+
+class VersionString(unicode):
+ """
+ Version string that can be compared, sorted, made unique in a set, and
used as a unique dict
+ key.
+
+ The primary part of the string is one or more dot-separated natural
numbers. Trailing zeroes
+ are treated as redundant, e.g. "1.0.0" == "1.0" == "1".
+
+ An optional qualifier can be added after a "-". The qualifier can be a
natural number or a
+ specially treated prefixed natural number, e.g. "1.1-beta1" >
"1.1-alpha2". The case of the
+ prefix is ignored.
+
+ Numeric qualifiers will always be greater than prefixed integer
qualifiers, e.g. "1.1-1" >
+ "1.1-beta1".
+
+ Versions without a qualifier will always be greater than their
equivalents with a qualifier,
+ e.g. e.g. "1.1" > "1.1-1".
+
+ Any value that does not conform to this format will be treated as a
zero version, which would
+ be lesser than any non-zero version.
+
+ For efficient list sorts use the ``key`` property, e.g.:
+ ``sorted(versions, key=lambda x: x.key)``
+ """
+
+ NULL = None # initialized below
+
+ def __init__(self, value=None):
+ if value is not None:
+ super(VersionString, self).__init__(value)
+ self.key = parse_version_string(self)
+
+ def __eq__(self, version):
+ if not isinstance(version, VersionString):
+ version = VersionString(version)
+ return self.key == version.key
+
+ def __lt__(self, version):
+ if not isinstance(version, VersionString):
+ version = VersionString(version)
+ return self.key < version.key
+
+ def __hash__(self):
+ return self.key.__hash__()
+
+
+def parse_version_string(version): # pylint: disable=too-many-branches
+ """
+ Parses a version string.
+
+ :param version: The version string
+ :returns: The primary tuple and qualifier float
+ :rtype: ((int), float)
+ """
+
+ if version is None:
--- End diff --
How can version be `None` here?
> General purpose version comparison
> ----------------------------------
>
> Key: ARIA-140
> URL: https://issues.apache.org/jira/browse/ARIA-140
> Project: AriaTosca
> Issue Type: Story
> Reporter: Tal Liron
> Assignee: Tal Liron
> Priority: Minor
>
> Add {{aria.utils.versions}} to allow for general-purpose comparison and
> sorting of version strings.
> For now this will be used for resolving plugin specifications to plugins, but
> it may very well have other uses in the future.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)