Sun, 11 Feb 2024 18:35:44 +0100
Implemented (most) of the eric-ide server debugging functionality.
10539 | 1 | # -*- coding: utf-8 -*- |
2 | ||
3 | # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de> | |
4 | # | |
5 | ||
6 | """ | |
7 | Module implementing the file system interface to the eric-ide server. | |
8 | """ | |
9 | ||
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
10 | import base64 |
10539 | 11 | import contextlib |
12 | ||
13 | from PyQt6.QtCore import QEventLoop, QObject | |
14 | ||
15 | from eric7.RemoteServer.EricRequestCategory import EricRequestCategory | |
16 | ||
17 | ||
10555
08e853c0c77b
Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10548
diff
changeset
|
18 | # TODO: sanitize all file names with FileSystemUtilities.plainFileName() |
10539 | 19 | class EricServerFileSystemInterface(QObject): |
20 | """ | |
21 | Class implementing the file system interface to the eric-ide server. | |
22 | """ | |
23 | ||
24 | def __init__(self, serverInterface): | |
25 | """ | |
26 | Constructor | |
27 | ||
28 | @param serverInterface reference to the eric-ide server interface | |
29 | @type EricServerInterface | |
30 | """ | |
31 | super().__init__(parent=serverInterface) | |
32 | ||
33 | self.__serverInterface = serverInterface | |
34 | ||
35 | def getcwd(self): | |
36 | """ | |
37 | Public method to get the current working directory of the eric-ide server. | |
38 | ||
39 | @return current working directory of the eric-ide server | |
40 | @rtype str | |
41 | """ | |
42 | loop = QEventLoop() | |
43 | cwd = "" | |
44 | ||
45 | def callback(reply, params): | |
46 | """ | |
47 | Function to handle the server reply | |
48 | ||
49 | @param reply name of the server reply | |
50 | @type str | |
51 | @param params dictionary containing the reply data | |
52 | @type dict | |
53 | """ | |
54 | nonlocal cwd | |
55 | ||
56 | if reply == "Getcwd": | |
57 | cwd = params["directory"] | |
58 | loop.quit() | |
59 | ||
60 | self.__serverInterface.sendJson( | |
61 | category=EricRequestCategory.FileSystem, | |
62 | request="Getcwd", | |
63 | params={}, | |
64 | callback=callback, | |
65 | ) | |
66 | ||
67 | loop.exec() | |
68 | return cwd | |
69 | ||
70 | def chdir(self, directory): | |
71 | """ | |
72 | Public method to change the current working directory of the eric-ide server. | |
73 | ||
74 | @param directory absolute path of the working directory to change to | |
75 | @type str | |
76 | @return tuple containing an OK flag and an error string in case of an issue | |
77 | @rtype tuple of (bool, str) | |
78 | """ | |
79 | loop = QEventLoop() | |
80 | ok = False | |
81 | error = "" | |
82 | ||
83 | def callback(reply, params): | |
84 | """ | |
85 | Function to handle the server reply | |
86 | ||
87 | @param reply name of the server reply | |
88 | @type str | |
89 | @param params dictionary containing the reply data | |
90 | @type dict | |
91 | """ | |
92 | nonlocal ok, error | |
93 | ||
94 | if reply == "Chdir": | |
95 | ok = params["ok"] | |
96 | with contextlib.suppress(KeyError): | |
97 | error = params["error"] | |
98 | loop.quit() | |
99 | ||
100 | self.__serverInterface.sendJson( | |
101 | category=EricRequestCategory.FileSystem, | |
102 | request="Chdir", | |
103 | params={"directory": directory}, | |
104 | callback=callback, | |
105 | ) | |
106 | ||
107 | loop.exec() | |
108 | return ok, error | |
109 | ||
110 | def listdir(self, directory=""): | |
111 | """ | |
112 | Public method to get a directory listing. | |
113 | ||
114 | @param directory directory to be listed. An empty directory means to list | |
115 | the eric-ide server current directory. (defaults to "") | |
116 | @type str (optional) | |
117 | @return tuple containing the listed directory, the path separartor and the | |
118 | directory listing. Each directory listing entry contains a dictionary | |
119 | with the relevant data. | |
120 | @rtype tuple of (str, str, dict) | |
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
121 | @exception OSError raised in case the server reported an issue |
10539 | 122 | """ |
123 | if directory is None: | |
124 | # sanitize the directory in case it is None | |
125 | directory = "" | |
126 | ||
127 | loop = QEventLoop() | |
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
128 | ok = False |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
129 | error = "" |
10539 | 130 | listedDirectory = "" |
131 | separator = "" | |
132 | listing = [] | |
133 | ||
134 | def callback(reply, params): | |
135 | """ | |
136 | Function to handle the server reply | |
137 | ||
138 | @param reply name of the server reply | |
139 | @type str | |
140 | @param params dictionary containing the reply data | |
141 | @type dict | |
142 | """ | |
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
143 | nonlocal listedDirectory, listing, separator, ok, error |
10539 | 144 | |
145 | if reply == "Listdir": | |
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
146 | ok = params["ok"] |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
147 | if ok: |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
148 | listedDirectory = params["directory"] |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
149 | listing = params["listing"] |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
150 | separator = params["separator"] |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
151 | else: |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
152 | error = params["error"] |
10539 | 153 | loop.quit() |
154 | ||
155 | self.__serverInterface.sendJson( | |
156 | category=EricRequestCategory.FileSystem, | |
157 | request="Listdir", | |
158 | params={"directory": directory}, | |
159 | callback=callback, | |
160 | ) | |
161 | ||
162 | loop.exec() | |
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
163 | if not ok: |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
164 | raise OSError(error) |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
165 | |
10539 | 166 | return listedDirectory, separator, listing |
167 | ||
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
168 | def stat(self, filename, stNames): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
169 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
170 | Public method to get the status of a file. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
171 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
172 | @param filename name of the file |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
173 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
174 | @param stNames list of 'stat_result' members to retrieve |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
175 | @type list of str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
176 | @return dictionary containing the requested status data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
177 | @rtype dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
178 | @exception OSError raised in case the server reported an issue |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
179 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
180 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
181 | ok = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
182 | error = "" |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
183 | stResult = {} |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
184 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
185 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
186 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
187 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
188 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
189 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
190 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
191 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
192 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
193 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
194 | nonlocal ok, error, stResult |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
195 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
196 | if reply == "Stat": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
197 | ok = params["ok"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
198 | if ok: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
199 | stResult = params["result"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
200 | else: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
201 | error = params["error"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
202 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
203 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
204 | self.__serverInterface.sendJson( |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
205 | category=EricRequestCategory.FileSystem, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
206 | request="Stat", |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
207 | params={"filename": filename, "st_names": stNames}, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
208 | callback=callback, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
209 | ) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
210 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
211 | loop.exec() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
212 | if not ok: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
213 | raise OSError(error) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
214 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
215 | return stResult |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
216 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
217 | def exists(self, name): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
218 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
219 | Public method the existence of a file or directory. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
220 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
221 | @param name name of the file or directory |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
222 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
223 | @return flag indicating the file existence |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
224 | @rtype bool |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
225 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
226 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
227 | nameExists = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
228 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
229 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
230 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
231 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
232 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
233 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
234 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
235 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
236 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
237 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
238 | nonlocal nameExists |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
239 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
240 | if reply == "Exists": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
241 | nameExists = params["exists"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
242 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
243 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
244 | self.__serverInterface.sendJson( |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
245 | category=EricRequestCategory.FileSystem, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
246 | request="Exists", |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
247 | params={"name": name}, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
248 | callback=callback, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
249 | ) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
250 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
251 | loop.exec() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
252 | return nameExists |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
253 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
254 | def access(self, name, modes): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
255 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
256 | Public method to test the given access rights to a file or directory. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
257 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
258 | The modes to check for are 'read', 'write' or 'execute' or any combination. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
259 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
260 | @param name name of the file or directory |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
261 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
262 | @param modes list of modes to check for |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
263 | @type str or list of str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
264 | @return flag indicating the user has the asked for permissions |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
265 | @rtype bool |
10561
be23a662d709
Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10555
diff
changeset
|
266 | @exception ValueError raised for an illegal modes list |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
267 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
268 | if not modes: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
269 | raise ValueError( |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
270 | "At least one of 'read', 'write' or 'execute' must be specified." |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
271 | ) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
272 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
273 | if isinstance(modes, str): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
274 | # convert to a list with one element |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
275 | modes = [modes] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
276 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
277 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
278 | accessOK = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
279 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
280 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
281 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
282 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
283 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
284 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
285 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
286 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
287 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
288 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
289 | nonlocal accessOK |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
290 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
291 | if reply == "Access": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
292 | accessOK = params["ok"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
293 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
294 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
295 | self.__serverInterface.sendJson( |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
296 | category=EricRequestCategory.FileSystem, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
297 | request="Access", |
10561
be23a662d709
Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10555
diff
changeset
|
298 | params={"name": name, "modes": modes}, |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
299 | callback=callback, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
300 | ) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
301 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
302 | loop.exec() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
303 | return accessOK |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
304 | |
10539 | 305 | def mkdir(self, directory): |
306 | """ | |
307 | Public method to create a new directory on the eric-ide server. | |
308 | ||
309 | @param directory absolute path of the new directory | |
310 | @type str | |
311 | @return tuple containing an OK flag and an error string in case of an issue | |
312 | @rtype tuple of (bool, str) | |
313 | """ | |
314 | loop = QEventLoop() | |
315 | ok = False | |
316 | error = "" | |
317 | ||
318 | def callback(reply, params): | |
319 | """ | |
320 | Function to handle the server reply | |
321 | ||
322 | @param reply name of the server reply | |
323 | @type str | |
324 | @param params dictionary containing the reply data | |
325 | @type dict | |
326 | """ | |
327 | nonlocal ok, error | |
328 | ||
329 | if reply == "Mkdir": | |
330 | ok = params["ok"] | |
331 | with contextlib.suppress(KeyError): | |
332 | error = params["error"] | |
333 | loop.quit() | |
334 | ||
335 | self.__serverInterface.sendJson( | |
336 | category=EricRequestCategory.FileSystem, | |
337 | request="Mkdir", | |
338 | params={"directory": directory}, | |
339 | callback=callback, | |
340 | ) | |
341 | ||
342 | loop.exec() | |
343 | return ok, error | |
344 | ||
345 | def rmdir(self, directory): | |
346 | """ | |
347 | Public method to delete a directory on the eric-ide server. | |
348 | ||
349 | @param directory absolute path of the directory | |
350 | @type str | |
351 | @return tuple containing an OK flag and an error string in case of an issue | |
352 | @rtype tuple of (bool, str) | |
353 | """ | |
354 | loop = QEventLoop() | |
355 | ok = False | |
356 | error = "" | |
357 | ||
358 | def callback(reply, params): | |
359 | """ | |
360 | Function to handle the server reply | |
361 | ||
362 | @param reply name of the server reply | |
363 | @type str | |
364 | @param params dictionary containing the reply data | |
365 | @type dict | |
366 | """ | |
367 | nonlocal ok, error | |
368 | ||
369 | if reply == "Rmdir": | |
370 | ok = params["ok"] | |
371 | with contextlib.suppress(KeyError): | |
372 | error = params["error"] | |
373 | loop.quit() | |
374 | ||
375 | self.__serverInterface.sendJson( | |
376 | category=EricRequestCategory.FileSystem, | |
377 | request="Rmdir", | |
378 | params={"directory": directory}, | |
379 | callback=callback, | |
380 | ) | |
381 | ||
382 | loop.exec() | |
383 | return ok, error | |
384 | ||
385 | def replace(self, oldName, newName): | |
386 | """ | |
387 | Public method to rename a file or directory. | |
388 | ||
389 | @param oldName current name of the file or directory | |
390 | @type str | |
391 | @param newName new name for the file or directory | |
392 | @type str | |
393 | @return tuple containing an OK flag and an error string in case of an issue | |
394 | @rtype tuple of (bool, str) | |
395 | """ | |
396 | loop = QEventLoop() | |
397 | ok = False | |
398 | error = "" | |
399 | ||
400 | def callback(reply, params): | |
401 | """ | |
402 | Function to handle the server reply | |
403 | ||
404 | @param reply name of the server reply | |
405 | @type str | |
406 | @param params dictionary containing the reply data | |
407 | @type dict | |
408 | """ | |
409 | nonlocal ok, error | |
410 | ||
411 | if reply == "Replace": | |
412 | ok = params["ok"] | |
413 | with contextlib.suppress(KeyError): | |
414 | error = params["error"] | |
415 | loop.quit() | |
416 | ||
417 | self.__serverInterface.sendJson( | |
418 | category=EricRequestCategory.FileSystem, | |
419 | request="Replace", | |
420 | params={"old_name": oldName, "new_name": newName}, | |
421 | callback=callback, | |
422 | ) | |
423 | ||
424 | loop.exec() | |
425 | return ok, error | |
426 | ||
427 | def remove(self, filename): | |
428 | """ | |
429 | Public method to delete a file on the eric-ide server. | |
430 | ||
431 | @param filename absolute path of the file | |
432 | @type str | |
433 | @return tuple containing an OK flag and an error string in case of an issue | |
434 | @rtype tuple of (bool, str) | |
435 | """ | |
436 | loop = QEventLoop() | |
437 | ok = False | |
438 | error = "" | |
439 | ||
440 | def callback(reply, params): | |
441 | """ | |
442 | Function to handle the server reply | |
443 | ||
444 | @param reply name of the server reply | |
445 | @type str | |
446 | @param params dictionary containing the reply data | |
447 | @type dict | |
448 | """ | |
449 | nonlocal ok, error | |
450 | ||
451 | if reply == "Remove": | |
452 | ok = params["ok"] | |
453 | with contextlib.suppress(KeyError): | |
454 | error = params["error"] | |
455 | loop.quit() | |
456 | ||
457 | self.__serverInterface.sendJson( | |
458 | category=EricRequestCategory.FileSystem, | |
459 | request="Remove", | |
460 | params={"filename": filename}, | |
461 | callback=callback, | |
462 | ) | |
463 | ||
464 | loop.exec() | |
465 | return ok, error | |
466 | ||
467 | ####################################################################### | |
468 | ## Methods for reading and writing files | |
469 | ####################################################################### | |
470 | ||
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
471 | def readFile(self, filename, create=False): |
10539 | 472 | """ |
473 | Public method to read a file from the eric-ide server. | |
474 | ||
475 | @param filename name of the file to read | |
476 | @type str | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
477 | @param create flag indicating to create an empty file, if it does not exist |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
478 | (defaults to False) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
479 | @type bool (optional) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
480 | @return bytes data read from the eric-ide server |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
481 | @rtype bytes |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
482 | @exception OSError raised in case the server reported an issue |
10539 | 483 | """ |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
484 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
485 | ok = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
486 | error = "" |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
487 | bText = b"" |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
488 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
489 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
490 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
491 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
492 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
493 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
494 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
495 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
496 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
497 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
498 | nonlocal ok, error, bText |
10539 | 499 | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
500 | if reply == "ReadFile": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
501 | ok = params["ok"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
502 | if ok: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
503 | bText = base64.b85decode( |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
504 | bytes(params["filedata"], encoding="ascii") |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
505 | ) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
506 | else: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
507 | error = params["error"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
508 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
509 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
510 | self.__serverInterface.sendJson( |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
511 | category=EricRequestCategory.FileSystem, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
512 | request="ReadFile", |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
513 | params={"filename": filename, "create": create}, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
514 | callback=callback, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
515 | ) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
516 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
517 | loop.exec() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
518 | if not ok: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
519 | raise OSError(error) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
520 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
521 | return bText |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
522 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
523 | def writeFile(self, filename, data, withBackup=False): |
10539 | 524 | """ |
525 | Public method to write the data to a file on the eric-ide server. | |
526 | ||
527 | @param filename name of the file to write | |
528 | @type str | |
529 | @param data data to be written | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
530 | @type bytes |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
531 | @param withBackup flag indicating to create a backup file first |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
532 | (defaults to False) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
533 | @type bool (optional) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
534 | @exception OSError raised in case the server reported an issue |
10539 | 535 | """ |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
536 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
537 | ok = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
538 | error = "" |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
539 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
540 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
541 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
542 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
543 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
544 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
545 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
546 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
547 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
548 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
549 | nonlocal ok, error |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
550 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
551 | if reply == "WriteFile": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
552 | ok = params["ok"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
553 | with contextlib.suppress(KeyError): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
554 | error = params["error"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
555 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
556 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
557 | self.__serverInterface.sendJson( |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
558 | category=EricRequestCategory.FileSystem, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
559 | request="WriteFile", |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
560 | params={ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
561 | "filename": filename, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
562 | "filedata": str(base64.b85encode(data), encoding="ascii"), |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
563 | "with_backup": withBackup, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
564 | }, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
565 | callback=callback, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
566 | ) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
567 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
568 | loop.exec() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
569 | if not ok: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
570 | raise OSError(error) |