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