WSGI reference
The ariadne.wsgi module exports the WSGI application and middleware:
GraphQL
class GraphQL:
...
WSGI application implementing the GraphQL server.
Constructor
def __init__(
self,
schema: GraphQLSchema,
*,
context_value: Optional[ContextValue],
root_value: Optional[RootValue],
query_parser: Optional[QueryParser],
query_validator: Optional[QueryValidator],
validation_rules: Optional[ValidationRules],
debug: bool,
introspection: bool,
explorer: Optional[Explorer],
logger: Optional[str],
error_formatter: ErrorFormatter,
execute_get_queries: bool,
extensions: Optional[Extensions],
middleware: Optional[Middlewares],
middleware_manager_class: Optional[Type[MiddlewareManager]],
execution_context_class: Optional[Type[ExecutionContext]],
):
...
Initializes the WSGI app.
Required arguments
schema: an instance of GraphQL schema to execute queries against.
Optional arguments
context_value: a ContextValue to use by this server for context.
Defaults to {"request": request} dictionary where request is
an WSGI environment dictionary.
root_value: a RootValue to use by this server for root value.
Defaults to None.
query_parser: a QueryParser to use by this server. Defaults to
graphql.parse.
query_validator: a QueryValidator to use by this server. Defaults to
graphql.validate.
validation_rules: a ValidationRules list or callable returning a
list of extra validation rules server should use to validate the
GraphQL queries. Defaults to None.
debug: a bool controlling in server should run in debug mode or
not. Controls details included in error data returned to clients.
Defaults to False.
introspection: a bool controlling if server should allow the
GraphQL introspection queries. If False, introspection queries will
fail to pass the validation. Defaults to True.
explorer: an instance of Explorer subclass to use when the server
receives an HTTP GET request. If not set, default GraphQL explorer
for your version of Ariadne is used.
logger: a str with name of logger or logger instance server
instance should use for logging errors. If not set, a logger named
ariadne is used.
error_formatter: an ErrorFormatter this server should use to format
GraphQL errors returned to clients. If not set, default formatter
implemented by Ariadne is used.
execute_get_queries: a bool that controls if query operations
sent using the GET method should be executed. Defaults to False.
extensions: an Extensions list or callable returning a
list of extensions server should use during query execution. Defaults
to no extensions.
middleware: a Middlewares list or callable returning a list of
middlewares server should use during query execution. Defaults to no
middlewares.
middleware_manager_class: a MiddlewareManager type or subclass to
use for combining provided middlewares into single wrapper for resolvers
by the server. Defaults to graphql.MiddlewareManager. Is only used
if extensions or middleware options are set.
execution_context_class: custom ExecutionContext type to use by
this server to execute the GraphQL queries. Defaults to standard
context type implemented by the graphql.
Methods
__call__
def __call__(self, environ: dict, start_response: Callable) -> List[bytes]:
...
An entrypoint to the WSGI application.
Returns list of bytes with response body.
Required arguments
environ: a WSGI environment dictionary.
start_response: a callable used to begin new HTTP response.
Details about the arguments and their usage are described in PEP 3333:
https://peps.python.org/pep-3333/
handle_graphql_error
def handle_graphql_error(
self,
error: GraphQLError,
start_response: Callable,
) -> List[bytes]:
...
Handles a GraphQLError raised from handle_request and returns an
error response to the client.
Returns list of bytes with response body.
Required arguments
error: a GraphQLError instance.
start_response: a callable used to begin new HTTP response.
handle_http_error
def handle_http_error(
self,
error: HttpError,
start_response: Callable,
) -> List[bytes]:
...
Handles a HttpError raised from handle_request and returns an
error response to the client.
Returns list of bytes with response body.
Required arguments
error: a HttpError instance.
start_response: a callable used to begin new HTTP response.
handle_request
def handle_request(
self,
environ: dict,
start_response: Callable,
) -> List[bytes]:
...
Handles WSGI HTTP request and returns a a response to the client.
Returns list of bytes with response body.
Required arguments
environ: a WSGI environment dictionary.
start_response: a callable used to begin new HTTP response.
handle_get
def handle_get(self, environ: dict, start_response) -> List[bytes]:
...
Handles WSGI HTTP GET request and returns a response to the client.
Returns list of bytes with response body.
Required arguments
environ: a WSGI environment dictionary.
start_response: a callable used to begin new HTTP response.
handle_get_query
def handle_get_query(
self,
environ: dict,
start_response,
query_params: dict,
) -> List[bytes]:
...
extract_data_from_get
def extract_data_from_get(self, query_params: dict) -> dict:
...
Extracts GraphQL data from GET request's querystring.
Returns a dict with GraphQL query data that was not yet validated.
Required arguments
query_params: a dict with parsed query string.
handle_get_explorer
def handle_get_explorer(self, environ: dict, start_response) -> List[bytes]:
...
Handles WSGI HTTP GET explorer request and returns a response to the client.
Returns list of bytes with response body.
Required arguments
environ: a WSGI environment dictionary.
start_response: a callable used to begin new HTTP response.
handle_post
def handle_post(self, environ: dict, start_response: Callable) -> List[bytes]:
...
Handles WSGI HTTP POST request and returns a a response to the client.
Returns list of bytes with response body.
Required arguments
environ: a WSGI environment dictionary.
start_response: a callable used to begin new HTTP response.
get_request_data
def get_request_data(self, environ: dict) -> dict:
...
Extracts GraphQL request data from request.
Returns a dict with GraphQL query data that was not yet validated.
Required arguments
environ: a WSGI environment dictionary.
extract_data_from_json_request
def extract_data_from_json_request(self, environ: dict) -> Any:
...
Extracts GraphQL data from JSON request.
Returns a dict with GraphQL query data that was not yet validated.
Required arguments
environ: a WSGI environment dictionary.
get_request_content_length
def get_request_content_length(self, environ: dict) -> int:
...
Validates and returns value from Content-length header.
Returns an int with content length.
Raises a HttpBadRequestError error if Content-length header is
missing or invalid.
Required arguments
environ: a WSGI environment dictionary.
get_request_body
def get_request_body(self, environ: dict, content_length: int) -> bytes:
...
Returns request's body.
Returns bytes with request body of specified length.
Raises a HttpBadRequestError error if request body is empty.
Required arguments
environ: a WSGI environment dictionary.
content_length: an int with content length.
extract_data_from_multipart_request
def extract_data_from_multipart_request(self, environ: dict) -> Any:
...
Extracts GraphQL data from multipart/form-data request.
Returns an unvalidated dict with GraphQL query data.
Required arguments
environ: a WSGI environment dictionary.
execute_query
def execute_query(self, environ: dict, data: dict) -> GraphQLResult:
...
Executes GraphQL query and returns its result.
Returns a GraphQLResult, a two items long tuple with bool for
success and JSON-serializable data to return to client.
Required arguments
environ: a WSGI environment dictionary.
data: a GraphQL data.
get_context_for_request
def get_context_for_request(
self,
environ: dict,
data: dict,
) -> Optional[ContextValue]:
...
Returns GraphQL context value for HTTP request.
Default ContextValue for WSGI application is a dict with single
request key that contains WSGI environment dictionary.
Required arguments
environ: a WSGI environment dictionary.
data: a GraphQL data.
get_extensions_for_request
def get_extensions_for_request(
self,
environ: dict,
context: Optional[ContextValue],
) -> ExtensionList:
...
Returns extensions to use when handling the GraphQL request.
Returns ExtensionList, a list of extensions to use or None.
Required arguments
environ: a WSGI environment dictionary.
context: a ContextValue for this request.
get_middleware_for_request
def get_middleware_for_request(
self,
environ: dict,
context: Optional[ContextValue],
) -> Optional[MiddlewareList]:
...
Returns GraphQL middlewares to use when handling the GraphQL request.
Returns MiddlewareList, a list of middlewares to use or None.
Required arguments
environ: a WSGI environment dictionary.
context: a ContextValue for this request.
return_response_from_result
def return_response_from_result(
self,
start_response: Callable,
result: GraphQLResult,
) -> List[bytes]:
...
Returns WSGI response from GraphQL result.
Returns a list of bytes with response body.
Required arguments
start_response: a WSGI callable that initiates new response.
result: a GraphQLResult for this request.
handle_not_allowed_method
def handle_not_allowed_method(
self,
environ: dict,
start_response: Callable,
) -> List[bytes]:
...
Handles request for unsupported HTTP method.
Returns 200 response for OPTIONS request and 405 response for other
methods. All responses have empty body.
Required arguments
environ: a WSGI environment dictionary.
start_response: a WSGI callable that initiates new response.
GraphQLMiddleware
class GraphQLMiddleware:
...
Simple WSGI middleware routing requests to either app or GraphQL.
Constructor
def __init__(
self,
app: Callable,
graphql_app: Callable,
path: str = '/graphql/',
):
...
Initializes the WSGI middleware.
Returns response from either application or GraphQL application
Required arguments
app: a WSGI application to route the request to if its path doesn't
match the path option.
graphql_app: a WSGI application to route the request to if its path
matches the path option.
Optional arguments
path: a str with a path to the GraphQL application. Defaults to
/graphql/.
Methods
__call__
def __call__(self, environ: dict, start_response: Callable) -> List[bytes]:
...
An entrypoint to the WSGI middleware.
Returns list of bytes with response body.
Required arguments
environ: a WSGI environment dictionary.
start_response: a callable used to start new HTTP response.
FormData
class FormData:
...
Feature-limited alternative of deprecated cgi standard package.
Holds the data from multipart/form-data request.
Attributes
charset: a string with charset extracted from Content-type header.
Defaults to latin-1.
fields: an dict with form's fields names and values.
files: an dict with form's files names and values.
Constructor
def __init__(self, content_type: Optional[str]):
...
Initializes form data instance.
Optional arguments
content_type: a string with content type header's value. If not
provided, latin-1 is used for content encoding.
Methods
parse_charset
def parse_charset(self, content_type: Optional[str]) -> Optional[str]:
...
Parses charset from Content-type header
Returns none if content_type is not provided, empty or missing the
charset= declaration.
Optional arguments
content_type: a string with content type header's value.
on_field
def on_field(self, field) -> None:
...
Callback for HTTP request parser to provide field data.
Field name and value is decoded using the encoding stored in encoding
attribute and stored in fields attribute.
on_file
def on_file(self, file) -> None:
...
Callback for HTTP request parser to provide file data.
File's field name is decoded using the encoding stored in encoding
attribute and stored in files attribute.
getvalue
def getvalue(self, field_name: str) -> str:
...
Get form field's value.
Returns field's value or empty string if field didn't exist.
Required arguments
field_name: a str with name of form field to return the value for.