eric7/Utilities/FtpUtilities.py

branch
eric7
changeset 8354
12ebd3934fef
parent 8318
962bce857696
child 8881
54e42bc2437a
equal deleted inserted replaced
8353:799196d0b05d 8354:12ebd3934fef
9 9
10 import os 10 import os
11 11
12 from PyQt6.QtCore import QObject, QDate, QDateTime, QTime 12 from PyQt6.QtCore import QObject, QDate, QDateTime, QTime
13 13
14 from E5Network.E5UrlInfo import E5UrlInfo, E5UrlPermission 14 from EricNetwork.EricUrlInfo import EricUrlInfo, EricUrlPermission
15 15
16 16
17 class FtpDirLineParserError(Exception): 17 class FtpDirLineParserError(Exception):
18 """ 18 """
19 Exception class raised, if a parser issue was detected. 19 Exception class raised, if a parser issue was detected.
67 """ 67 """
68 Private method to parse a Unix mode string modifying the 68 Private method to parse a Unix mode string modifying the
69 given URL info object. 69 given URL info object.
70 70
71 @param modeString mode string to be parsed (string) 71 @param modeString mode string to be parsed (string)
72 @param urlInfo reference to the URL info object (E5UrlInfo) 72 @param urlInfo reference to the URL info object (EricUrlInfo)
73 @exception FtpDirLineParserError Raised if the mode cannot be parsed. 73 @exception FtpDirLineParserError Raised if the mode cannot be parsed.
74 """ 74 """
75 if len(modeString) != 10: 75 if len(modeString) != 10:
76 raise FtpDirLineParserError( 76 raise FtpDirLineParserError(
77 "invalid mode string '{0}'".format(modeString)) 77 "invalid mode string '{0}'".format(modeString))
78 78
79 modeString = modeString.lower() 79 modeString = modeString.lower()
80 80
81 permission = 0 81 permission = 0
82 if modeString[1] != '-': 82 if modeString[1] != '-':
83 permission |= E5UrlPermission.READ_OWNER 83 permission |= EricUrlPermission.READ_OWNER
84 if modeString[2] != '-': 84 if modeString[2] != '-':
85 permission |= E5UrlPermission.WRITE_OWNER 85 permission |= EricUrlPermission.WRITE_OWNER
86 if modeString[3] != '-': 86 if modeString[3] != '-':
87 permission |= E5UrlPermission.EXE_OWNER 87 permission |= EricUrlPermission.EXE_OWNER
88 if modeString[4] != '-': 88 if modeString[4] != '-':
89 permission |= E5UrlPermission.READ_GROUP 89 permission |= EricUrlPermission.READ_GROUP
90 if modeString[5] != '-': 90 if modeString[5] != '-':
91 permission |= E5UrlPermission.WRITE_GROUP 91 permission |= EricUrlPermission.WRITE_GROUP
92 if modeString[6] != '-': 92 if modeString[6] != '-':
93 permission |= E5UrlPermission.EXE_GROUP 93 permission |= EricUrlPermission.EXE_GROUP
94 if modeString[7] != '-': 94 if modeString[7] != '-':
95 permission |= E5UrlPermission.READ_OTHER 95 permission |= EricUrlPermission.READ_OTHER
96 if modeString[8] != '-': 96 if modeString[8] != '-':
97 permission |= E5UrlPermission.WRITE_OTHER 97 permission |= EricUrlPermission.WRITE_OTHER
98 if modeString[9] != '-': 98 if modeString[9] != '-':
99 permission |= E5UrlPermission.EXE_OTHER 99 permission |= EricUrlPermission.EXE_OTHER
100 urlInfo.setPermissions(permission) 100 urlInfo.setPermissions(permission)
101 101
102 if modeString[0] == "d": 102 if modeString[0] == "d":
103 urlInfo.setDir(True) 103 urlInfo.setDir(True)
104 urlInfo.setFile(False) 104 urlInfo.setFile(False)
126 </ul> 126 </ul>
127 127
128 @param monthAbbreviation abbreviation of the month name (string) 128 @param monthAbbreviation abbreviation of the month name (string)
129 @param day day of the month (string) 129 @param day day of the month (string)
130 @param yearOrTime string giving the year or a time (string) 130 @param yearOrTime string giving the year or a time (string)
131 @param urlInfo reference to the URL info object (E5UrlInfo) 131 @param urlInfo reference to the URL info object (EricUrlInfo)
132 @exception FtpDirLineParserError Raised if the month abbreviation is 132 @exception FtpDirLineParserError Raised if the month abbreviation is
133 not recognized. 133 not recognized.
134 """ 134 """
135 try: 135 try:
136 month = FtpDirLineParser.MonthnamesNumbers[ 136 month = FtpDirLineParser.MonthnamesNumbers[
194 def __parseUnixLine(self, line): 194 def __parseUnixLine(self, line):
195 """ 195 """
196 Private method to parse a Unix style directory listing line. 196 Private method to parse a Unix style directory listing line.
197 197
198 @param line directory line to be parsed (string) 198 @param line directory line to be parsed (string)
199 @return URL info object containing the valid data (E5UrlInfo) 199 @return URL info object containing the valid data (EricUrlInfo)
200 """ 200 """
201 modeString, nlink, user, group, size, month, day, yearOrTime, name = ( 201 modeString, nlink, user, group, size, month, day, yearOrTime, name = (
202 self.__splitUnixLine(line) 202 self.__splitUnixLine(line)
203 ) 203 )
204 204
205 if name in [".", ".."]: 205 if name in [".", ".."]:
206 return None 206 return None
207 207
208 urlInfo = E5UrlInfo() 208 urlInfo = EricUrlInfo()
209 self.__parseUnixMode(modeString, urlInfo) 209 self.__parseUnixMode(modeString, urlInfo)
210 self.__parseUnixTime(month, day, yearOrTime, urlInfo) 210 self.__parseUnixTime(month, day, yearOrTime, urlInfo)
211 urlInfo.setOwner(user) 211 urlInfo.setOwner(user)
212 urlInfo.setGroup(group) 212 urlInfo.setGroup(group)
213 urlInfo.setSize(int(size)) 213 urlInfo.setSize(int(size))
228 have the format "10-23-12 03:25PM" (month-day_of_month-two_digit_year, 228 have the format "10-23-12 03:25PM" (month-day_of_month-two_digit_year,
229 hour:minute, am/pm). 229 hour:minute, am/pm).
230 230
231 @param date date string (string) 231 @param date date string (string)
232 @param time time string (string) 232 @param time time string (string)
233 @param urlInfo reference to the URL info object (E5UrlInfo) 233 @param urlInfo reference to the URL info object (EricUrlInfo)
234 @exception FtpDirLineParserError Raised if either of the strings is not 234 @exception FtpDirLineParserError Raised if either of the strings is not
235 recognized. 235 recognized.
236 """ 236 """
237 try: 237 try:
238 month, day, year = [int(part) for part in date.split('-')] 238 month, day, year = [int(part) for part in date.split('-')]
258 def __parseWindowsLine(self, line): 258 def __parseWindowsLine(self, line):
259 """ 259 """
260 Private method to parse a Windows style directory listing line. 260 Private method to parse a Windows style directory listing line.
261 261
262 @param line directory line to be parsed (string) 262 @param line directory line to be parsed (string)
263 @return URL info object containing the valid data (E5UrlInfo) 263 @return URL info object containing the valid data (EricUrlInfo)
264 @exception FtpDirLineParserError Raised if the line is not of a 264 @exception FtpDirLineParserError Raised if the line is not of a
265 recognized Windows format. 265 recognized Windows format.
266 """ 266 """
267 try: 267 try:
268 date, time, dirOrSize, name = line.split(None, 3) 268 date, time, dirOrSize, name = line.split(None, 3)
272 "line '{0}' cannot be parsed".format(line)) 272 "line '{0}' cannot be parsed".format(line))
273 273
274 if name in [".", ".."]: 274 if name in [".", ".."]:
275 return None 275 return None
276 276
277 urlInfo = E5UrlInfo() 277 urlInfo = EricUrlInfo()
278 self.__parseWindowsTime(date, time, urlInfo) 278 self.__parseWindowsTime(date, time, urlInfo)
279 if dirOrSize.lower() == "<dir>": 279 if dirOrSize.lower() == "<dir>":
280 urlInfo.setDir(True) 280 urlInfo.setDir(True)
281 urlInfo.setFile(False) 281 urlInfo.setFile(False)
282 else: 282 else:
291 291
292 ext = os.path.splitext(name.lower())[1] 292 ext = os.path.splitext(name.lower())[1]
293 urlInfo.setSymLink(ext == ".lnk") 293 urlInfo.setSymLink(ext == ".lnk")
294 294
295 permissions = ( 295 permissions = (
296 E5UrlPermission.READ_OWNER | E5UrlPermission.WRITE_OWNER | 296 EricUrlPermission.READ_OWNER | EricUrlPermission.WRITE_OWNER |
297 E5UrlPermission.READ_GROUP | E5UrlPermission.WRITE_GROUP | 297 EricUrlPermission.READ_GROUP | EricUrlPermission.WRITE_GROUP |
298 E5UrlPermission.READ_OTHER | E5UrlPermission.WRITE_OTHER 298 EricUrlPermission.READ_OTHER | EricUrlPermission.WRITE_OTHER
299 ) 299 )
300 if ext in [".exe", ".com", ".bat", ".cmd"]: 300 if ext in [".exe", ".com", ".bat", ".cmd"]:
301 permissions |= ( 301 permissions |= (
302 E5UrlPermission.EXE_OWNER | 302 EricUrlPermission.EXE_OWNER |
303 E5UrlPermission.EXE_GROUP | 303 EricUrlPermission.EXE_GROUP |
304 E5UrlPermission.EXE_OTHER 304 EricUrlPermission.EXE_OTHER
305 ) 305 )
306 urlInfo.setPermissions(permissions) 306 urlInfo.setPermissions(permissions)
307 307
308 return urlInfo 308 return urlInfo
309 309
314 This implementation support Unix and Windows style directory 314 This implementation support Unix and Windows style directory
315 listings. It tries Unix style first and if that fails switches 315 listings. It tries Unix style first and if that fails switches
316 to Windows style. If that fails as well, an exception is raised. 316 to Windows style. If that fails as well, an exception is raised.
317 317
318 @param line directory line to be parsed (string) 318 @param line directory line to be parsed (string)
319 @return URL info object containing the valid data (E5UrlInfo) 319 @return URL info object containing the valid data (EricUrlInfo)
320 """ 320 """
321 if self.__ignoreLine(line): 321 if self.__ignoreLine(line):
322 return None 322 return None
323 323
324 try: 324 try:

eric ide

mercurial