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:
|
class Query:
|
||||||
@strawberry.field
|
@strawberry.field
|
||||||
def user(self) -> Optional[User]:
|
def user(self) -> Optional[User]:
|
||||||
# self.context is an dict with headers, query, and params properties
|
# self.context is the AppRequest
|
||||||
# headers and query are dict and params an array with route parameters
|
|
||||||
return User(name="Hello")
|
return User(name="Hello")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,12 +22,8 @@ schema = strawberry.Schema(Query)
|
||||||
|
|
||||||
async def graphiql_post(res, req):
|
async def graphiql_post(res, req):
|
||||||
# we can pass whatever we want to context, query, headers or params, cookies etc
|
# we can pass whatever we want to context, query, headers or params, cookies etc
|
||||||
context_value = {
|
context_value = req.preserve()
|
||||||
"query": req.get_queries(),
|
|
||||||
"headers": req.get_headers(),
|
|
||||||
"params": req.get_parameters()
|
|
||||||
}
|
|
||||||
|
|
||||||
# get all incomming data and parses as json
|
# get all incomming data and parses as json
|
||||||
body = await res.get_json()
|
body = await res.get_json()
|
||||||
|
|
||||||
|
|
|
@ -118,13 +118,8 @@ def middleware(*functions):
|
||||||
if inspect.iscoroutinefunction(function):
|
if inspect.iscoroutinefunction(function):
|
||||||
#in async query string, arguments and headers are only valid until the first await
|
#in async query string, arguments and headers are only valid until the first await
|
||||||
if not some_async_as_run:
|
if not some_async_as_run:
|
||||||
#get_headers will preserve headers (and cookies) inside req, after await
|
#preserve queries, headers, parameters, url, full_url and method
|
||||||
headers = req.get_headers()
|
req.preserve()
|
||||||
#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
|
|
||||||
some_async_as_run = True
|
some_async_as_run = True
|
||||||
data = await function(res, req, data)
|
data = await function(res, req, data)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -867,6 +867,9 @@ class AppRequest:
|
||||||
self._headers = None
|
self._headers = None
|
||||||
self._params = None
|
self._params = None
|
||||||
self._query = None
|
self._query = None
|
||||||
|
self._url = None
|
||||||
|
self._full_url = None
|
||||||
|
self._method = None
|
||||||
|
|
||||||
|
|
||||||
def get_cookie(self, name):
|
def get_cookie(self, name):
|
||||||
|
@ -891,28 +894,37 @@ class AppRequest:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_url(self):
|
def get_url(self):
|
||||||
|
if self._url:
|
||||||
|
return self._url
|
||||||
buffer = ffi.new("char**")
|
buffer = ffi.new("char**")
|
||||||
length = lib.uws_req_get_url(self.req, buffer)
|
length = lib.uws_req_get_url(self.req, buffer)
|
||||||
buffer_address = ffi.addressof(buffer, 0)[0]
|
buffer_address = ffi.addressof(buffer, 0)[0]
|
||||||
if buffer_address == ffi.NULL:
|
if buffer_address == ffi.NULL:
|
||||||
return None
|
return None
|
||||||
try:
|
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
|
except Exception: #invalid utf-8
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_full_url(self):
|
def get_full_url(self):
|
||||||
|
if self._full_url:
|
||||||
|
return self._full_url
|
||||||
buffer = ffi.new("char**")
|
buffer = ffi.new("char**")
|
||||||
length = lib.uws_req_get_full_url(self.req, buffer)
|
length = lib.uws_req_get_full_url(self.req, buffer)
|
||||||
buffer_address = ffi.addressof(buffer, 0)[0]
|
buffer_address = ffi.addressof(buffer, 0)[0]
|
||||||
if buffer_address == ffi.NULL:
|
if buffer_address == ffi.NULL:
|
||||||
return None
|
return None
|
||||||
try:
|
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
|
except Exception: #invalid utf-8
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_method(self):
|
def get_method(self):
|
||||||
|
if self._method:
|
||||||
|
return self._method
|
||||||
buffer = ffi.new("char**")
|
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
|
#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)
|
length = lib.uws_req_get_case_sensitive_method(self.req, buffer)
|
||||||
|
@ -921,7 +933,8 @@ class AppRequest:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
try:
|
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
|
except Exception: #invalid utf-8
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -1023,6 +1036,14 @@ class AppRequest:
|
||||||
return ffi.unpack(buffer_address, length).decode("utf-8")
|
return ffi.unpack(buffer_address, length).decode("utf-8")
|
||||||
except Exception: #invalid utf-8
|
except Exception: #invalid utf-8
|
||||||
return None
|
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):
|
def set_yield(self, has_yield):
|
||||||
lib.uws_req_set_field(self.req, 1 if has_yield else 0)
|
lib.uws_req_set_field(self.req, 1 if has_yield else 0)
|
||||||
def get_yield(self):
|
def get_yield(self):
|
||||||
|
|
Ładowanie…
Reference in New Issue