Coverage for /home/antoine/projects/xpra-git/dist/python3/lib64/python/xpra/client/mixins/serverinfo_mixin.py : 95%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# This file is part of Xpra.
2# Copyright (C) 2010-2021 Antoine Martin <antoine@xpra.org>
3# Copyright (C) 2008, 2010 Nathaniel Smith <njs@pobox.com>
4# Xpra is released under the terms of the GNU GPL v2, or, at your option, any
5# later version. See the file COPYING for details.
7from xpra.version_util import version_compat_check
8from xpra.os_util import bytestostr
9from xpra.util import typedict, get_util_logger
10from xpra.client.mixins.stub_client_mixin import StubClientMixin
11from xpra.exit_codes import EXIT_INCOMPATIBLE_VERSION
14class ServerInfoMixin(StubClientMixin):
16 def __init__(self):
17 self._remote_machine_id = None
18 self._remote_uuid = None
19 self._remote_version = None
20 self._remote_revision = None
21 self._remote_modifications = 0
22 self._remote_commit = None
23 self._remote_build_date = ""
24 self._remote_build_time = ""
25 self._remote_hostname = None
26 self._remote_display = None
27 self._remote_platform = None
28 self._remote_platform_release = None
29 self._remote_platform_platform = None
30 self._remote_platform_linux_distribution = None
31 self._remote_python_version = ""
32 self._remote_lib_versions = {}
33 self._remote_subcommands = ()
34 self._remote_server_log = None
36 def parse_server_capabilities(self, c : typedict) -> bool:
37 self._remote_machine_id = c.strget("machine_id")
38 self._remote_uuid = c.strget("uuid")
39 self._remote_version = c.strget("build.version", c.strget("version"))
40 self._remote_revision = c.strget("build.revision", c.strget("revision"))
41 mods = c.rawget("build.local_modifications")
42 if mods and str(mods).find("dfsg")>=0: # pragma: no cover
43 get_util_logger().warn("Warning: the xpra server is running a buggy Debian version")
44 get_util_logger().warn(" those are usually out of date and unstable")
45 else:
46 self._remote_modifications = c.intget("build.local_modifications", 0)
47 self._remote_commit = c.strget("build.commit")
48 self._remote_build_date = c.strget("build.date")
49 self._remote_build_time = c.strget("build.time")
50 self._remote_hostname = c.strget("hostname")
51 self._remote_display = c.strget("display")
52 self._remote_platform = c.strget("platform")
53 self._remote_platform_release = c.strget("platform.release")
54 self._remote_platform_platform = c.strget("platform.platform")
55 self._remote_python_version = c.strget("python.version")
56 self._remote_subcommands = c.strtupleget("subcommands")
57 self._remote_server_log = c.strget("server-log")
58 for x in ("glib", "gobject", "gtk", "gdk", "cairo", "pango", "sound.gst", "sound.pygst"):
59 v = c.rawget("%s.version" % x, None)
60 if v is not None:
61 self._remote_lib_versions[x] = v
62 #linux distribution is a tuple of different types, ie: ('Linux Fedora' , 20, 'Heisenbug')
63 pld = c.tupleget("platform.linux_distribution")
64 if pld and len(pld)==3:
65 def san(v):
66 if isinstance(v, int):
67 return v
68 return bytestostr(v)
69 self._remote_platform_linux_distribution = [san(x) for x in pld]
70 verr = version_compat_check(self._remote_version)
71 if verr is not None:
72 self.warn_and_quit(EXIT_INCOMPATIBLE_VERSION,
73 "incompatible remote version '%s': %s" % (self._remote_version, verr))
74 return False
75 return True