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,21 @@ 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+ # try range
38+ http_status_range = '{0}XX' .format (http_status [0 ])
39+ if http_status_range in self .responses :
40+ return self .responses [http_status_range ]
41+
42+ if 'default' not in self .responses :
43+ raise InvalidResponse (
44+ "Unknown response http status {0}" .format (http_status ))
45+
46+ return self .responses ['default' ]
47+
3048
3149class OperationsGenerator (object ):
3250 """Represents an OpenAPI Operation in a service."""
@@ -42,9 +60,12 @@ def generate(self, path_name, path):
4260 continue
4361
4462 operation_deref = self .dereferencer .dereference (operation )
63+ responses_spec = operation_deref ['responses' ]
64+ responses = self .responses_generator .generate (responses_spec )
4565 deprecated = operation_deref .get ('deprecated' , False )
4666 parameters_list = operation_deref .get ('parameters' , [])
47- parameters = self .parameters_generator .generate (parameters_list )
67+ parameters = self .parameters_generator .generate_from_list (
68+ parameters_list )
4869
4970 request_body = None
5071 if 'requestBody' in operation_deref :
@@ -55,11 +76,16 @@ def generate(self, path_name, path):
5576 yield (
5677 http_method ,
5778 Operation (
58- http_method , path_name , list (parameters ),
79+ http_method , path_name , responses , list (parameters ),
5980 request_body = request_body , deprecated = deprecated ,
6081 ),
6182 )
6283
84+ @property
85+ @lru_cache ()
86+ def responses_generator (self ):
87+ return ResponsesGenerator (self .dereferencer , self .schemas_registry )
88+
6389 @property
6490 @lru_cache ()
6591 def parameters_generator (self ):
0 commit comments