55
66from six import iteritems
77
8+ from openapi_core .exceptions import InvalidResponse
89from openapi_core .parameters import ParametersGenerator
910from openapi_core .request_bodies import RequestBodyFactory
11+ from openapi_core .responses import ResponsesGenerator
1012
1113log = logging .getLogger (__name__ )
1214
@@ -15,10 +17,11 @@ class Operation(object):
1517 """Represents an OpenAPI Operation."""
1618
1719 def __init__ (
18- self , http_method , path_name , parameters , request_body = None ,
19- deprecated = False , operation_id = None ):
20+ self , http_method , path_name , responses , parameters ,
21+ request_body = None , deprecated = False , operation_id = None ):
2022 self .http_method = http_method
2123 self .path_name = path_name
24+ self .responses = dict (responses )
2225 self .parameters = dict (parameters )
2326 self .request_body = request_body
2427 self .deprecated = deprecated
@@ -27,6 +30,16 @@ def __init__(
2730 def __getitem__ (self , name ):
2831 return self .parameters [name ]
2932
33+ def get_response (self , http_status = 'default' ):
34+ try :
35+ return self .responses [http_status ]
36+ except KeyError :
37+ if 'default' not in self .responses :
38+ raise InvalidResponse (
39+ "Unknown response http status {0}" .format (http_status ))
40+
41+ return self .responses ['default' ]
42+
3043
3144class OperationsGenerator (object ):
3245 """Represents an OpenAPI Operation in a service."""
@@ -42,9 +55,12 @@ def generate(self, path_name, path):
4255 continue
4356
4457 operation_deref = self .dereferencer .dereference (operation )
58+ responses_spec = operation_deref ['responses' ]
59+ responses = self .responses_generator .generate (responses_spec )
4560 deprecated = operation_deref .get ('deprecated' , False )
4661 parameters_list = operation_deref .get ('parameters' , [])
47- parameters = self .parameters_generator .generate (parameters_list )
62+ parameters = self .parameters_generator .generate_from_list (
63+ parameters_list )
4864
4965 request_body = None
5066 if 'requestBody' in operation_deref :
@@ -55,11 +71,16 @@ def generate(self, path_name, path):
5571 yield (
5672 http_method ,
5773 Operation (
58- http_method , path_name , list (parameters ),
74+ http_method , path_name , responses , list (parameters ),
5975 request_body = request_body , deprecated = deprecated ,
6076 ),
6177 )
6278
79+ @property
80+ @lru_cache ()
81+ def responses_generator (self ):
82+ return ResponsesGenerator (self .dereferencer , self .schemas_registry )
83+
6384 @property
6485 @lru_cache ()
6586 def parameters_generator (self ):
0 commit comments