kopia lustrzana https://github.com/simonw/datasette
Request.fake(... url_vars), plus .fake() is now documented
Also made 'from datasette import Request' shortcut work. Closes #1697pull/1703/head
rodzic
e73fa72917
commit
5c5e9b3657
|
@ -1,5 +1,5 @@
|
||||||
from datasette.version import __version_info__, __version__ # noqa
|
from datasette.version import __version_info__, __version__ # noqa
|
||||||
from datasette.utils.asgi import Forbidden, NotFound, Response # noqa
|
from datasette.utils.asgi import Forbidden, NotFound, Request, Response # noqa
|
||||||
from datasette.utils import actor_matches_allow # noqa
|
from datasette.utils import actor_matches_allow # noqa
|
||||||
from .hookspecs import hookimpl # noqa
|
from .hookspecs import hookimpl # noqa
|
||||||
from .hookspecs import hookspec # noqa
|
from .hookspecs import hookspec # noqa
|
||||||
|
|
|
@ -118,7 +118,7 @@ class Request:
|
||||||
return dict(parse_qsl(body.decode("utf-8"), keep_blank_values=True))
|
return dict(parse_qsl(body.decode("utf-8"), keep_blank_values=True))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def fake(cls, path_with_query_string, method="GET", scheme="http"):
|
def fake(cls, path_with_query_string, method="GET", scheme="http", url_vars=None):
|
||||||
"""Useful for constructing Request objects for tests"""
|
"""Useful for constructing Request objects for tests"""
|
||||||
path, _, query_string = path_with_query_string.partition("?")
|
path, _, query_string = path_with_query_string.partition("?")
|
||||||
scope = {
|
scope = {
|
||||||
|
@ -130,6 +130,8 @@ class Request:
|
||||||
"scheme": scheme,
|
"scheme": scheme,
|
||||||
"type": "http",
|
"type": "http",
|
||||||
}
|
}
|
||||||
|
if url_vars:
|
||||||
|
scope["url_route"] = {"kwargs": url_vars}
|
||||||
return cls(scope, None)
|
return cls(scope, None)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,33 @@ The object also has two awaitable methods:
|
||||||
``await request.post_body()`` - bytes
|
``await request.post_body()`` - bytes
|
||||||
Returns the un-parsed body of a request submitted by ``POST`` - useful for things like incoming JSON data.
|
Returns the un-parsed body of a request submitted by ``POST`` - useful for things like incoming JSON data.
|
||||||
|
|
||||||
|
And a class method that can be used to create fake request objects for use in tests:
|
||||||
|
|
||||||
|
``fake(path_with_query_string, method="GET", scheme="http", url_vars=None)``
|
||||||
|
Returns a ``Request`` instance for the specified path and method. For example:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from datasette import Request
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
request = Request.fake("/fixtures/facetable/", url_vars={
|
||||||
|
"database": "fixtures",
|
||||||
|
"table": "facetable"
|
||||||
|
})
|
||||||
|
pprint(request.scope)
|
||||||
|
|
||||||
|
This outputs::
|
||||||
|
|
||||||
|
{'http_version': '1.1',
|
||||||
|
'method': 'GET',
|
||||||
|
'path': '/fixtures/facetable/',
|
||||||
|
'query_string': b'',
|
||||||
|
'raw_path': b'/fixtures/facetable/',
|
||||||
|
'scheme': 'http',
|
||||||
|
'type': 'http',
|
||||||
|
'url_route': {'kwargs': {'database': 'fixtures', 'table': 'facetable'}}}
|
||||||
|
|
||||||
.. _internals_multiparams:
|
.. _internals_multiparams:
|
||||||
|
|
||||||
The MultiParams class
|
The MultiParams class
|
||||||
|
|
|
@ -75,6 +75,13 @@ def test_request_args():
|
||||||
request.args["missing"]
|
request.args["missing"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_request_fake_url_vars():
|
||||||
|
request = Request.fake("/")
|
||||||
|
assert request.url_vars == {}
|
||||||
|
request = Request.fake("/", url_vars={"database": "fixtures"})
|
||||||
|
assert request.url_vars == {"database": "fixtures"}
|
||||||
|
|
||||||
|
|
||||||
def test_request_repr():
|
def test_request_repr():
|
||||||
request = Request.fake("/foo?multi=1&multi=2&single=3")
|
request = Request.fake("/foo?multi=1&multi=2&single=3")
|
||||||
assert (
|
assert (
|
||||||
|
|
Ładowanie…
Reference in New Issue