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