import repository from arizona
[raven.git] / apps / stork / storkpackagesort.py
1 import arizonageneral
2
3 from distutils.version import LooseVersion
4
5 EQUAL = 1
6 LESS = 2
7 LESS_EQUAL = LESS | EQUAL
8 GREATER = 4
9 GREATER_EQUAL = GREATER | EQUAL
10
11 SORT_VERSION = 1
12
13
14 def compare_version(str1, str2):
15     """
16     <Purpose>
17        Compares the version numbers by number and if they match then by
18        string.
19
20     <Arguments>
21        str1:
22               Version string to be used in the comparison
23        str2:
24                Version string to be used in the comparison
25
26     <Exceptions>
27        None.
28
29     <Side Effects>
30        None.
31
32     <Returns>
33        4 (GREATER) if the version str1 is greater than str2
34        2 (LESS) if the version str1 is less than str2
35        1 (EQUAL) if the version str1 is the same as str2
36     """
37     # check params
38     arizonageneral.check_type_simple(str1, "str1", str, "stork.__compare_version")
39     arizonageneral.check_type_simple(str2, "str2", str, "stork.__compare_version")
40
41     try:
42         x = LooseVersion(str1)\r
43         test = x.version\r
44     except AttributeError:\r
45         x = LooseVersion("0")\r
46 \r
47     try:\r
48         y = LooseVersion(str2)\r
49         test = y.version\r
50     except AttributeError:\r
51         y = LooseVersion("0")
52
53     if (x<y):
54         return LESS
55     elif (x>y):
56         return GREATER
57     else:
58         return EQUAL
59
60 def compare_package_version(x,y):
61     result = compare_version(x.get("version","0"), y.get("version","0"))
62     if (result==LESS):
63         return -1
64     elif (result==GREATER):
65         return 1
66     else:
67         return 0
68
69 def sort_packages(package_list, key=SORT_VERSION):
70     result = sorted(package_list, cmp=compare_package_version, reverse=True)
71     return result
72
73