src/eric7/RemoteServer/EricServerFileSystemRequestHandler.py

Mon, 05 Feb 2024 13:46:48 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 05 Feb 2024 13:46:48 +0100
branch
server
changeset 10548
d3e21f44887b
parent 10546
300487f5f517
child 10555
08e853c0c77b
permissions
-rw-r--r--

Improved the 'listdir()' remote server method in order to report 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
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from .EricRequestCategory import EricRequestCategory
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 class EricServerFileSystemRequestHandler:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 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
21 """
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 def __init__(self, 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 Constructor
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 @param server reference to the eric-ide server object
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @type EricServer
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 self.__server = server
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 self.__requestMethodMapping = {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 "Chdir": self.__chdir,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 "Getcwd": self.__getcwd,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 "Listdir": self.__listdir,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 "Mkdir": self.__mkdir,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 "Rmdir": self.__rmdir,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 "Replace": self.__replace,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 "Remove": self.__remove,
10546
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
40 "Stat": self.__stat,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
41 "Exists": self.__exists,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
42 "Access": self.__access,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
43
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
44 "ReadFile": self.__readFile,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
45 "WriteFile": self.__writeFile,
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 }
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 def handleRequest(self, request, params, reqestUuid):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 Public method handling the received file system requests.
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 @param request request name
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 @type str
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @param params dictionary containing the request parameters
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @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
57 @type str
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 try:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 result = self.__requestMethodMapping[request](params)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.__server.sendJson(
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 category=EricRequestCategory.FileSystem,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 reply=request,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 params=result,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 reqestUuid=reqestUuid,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 )
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 except KeyError:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__server.sendJson(
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 category=EricRequestCategory.FileSystem,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 reply=request,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 params={"Error": f"Request type '{request}' is not supported."},
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 )
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 def __chdir(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 Private method to change the current working directory.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 @rtype dict
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 directory = params["directory"]
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 try:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 os.chdir(directory)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 "error": str(err),
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 }
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 def __getcwd(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 Private method to report the current working directory.
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 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 return {"directory": os.getcwd()}
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 def __listdir(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 Private method to report a directory listing.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 directory = params["directory"]
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 if not directory:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 directory = os.getcwd()
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
10548
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
118 try:
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
119 listing = []
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
120 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
121 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
122 entry = {
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
123 "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
124 "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
125 "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
126 "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
127 "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
128 "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
129 "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
130 "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
131 "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
132 "%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
133 ),
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
134 }
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
135 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
136
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
137 return {
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
138 "ok": True,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
139 "directory": directory,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
140 "listing": listing,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
141 "separator": os.sep,
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 }
10548
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
143 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
144 return {
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
145 "ok": False,
d3e21f44887b Improved the 'listdir()' remote server method in order to report issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10546
diff changeset
146 "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
147 }
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
10546
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
149 def __stat(self, params):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
150 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
151 Private method to get the status of a file.
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
152
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
153 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
154 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
155 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
156 @rtype dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
157 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
158 filename = params["filename"]
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
159 statItems = params["st_names"]
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
160
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
161 try:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
162 result = os.stat(filename)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
163 resultDict = {st: getattr(result, st) for st in statItems}
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
164 return {"ok": True, "result": resultDict}
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
165 except OSError as err:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
166 return {
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
167 "ok": False,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
168 "error": str(err),
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
169 }
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
170
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
171 def __exists(self, params):
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 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
174
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
175 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
176 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
177 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
178 @rtype dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
179 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
180 return {"exists": os.path.exists(params["name"])}
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
181
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
182 def __access(self, params):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
183 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
184 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
185 to a file or directory..
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 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
188 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
189 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
190 @rtype dict
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 mode = os.F_OK
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
193 for modeStr in params["modes"]:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
194 if modeStr == "read":
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
195 mode |= os.R_OK
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
196 elif modeStr == "write":
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
197 mode |= os.W_OK
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
198 elif modeStr == "execute":
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
199 mode |= os.X_OK
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 return {"ok": os.access(params["name"], mode)}
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
202
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 def __mkdir(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 Private method to create a new directory.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 directory = params["directory"]
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 try:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 os.makedirs(directory)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 "error": str(err),
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
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 def __rmdir(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 Private method to delete a directory.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 directory = params["directory"]
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 try:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 os.rmdir(directory)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 "error": str(err),
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 }
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 def __replace(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 Private method to replace (rename) a file or directory.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 @rtype dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 oldName = params["old_name"]
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 newName = params["new_name"]
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 try:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 os.replace(oldName, newName)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 "error": str(err),
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 }
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 def __remove(self, params):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 """
10546
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
267 Private method to delete a file.
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 @param params dictionary containing the request data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 @type dict
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 @return dictionary containing the reply data
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 @rtype dict
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 filename = params["filename"]
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 try:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 os.remove(filename)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 return {"ok": True}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 except OSError as err:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 return {
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 "ok": False,
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 "error": str(err),
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 }
10546
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
284
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
285 def __readFile(self, params):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
286 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
287 Private method to read the contents of a file.
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
288
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
289 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
290 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
291 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
292 @rtype dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
293 """
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
294 filename = params["filename"]
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
295
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
296 if params["create"] and not os.path.exists(filename):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
297 with open(filename, "wb"):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
298 pass
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
299
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
300 try:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
301 with open(filename, "rb") as f:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
302 data = f.read()
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
303 return {
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
304 "ok": True,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
305 "filedata": str(base64.b85encode(data), encoding="ascii")
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
306 }
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
307 except OSError as err:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
308 return {
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
309 "ok": False,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
310 "error": str(err),
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
311 }
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 def __writeFile(self, params):
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 Private method to write data into a file.
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
316
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
317 @param params dictionary containing the request data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
318 @type dict
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
319 @return dictionary containing the reply data
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
320 @rtype dict
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 filename = params["filename"]
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
323 data = base64.b85decode(bytes(params["filedata"], encoding="ascii"))
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
324
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
325 # 1. create backup file if asked for
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
326 if params["with_backup"]:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
327 if os.path.islink(filename):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
328 filename = os.path.realpath(filename)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
329 backupFilename = "{0}~".format(filename)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
330 try:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
331 permissions = os.stat(filename).st_mode
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
332 perms_valid = True
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
333 except OSError:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
334 # if there was an error, ignore it
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
335 perms_valid = False
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
336 with contextlib.suppress(OSError):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
337 os.remove(backupFilename)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
338 with contextlib.suppress(OSError):
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
339 os.rename(filename, backupFilename)
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 # 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
342 try:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
343 with open(filename, "wb") as f:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
344 f.write(data)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
345 if params["with_backup"] and perms_valid:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
346 os.chmod(filename, permissions)
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
347 return {"ok": True}
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
348 except OSError as err:
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
349 return {
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
350 "ok": False,
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
351 "error": str(err),
300487f5f517 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10539
diff changeset
352 }

eric ide

mercurial