Source code for handtruck.exceptions

 1import types
 2
 3import httpx
 4
 5
[docs] 6class ConflictError(Exception): 7 """ 8 There was a conflict in a multipart operation. 9 """
10 11 12# FIXME: Subclassing httpx.HTTPStatusError would be more appropriate 13# Or maybe just not subclassing any error 14
[docs] 15class S3Error(httpx.HTTPError): 16 """ 17 Parent class for errors reported by the server 18 """ 19 request: httpx.Request 20 response: httpx.Response 21 22 def __init__(self, message, resource: str|None = None, request_id: str|None = None, **props): 23 super().__init__(message) 24 self.resource = resource 25 self.request_id = request_id 26 vars(self).update(props) 27 28 if resource: 29 self.add_note(f"resource: {resource}") 30 if request_id: 31 self.add_note(f"request_id: {request_id}") 32 33 for name, value in sorted(props.items()): 34 self.add_note(f"{name}: {value}")
35 36 37def __getattr__(name): 38 """ 39 Generate an exception for the error returned by the server. 40 """ 41 if name in ('AwsError', 'AwsUploadError', 'AwsDownloadError'): 42 raise AttributeError(f"Exception {name} has been removed") 43 44 def body(ns): 45 ns['__module__'] = __name__ 46 ns['__qualname__'] = name 47 48 cls = types.new_class( 49 name, 50 (S3Error,), 51 {}, 52 body 53 ) 54 globals()[name] = cls 55 return cls