src/eric7/RemoteServer/EricServerFileSystemRequestHandler.py

Thu, 22 Feb 2024 16:34:43 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 22 Feb 2024 16:34:43 +0100
branch
server
changeset 10597
fbe93720ee9f
parent 10596
ea35c92a3c7c
child 10605
b6f5e27daeb5
permissions
-rw-r--r--

Corrected a few formatting and style issues.

10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the file system request handler of the eric-ide server.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
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
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import os
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 import stat
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 import time
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
10576
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
16 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
17
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from .EricRequestCategory import EricRequestCategory
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
20
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 class EricServerFileSystemRequestHandler:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class implementing the file system request handler of the eric-ide server.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 def __init__(self, server):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Constructor
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param server reference to the eric-ide server object
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @type EricServer
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 self.__server = server
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10548
diff changeset
34
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 self.__requestMethodMapping = {
10584
a596cf392291 Adapted the Imports diagram to support the 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10583
diff changeset
36 "GetPathSep": self.__getPathSeparator,
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 "Chdir": self.__chdir,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 "Getcwd": self.__getcwd,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 "Listdir": self.__listdir,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 "Mkdir": self.__mkdir,
10596
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
41 "MakeDirs": self.__makedirs,
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 "Rmdir": self.__rmdir,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 "Replace": self.__replace,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 "Remove": self.__remove,
10546
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
45 "Stat": self.__stat,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
46 "Exists": self.__exists,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
47 "Access": self.__access,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
48 "ReadFile": self.__readFile,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
49 "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
50 "DirEntries": self.__dirEntries,
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 }
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 def handleRequest(self, request, params, reqestUuid):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 Public method handling the received file system requests.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 @param request request name
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @type str
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @param params dictionary containing the request parameters
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 @param reqestUuid UUID of the associated request as sent by the eric IDE
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @type str
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 try:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 result = self.__requestMethodMapping[request](params)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.__server.sendJson(
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 category=EricRequestCategory.FileSystem,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 reply=request,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 params=result,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 reqestUuid=reqestUuid,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 )
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 except KeyError:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.__server.sendJson(
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 category=EricRequestCategory.FileSystem,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 reply=request,
10596
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
77 params={
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
78 "ok": False,
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
79 "error": f"Request type '{request}' is not supported.",
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
80 "info": list(self.__requestMethodMapping.keys()),
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
81 },
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
82 reqestUuid=reqestUuid,
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 )
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
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
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 def __chdir(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 Private method to change the current working directory.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
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
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 "error": str(err),
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 }
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
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
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 Private method to report the current working directory.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 return {"directory": os.getcwd()}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 def __listdir(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 Private method to report a directory listing.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 directory = params["directory"]
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 if not directory:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 directory = os.getcwd()
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
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:
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
139 listing = []
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
140 for dirEntry in os.scandir(directory):
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
141 filestat = dirEntry.stat()
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
142 entry = {
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
143 "name": dirEntry.name,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
144 "path": dirEntry.path,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
145 "is_dir": dirEntry.is_dir(),
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
146 "is_file": dirEntry.is_file(),
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
147 "is_link": dirEntry.is_symlink(),
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
148 "mode": filestat.st_mode,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
149 "mode_str": stat.filemode(filestat.st_mode),
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
150 "size": filestat.st_size,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
151 "mtime": time.strftime(
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
152 "%Y-%m-%d %H:%M:%S", time.localtime(filestat.st_mtime)
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
153 ),
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
154 }
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
155 listing.append(entry)
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
156
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
157 return {
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
158 "ok": True,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
159 "directory": directory,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
160 "listing": listing,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
161 "separator": os.sep,
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 }
10548
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
163 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
164 return {
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
165 "ok": False,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
166 "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
167 }
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168
10546
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
169 def __stat(self, params):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
170 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
171 Private method to get the status of a file.
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
172
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
173 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
174 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
175 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
176 @rtype dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
177 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
178 try:
10596
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
179 result = os.stat(params["filename"])
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
180 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
181 return {"ok": True, "result": resultDict}
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
182 except OSError as err:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
183 return {
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
184 "ok": False,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
185 "error": str(err),
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
186 }
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
187
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
188 def __exists(self, params):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
189 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
190 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
191
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
192 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
193 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
194 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
195 @rtype dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
196 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
197 return {"exists": os.path.exists(params["name"])}
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
198
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
199 def __access(self, params):
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 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
202 to a file or directory..
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
203
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
204 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
205 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
206 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
207 @rtype dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
208 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
209 mode = os.F_OK
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
210 for modeStr in params["modes"]:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
211 if modeStr == "read":
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
212 mode |= os.R_OK
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
213 elif modeStr == "write":
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
214 mode |= os.W_OK
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
215 elif modeStr == "execute":
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
216 mode |= os.X_OK
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
217
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
218 return {"ok": os.access(params["name"], mode)}
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
219
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 def __mkdir(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 Private method to create a new directory.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 """
10596
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
229 try:
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
230 os.mkdir(params["directory"])
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
231 return {"ok": True}
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
232 except OSError as err:
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
233 return {
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
234 "ok": False,
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
235 "error": str(err),
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
236 }
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237
10596
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
238 def __makedirs(self, params):
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
239 """
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
240 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
241
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
242 @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
243 @type dict
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
244 @return dictionary containing the reply data
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
245 @rtype dict
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
246 """
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 try:
10596
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
248 os.makedirs(params["directory"], exist_ok=params["exist_ok"])
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 "error": str(err),
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 }
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 def __rmdir(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 Private method to delete a directory.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 try:
10596
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
266 os.rmdir(params["directory"])
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 "error": str(err),
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 }
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 def __replace(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 Private method to replace (rename) a file or directory.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 try:
10596
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
285 os.replace(params["old_name"], params["new_name"])
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 "error": str(err),
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 }
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 def __remove(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 """
10546
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
295 Private method to delete a file.
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 try:
10596
ea35c92a3c7c Implemented first stage of remote project support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10584
diff changeset
303 os.remove(params["filename"])
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 "error": str(err),
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 }
10546
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
310
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
311 def __readFile(self, params):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
312 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
313 Private method to read the contents of a file.
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
314
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
315 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
316 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
317 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
318 @rtype dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
319 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
320 filename = params["filename"]
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
321
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
322 if params["create"] and not os.path.exists(filename):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
323 with open(filename, "wb"):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
324 pass
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
325
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
326 try:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
327 with open(filename, "rb") as f:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
328 data = f.read()
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
329 return {
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
330 "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
331 "filedata": str(base64.b85encode(data), encoding="ascii"),
10546
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
332 }
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
333 except OSError as err:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
334 return {
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
335 "ok": False,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
336 "error": str(err),
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
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
339 def __writeFile(self, params):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
340 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
341 Private method to write data into a file.
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
342
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
343 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
344 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
345 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
346 @rtype dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
347 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
348 filename = params["filename"]
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
349 data = base64.b85decode(bytes(params["filedata"], encoding="ascii"))
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
350
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
351 # 1. create backup file if asked for
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
352 if params["with_backup"]:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
353 if os.path.islink(filename):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
354 filename = os.path.realpath(filename)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
355 backupFilename = "{0}~".format(filename)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
356 try:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
357 permissions = os.stat(filename).st_mode
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
358 perms_valid = True
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
359 except OSError:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
360 # if there was an error, ignore it
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
361 perms_valid = False
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
362 with contextlib.suppress(OSError):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
363 os.remove(backupFilename)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
364 with contextlib.suppress(OSError):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
365 os.rename(filename, backupFilename)
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 # 2. write the data to the file and reset the permissions
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
368 try:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
369 with open(filename, "wb") as f:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
370 f.write(data)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
371 if params["with_backup"] and perms_valid:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
372 os.chmod(filename, permissions)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
373 return {"ok": True}
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
374 except OSError as err:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
375 return {
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
376 "ok": False,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
377 "error": str(err),
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
378 }
10576
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
379
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
380 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
381 """
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
382 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
383
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
384 @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
385 @type dict
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
386 @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
387 @rtype dict
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
388 """
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
389 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
390 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
391 directory,
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
392 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
393 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
394 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
395 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
396 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
397 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
398 )
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
399 return {
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
400 "ok": True,
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
401 "result": result,
0cf5ebf17411 Adapted the Code Metrics dialog to support remote files and directories.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
402 }

eric ide

mercurial