# Copyright (c) 2013 CEF Python, see the Authors file.# All rights reserved. Licensed under BSD 3-clause license.# Project website: https://github.com/cztomczak/cefpythoninclude "cefpython.pyx"import weakrefcdef object g_pyWebRequests = weakref.WeakValueDictionary()cdef int g_webRequestMaxId = 0# -----------------------------------------------------------------------------# WebRequest# -----------------------------------------------------------------------------# Static methods are not allowed in cdef classes,# that's why we need a wrapper for PyWebRequest.class WebRequest:Status = {"Unknown": cef_types.UR_UNKNOWN,"Success": cef_types.UR_SUCCESS,"Pending": cef_types.UR_IO_PENDING,"Canceled": cef_types.UR_CANCELED,"Failed": cef_types.UR_FAILED,}def __init__(self):raise Exception("You cannot instantiate WebRequest directly, ""use WebRequest.CreateWebRequest() static method")@staticmethoddef ValidateClient(webRequestClient):cdef list methods = ["OnRequestComplete", "OnUploadProgress","OnDownloadProgress", "OnDownloadData"]for method in methods:if webRequestClient and hasattr(webRequestClient, method) \and callable(getattr(webRequestClient, method)):# Okay.continueelse:raise Exception("WebRequestClient object is missing method: " \"%s" % method)@staticmethoddef Create(request, webRequestClient):if not isinstance(request, PyRequest):raise Exception("Invalid request object")WebRequest.ValidateClient(webRequestClient)return CreatePyWebRequest(request, webRequestClient)# -----------------------------------------------------------------------------# PyWebRequest# -----------------------------------------------------------------------------cdef PyWebRequest CreatePyWebRequest(PyRequest request,object webRequestClient):global g_pyWebRequestscdef PyWebRequest webRequest = PyWebRequest(request, webRequestClient)assert webRequest.webRequestId, "webRequest.webRequestId empty"g_pyWebRequests[webRequest.webRequestId] = webRequestreturn webRequestcdef PyWebRequest GetPyWebRequest(int webRequestId):global g_pyWebRequestsif webRequestId in g_pyWebRequests:return g_pyWebRequests[webRequestId]return Nonecdef class PyWebRequest:cdef object __weakref__ # see g_pyWebRequestscdef int webRequestIdcdef CefRefPtr[CefURLRequest] cefWebRequestcdef object pyWebRequestClientdef __init__(self, PyRequest pyRequest, object pyWebRequestClient):global g_webRequestMaxIdg_webRequestMaxId += 1self.webRequestId = g_webRequestMaxIdcdef CefRefPtr[WebRequestClient] cppWebRequestClient = (<CefRefPtr[WebRequestClient]?>new WebRequestClient(self.webRequestId))self.pyWebRequestClient = pyWebRequestClientself.cefWebRequest = <CefRefPtr[CefURLRequest]?>(CefURLRequest_Create(pyRequest.cefRequest,<CefRefPtr[CefURLRequestClient]?>cppWebRequestClient,<CefRefPtr[CefRequestContext]?>NULL))cdef object GetCallback(self, str funcName):if hasattr(self.pyWebRequestClient, funcName) and (callable(getattr(self.pyWebRequestClient, funcName))):return getattr(self.pyWebRequestClient, funcName)cpdef PyRequest GetRequest(self):cdef CefRefPtr[CefRequest] cefRequest = \self.cefWebRequest.get().GetRequest()cdef PyRequest pyRequest = CreatePyRequest(cefRequest)return pyRequestcpdef int GetRequestStatus(self) except *:return self.cefWebRequest.get().GetRequestStatus()cpdef int GetRequestError(self) except *:return self.cefWebRequest.get().GetRequestError()cpdef PyResponse GetResponse(self):cdef CefRefPtr[CefResponse] cefResponse = \self.cefWebRequest.get().GetResponse()cdef PyResponse pyResponse# CefResponse may be NULL.if cefResponse.get():pyResponse = CreatePyResponse(cefResponse)return pyResponsereturn Nonecpdef py_void Cancel(self):self.cefWebRequest.get().Cancel()# -----------------------------------------------------------------------------# WebRequestClient# -----------------------------------------------------------------------------cdef public void WebRequestClient_OnUploadProgress(int webRequestId,CefRefPtr[CefURLRequest] cefWebRequest,int64 current,int64 total) except * with gil:cdef PyWebRequest webRequestcdef object userCallbacktry:webRequest = GetPyWebRequest(webRequestId)if webRequest:userCallback = webRequest.GetCallback("OnUploadProgress")if userCallback:userCallback(web_request=webRequest,current=current,total=total)except:(exc_type, exc_value, exc_trace) = sys.exc_info()sys.excepthook(exc_type, exc_value, exc_trace)cdef public void WebRequestClient_OnDownloadProgress(int webRequestId,CefRefPtr[CefURLRequest] cefWebRequest,int64 current,int64 total) except * with gil:cdef PyWebRequest webRequestcdef object userCallbacktry:webRequest = GetPyWebRequest(webRequestId)if webRequest:userCallback = webRequest.GetCallback("OnDownloadProgress")if userCallback:userCallback(web_request=webRequest,current=current,total=total)except:(exc_type, exc_value, exc_trace) = sys.exc_info()sys.excepthook(exc_type, exc_value, exc_trace)cdef public void WebRequestClient_OnDownloadData(int webRequestId,CefRefPtr[CefURLRequest] cefWebRequest,const void* data,size_t dataLength) except * with gil:cdef PyWebRequest webRequestcdef object userCallbacktry:webRequest = GetPyWebRequest(webRequestId)if webRequest:userCallback = webRequest.GetCallback("OnDownloadData")if userCallback:userCallback(web_request=webRequest,data=VoidPtrToBytes(data, dataLength))except:(exc_type, exc_value, exc_trace) = sys.exc_info()sys.excepthook(exc_type, exc_value, exc_trace)cdef public void WebRequestClient_OnRequestComplete(int webRequestId,CefRefPtr[CefURLRequest] cefWebRequest) except * with gil:cdef PyWebRequest webRequestcdef object userCallbacktry:webRequest = GetPyWebRequest(webRequestId)if webRequest:userCallback = webRequest.GetCallback("OnRequestComplete")if userCallback:userCallback(web_request=webRequest)except:(exc_type, exc_value, exc_trace) = sys.exc_info()sys.excepthook(exc_type, exc_value, exc_trace)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。