def do_get_resources_dir(): rsc = None RESOURCES = "/Resources/" #FUGLY warning: importing gtkosx_application causes the dock to appear, #and in some cases we don't want that.. so use the env var XPRA_SKIP_UI as workaround for such cases: if not envbool("XPRA_SKIP_UI", False): from xpra.platform.darwin import get_OSXApplication macapp = get_OSXApplication() try: rsc = macapp.get_resource_path() debug("get_resources_dir() %s.get_resource_path=%s", macapp, rsc) except Exception: global _gtkosx_warning_ if _gtkosx_warning_ is False: _gtkosx_warning_ = True #delayed import to prevent cycles: get_util_logger().error( "Error: gtkosx_application module is missing - trying to continue anyway" ) else: debug("XPRA_SKIP_UI is set, not importing gtkosx_application") if rsc is None: #try using the path to this file to find the resource path: rsc = __file__ i = rsc.rfind(RESOURCES) if i <= 0: #last fallback: try the default app dir from xpra.platform.paths import default_get_app_dir rsc = default_get_app_dir() debug("get_resources_dir() default_get_app_dir()=%s", rsc) i = rsc.rfind(RESOURCES) if i > 0: rsc = rsc[:i + len(RESOURCES)] debug("get_resources_dir()=%s", rsc) return rsc
def parse_server_capabilities(self, c: typedict) -> bool: p = self._protocol if p.TYPE == "rfb": #only the xpra protocol provides the server info return True self._remote_machine_id = c.strget("machine_id") self._remote_uuid = c.strget("uuid") self._remote_version = c.strget("build.version", c.strget("version")) self._remote_revision = c.strget("build.revision", c.strget("revision")) mods = c.get("build.local_modifications") if mods and str(mods).find("dfsg") >= 0: # pragma: no cover get_util_logger().warn( "Warning: the xpra server is running a buggy Debian version") get_util_logger().warn( " those are usually out of date and unstable") else: self._remote_modifications = c.intget("build.local_modifications", 0) self._remote_commit = c.strget("build.commit") self._remote_branch = c.strget("build.branch") self._remote_build_date = c.strget("build.date") self._remote_build_time = c.strget("build.time") self._remote_hostname = c.strget("hostname") self._remote_display = c.strget("display") self._remote_platform = c.strget("platform") self._remote_platform_release = c.strget("platform.release") self._remote_platform_platform = c.strget("platform.platform") self._remote_python_version = c.strget("python.version") self._remote_subcommands = c.strtupleget("subcommands") self._remote_server_log = c.strget("server-log") self._remote_lib_versions = get_remote_lib_versions(c) #linux distribution is a tuple of different types, ie: ('Linux Fedora' , 20, 'Heisenbug') pld = c.tupleget("platform.linux_distribution") if pld and len(pld) == 3: def san(v): if isinstance(v, int): return v return bytestostr(v) self._remote_platform_linux_distribution = [san(x) for x in pld] verr = version_compat_check(self._remote_version) if verr is not None: self.warn_and_quit( EXIT_INCOMPATIBLE_VERSION, "incompatible remote version '%s': %s" % (self._remote_version, verr)) return False return True
def make_revision_str(revision, local_modifications, branch, commit) -> str: rstr = "" try: rstr += "r%s" % revision if local_modifications > 0: rstr += "M" if branch == "master" and commit: rstr += " (%s)" % commit except TypeError: get_util_logger().debug( "make_revision_str%s", (revision, local_modifications, branch, commit), exc_info=True) return rstr
def make_window_metadata(window, propname, get_window_id=None, skip_defaults=False) -> dict: try: return do_make_window_metadata(window, propname, get_window_id, skip_defaults) except (ValueError, TypeError) as e: log = get_util_logger() log("make_window_metadata%s", (window, propname, get_window_id, skip_defaults), exc_info=True) log.error("Error: failed to make window metadata") log.error(" for attribute '%s' of window %s", propname, window) log.error(" with value '%s':", getattr(window, propname, None)) log.error(" %s", e) return {}
def parse_server_capabilities(self, c : typedict) -> bool: self._remote_machine_id = c.strget("machine_id") self._remote_uuid = c.strget("uuid") self._remote_version = c.strget("build.version", c.strget("version")) self._remote_revision = c.strget("build.revision", c.strget("revision")) mods = c.rawget("build.local_modifications") if mods and str(mods).find("dfsg")>=0: get_util_logger().warn("Warning: the xpra server is running a buggy Debian version") get_util_logger().warn(" those are usually out of date and unstable") else: self._remote_modifications = c.intget("build.local_modifications", 0) self._remote_build_date = c.strget("build.date") self._remote_build_time = c.strget("build.time") self._remote_hostname = c.strget("hostname") self._remote_display = c.strget("display") self._remote_platform = c.strget("platform") self._remote_platform_release = c.strget("platform.release") self._remote_platform_platform = c.strget("platform.platform") self._remote_python_version = c.strget("python.version") self._remote_subcommands = c.strtupleget("subcommands") for x in ("glib", "gobject", "gtk", "gdk", "cairo", "pango", "sound.gst", "sound.pygst"): v = c.rawget("%s.version" % x, None) if v is not None: self._remote_lib_versions[x] = v #linux distribution is a tuple of different types, ie: ('Linux Fedora' , 20, 'Heisenbug') pld = c.tupleget("platform.linux_distribution") if pld and len(pld)==3: def san(v): if isinstance(v, int): return v return bytestostr(v) self._remote_platform_linux_distribution = [san(x) for x in pld] verr = version_compat_check(self._remote_version) if verr is not None: self.warn_and_quit(EXIT_INCOMPATIBLE_VERSION, "incompatible remote version '%s': %s" % (self._remote_version, verr)) return False return True
def debug(*msg): """ delay import of logger to prevent cycles """ log = get_util_logger() log.debug(*msg) return None
def warn(msg, *args, **kwargs): get_util_logger().warn(msg, *args, **kwargs)
def log(msg, *args, **kwargs): get_util_logger().debug(msg, *args, **kwargs)
#tricky: use xpra.scripts.config to get to the python "platform" module import xpra from xpra.util import updict, envbool, obsc, get_util_logger from xpra.os_util import get_linux_distribution, BITS, POSIX, WIN32 XPRA_VERSION = xpra.__version__ #@UndefinedVariable CHECK_SSL = envbool("XPRA_VERSION_CHECK_SSL", True) SSL_CAFILE = None if WIN32: try: import certifi #@UnresolvedImport SSL_CAFILE = certifi.where() except (ImportError, AttributeError): get_util_logger().error("failed to locate SSL ca file", exc_info=True) SSL_CAFILE = os.environ.get("XPRA_SSL_CAFILE", SSL_CAFILE) def log(msg, *args, **kwargs): get_util_logger().debug(msg, *args, **kwargs) def warn(msg, *args, **kwargs): get_util_logger().warn(msg, *args, **kwargs) def full_version_str() -> str: s = XPRA_VERSION try: from xpra.src_info import REVISION, LOCAL_MODIFICATIONS