Fri, 16 Feb 2024 16:48:32 +0100
Made the coverage and file system server interfaces more resilient against not being connected.
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 |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
12 | import stat |
10539 | 13 | |
14 | from PyQt6.QtCore import QEventLoop, QObject | |
15 | ||
16 | from eric7.RemoteServer.EricRequestCategory import EricRequestCategory | |
10574
622e59b51640
Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
17 | from eric7.SystemUtilities import FileSystemUtilities |
10539 | 18 | |
19 | ||
10555
08e853c0c77b
Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10548
diff
changeset
|
20 | # TODO: sanitize all file names with FileSystemUtilities.plainFileName() |
10539 | 21 | class EricServerFileSystemInterface(QObject): |
22 | """ | |
23 | Class implementing the file system interface to the eric-ide server. | |
24 | """ | |
25 | ||
26 | def __init__(self, serverInterface): | |
27 | """ | |
28 | Constructor | |
29 | ||
30 | @param serverInterface reference to the eric-ide server interface | |
31 | @type EricServerInterface | |
32 | """ | |
33 | super().__init__(parent=serverInterface) | |
34 | ||
35 | self.__serverInterface = serverInterface | |
36 | ||
37 | def getcwd(self): | |
38 | """ | |
39 | Public method to get the current working directory of the eric-ide server. | |
40 | ||
41 | @return current working directory of the eric-ide server | |
42 | @rtype str | |
43 | """ | |
44 | loop = QEventLoop() | |
45 | cwd = "" | |
46 | ||
47 | def callback(reply, params): | |
48 | """ | |
49 | Function to handle the server reply | |
50 | ||
51 | @param reply name of the server reply | |
52 | @type str | |
53 | @param params dictionary containing the reply data | |
54 | @type dict | |
55 | """ | |
56 | nonlocal cwd | |
57 | ||
58 | if reply == "Getcwd": | |
59 | cwd = params["directory"] | |
60 | loop.quit() | |
61 | ||
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
62 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
63 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
64 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
65 | request="Getcwd", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
66 | params={}, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
67 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
68 | ) |
10539 | 69 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
70 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
71 | |
10539 | 72 | return cwd |
73 | ||
74 | def chdir(self, directory): | |
75 | """ | |
76 | Public method to change the current working directory of the eric-ide server. | |
77 | ||
78 | @param directory absolute path of the working directory to change to | |
79 | @type str | |
80 | @return tuple containing an OK flag and an error string in case of an issue | |
81 | @rtype tuple of (bool, str) | |
82 | """ | |
83 | loop = QEventLoop() | |
84 | ok = False | |
85 | error = "" | |
86 | ||
87 | def callback(reply, params): | |
88 | """ | |
89 | Function to handle the server reply | |
90 | ||
91 | @param reply name of the server reply | |
92 | @type str | |
93 | @param params dictionary containing the reply data | |
94 | @type dict | |
95 | """ | |
96 | nonlocal ok, error | |
97 | ||
98 | if reply == "Chdir": | |
99 | ok = params["ok"] | |
100 | with contextlib.suppress(KeyError): | |
101 | error = params["error"] | |
102 | loop.quit() | |
103 | ||
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
104 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
105 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
106 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
107 | request="Chdir", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
108 | params={"directory": FileSystemUtilities.plainFileName(directory)}, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
109 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
110 | ) |
10539 | 111 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
112 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
113 | return ok, error |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
114 | |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
115 | else: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
116 | return False, "Not connected to an 'eric-ide' server." |
10539 | 117 | |
118 | def listdir(self, directory=""): | |
119 | """ | |
120 | Public method to get a directory listing. | |
121 | ||
122 | @param directory directory to be listed. An empty directory means to list | |
123 | the eric-ide server current directory. (defaults to "") | |
124 | @type str (optional) | |
125 | @return tuple containing the listed directory, the path separartor and the | |
126 | directory listing. Each directory listing entry contains a dictionary | |
127 | with the relevant data. | |
128 | @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
|
129 | @exception OSError raised in case the server reported an issue |
10539 | 130 | """ |
131 | if directory is None: | |
132 | # sanitize the directory in case it is None | |
133 | directory = "" | |
134 | ||
135 | 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
|
136 | ok = False |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
137 | error = "" |
10539 | 138 | listedDirectory = "" |
139 | separator = "" | |
140 | listing = [] | |
141 | ||
142 | def callback(reply, params): | |
143 | """ | |
144 | Function to handle the server reply | |
145 | ||
146 | @param reply name of the server reply | |
147 | @type str | |
148 | @param params dictionary containing the reply data | |
149 | @type dict | |
150 | """ | |
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
151 | nonlocal listedDirectory, listing, separator, ok, error |
10539 | 152 | |
153 | 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
|
154 | 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
|
155 | if ok: |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
156 | 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
|
157 | 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
|
158 | 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
|
159 | else: |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
160 | error = params["error"] |
10539 | 161 | loop.quit() |
162 | ||
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
163 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
164 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
165 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
166 | request="Listdir", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
167 | params={"directory": FileSystemUtilities.plainFileName(directory)}, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
168 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
169 | ) |
10539 | 170 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
171 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
172 | if not ok: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
173 | raise OSError(error) |
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
174 | |
10539 | 175 | return listedDirectory, separator, listing |
176 | ||
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
177 | def direntries( |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
178 | self, directory, filesonly=False, pattern=None, followsymlinks=True, ignore=None |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
179 | ): |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
180 | """ |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
181 | Public method to get a list of all files and directories of a given directory. |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
182 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
183 | @param directory root of the tree to check |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
184 | @type str |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
185 | @param filesonly flag indicating that only files are wanted (defaults to False) |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
186 | @type bool (optional) |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
187 | @param pattern a filename pattern or list of filename patterns to check |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
188 | against (defaults to None) |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
189 | @type str or list of str (optional) |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
190 | @param followsymlinks flag indicating whether symbolic links should be |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
191 | followed (defaults to True) |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
192 | @type bool (optional) |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
193 | @param ignore list of entries to be ignored (defaults to None) |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
194 | @type list of str (optional) |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
195 | @return list of all files and directories in the tree rooted at path. |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
196 | The names are expanded to start with the given directory name. |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
197 | @rtype list of str |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
198 | @exception OSError raised in case the server reported an issue |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
199 | """ |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
200 | loop = QEventLoop() |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
201 | ok = False |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
202 | error = "" |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
203 | result = [] |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
204 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
205 | def callback(reply, params): |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
206 | """ |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
207 | Function to handle the server reply |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
208 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
209 | @param reply name of the server reply |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
210 | @type str |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
211 | @param params dictionary containing the reply data |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
212 | @type dict |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
213 | """ |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
214 | nonlocal result, ok, error |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
215 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
216 | if reply == "DirEntries": |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
217 | ok = params["ok"] |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
218 | if ok: |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
219 | result = params["result"] |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
220 | else: |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
221 | error = params["error"] |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
222 | loop.quit() |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
223 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
224 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
225 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
226 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
227 | request="DirEntries", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
228 | params={ |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
229 | "directory": FileSystemUtilities.plainFileName(directory), |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
230 | "files_only": filesonly, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
231 | "pattern": [] if pattern is None else pattern, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
232 | "follow_symlinks": followsymlinks, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
233 | "ignore": [] if ignore is None else ignore, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
234 | }, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
235 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
236 | ) |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
237 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
238 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
239 | if not ok: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
240 | raise OSError(error) |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
241 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
242 | return result |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
243 | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
244 | def stat(self, filename, stNames): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
245 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
246 | Public method to get the status of a file. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
247 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
248 | @param filename name of the file |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
249 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
250 | @param stNames list of 'stat_result' members to retrieve |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
251 | @type list of str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
252 | @return dictionary containing the requested status data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
253 | @rtype dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
254 | @exception OSError raised in case the server reported an issue |
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 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
257 | ok = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
258 | error = "" |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
259 | stResult = {} |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
260 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
261 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
262 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
263 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
264 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
265 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
266 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
267 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
268 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
269 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
270 | nonlocal ok, error, stResult |
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 | if reply == "Stat": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
273 | ok = params["ok"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
274 | if ok: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
275 | stResult = params["result"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
276 | else: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
277 | error = params["error"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
278 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
279 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
280 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
281 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
282 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
283 | request="Stat", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
284 | params={ |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
285 | "filename": FileSystemUtilities.plainFileName(filename), |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
286 | "st_names": stNames, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
287 | }, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
288 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
289 | ) |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
290 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
291 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
292 | if not ok: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
293 | raise OSError(error) |
10546
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 | return stResult |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
296 | |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
297 | def isdir(self, name): |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
298 | """ |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
299 | Public method to check, if the given name is a directory. |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
300 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
301 | @param name name to be checked |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
302 | @type str |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
303 | @return flag indicating a directory |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
304 | @rtype bool |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
305 | """ |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
306 | with contextlib.suppress(KeyError, OSError): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
307 | result = self.stat(name, ["st_mode"]) |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
308 | return stat.S_ISDIR(result["st_mode"]) |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
309 | |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
310 | return False |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
311 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
312 | def isfile(self, name): |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
313 | """ |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
314 | Public method to check, if the given name is a regular file. |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
315 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
316 | @param name name to be checked |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
317 | @type str |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
318 | @return flag indicating a regular file |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
319 | @rtype bool |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
320 | """ |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
321 | with contextlib.suppress(KeyError, OSError): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
322 | result = self.stat(name, ["st_mode"]) |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
323 | return stat.S_ISREG(result["st_mode"]) |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
324 | |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
325 | return False |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10574
diff
changeset
|
326 | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
327 | def exists(self, name): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
328 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
329 | Public method the existence of a file or directory. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
330 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
331 | @param name name of the file or directory |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
332 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
333 | @return flag indicating the file existence |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
334 | @rtype bool |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
335 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
336 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
337 | nameExists = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
338 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
339 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
340 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
341 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
342 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
343 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
344 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
345 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
346 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
347 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
348 | nonlocal nameExists |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
349 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
350 | if reply == "Exists": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
351 | nameExists = params["exists"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
352 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
353 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
354 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
355 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
356 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
357 | request="Exists", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
358 | params={"name": FileSystemUtilities.plainFileName(name)}, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
359 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
360 | ) |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
361 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
362 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
363 | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
364 | return nameExists |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
365 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
366 | def access(self, name, modes): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
367 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
368 | 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
|
369 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
370 | 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
|
371 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
372 | @param name name of the file or directory |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
373 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
374 | @param modes list of modes to check for |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
375 | @type str or list of str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
376 | @return flag indicating the user has the asked for permissions |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
377 | @rtype bool |
10561
be23a662d709
Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10555
diff
changeset
|
378 | @exception ValueError raised for an illegal modes list |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
379 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
380 | if not modes: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
381 | raise ValueError( |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
382 | "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
|
383 | ) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
384 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
385 | if isinstance(modes, str): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
386 | # convert to a list with one element |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
387 | modes = [modes] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
388 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
389 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
390 | accessOK = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
391 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
392 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
393 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
394 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
395 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
396 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
397 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
398 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
399 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
400 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
401 | nonlocal accessOK |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
402 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
403 | if reply == "Access": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
404 | accessOK = params["ok"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
405 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
406 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
407 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
408 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
409 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
410 | request="Access", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
411 | params={ |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
412 | "name": FileSystemUtilities.plainFileName(name), |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
413 | "modes": modes, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
414 | }, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
415 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
416 | ) |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
417 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
418 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
419 | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
420 | return accessOK |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
421 | |
10539 | 422 | def mkdir(self, directory): |
423 | """ | |
424 | Public method to create a new directory on the eric-ide server. | |
425 | ||
426 | @param directory absolute path of the new directory | |
427 | @type str | |
428 | @return tuple containing an OK flag and an error string in case of an issue | |
429 | @rtype tuple of (bool, str) | |
430 | """ | |
431 | loop = QEventLoop() | |
432 | ok = False | |
433 | error = "" | |
434 | ||
435 | def callback(reply, params): | |
436 | """ | |
437 | Function to handle the server reply | |
438 | ||
439 | @param reply name of the server reply | |
440 | @type str | |
441 | @param params dictionary containing the reply data | |
442 | @type dict | |
443 | """ | |
444 | nonlocal ok, error | |
445 | ||
446 | if reply == "Mkdir": | |
447 | ok = params["ok"] | |
448 | with contextlib.suppress(KeyError): | |
449 | error = params["error"] | |
450 | loop.quit() | |
451 | ||
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
452 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
453 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
454 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
455 | request="Mkdir", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
456 | params={"directory": FileSystemUtilities.plainFileName(directory)}, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
457 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
458 | ) |
10539 | 459 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
460 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
461 | return ok, error |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
462 | |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
463 | else: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
464 | return False, "Not connected to an 'eric-ide' server." |
10539 | 465 | |
466 | def rmdir(self, directory): | |
467 | """ | |
468 | Public method to delete a directory on the eric-ide server. | |
469 | ||
470 | @param directory absolute path of the directory | |
471 | @type str | |
472 | @return tuple containing an OK flag and an error string in case of an issue | |
473 | @rtype tuple of (bool, str) | |
474 | """ | |
475 | loop = QEventLoop() | |
476 | ok = False | |
477 | error = "" | |
478 | ||
479 | def callback(reply, params): | |
480 | """ | |
481 | Function to handle the server reply | |
482 | ||
483 | @param reply name of the server reply | |
484 | @type str | |
485 | @param params dictionary containing the reply data | |
486 | @type dict | |
487 | """ | |
488 | nonlocal ok, error | |
489 | ||
490 | if reply == "Rmdir": | |
491 | ok = params["ok"] | |
492 | with contextlib.suppress(KeyError): | |
493 | error = params["error"] | |
494 | loop.quit() | |
495 | ||
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
496 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
497 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
498 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
499 | request="Rmdir", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
500 | params={"directory": FileSystemUtilities.plainFileName(directory)}, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
501 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
502 | ) |
10539 | 503 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
504 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
505 | return ok, error |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
506 | |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
507 | else: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
508 | return False, "Not connected to an 'eric-ide' server." |
10539 | 509 | |
510 | def replace(self, oldName, newName): | |
511 | """ | |
512 | Public method to rename a file or directory. | |
513 | ||
514 | @param oldName current name of the file or directory | |
515 | @type str | |
516 | @param newName new name for the file or directory | |
517 | @type str | |
518 | @return tuple containing an OK flag and an error string in case of an issue | |
519 | @rtype tuple of (bool, str) | |
520 | """ | |
521 | loop = QEventLoop() | |
522 | ok = False | |
523 | error = "" | |
524 | ||
525 | def callback(reply, params): | |
526 | """ | |
527 | Function to handle the server reply | |
528 | ||
529 | @param reply name of the server reply | |
530 | @type str | |
531 | @param params dictionary containing the reply data | |
532 | @type dict | |
533 | """ | |
534 | nonlocal ok, error | |
535 | ||
536 | if reply == "Replace": | |
537 | ok = params["ok"] | |
538 | with contextlib.suppress(KeyError): | |
539 | error = params["error"] | |
540 | loop.quit() | |
541 | ||
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
542 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
543 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
544 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
545 | request="Replace", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
546 | params={ |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
547 | "old_name": FileSystemUtilities.plainFileName(oldName), |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
548 | "new_name": FileSystemUtilities.plainFileName(newName), |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
549 | }, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
550 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
551 | ) |
10539 | 552 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
553 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
554 | return ok, error |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
555 | |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
556 | else: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
557 | return False, "Not connected to an 'eric-ide' server." |
10539 | 558 | |
559 | def remove(self, filename): | |
560 | """ | |
561 | Public method to delete a file on the eric-ide server. | |
562 | ||
563 | @param filename absolute path of the file | |
564 | @type str | |
565 | @return tuple containing an OK flag and an error string in case of an issue | |
566 | @rtype tuple of (bool, str) | |
567 | """ | |
568 | loop = QEventLoop() | |
569 | ok = False | |
570 | error = "" | |
571 | ||
572 | def callback(reply, params): | |
573 | """ | |
574 | Function to handle the server reply | |
575 | ||
576 | @param reply name of the server reply | |
577 | @type str | |
578 | @param params dictionary containing the reply data | |
579 | @type dict | |
580 | """ | |
581 | nonlocal ok, error | |
582 | ||
583 | if reply == "Remove": | |
584 | ok = params["ok"] | |
585 | with contextlib.suppress(KeyError): | |
586 | error = params["error"] | |
587 | loop.quit() | |
588 | ||
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
589 | if self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
590 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
591 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
592 | request="Remove", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
593 | params={"filename": FileSystemUtilities.plainFileName(filename)}, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
594 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
595 | ) |
10539 | 596 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
597 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
598 | return ok, error |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
599 | |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
600 | else: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
601 | return False, "Not connected to an 'eric-ide' server." |
10539 | 602 | |
603 | ####################################################################### | |
604 | ## Methods for reading and writing files | |
605 | ####################################################################### | |
606 | ||
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
607 | def readFile(self, filename, create=False): |
10539 | 608 | """ |
609 | Public method to read a file from the eric-ide server. | |
610 | ||
611 | @param filename name of the file to read | |
612 | @type str | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
613 | @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
|
614 | (defaults to False) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
615 | @type bool (optional) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
616 | @return bytes data read from the eric-ide server |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
617 | @rtype bytes |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
618 | @exception OSError raised in case the server reported an issue |
10539 | 619 | """ |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
620 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
621 | ok = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
622 | error = "" |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
623 | bText = b"" |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
624 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
625 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
626 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
627 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
628 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
629 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
630 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
631 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
632 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
633 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
634 | nonlocal ok, error, bText |
10539 | 635 | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
636 | if reply == "ReadFile": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
637 | ok = params["ok"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
638 | if ok: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
639 | bText = base64.b85decode( |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
640 | bytes(params["filedata"], encoding="ascii") |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
641 | ) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
642 | else: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
643 | error = params["error"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
644 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
645 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
646 | if not self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
647 | raise OSError("Not connected to an 'eric-ide' server.") |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
648 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
649 | else: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
650 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
651 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
652 | request="ReadFile", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
653 | params={ |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
654 | "filename": FileSystemUtilities.plainFileName(filename), |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
655 | "create": create, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
656 | }, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
657 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
658 | ) |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
659 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
660 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
661 | if not ok: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
662 | raise OSError(error) |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
663 | |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
664 | return bText |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
665 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
666 | def writeFile(self, filename, data, withBackup=False): |
10539 | 667 | """ |
668 | Public method to write the data to a file on the eric-ide server. | |
669 | ||
670 | @param filename name of the file to write | |
671 | @type str | |
672 | @param data data to be written | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
673 | @type bytes |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
674 | @param withBackup flag indicating to create a backup file first |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
675 | (defaults to False) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
676 | @type bool (optional) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
677 | @exception OSError raised in case the server reported an issue |
10539 | 678 | """ |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
679 | loop = QEventLoop() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
680 | ok = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
681 | error = "" |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
682 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
683 | def callback(reply, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
684 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
685 | Function to handle the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
686 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
687 | @param reply name of the server reply |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
688 | @type str |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
689 | @param params dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
690 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
691 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
692 | nonlocal ok, error |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
693 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
694 | if reply == "WriteFile": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
695 | ok = params["ok"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
696 | with contextlib.suppress(KeyError): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
697 | error = params["error"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
698 | loop.quit() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
699 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
700 | if not self.__serverInterface.isServerConnected(): |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
701 | raise OSError("Not connected to an 'eric-ide' server.") |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
702 | |
10577
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
703 | else: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
704 | self.__serverInterface.sendJson( |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
705 | category=EricRequestCategory.FileSystem, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
706 | request="WriteFile", |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
707 | params={ |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
708 | "filename": FileSystemUtilities.plainFileName(filename), |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
709 | "filedata": str(base64.b85encode(data), encoding="ascii"), |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
710 | "with_backup": withBackup, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
711 | }, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
712 | callback=callback, |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
713 | ) |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
714 | |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
715 | loop.exec() |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
716 | if not ok: |
b9edebd77c91
Made the coverage and file system server interfaces more resilient against not being connected.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
717 | raise OSError(error) |