Description
Describe the bug
Similar to #357, partially fixed in #500.
Client generation fails if an enum like below is present in the generated OpenAPI schema.
NullEnum:
enum:
- null
The context here is that we have a Django model with char / text fields that have null=True, blank=True set. We use Django Rest Framework / drf-spectacular to generate an OpenAPI schema from our models and REST API endpoints. This generated schema automatically includes logic like below:
ModelName:
type: object
description: ModelName serializer
properties:
field_name:
nullable: true
oneOf:
- $ref: '#/components/schemas/FieldNameEnum'
- $ref: '#/components/schemas/BlankEnum'
- $ref: '#/components/schemas/NullEnum'
FieldNameEnum, BlankEnum, and NullEnum are like below:
FieldNameEnum:
enum:
- stringvalue1
- stringvalue2
type: string
BlankEnum:
enum:
- ''
NullEnum:
enum:
- null
NullEnum accepts a literal null / None, not a string "null" (it's not a string enum).
To Reproduce
Steps to reproduce the behavior:
- Make a new OpenAPI Spec File matching the one below.
- Run "openapi-python-client generate --path your_spec_file.yaml"
- See an error that null / None is not allowed.
Expected behavior
API client generation succeeds. An enum with None / null as an option is valid based on #500 (comment), so we would like to see this supported in openapi-python-client if easily possible.
In version 0.10.4, we were able to generate the clients successfully by changing the enum_property.py file. If value was None / not a string, it would skip calling remove_string_escapes(value) and just store None directly into output[sanitized_key].
OpenAPI Spec File
openapi: 3.0.3
info:
title: title
version: 1.0.0
paths:
/path/to/something/:
get:
responses:
'200':
description: ''
components:
schemas:
ValueEnum:
enum:
- value
NullEnum:
enum:
- null
Desktop (please complete the following information):
OS: Linux 4.18
Python Version: 3.6.8
openapi-python-client version 0.10.5
Additional context
Error(s) encountered while generating, client was not created
Failed to parse OpenAPI document
3 validation errors for OpenAPI
components -> schemas -> NullEnum -> $ref
field required (type=value_error.missing)
components -> schemas -> NullEnum -> enum -> 0
none is not an allowed value (type=type_error.none.not_allowed)
components -> schemas -> NullEnum -> enum -> 0
none is not an allowed value (type=type_error.none.not_allowed)