1
2
3
4
5
6
7
8
9
10
11 import re
12 import logging
13
14
15 REGEX = re.compile("^.*?[-]?(\\d+[.]\\d+([.]\\d+)?)[-]?.*?$")
16 LOG = logging.getLogger("omero.version")
17
18 -def needs_upgrade(client_version, server_version, verbose = False):
19 """
20 Tests whether the client version is behind the server version.
21 For example:
22
23 import omero
24 from omero_version import omero_version as client_version
25
26 client = omero.client()
27 session = client.createSession()
28 config = session.getConfigService()
29 server_version = config.getVersion()
30
31 upgrade = needs_upgrade(client_version, server_version)
32 if upgrade:
33 # Inform client
34
35 Alternatively, from the command-line:
36 ./versions.py --quiet 4.1.0 4.2.0-DEV || echo upgrade
37
38 """
39 try:
40 client_cleaned = REGEX.match(client_version).group(1)
41 client_split = client_cleaned.split(".")
42
43 server_cleaned = REGEX.match(server_version).group(1)
44 server_split = server_cleaned.split(".")
45
46 rv = (client_split < server_split)
47 if verbose:
48 LOG.info("Client=%20s (%-5s) v. Server=%20s (%-5s) Upgrade? %s", \
49 client_version, ".".join(client_split), \
50 server_version, ".".join(server_split), rv)
51 return rv
52
53 except:
54 LOG.warn("Bad versions: client=%s server=%s", client_version, server_version, exc_info = 1)
55 return True
56
57 if __name__ == "__main__":
58
59 import sys
60 args = list(sys.argv[1:])
61
62 if "--quiet" in args:
63 args.remove("--quiet")
64 logging.basicConfig(level=logging.WARN)
65 else:
66 logging.basicConfig(level=logging.DEBUG)
67
68 if "--test" in args:
69 print "="*10, "Test", "="*72
70 needs_upgrade("4.0", "4.1.1", True)
71 needs_upgrade("4.1", "4.1.1", True)
72 needs_upgrade("4.1.0", "4.1.1", True)
73 needs_upgrade("4.1.0", "4.1.1-Dev", True)
74 needs_upgrade("4.1.0-Dev", "4.1.1", True)
75 needs_upgrade("4.1.1", "4.1.1", True)
76 needs_upgrade("Beta-4.1", "4.1.1", True)
77 needs_upgrade("Beta-4.1.0", "4.1.1", True)
78 needs_upgrade("Beta-4.1.1", "4.1.1", True)
79 needs_upgrade("4.1.1", "Beta-4.1.1", True)
80 needs_upgrade("Beta-4.1.0", "Beta-4.1.1", True)
81 needs_upgrade("4.1.1-Foo", "4.1.1", True)
82 needs_upgrade("4.1.1-Foo", "4.1.1-Dev", True)
83 needs_upgrade("4.1.1-Foo", "4.1.2-Dev", True)
84 needs_upgrade("4.1.1-Foo", "4.2.0-Dev", True)
85 needs_upgrade("4.1.1-Foo", "4.2", True)
86 needs_upgrade("4.1.1-Foo", "5.0", True)
87 needs_upgrade("v.4.1.1-Foo", "5.0", True)
88
89 needs_upgrade("v.4.1.1-Foo", "5.0", True)
90 needs_upgrade("v4.1.1-Foo", "5.0", True)
91 needs_upgrade("Beta-v4.1.1-Foo", "5.0", True)
92 needs_upgrade("A1-4.1.1-Foo", "5.0", True)
93 needs_upgrade("A1-v4.1.1-Foo", "5.0", True)
94 else:
95 try:
96 rv = int(needs_upgrade(args[0], args[1], True))
97 except:
98 rv = 2
99 print """ %s [--quiet] client_version server_version
100 or: %s [--quiet] --test
101 """ % (sys.argv[0], sys.argv[0])
102 sys.exit(rv)
103