Merge pull request #476 from seemethere/inject_app_into_request
Inject app into request object
This commit is contained in:
commit
d015d6b103
@ -360,6 +360,8 @@ class Sanic:
|
|||||||
# Request Middleware
|
# Request Middleware
|
||||||
# -------------------------------------------- #
|
# -------------------------------------------- #
|
||||||
|
|
||||||
|
request.app = self
|
||||||
|
|
||||||
response = False
|
response = False
|
||||||
# The if improves speed. I don't know why
|
# The if improves speed. I don't know why
|
||||||
if self.request_middleware:
|
if self.request_middleware:
|
||||||
|
@ -36,7 +36,7 @@ class RequestParameters(dict):
|
|||||||
class Request(dict):
|
class Request(dict):
|
||||||
"""Properties of an HTTP request such as URL, headers, etc."""
|
"""Properties of an HTTP request such as URL, headers, etc."""
|
||||||
__slots__ = (
|
__slots__ = (
|
||||||
'url', 'headers', 'version', 'method', '_cookies', 'transport',
|
'app', 'url', 'headers', 'version', 'method', '_cookies', 'transport',
|
||||||
'query_string', 'body',
|
'query_string', 'body',
|
||||||
'parsed_json', 'parsed_args', 'parsed_form', 'parsed_files',
|
'parsed_json', 'parsed_args', 'parsed_form', 'parsed_files',
|
||||||
'_ip',
|
'_ip',
|
||||||
@ -45,6 +45,7 @@ class Request(dict):
|
|||||||
def __init__(self, url_bytes, headers, version, method, transport):
|
def __init__(self, url_bytes, headers, version, method, transport):
|
||||||
# TODO: Content-Encoding detection
|
# TODO: Content-Encoding detection
|
||||||
url_parsed = parse_url(url_bytes)
|
url_parsed = parse_url(url_bytes)
|
||||||
|
self.app = None
|
||||||
self.url = url_parsed.path.decode('utf-8')
|
self.url = url_parsed.path.decode('utf-8')
|
||||||
self.headers = headers
|
self.headers = headers
|
||||||
self.version = version
|
self.version = version
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import random
|
||||||
|
|
||||||
from sanic import Sanic
|
from sanic import Sanic
|
||||||
from sanic.response import json
|
from sanic.response import json
|
||||||
from ujson import loads
|
from ujson import loads
|
||||||
@ -14,10 +16,28 @@ def test_storage():
|
|||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
def handler(request):
|
def handler(request):
|
||||||
return json({ 'user': request.get('user'), 'sidekick': request.get('sidekick') })
|
return json({'user': request.get('user'), 'sidekick': request.get('sidekick')})
|
||||||
|
|
||||||
request, response = app.test_client.get('/')
|
request, response = app.test_client.get('/')
|
||||||
|
|
||||||
response_json = loads(response.text)
|
response_json = loads(response.text)
|
||||||
assert response_json['user'] == 'sanic'
|
assert response_json['user'] == 'sanic'
|
||||||
assert response_json.get('sidekick') is None
|
assert response_json.get('sidekick') is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_app_injection():
|
||||||
|
app = Sanic('test_app_injection')
|
||||||
|
expected = random.choice(range(0, 100))
|
||||||
|
|
||||||
|
@app.listener('after_server_start')
|
||||||
|
async def inject_data(app, loop):
|
||||||
|
app.injected = expected
|
||||||
|
|
||||||
|
@app.get('/')
|
||||||
|
async def handler(request):
|
||||||
|
return json({'injected': request.app.injected})
|
||||||
|
|
||||||
|
request, response = app.test_client.get('/')
|
||||||
|
|
||||||
|
response_json = loads(response.text)
|
||||||
|
assert response_json['injected'] == expected
|
||||||
|
Loading…
x
Reference in New Issue
Block a user