44from openapi_spec_validator .validators import PathItemValidator
55
66from openapi_core .compat import lru_cache
7+ from openapi_core .schema .external_docs .factories import (
8+ ExternalDocumentationFactory ,
9+ )
710from openapi_core .schema .operations .models import Operation
811from openapi_core .schema .parameters .generators import ParametersGenerator
912from openapi_core .schema .request_bodies .factories import RequestBodyFactory
1013from openapi_core .schema .responses .generators import ResponsesGenerator
14+ from openapi_core .schema .security .factories import SecurityRequirementFactory
15+ from openapi_core .schema .servers .generators import ServersGenerator
1116
1217
1318class OperationsGenerator (object ):
@@ -32,6 +37,24 @@ def generate(self, path_name, path):
3237 parameters_list )
3338 operation_id = operation_deref .get ('operationId' )
3439 tags_list = operation_deref .get ('tags' , [])
40+ summary = operation_deref .get ('summary' )
41+ description = operation_deref .get ('description' )
42+ security_requirements_list = operation_deref .get ('security' , [])
43+ servers_spec = operation_deref .get ('servers' , [])
44+
45+ servers = self .servers_generator .generate (servers_spec )
46+
47+ security = None
48+ if security_requirements_list :
49+ security = list (map (
50+ self .security_requirement_factory .create ,
51+ security_requirements_list ))
52+
53+ external_docs = None
54+ if 'externalDocs' in operation_deref :
55+ external_docs_spec = operation_deref .get ('externalDocs' )
56+ external_docs = self .external_docs_factory .create (
57+ external_docs_spec )
3558
3659 request_body = None
3760 if 'requestBody' in operation_deref :
@@ -43,8 +66,11 @@ def generate(self, path_name, path):
4366 http_method ,
4467 Operation (
4568 http_method , path_name , responses , list (parameters ),
69+ summary = summary , description = description ,
70+ external_docs = external_docs , security = security ,
4671 request_body = request_body , deprecated = deprecated ,
47- operation_id = operation_id , tags = list (tags_list )
72+ operation_id = operation_id , tags = list (tags_list ),
73+ servers = servers ,
4874 ),
4975 )
5076
@@ -58,7 +84,22 @@ def responses_generator(self):
5884 def parameters_generator (self ):
5985 return ParametersGenerator (self .dereferencer , self .schemas_registry )
6086
87+ @property
88+ @lru_cache ()
89+ def external_docs_factory (self ):
90+ return ExternalDocumentationFactory (self .dereferencer )
91+
6192 @property
6293 @lru_cache ()
6394 def request_body_factory (self ):
6495 return RequestBodyFactory (self .dereferencer , self .schemas_registry )
96+
97+ @property
98+ @lru_cache ()
99+ def security_requirement_factory (self ):
100+ return SecurityRequirementFactory (self .dereferencer )
101+
102+ @property
103+ @lru_cache ()
104+ def servers_generator (self ):
105+ return ServersGenerator (self .dereferencer )
0 commit comments