kopia lustrzana https://github.com/cirospaciari/socketify.py
add preserve to clone info in AppRequest
rodzic
7b576cbee1
commit
d589d8b9f1
|
@ -15,8 +15,7 @@ class User:
|
|||
class Query:
|
||||
@strawberry.field
|
||||
def user(self) -> Optional[User]:
|
||||
# self.context is an dict with headers, query, and params properties
|
||||
# headers and query are dict and params an array with route parameters
|
||||
# self.context is the AppRequest
|
||||
return User(name="Hello")
|
||||
|
||||
|
||||
|
|
|
@ -22,11 +22,7 @@ schema = strawberry.Schema(Query)
|
|||
|
||||
async def graphiql_post(res, req):
|
||||
# we can pass whatever we want to context, query, headers or params, cookies etc
|
||||
context_value = {
|
||||
"query": req.get_queries(),
|
||||
"headers": req.get_headers(),
|
||||
"params": req.get_parameters()
|
||||
}
|
||||
context_value = req.preserve()
|
||||
|
||||
# get all incomming data and parses as json
|
||||
body = await res.get_json()
|
||||
|
|
|
@ -118,13 +118,8 @@ def middleware(*functions):
|
|||
if inspect.iscoroutinefunction(function):
|
||||
#in async query string, arguments and headers are only valid until the first await
|
||||
if not some_async_as_run:
|
||||
#get_headers will preserve headers (and cookies) inside req, after await
|
||||
headers = req.get_headers()
|
||||
#get_parameters will preserve all params inside req after await
|
||||
params = req.get_parameters()
|
||||
#get queries will preserve all queries inside req after await
|
||||
queries = req.get_queries()
|
||||
#mark to only grab header, params and queries one time
|
||||
#preserve queries, headers, parameters, url, full_url and method
|
||||
req.preserve()
|
||||
some_async_as_run = True
|
||||
data = await function(res, req, data)
|
||||
else:
|
||||
|
|
|
@ -867,6 +867,9 @@ class AppRequest:
|
|||
self._headers = None
|
||||
self._params = None
|
||||
self._query = None
|
||||
self._url = None
|
||||
self._full_url = None
|
||||
self._method = None
|
||||
|
||||
|
||||
def get_cookie(self, name):
|
||||
|
@ -891,28 +894,37 @@ class AppRequest:
|
|||
return None
|
||||
|
||||
def get_url(self):
|
||||
if self._url:
|
||||
return self._url
|
||||
buffer = ffi.new("char**")
|
||||
length = lib.uws_req_get_url(self.req, buffer)
|
||||
buffer_address = ffi.addressof(buffer, 0)[0]
|
||||
if buffer_address == ffi.NULL:
|
||||
return None
|
||||
try:
|
||||
return ffi.unpack(buffer_address, length).decode("utf-8")
|
||||
self._url = ffi.unpack(buffer_address, length).decode("utf-8")
|
||||
return self._url
|
||||
except Exception: #invalid utf-8
|
||||
return None
|
||||
|
||||
def get_full_url(self):
|
||||
if self._full_url:
|
||||
return self._full_url
|
||||
buffer = ffi.new("char**")
|
||||
length = lib.uws_req_get_full_url(self.req, buffer)
|
||||
buffer_address = ffi.addressof(buffer, 0)[0]
|
||||
if buffer_address == ffi.NULL:
|
||||
return None
|
||||
try:
|
||||
return ffi.unpack(buffer_address, length).decode("utf-8")
|
||||
self._full_url = ffi.unpack(buffer_address, length).decode("utf-8")
|
||||
return self._full_url
|
||||
except Exception: #invalid utf-8
|
||||
return None
|
||||
|
||||
|
||||
def get_method(self):
|
||||
if self._method:
|
||||
return self._method
|
||||
buffer = ffi.new("char**")
|
||||
#will use uws_req_get_case_sensitive_method until version v21 and switch back to uws_req_get_method for 0 impacts on behavior
|
||||
length = lib.uws_req_get_case_sensitive_method(self.req, buffer)
|
||||
|
@ -921,7 +933,8 @@ class AppRequest:
|
|||
return None
|
||||
|
||||
try:
|
||||
return ffi.unpack(buffer_address, length).decode("utf-8")
|
||||
self._method = ffi.unpack(buffer_address, length).decode("utf-8")
|
||||
return self._method
|
||||
except Exception: #invalid utf-8
|
||||
return None
|
||||
|
||||
|
@ -1023,6 +1036,14 @@ class AppRequest:
|
|||
return ffi.unpack(buffer_address, length).decode("utf-8")
|
||||
except Exception: #invalid utf-8
|
||||
return None
|
||||
def preserve(self):
|
||||
#preserve queries, headers, parameters, method, url and full url
|
||||
self.get_queries() #queries calls url and full_url so its preserved
|
||||
self.get_headers()
|
||||
self.get_parameters()
|
||||
self.get_method()
|
||||
return self
|
||||
|
||||
def set_yield(self, has_yield):
|
||||
lib.uws_req_set_field(self.req, 1 if has_yield else 0)
|
||||
def get_yield(self):
|
||||
|
|
Ładowanie…
Reference in New Issue