/
generator.py
50 lines (44 loc) · 1.83 KB
/
generator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from drf_yasg import generators as drf_gen
from drf_yasg import openapi
from gateway import utils
from gateway.aggregator import SwaggerAggregator
class OpenAPISchemaGenerator(drf_gen.OpenAPISchemaGenerator):
def get_schema(self, request=None, public=False):
schema_urls = utils.get_swagger_urls()
config_aggregator = {
'info': {
'title': 'API Gateway',
'description': '',
'version': '1.0'
},
'apis': schema_urls,
'produces': ['application/json',
'application/x-www-form-urlencoded',
'multipart/form-data'],
'consumes': ['application/json',
'application/x-www-form-urlencoded',
'multipart/form-data'],
}
sw_aggregator = SwaggerAggregator(config_aggregator)
swagger_spec = sw_aggregator.generate_swagger()
endpoints = self.get_endpoints(request)
components = self.reference_resolver_class(openapi.SCHEMA_DEFINITIONS, force_init=True)
paths, prefix = self.get_paths(endpoints, components, request, public)
paths.update(swagger_spec['paths'])
components['definitions'].update(swagger_spec['definitions'])
url = self.url
if url is None and request is not None:
url = request.build_absolute_uri()
return openapi.Swagger(
info=self.info,
paths=paths,
consumes=swagger_spec['consumes'],
produces=swagger_spec['produces'],
security_definitions=swagger_spec.get(
'security_definitions', None),
security=swagger_spec.get('security', None),
_url=url,
_version=self.version,
_prefix=prefix,
**dict(components)
)