summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/uvloop/errors.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/uvloop/errors.pyx')
-rw-r--r--venv/lib/python3.11/site-packages/uvloop/errors.pyx113
1 files changed, 113 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/uvloop/errors.pyx b/venv/lib/python3.11/site-packages/uvloop/errors.pyx
new file mode 100644
index 0000000..d810d65
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/uvloop/errors.pyx
@@ -0,0 +1,113 @@
+cdef str __strerr(int errno):
+ return strerror(errno).decode()
+
+
+cdef __convert_python_error(int uverr):
+ # XXX Won't work for Windows:
+ # From libuv docs:
+ # Implementation detail: on Unix error codes are the
+ # negated errno (or -errno), while on Windows they
+ # are defined by libuv to arbitrary negative numbers.
+ cdef int oserr = -uverr
+
+ exc = OSError
+
+ if uverr in (uv.UV_EACCES, uv.UV_EPERM):
+ exc = PermissionError
+
+ elif uverr in (uv.UV_EAGAIN, uv.UV_EALREADY):
+ exc = BlockingIOError
+
+ elif uverr in (uv.UV_EPIPE, uv.UV_ESHUTDOWN):
+ exc = BrokenPipeError
+
+ elif uverr == uv.UV_ECONNABORTED:
+ exc = ConnectionAbortedError
+
+ elif uverr == uv.UV_ECONNREFUSED:
+ exc = ConnectionRefusedError
+
+ elif uverr == uv.UV_ECONNRESET:
+ exc = ConnectionResetError
+
+ elif uverr == uv.UV_EEXIST:
+ exc = FileExistsError
+
+ elif uverr == uv.UV_ENOENT:
+ exc = FileNotFoundError
+
+ elif uverr == uv.UV_EINTR:
+ exc = InterruptedError
+
+ elif uverr == uv.UV_EISDIR:
+ exc = IsADirectoryError
+
+ elif uverr == uv.UV_ESRCH:
+ exc = ProcessLookupError
+
+ elif uverr == uv.UV_ETIMEDOUT:
+ exc = TimeoutError
+
+ return exc(oserr, __strerr(oserr))
+
+
+cdef int __convert_socket_error(int uverr):
+ cdef int sock_err = 0
+
+ if uverr == uv.UV_EAI_ADDRFAMILY:
+ sock_err = socket_EAI_ADDRFAMILY
+
+ elif uverr == uv.UV_EAI_AGAIN:
+ sock_err = socket_EAI_AGAIN
+
+ elif uverr == uv.UV_EAI_BADFLAGS:
+ sock_err = socket_EAI_BADFLAGS
+
+ elif uverr == uv.UV_EAI_BADHINTS:
+ sock_err = socket_EAI_BADHINTS
+
+ elif uverr == uv.UV_EAI_CANCELED:
+ sock_err = socket_EAI_CANCELED
+
+ elif uverr == uv.UV_EAI_FAIL:
+ sock_err = socket_EAI_FAIL
+
+ elif uverr == uv.UV_EAI_FAMILY:
+ sock_err = socket_EAI_FAMILY
+
+ elif uverr == uv.UV_EAI_MEMORY:
+ sock_err = socket_EAI_MEMORY
+
+ elif uverr == uv.UV_EAI_NODATA:
+ sock_err = socket_EAI_NODATA
+
+ elif uverr == uv.UV_EAI_NONAME:
+ sock_err = socket_EAI_NONAME
+
+ elif uverr == uv.UV_EAI_OVERFLOW:
+ sock_err = socket_EAI_OVERFLOW
+
+ elif uverr == uv.UV_EAI_PROTOCOL:
+ sock_err = socket_EAI_PROTOCOL
+
+ elif uverr == uv.UV_EAI_SERVICE:
+ sock_err = socket_EAI_SERVICE
+
+ elif uverr == uv.UV_EAI_SOCKTYPE:
+ sock_err = socket_EAI_SOCKTYPE
+
+ return sock_err
+
+
+cdef convert_error(int uverr):
+ cdef int sock_err
+
+ if uverr == uv.UV_ECANCELED:
+ return aio_CancelledError()
+
+ sock_err = __convert_socket_error(uverr)
+ if sock_err:
+ msg = system.gai_strerror(sock_err).decode('utf-8')
+ return socket_gaierror(sock_err, msg)
+
+ return __convert_python_error(uverr)