Unterstützung von x-nullable für swagger in der jsonschema-Bibliothek von Python

Einführung

swagger ist nicht vollständig mit dem json-Schema kompatibel. Ich verwende eine Bibliothek mit dem gleichen Namen wie jsonschema zur Validierung mit jsonschema in Python.

Wie ich bereits geschrieben habe, erlaubt swagger keine Nulltypen. Es gibt jedoch Zeiten, in denen Sie null zurückgeben möchten, daher einen Hinweis zum Umgang damit.

x-nullable Unterstützung

Einige Tools für Swagger fügen ein Attribut namens "x-nullable" hinzu, um nullable zu unterstützen. Bei Swagger dürfen Attribute, die mit "x-" beginnen, frei angehängt werden.

Die Methode, um damit umzugehen, ist wie folgt.

from jsonschema.validators import Draft4Validator, extend
from jsonschema._validators import type_draft4


def type_custom(validator, types, instance, schema, nullable_attr="x-nullable"):
    if schema.get(nullable_attr, False):
        if not isinstance(types, (list, tuple)):
            types = [types]
        types.append("null")
    yield from type_draft4(validator, types, instance, schema)


CustomValidator = extend(Draft4Validator, {
    "type": type_custom,
})

Sie können es tatsächlich so verwenden.


schema = {
    "type": ["string", "null"]
}

validate = CustomValidator(schema).validate
print(validate(None, schema))
print(validate(None, {"type": "string", "x-nullable": True}))

Recommended Posts

Unterstützung von x-nullable für swagger in der jsonschema-Bibliothek von Python
Verwendung der C-Bibliothek in Python
Verwendung der Python-Bildbibliothek in der Python3-Serie
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
So führen Sie Python im virtuellen Raum aus (für MacOS)
So debuggen Sie eine Standard-Python-Bibliothek in Visual Studio
So importieren Sie die in EFS eingerichtete Python-Bibliothek in Lambda
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
So definieren Sie mehrere Variablen in einer Python for-Anweisung
Festlegen der Cache-Steuerung für den BLOB-Speicher in Azure Storage in Python
So implementieren Sie Python EXE für Windows mit Docker-Container
Für Anfänger, wie man mit häufigen Fehlern in Keras umgeht
Wie man in Python entwickelt
Hinweise zur Verwendung von Marshmallow in der Schemabibliothek
So stellen Sie die Ausgabeauflösung für jeden Keyframe in Blender ein
[Für Anfänger] So implementieren Sie O'reilly-Beispielcode in Google Colab
Festlegen der CORS-Einstellungen für den Azure-Speicherdienst in Python
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
[Anfängernotiz] So legen Sie den Lesepfad der Bibliothek in Python fest
Umgang mit Sitzungen in SQLAlchemy
[Für Nicht-Programmierer] Wie man Kaggle läuft
Verwendung von Klassen in Theano
Wie man nüchtern mit Pandas schreibt
So sammeln Sie Bilder in Python
So aktualisieren Sie Spyder in Anaconda
Verwendung von Anfragen (Python Library)
Verwendung von SQLite in Python
Verwendung des Python-Protokollierungsmoduls
So konvertieren Sie 0,5 in 1056964608 auf einmal
Wie man CSS in Django reflektiert
Wie man Prozesse in großen Mengen abbricht
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
So führen Sie TensorFlow 1.0-Code in 2.0 aus
Umgang mit Japanisch mit Python
So melden Sie sich bei Docker + NGINX an
Verwendung des Python-Kontextmanagers
So rufen Sie PyTorch in Julia an
So erstellen Sie mit YOLO in 3 Stunden ein Modell für die Objekterkennung
So führen Sie einen Schnellstart für Google Cloud Text-to-Speech .NET in Unity aus
Verwendung berechneter Spalten in CASTable
[Einführung in Python] Wie verwende ich eine Klasse in Python?
So unterdrücken Sie Anzeigefehler in matplotlib
Dynamisches Definieren von Variablen in Python
So machen Sie R chartr () in Python
So erstellen Sie eine * .spec-Datei für pyinstaller.
So konvertieren Sie csv in tsv in CLI
So löschen Sie abgelaufene Sitzungen in Django
[Itertools.permutations] So löschen Sie eine Sequenz in Python
Verwendung von Google Test in C-Sprache
So beenden Sie Pythons unendliches Scroll-Scraping
So implementieren Sie einen verschachtelten Serializer mit drf-flex-Feldern
So arbeiten Sie mit BigQuery in Python
So führen Sie Befehle mit einem Jupyter-Notebook aus
Wie man in GitPython '--gags fetch --tags' macht
Wie bekomme ich Stacktrace in Python?