Coverage for /home/antoine/projects/xpra-git/dist/python3/lib64/python/xpra/platform/__init__.py : 82%
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 Nathaniel Smith <njs@pobox.com>
3# Copyright (C) 2011-2020 Antoine Martin <antoine@xpra.org>
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.
7import os
8import sys
11_init_done = False
12def init(prgname=None, appname=None):
13 """ do whatever is needed to prepare an application for running,
14 some platforms may initialize logging to file, etc
15 If the names are supplied, we call set_name()
16 """
17 global _init_done
18 if prgname is not None or appname is not None:
19 set_default_name(prgname, appname)
20 set_name()
21 if not _init_done:
22 _init_done = True
23 do_init()
25#platforms can override this
26def do_init(): # pragma: no cover
27 pass
29def threaded_server_init():
30 pass
33class program_context:
34 def __init__(self, prgname=None, appname=None):
35 self.prgname = prgname
36 self.appname = appname
37 def __enter__(self):
38 init(self.prgname, self.appname)
39 return self
40 def __exit__(self, *_args):
41 clean()
42 def __repr__(self):
43 return "gui_context(%s, %s)" % (self.prgname, self.appname)
46_prgname = None
47_appname = None
48def set_default_name(prgname=None, appname=None):
49 #sets the default prg and app names
50 global _prgname, _appname
51 if prgname is not None:
52 _prgname = prgname
53 if appname is not None:
54 _appname = appname
57#platforms can override this
58def command_error(message):
59 from xpra.scripts.main import error
60 error(message)
62def command_info(message):
63 from xpra.scripts.main import info
64 info(message)
67_clean_done = False
68def clean():
69 global _clean_done
70 if not _clean_done:
71 _clean_done = True
72 do_clean()
74#platforms can override this
75def do_clean(): # pragma: no cover
76 pass
79_name_set = False
80def set_name(prgname=None, appname=None):
81 global _name_set
82 if not _name_set:
83 _name_set = True
84 set_prgname(prgname or _prgname)
85 set_application_name(appname or _appname)
87#platforms can override this
88def set_prgname(name):
89 if not name:
90 return
91 from gi.repository import GLib
92 GLib.set_prgname(name)
94def get_prgname():
95 global _prgname
96 return _prgname
99#platforms can override this
100def set_application_name(name):
101 if not name:
102 return
103 from gi.repository import GLib
104 GLib.set_application_name(name)
106def get_application_name():
107 global _appname
108 return _appname
111def get_username():
112 return do_get_username()
114def do_get_username():
115 try:
116 import pwd
117 return pwd.getpwuid(os.getuid()).pw_name
118 except Exception: # pragma: no cover
119 try:
120 import getpass
121 return getpass.getuser()
122 except Exception:
123 pass
124 return ""
127def platform_import(where, pm, required, *imports):
128 from xpra.os_util import OSX, POSIX
129 if os.name == "nt": # pragma: no cover
130 p = "win32"
131 elif OSX: # pragma: no cover
132 p = "darwin"
133 elif POSIX: # pragma: no cover
134 p = "xposix"
135 else: # pragma: no cover
136 raise OSError("Unknown OS %s" % (os.name))
138 module = "xpra.platform.%s" % p
139 if pm:
140 module += ".%s" % pm
142 #cannot log this early! (win32 needs log to file redirection..)
143 #log = Logger("platform", "import")
144 #log("importing %s from %s (required=%s)" % (imports, module, required))
145 try:
146 platform_module = __import__(module, {}, {}, imports)
147 except ImportError:
148 if required:
149 raise
150 return
151 assert platform_module
152 for x in imports:
153 found = hasattr(platform_module, x)
154 if not found:
155 if required:
156 raise ImportError("could not find %s in %s" % (x, module))
157 else:
158 where[x] = getattr(platform_module, x)
160platform_import(globals(), None, True, "do_init", "do_clean")
161platform_import(globals(), None, False, "threaded_server_init",
162 "set_prgname", "set_application_name", "program_context",
163 "command_error", "command_info", "do_get_username")