12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # -*- coding: utf-8 -*-
- import json
- import typing
- from http import HTTPStatus
-
- from hapic.context import ContextInterface
- from hapic.exception import OutputValidationException
- from hapic.processor import RequestParameters, ProcessValidationError
-
- if typing.TYPE_CHECKING:
- from flask import Response
-
-
- class FlaskContext(ContextInterface):
- def get_request_parameters(self, *args, **kwargs) -> RequestParameters:
- from flask import request
- return RequestParameters(
- path_parameters=request.view_args,
- query_parameters=request.args, # TODO: Check
- body_parameters=request.get_json(), # TODO: Check
- form_parameters=request.form,
- header_parameters=request.headers,
- files_parameters={}, # TODO: BS 20171115: Code it
- )
-
- def get_response(
- self,
- response: dict,
- http_code: int,
- ) -> 'Response':
- from flask import Response
- return Response(
- response=json.dumps(response),
- mimetype='application/json',
- status=http_code,
- )
-
- def get_validation_error_response(
- self,
- error: ProcessValidationError,
- http_code: HTTPStatus=HTTPStatus.BAD_REQUEST,
- ) -> typing.Any:
- # TODO BS 20171010: Manage error schemas, see #4
- from hapic.hapic import _default_global_error_schema
- unmarshall = _default_global_error_schema.dump(error)
- if unmarshall.errors:
- raise OutputValidationException(
- 'Validation error during dump of error response: {}'.format(
- str(unmarshall.errors)
- )
- )
- from flask import Response
- return Response(
- response=json.dumps(unmarshall.data),
- mimetype='application/json',
- status=int(http_code),
- )
-
- # TODO BS 20171115: Implement other context methods
- # (take source in example_a_flask.py)
|