Tue, 10 Dec 2024 15:46:34 +0100
Updated copyright for 2025.
10539 | 1 | # -*- coding: utf-8 -*- |
2 | ||
11090
f5f5f5803935
Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10986
diff
changeset
|
3 | # Copyright (c) 2024 - 2025 Detlev Offenbach <detlev@die-offenbachs.de> |
10539 | 4 | # |
5 | ||
6 | """ | |
7 | Module implementing the file system request handler of the eric-ide server. | |
8 | """ | |
9 | ||
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
10 | import base64 |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
11 | import contextlib |
10539 | 12 | import os |
10605
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
13 | import shutil |
10539 | 14 | import stat |
15 | import time | |
16 | ||
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
17 | from eric7.SystemUtilities import FileSystemUtilities |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
18 | |
10539 | 19 | from .EricRequestCategory import EricRequestCategory |
10767
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
20 | from .EricServerBaseRequestHandler import EricServerBaseRequestHandler |
10539 | 21 | |
10561
be23a662d709
Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10555
diff
changeset
|
22 | |
10767
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
23 | class EricServerFileSystemRequestHandler(EricServerBaseRequestHandler): |
10539 | 24 | """ |
25 | Class implementing the file system request handler of the eric-ide server. | |
26 | """ | |
27 | ||
28 | def __init__(self, server): | |
29 | """ | |
30 | Constructor | |
31 | ||
32 | @param server reference to the eric-ide server object | |
33 | @type EricServer | |
34 | """ | |
10767
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
35 | super().__init__(server) |
10555
08e853c0c77b
Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10548
diff
changeset
|
36 | |
10767
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
37 | self._category = EricRequestCategory.FileSystem |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
38 | |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
39 | self._requestMethodMapping = { |
10584
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
40 | "GetPathSep": self.__getPathSeparator, |
10539 | 41 | "Chdir": self.__chdir, |
42 | "Getcwd": self.__getcwd, | |
43 | "Listdir": self.__listdir, | |
44 | "Mkdir": self.__mkdir, | |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
45 | "MakeDirs": self.__makedirs, |
10539 | 46 | "Rmdir": self.__rmdir, |
47 | "Replace": self.__replace, | |
48 | "Remove": self.__remove, | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
49 | "Stat": self.__stat, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
50 | "Exists": self.__exists, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
51 | "Access": self.__access, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
52 | "ReadFile": self.__readFile, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
53 | "WriteFile": self.__writeFile, |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
54 | "DirEntries": self.__dirEntries, |
10605
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
55 | "ExpandUser": self.__expanduser, |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
56 | "ShutilCopy": self.__shutilCopy, |
10610
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
57 | "ShutilRmtree": self.__shutilRmtree, |
10539 | 58 | } |
59 | ||
10767
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
60 | def sendError(self, request, reqestUuid=""): |
10539 | 61 | """ |
10767
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
62 | Public method to send an error report to the IDE. |
10539 | 63 | |
64 | @param request request name | |
65 | @type str | |
66 | @param reqestUuid UUID of the associated request as sent by the eric IDE | |
10767
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
67 | (defaults to "", i.e. no UUID received) |
10539 | 68 | @type str |
69 | """ | |
10767
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
70 | self._server.sendJson( |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
71 | category=self._category, |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
72 | reply=request, |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
73 | params={ |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
74 | "ok": False, |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
75 | "error": f"Request type '{request}' is not supported.", |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
76 | "info": list(self._requestMethodMapping.keys()), |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
77 | }, |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
78 | reqestUuid=reqestUuid, |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
79 | ) |
10539 | 80 | |
10767
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
81 | ############################################################################ |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
82 | ## File system related methods below |
b3672d3e7644
Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10722
diff
changeset
|
83 | ############################################################################ |
10539 | 84 | |
10597
fbe93720ee9f
Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10596
diff
changeset
|
85 | def __getPathSeparator(self, params): # noqa: U100 |
10584
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
86 | """ |
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
87 | Private method to report the path separator. |
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
88 | |
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
89 | @param params dictionary containing the request data |
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
90 | @type dict |
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
91 | @return dictionary containing the reply data |
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
92 | @rtype dict |
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
93 | """ |
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
94 | return {"separator": os.sep} |
a596cf392291
Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10583
diff
changeset
|
95 | |
10539 | 96 | def __chdir(self, params): |
97 | """ | |
98 | Private method to change the current working directory. | |
99 | ||
100 | @param params dictionary containing the request data | |
101 | @type dict | |
102 | @return dictionary containing the reply data | |
103 | @rtype dict | |
104 | """ | |
105 | try: | |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
106 | os.chdir(params["directory"]) |
10539 | 107 | return {"ok": True} |
108 | except OSError as err: | |
109 | return { | |
110 | "ok": False, | |
111 | "error": str(err), | |
112 | } | |
113 | ||
10561
be23a662d709
Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10555
diff
changeset
|
114 | def __getcwd(self, params): # noqa: U100 |
10539 | 115 | """ |
116 | Private method to report the current working directory. | |
117 | ||
118 | @param params dictionary containing the request data | |
119 | @type dict | |
120 | @return dictionary containing the reply data | |
121 | @rtype dict | |
122 | """ | |
123 | return {"directory": os.getcwd()} | |
124 | ||
125 | def __listdir(self, params): | |
126 | """ | |
127 | Private method to report a directory listing. | |
128 | ||
129 | @param params dictionary containing the request data | |
130 | @type dict | |
131 | @return dictionary containing the reply data | |
132 | @rtype dict | |
133 | """ | |
134 | directory = params["directory"] | |
135 | if not directory: | |
136 | directory = os.getcwd() | |
137 | ||
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
138 | try: |
10630
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
139 | listing = self.__scanDirectory(directory, params["recursive"]) |
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
140 | |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
141 | return { |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
142 | "ok": True, |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
143 | "directory": directory, |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
144 | "listing": listing, |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
145 | "separator": os.sep, |
10539 | 146 | } |
10548
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
147 | except OSError as err: |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
148 | return { |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
149 | "ok": False, |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
150 | "error": str(err), |
d3e21f44887b
Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10546
diff
changeset
|
151 | } |
10539 | 152 | |
10630
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
153 | def __scanDirectory(self, directory, recursive, withHidden=False): |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
154 | """ |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
155 | Private method to scan a given directory. |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
156 | |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
157 | @param directory path of the directory to be scanned |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
158 | @type str |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
159 | @param recursive flag indicating a recursive scan |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
160 | @type bool |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
161 | @param withHidden flag indicating to list hidden files and directories |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
162 | as well (defaults to False) |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
163 | @type bool (optional) |
10633
dda7e43934dc
Corrected some code formatting and coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10630
diff
changeset
|
164 | @return list of file and directory entries |
dda7e43934dc
Corrected some code formatting and coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10630
diff
changeset
|
165 | @rtype list of dict |
10630
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
166 | """ |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
167 | listing = [] |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
168 | for dirEntry in os.scandir(directory): |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
169 | filestat = dirEntry.stat() |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
170 | if withHidden or not dirEntry.name.startswith("."): |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
171 | entry = { |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
172 | "name": dirEntry.name, |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
173 | "path": dirEntry.path, |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
174 | "is_dir": dirEntry.is_dir(), |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
175 | "is_file": dirEntry.is_file(), |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
176 | "is_link": dirEntry.is_symlink(), |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
177 | "mode": filestat.st_mode, |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
178 | "mode_str": stat.filemode(filestat.st_mode), |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
179 | "size": filestat.st_size, |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
180 | "mtime": filestat.st_mtime, |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
181 | "mtime_str": time.strftime( |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
182 | "%Y-%m-%d %H:%M:%S", time.localtime(filestat.st_mtime) |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
183 | ), |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
184 | } |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
185 | listing.append(entry) |
10633
dda7e43934dc
Corrected some code formatting and coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10630
diff
changeset
|
186 | |
10630
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
187 | if entry["is_dir"] and recursive: |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
188 | listing += self.__scanDirectory(dirEntry.path, recursive) |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
189 | |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
190 | return listing |
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
191 | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
192 | def __stat(self, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
193 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
194 | Private method to get the status of a file. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
195 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
196 | @param params dictionary containing the request data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
197 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
198 | @return dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
199 | @rtype dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
200 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
201 | try: |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
202 | result = os.stat(params["filename"]) |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
203 | resultDict = {st: getattr(result, st) for st in params["st_names"]} |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
204 | return {"ok": True, "result": resultDict} |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
205 | except OSError as err: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
206 | return { |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
207 | "ok": False, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
208 | "error": str(err), |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
209 | } |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
210 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
211 | def __exists(self, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
212 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
213 | Private method to check if a file or directory of the given name exists. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
214 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
215 | @param params dictionary containing the request data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
216 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
217 | @return dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
218 | @rtype dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
219 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
220 | return {"exists": os.path.exists(params["name"])} |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
221 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
222 | def __access(self, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
223 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
224 | Private method to test, if the eric-ide server has the given access rights |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
225 | to a file or directory.. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
226 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
227 | @param params dictionary containing the request data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
228 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
229 | @return dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
230 | @rtype dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
231 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
232 | mode = os.F_OK |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
233 | for modeStr in params["modes"]: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
234 | if modeStr == "read": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
235 | mode |= os.R_OK |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
236 | elif modeStr == "write": |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
237 | mode |= os.W_OK |
10722
b74d46513011
Corrected some issues in the remote server and the remote file dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10633
diff
changeset
|
238 | elif modeStr in ("execute", "exec"): |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
239 | mode |= os.X_OK |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
240 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
241 | return {"ok": os.access(params["name"], mode)} |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
242 | |
10539 | 243 | def __mkdir(self, params): |
244 | """ | |
245 | Private method to create a new directory. | |
246 | ||
247 | @param params dictionary containing the request data | |
248 | @type dict | |
249 | @return dictionary containing the reply data | |
250 | @rtype dict | |
251 | """ | |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
252 | try: |
10948
89b36a39fe69
Extended the eric-ide server 'mkdir()' command by the mode parameter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10767
diff
changeset
|
253 | mode = params["mode"] |
89b36a39fe69
Extended the eric-ide server 'mkdir()' command by the mode parameter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10767
diff
changeset
|
254 | except KeyError: |
89b36a39fe69
Extended the eric-ide server 'mkdir()' command by the mode parameter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10767
diff
changeset
|
255 | mode = 0o777 |
89b36a39fe69
Extended the eric-ide server 'mkdir()' command by the mode parameter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10767
diff
changeset
|
256 | try: |
89b36a39fe69
Extended the eric-ide server 'mkdir()' command by the mode parameter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10767
diff
changeset
|
257 | os.mkdir(params["directory"], mode=mode) |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
258 | return {"ok": True} |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
259 | except OSError as err: |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
260 | return { |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
261 | "ok": False, |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
262 | "error": str(err), |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
263 | } |
10539 | 264 | |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
265 | def __makedirs(self, params): |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
266 | """ |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
267 | Private method to create a new directory. |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
268 | |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
269 | @param params dictionary containing the request data |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
270 | @type dict |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
271 | @return dictionary containing the reply data |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
272 | @rtype dict |
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
273 | """ |
10539 | 274 | try: |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
275 | os.makedirs(params["directory"], exist_ok=params["exist_ok"]) |
10539 | 276 | return {"ok": True} |
277 | except OSError as err: | |
278 | return { | |
279 | "ok": False, | |
280 | "error": str(err), | |
281 | } | |
282 | ||
283 | def __rmdir(self, params): | |
284 | """ | |
285 | Private method to delete a directory. | |
286 | ||
287 | @param params dictionary containing the request data | |
288 | @type dict | |
289 | @return dictionary containing the reply data | |
290 | @rtype dict | |
291 | """ | |
292 | try: | |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
293 | os.rmdir(params["directory"]) |
10539 | 294 | return {"ok": True} |
295 | except OSError as err: | |
296 | return { | |
297 | "ok": False, | |
298 | "error": str(err), | |
299 | } | |
300 | ||
301 | def __replace(self, params): | |
302 | """ | |
303 | Private method to replace (rename) a file or directory. | |
304 | ||
305 | ||
306 | @param params dictionary containing the request data | |
307 | @type dict | |
308 | @return dictionary containing the reply data | |
309 | @rtype dict | |
310 | """ | |
311 | try: | |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
312 | os.replace(params["old_name"], params["new_name"]) |
10539 | 313 | return {"ok": True} |
314 | except OSError as err: | |
315 | return { | |
316 | "ok": False, | |
317 | "error": str(err), | |
318 | } | |
319 | ||
320 | def __remove(self, params): | |
321 | """ | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
322 | Private method to delete a file. |
10539 | 323 | |
324 | @param params dictionary containing the request data | |
325 | @type dict | |
326 | @return dictionary containing the reply data | |
327 | @rtype dict | |
328 | """ | |
329 | try: | |
10596
ea35c92a3c7c
Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10584
diff
changeset
|
330 | os.remove(params["filename"]) |
10539 | 331 | return {"ok": True} |
332 | except OSError as err: | |
333 | return { | |
334 | "ok": False, | |
335 | "error": str(err), | |
336 | } | |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
337 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
338 | def __readFile(self, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
339 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
340 | Private method to read the contents of a file. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
341 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
342 | @param params dictionary containing the request data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
343 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
344 | @return dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
345 | @rtype dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
346 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
347 | filename = params["filename"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
348 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
349 | if params["create"] and not os.path.exists(filename): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
350 | with open(filename, "wb"): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
351 | pass |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
352 | |
10630
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
353 | newline = None if params["newline"] == "<<none>>" else params["newline"] |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
354 | try: |
10630
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
355 | with open(filename, "rb", newline=newline) as f: |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
356 | data = f.read() |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
357 | return { |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
358 | "ok": True, |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
359 | "filedata": str(base64.b85encode(data), encoding="ascii"), |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
360 | } |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
361 | except OSError as err: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
362 | return { |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
363 | "ok": False, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
364 | "error": str(err), |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
365 | } |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
366 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
367 | def __writeFile(self, params): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
368 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
369 | Private method to write data into a file. |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
370 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
371 | @param params dictionary containing the request data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
372 | @type dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
373 | @return dictionary containing the reply data |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
374 | @rtype dict |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
375 | """ |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
376 | filename = params["filename"] |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
377 | data = base64.b85decode(bytes(params["filedata"], encoding="ascii")) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
378 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
379 | # 1. create backup file if asked for |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
380 | if params["with_backup"]: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
381 | if os.path.islink(filename): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
382 | filename = os.path.realpath(filename) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
383 | backupFilename = "{0}~".format(filename) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
384 | try: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
385 | permissions = os.stat(filename).st_mode |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
386 | perms_valid = True |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
387 | except OSError: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
388 | # if there was an error, ignore it |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
389 | perms_valid = False |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
390 | with contextlib.suppress(OSError): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
391 | os.remove(backupFilename) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
392 | with contextlib.suppress(OSError): |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
393 | os.rename(filename, backupFilename) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
394 | |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
395 | # 2. write the data to the file and reset the permissions |
10630
552a790fd9bc
Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10610
diff
changeset
|
396 | newline = None if params["newline"] == "<<none>>" else params["newline"] |
10976
10fe4f38b5f3
Enhanced and fixed the 'eric-ide' server file writing routine to allow for the specification of a newline indicator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10948
diff
changeset
|
397 | if newline is None: |
10986
39a97ad73ee5
Fixed a few code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10976
diff
changeset
|
398 | mode = "wb" |
10976
10fe4f38b5f3
Enhanced and fixed the 'eric-ide' server file writing routine to allow for the specification of a newline indicator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10948
diff
changeset
|
399 | else: |
10fe4f38b5f3
Enhanced and fixed the 'eric-ide' server file writing routine to allow for the specification of a newline indicator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10948
diff
changeset
|
400 | mode = "w" |
10fe4f38b5f3
Enhanced and fixed the 'eric-ide' server file writing routine to allow for the specification of a newline indicator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10948
diff
changeset
|
401 | data = data.decode("utf-8") |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
402 | try: |
10976
10fe4f38b5f3
Enhanced and fixed the 'eric-ide' server file writing routine to allow for the specification of a newline indicator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10948
diff
changeset
|
403 | with open(filename, mode, newline=newline) as f: |
10546
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
404 | f.write(data) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
405 | if params["with_backup"] and perms_valid: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
406 | os.chmod(filename, permissions) |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
407 | return {"ok": True} |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
408 | except OSError as err: |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
409 | return { |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
410 | "ok": False, |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
411 | "error": str(err), |
300487f5f517
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10539
diff
changeset
|
412 | } |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
413 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
414 | def __dirEntries(self, params): |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
415 | """ |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
416 | Private 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:
10561
diff
changeset
|
417 | |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
418 | @param params dictionary containing the request data |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
419 | @type dict |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
420 | @return dictionary containing the reply data |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
421 | @rtype dict |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
422 | """ |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
423 | directory = params["directory"] |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
424 | result = FileSystemUtilities.direntries( |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
425 | directory, |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
426 | filesonly=params["files_only"], |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
427 | pattern=params["pattern"], |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
428 | followsymlinks=params["follow_symlinks"], |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
429 | ignore=params["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:
10576
diff
changeset
|
430 | recursive=params["recursive"], |
2114cc7275e8
Adapted the UML Class diagram and the Package diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10576
diff
changeset
|
431 | dirsonly=params["dirs_only"], |
10576
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
432 | ) |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
433 | return { |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
434 | "ok": True, |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
435 | "result": result, |
0cf5ebf17411
Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10561
diff
changeset
|
436 | } |
10605
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
437 | |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
438 | def __expanduser(self, params): |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
439 | """ |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
440 | Private method to replace an initial component of ~ or ~user replaced. |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
441 | |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
442 | @param params dictionary containing the request data |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
443 | @type dict |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
444 | @return dictionary containing the reply data |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
445 | @rtype dict |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
446 | """ |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
447 | return { |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
448 | "ok": True, |
10610
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
449 | "name": os.path.expanduser(params["name"]), |
10605
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
450 | } |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
451 | |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
452 | def __shutilCopy(self, params): |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
453 | """ |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
454 | Private method to copy a source file to a destination file or directory. |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
455 | |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
456 | @param params dictionary containing the request data |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
457 | @type dict |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
458 | @return dictionary containing the reply data |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
459 | @rtype dict |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
460 | """ |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
461 | try: |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
462 | return { |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
463 | "ok": True, |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
464 | "dst": shutil.copy(params["src_name"], params["dst_name"]), |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
465 | } |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
466 | except OSError as err: |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
467 | return { |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
468 | "ok": False, |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
469 | "error": str(err), |
b6f5e27daeb5
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10597
diff
changeset
|
470 | } |
10610
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
471 | |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
472 | def __shutilRmtree(self, params): |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
473 | """ |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
474 | Private method to delete an entire directory tree. |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
475 | |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
476 | @param params dictionary containing the request data |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
477 | @type dict |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
478 | @return dictionary containing the reply data |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
479 | @rtype dict |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
480 | """ |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
481 | try: |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
482 | shutil.rmtree(params["name"], params["ignore_errors"]) |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
483 | return {"ok": True} |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
484 | except OSError as err: |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
485 | return { |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
486 | "ok": False, |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
487 | "error": str(err), |
bb0149571d94
Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10605
diff
changeset
|
488 | } |