|
3 | 3 |
|
4 | 4 | Authors: Rasmus Welander, Diogo Castro, Giuseppe Lo Presti. |
5 | 5 | |
6 | | -Last updated: 29/07/2024 |
| 6 | +Last updated: 02/08/2024 |
7 | 7 | """ |
8 | 8 |
|
9 | 9 | import time |
@@ -47,41 +47,40 @@ def _log_not_found_info(self, resource: Resource, res: any, operation: str) -> N |
47 | 47 | def _log_precondition_info(self, resource: Resource, res: any, operation: str) -> None: |
48 | 48 | self._log.info( |
49 | 49 | f'msg="Failed precondition on {operation}" {resource.get_file_ref_str()} ' |
50 | | - f'userid="{self._config.auth_client_id}" trace="{res.status.trace}"' |
| 50 | + f'userid="{self._config.auth_client_id}" trace="{res.status.trace}" ' |
51 | 51 | f'reason="{res.status.message.replace('"', "'")}"' |
52 | 52 | ) |
53 | 53 |
|
54 | 54 | def _log_authentication_error(self, resource: Resource, res: any, operation: str) -> None: |
55 | 55 | self._log.error( |
56 | 56 | f'msg="Authentication failed on {operation}" {resource.get_file_ref_str()} ' |
57 | | - f'userid="{self._config.auth_client_id}" trace="{res.status.trace}"' |
| 57 | + f'userid="{self._config.auth_client_id}" trace="{res.status.trace}" ' |
58 | 58 | f'reason="{res.status.message.replace('"', "'")}"' |
59 | 59 | ) |
60 | 60 |
|
61 | 61 | def _log_unknown_error(self, resource: Resource, res: any, operation: str) -> None: |
62 | 62 | self._log.error( |
63 | 63 | f'msg="Failed to {operation}, unknown error" {resource.get_file_ref_str()} ' |
64 | | - f'userid="{self._config.auth_client_id}" trace="{res.status.trace}"' |
| 64 | + f'userid="{self._config.auth_client_id}" trace="{res.status.trace}" ' |
65 | 65 | f'reason="{res.status.message.replace('"', "'")}"' |
66 | 66 | ) |
67 | 67 |
|
68 | | - def _handle_errors(self, resource: Resource, res: any, operation: str, msg: str = "") -> None: |
| 68 | + def _handle_errors(self, resource: Resource, res: any, operation: str) -> None: |
69 | 69 | if res.status.code == cs3code.CODE_NOT_FOUND: |
70 | 70 | self._log_not_found_info(resource, res, operation) |
71 | | - self._log.info(f'msg="Invoked {operation} on missing file" {resource.get_file_ref_str()}') |
72 | | - raise NotFoundException(message=msg) |
| 71 | + raise NotFoundException(message=f"No such file or directory: {res.status.message}") |
73 | 72 | if res.status.code in [cs3code.CODE_FAILED_PRECONDITION, cs3code.CODE_ABORTED]: |
74 | 73 | self._log_precondition_info(resource, res, operation) |
75 | | - raise FileLockedException(message=msg) |
| 74 | + raise FileLockedException(message=f"Lock mismatch or lock expired: {res.status.message}") |
76 | 75 | if res.status.code == cs3code.CODE_UNAUTHENTICATED: |
77 | 76 | self._log_authentication_error(resource, res, operation) |
78 | | - raise AuthenticationException(message=msg) |
| 77 | + raise AuthenticationException(message=f"Operation not permitted: {res.status.message}") |
79 | 78 | if res.status.code != cs3code.CODE_OK: |
80 | 79 | if "path not found" in str(res): |
81 | 80 | self._log.info(f'msg="Invoked {operation} on missing file" {resource.get_file_ref_str()}') |
82 | | - raise NotFoundException(message=msg) |
| 81 | + raise NotFoundException(message=f"No such file or directory: {res.status.message}") |
83 | 82 | self._log_unknown_error(resource, res, operation) |
84 | | - raise UnknownException(res.status.message) |
| 83 | + raise UnknownException(message=f"Unknown error: {res.status.message}") |
85 | 84 |
|
86 | 85 | def stat(self, resource: Resource) -> cs3spr.ResourceInfo: |
87 | 86 | """ |
@@ -154,7 +153,7 @@ def rename_file(self, resource: Resource, newresource: Resource) -> None: |
154 | 153 | """ |
155 | 154 | req = cs3sp.MoveRequest(source=resource.ref, destination=newresource.ref) |
156 | 155 | res = self._gateway.Move(request=req, metadata=[self._auth.get_token()]) |
157 | | - self._handle_errors(resource, res, "rename_file") |
| 156 | + self._handle_errors(resource, res, "rename file") |
158 | 157 | self._log.debug(f'msg="Invoked renamefile" result="{res}"') |
159 | 158 |
|
160 | 159 | def remove_file(self, resource: Resource) -> None: |
@@ -254,10 +253,10 @@ def write_file(self, resource: Resource, content: str | bytes, size: int) -> Non |
254 | 253 | self._log.info( |
255 | 254 | f'msg="Got conflict on PUT, file is locked" reason="{putres.reason}" {resource.get_file_ref_str()}' |
256 | 255 | ) |
257 | | - raise FileLockedException() |
| 256 | + raise FileLockedException(f"Lock mismatch or lock expired: {putres.reason}") |
258 | 257 | if putres.status_code == http.client.UNAUTHORIZED: |
259 | 258 | self._log_authentication_error(resource, putres, "write") |
260 | | - raise AuthenticationException() |
| 259 | + raise AuthenticationException(f"Operation not permitted: {putres.reason}") |
261 | 260 | if putres.status_code != http.client.OK: |
262 | 261 | if ( |
263 | 262 | size == 0 |
|
0 commit comments