from http import HTTPStatus from typing import Any, Dict, List, Optional, Union, cast import httpx from ...client import AuthenticatedClient, Client from ...types import Response, UNSET from ... import errors {% for relative in endpoint.relative_imports %} {{ relative }} {% endfor %} {% from "endpoint_macros.py.jinja" import header_params, cookie_params, query_params, json_body, multipart_body, arguments, client, kwargs, parse_response, docstring %} {% set return_string = endpoint.response_type() %} {% set parsed_responses = (endpoint.responses | length > 0) and return_string != "Any" %} def _get_kwargs( {{ arguments(endpoint) | indent(4) }} ) -> Dict[str, Any]: url = "{}{{ endpoint.path }}".format( _client.base_url {%- for parameter in endpoint.path_parameters.values() -%} ,{{parameter.name}}={{parameter.python_name}} {%- endfor -%} ) headers: Dict[str, str] = _client.get_headers() cookies: Dict[str, Any] = _client.get_cookies() {{ header_params(endpoint) | indent(4) }} {{ cookie_params(endpoint) | indent(4) }} {{ query_params(endpoint) | indent(4) }} {{ json_body(endpoint) | indent(4) }} {{ multipart_body(endpoint) | indent(4) }} return { "method": "{{ endpoint.method }}", "url": url, "headers": headers, "cookies": cookies, "timeout": _client.get_timeout(), {% if endpoint.form_body %} "data": form_data.to_dict(), {% elif endpoint.multipart_body %} "files": {{ "multipart_" + endpoint.multipart_body.python_name }}, {% elif endpoint.json_body %} "json": {{ "json_" + endpoint.json_body.python_name }}, {% endif %} {% if endpoint.query_parameters %} "params": params, {% endif %} } def _parse_response(*, client: Client, response: httpx.Response) -> Optional[{{ return_string }}]: {% for response in endpoint.responses %} if response.status_code == HTTPStatus.{{ response.status_code.name }}: {% if parsed_responses %}{% import "property_templates/" + response.prop.template as prop_template %} {% if prop_template.construct %} {{ prop_template.construct(response.prop, response.source) | indent(8) }} {% else %} {{ response.prop.python_name }} = cast({{ response.prop.get_type_string() }}, {{ response.source }}) {% endif %} return {{ response.prop.python_name }} {% else %} return None {% endif %} {% endfor %} if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(f"Unexpected status code: {response.status_code}") else: return None def _build_response(*, client: Client, response: httpx.Response) -> Response[{{ return_string }}]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, headers=response.headers, parsed=_parse_response(client=client, response=response), ) def sync_detailed( {{ arguments(endpoint) | indent(4) }} ) -> Response[{{ return_string }}]: {{ docstring(endpoint, return_string) | indent(4) }} kwargs = _get_kwargs( {{ kwargs(endpoint) }} ) response = httpx.request( verify=_client.verify_ssl, **kwargs, ) return _build_response(client=_client, response=response) {% if parsed_responses %} def sync( {{ arguments(endpoint) | indent(4) }} ) -> Optional[{{ return_string }}]: {{ docstring(endpoint, return_string) | indent(4) }} return sync_detailed( {{ kwargs(endpoint) }} ).parsed {% endif %} async def asyncio_detailed( {{ arguments(endpoint) | indent(4) }} ) -> Response[{{ return_string }}]: {{ docstring(endpoint, return_string) | indent(4) }} kwargs = _get_kwargs( {{ kwargs(endpoint) }} ) async with httpx.AsyncClient(verify=_client.verify_ssl) as __client: response = await __client.request( **kwargs ) return _build_response(client=_client, response=response) {% if parsed_responses %} async def asyncio( {{ arguments(endpoint) | indent(4) }} ) -> Optional[{{ return_string }}]: {{ docstring(endpoint, return_string) | indent(4) }} return (await asyncio_detailed( {{ kwargs(endpoint) }} )).parsed {% endif %}