Beispiel #1
0
    def _prepare(self, get, admin):
        if not self.__class__.JSON:
            url = drf_reverse('api:swagger_view') + '?format=openapi'
            response = get(url, user=admin)
            data = generate_swagger_object(response.data)
            if response.has_header('X-Deprecated-Paths'):
                data['deprecated_paths'] = json.loads(response['X-Deprecated-Paths'])
            data.update(response.accepted_renderer.get_customizations() or {})

            data['host'] = None
            data['schemes'] = ['https']
            data['consumes'] = ['application/json']

            revised_paths = {}
            deprecated_paths = data.pop('deprecated_paths', [])
            for path, node in data['paths'].items():
                # change {version} in paths to the actual default API version (e.g., v2)
                revised_paths[path.replace('{version}', settings.REST_FRAMEWORK['DEFAULT_VERSION'])] = node
                for method in node:
                    if path in deprecated_paths:
                        node[method]['deprecated'] = True
                    if 'description' in node[method]:
                        # Pop off the first line and use that as the summary
                        lines = node[method]['description'].splitlines()
                        node[method]['summary'] = lines.pop(0).strip('#:')
                        node[method]['description'] = '\n'.join(lines)

                    # remove the required `version` parameter
                    for param in node[method].get('parameters'):
                        if param['in'] == 'path' and param['name'] == 'version':
                            node[method]['parameters'].remove(param)
            data['paths'] = revised_paths
            self.__class__.JSON = data
Beispiel #2
0
 def setUp(self):
     self.document = coreapi.Document(
         title='Example API',
         url='https://www.example.com/',
         description='Example description.',
     )
     self.swagger = generate_swagger_object(self.document)
 def setUp(self):
     self.document = coreapi.Document(
         title='Example API',
         url='https://www.example.com/',
         description='Example description.',
     )
     self.swagger = generate_swagger_object(self.document)
Beispiel #4
0
    def encode(self, document, **options):
        if not isinstance(document, coreapi.Document):
            raise TypeError('Expected a `coreapi.Document` instance')

        data = generate_swagger_object(document)
        data.update(**options)

        return force_bytes(json.dumps(data))
Beispiel #5
0
    def encode(self, document, extra=None, **options):
        if not isinstance(document, coreapi.Document):
            raise TypeError('Expected a `coreapi.Document` instance')

        data = generate_swagger_object(document)
        if isinstance(extra, dict):
            merge_dicts(data, extra, force=True)

        return force_bytes(json.dumps(data))
    def encode(self, document, extra=None, **options):
        if not isinstance(document, coreapi.Document):
            raise TypeError('Expected a `coreapi.Document` instance')

        data = generate_swagger_object(document)
        if isinstance(extra, dict):
            data.update(extra)

        return force_bytes(json.dumps(data))
Beispiel #7
0
 def setUp(self):
     self.path = '/users/'
     self.document = coreapi.Document(
         content={
             'users': {
                 'create': coreapi.Link(action='post', url=self.path),
                 'list': coreapi.Link(action='get', url=self.path)
             }
         })
     self.swagger = generate_swagger_object(self.document)
    def load_swagger_json(self, doc):
        """
        加载自定义swagger.json文档
        """
        data = generate_swagger_object(doc)

        # data['paths'].update(path_dict.pop('paths'))
        # data.update(path_dict)
        data['paths'] = path_dict
        return OpenAPICodec().decode(force_bytes(json.dumps(data)))
Beispiel #9
0
    def load_swagger_json(self, doc):
        """
        加载自定义swagger.json文档
        """
        data = generate_swagger_object(doc)
        with open(settings.API_DOC_PATH) as s:
            doc_json = json.load(s, object_pairs_hook=OrderedDict)

        data['paths'].update(doc_json.pop('paths'))
        data.update(doc_json)
        return OpenAPICodec().decode(force_bytes(json.dumps(data)))
Beispiel #10
0
    def render(self, data, media_type=None, renderer_context=None):
        # See OpenAPICodec.encode
        from openapi_codec.encode import generate_swagger_object

        if not isinstance(data, coreapi.Document):
            return JSONRenderer().render(data, media_type, renderer_context)

        spec = generate_swagger_object(data)
        if self.extra is not None:
            spec.update(self.extra)
        return json.dumps(spec)
Beispiel #11
0
    def encode(self, document, **options):
        import coreapi
        from coreapi.compat import force_bytes
        from openapi_codec.encode import generate_swagger_object

        if not isinstance(document, coreapi.Document):
            raise TypeError('Expected a `coreapi.Document` instance')

        data = generate_swagger_object(document)
        data.update(**options)

        return force_bytes(json.dumps(data))
Beispiel #12
0
    def encode(self, document, **options):
        import coreapi
        from coreapi.compat import force_bytes
        from openapi_codec.encode import generate_swagger_object

        if not isinstance(document, coreapi.Document):
            raise TypeError('Expected a `coreapi.Document` instance')

        data = generate_swagger_object(document)
        data.update(**options)

        return force_bytes(json.dumps(data))
Beispiel #13
0
    def encode(self, document, **options):
        if not isinstance(document, coreapi.Document):
            raise TypeError('Expected a `coreapi.Document` instance')

        data = generate_swagger_object(document)
        if settings.SECURITY_DEFINITIONS:
            security_key = settings.SECURITY_DEFINITIONS.keys()[0]
            for k1 in data['paths']:
                for k2 in data['paths'][k1]:
                    data['paths'][k1][k2]['security'] = [{security_key: []}]
        data.update(**options)

        return force_bytes(json.dumps(data))
    def _prepare(self, get, admin):
        if not self.__class__.JSON:
            url = drf_reverse('api:swagger_view') + '?format=openapi'
            response = get(url, user=admin)
            data = generate_swagger_object(response.data)
            if response.has_header('X-Deprecated-Paths'):
                data['deprecated_paths'] = json.loads(
                    response['X-Deprecated-Paths'])
            data.update(response.accepted_renderer.get_customizations() or {})

            data['host'] = None
            data['schemes'] = ['https']
            data['consumes'] = ['application/json']

            # Inject a top-level description into the OpenAPI document
            if os.path.exists(description_file):
                with open(description_file, 'r') as f:
                    data['info']['description'] = f.read()

            # Write tags in the order we want them sorted
            if os.path.exists(config_file):
                with open(config_file, 'r') as f:
                    config = yaml.load(f.read())
                    for category in config.get('categories', []):
                        tag = {'name': category['name']}
                        if 'description' in category:
                            tag['description'] = category['description']
                        data.setdefault('tags', []).append(tag)

            revised_paths = {}
            deprecated_paths = data.pop('deprecated_paths', [])
            for path, node in data['paths'].items():
                # change {version} in paths to the actual default API version (e.g., v2)
                revised_paths[path.replace(
                    '{version}',
                    settings.REST_FRAMEWORK['DEFAULT_VERSION'])] = node
                for method in node:
                    if path in deprecated_paths:
                        node[method]['deprecated'] = True
                    if 'description' in node[method]:
                        # Pop off the first line and use that as the summary
                        lines = node[method]['description'].splitlines()
                        node[method]['summary'] = lines.pop(0).strip('#:')
                        node[method]['description'] = '\n'.join(lines)

                    # remove the required `version` parameter
                    for param in node[method].get('parameters'):
                        if param['in'] == 'path' and param['name'] == 'version':
                            node[method]['parameters'].remove(param)
            data['paths'] = revised_paths
            self.__class__.JSON = data
 def setUp(self):
     self.path = '/users/'
     self.document = coreapi.Document(
         content={
             'users': {
                 'create': coreapi.Link(
                     action='post',
                     url=self.path
                 ),
                 'list': coreapi.Link(
                     action='get',
                     url=self.path
                 )
             }
         }
     )
     self.swagger = generate_swagger_object(self.document)
Beispiel #16
0
 def setUp(self):
     self.document = coreapi.Document(title='Example API')
     self.swagger = generate_swagger_object(self.document)
 def encode(self, document, **options):
     if not isinstance(document, Document):
         raise TypeError('Expected a `coreapi.Document` instance')
     data = generate_swagger_object(document)
     return force_bytes(json.dumps(data))
Beispiel #18
0
 def dump(self, document, **kwargs):
     data = generate_swagger_object(document)
     return force_bytes(json.dumps(data))
Beispiel #19
0
 def dump(self, document, **kwargs):
     data = generate_swagger_object(document)
     return force_bytes(json.dumps(data))