diff options
Diffstat (limited to 'venv/lib/python3.11/site-packages/uvloop/errors.pyx')
-rw-r--r-- | venv/lib/python3.11/site-packages/uvloop/errors.pyx | 113 |
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) |