djangorestframework-types icon indicating copy to clipboard operation
djangorestframework-types copied to clipboard

DRFOpenAPISchema and DRFOpenAPIInfo are missing attributes from the openapi specs

Open dolfandringa opened this issue 2 years ago • 1 comments
trafficstars

The openapi specs have more information then the TypedDict's in schemas.openapi allow. This results in type errors if we override some of the fields as described in the docs

For instance this code:

import typing
from rest_framework.request import Request
from rest_framework.schemas.openapi import SchemaGenerator

DRFOpenAPISchema = dict[str, typing.Any]
if typing.TYPE_CHECKING:
    from rest_framework.schemas.openapi import DRFOpenAPISchema


class DataSchemaGenerator(SchemaGenerator):
    def get_info(self):
        info = super().get_info()
        info["termsOfService"] = "https://example.com/tos.html"  
        return info

    def get_schema(
        self, request: Request | None = None, public: bool = False
    ) -> DRFOpenAPISchema:
        schema = super().get_schema(request, public)
        return schema

Results in this error:

Could not assign item in TypedDict  "termsOfService" is not a defined key in "DRFOpenAPIInfo" 

dolfandringa avatar Jul 26 '23 04:07 dolfandringa

I saw the comment: Unfortunately https://github.com/meeshkan/openapi-typed is archived so I don't think it should be used. https://github.com/openapi-generators/openapi-python-client has a complete pydantic schema which is great, but isn't just a types package. It contains much more and it also depends on python>=3.8 while we depend on python>=3.7 so we can't depend on it. We could just slowly add type information to our own types.

dolfandringa avatar Jul 26 '23 08:07 dolfandringa