# Copyright (c) 2012-2014 The CEF Python authors. All rights reserved.
# License: New BSD License.
# Website: http://code.google.com/p/cefpython/
include "cefpython.pyx"
import weakref
cdef 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")
@staticmethod
def 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.
continue
else:
raise Exception("WebRequestClient object is missing method: " \
"%s" % method)
@staticmethod
def 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_pyWebRequests
cdef PyWebRequest webRequest = PyWebRequest(request, webRequestClient)
assert webRequest.webRequestId, "webRequest.webRequestId empty"
g_pyWebRequests[webRequest.webRequestId] = webRequest
return webRequest
cdef PyWebRequest GetPyWebRequest(int webRequestId):
global g_pyWebRequests
if webRequestId in g_pyWebRequests:
return g_pyWebRequests[webRequestId]
return None
cdef class PyWebRequest:
cdef object __weakref__ # see g_pyWebRequests
cdef int webRequestId
cdef CefRefPtr[CefURLRequest] cefWebRequest
cdef object pyWebRequestClient
def __init__(self, PyRequest pyRequest, object pyWebRequestClient):
global g_webRequestMaxId
g_webRequestMaxId += 1
self.webRequestId = g_webRequestMaxId
cdef CefRefPtr[WebRequestClient] cppWebRequestClient = (