Comment prendre en charge x-nullable pour swagger dans la bibliothèque jsonschema de python

introduction

swagger n'est pas entièrement compatible avec le schéma json. J'utilise une librairie du même nom que jsonschema pour la validation avec jsonschema en python.

Comme je l'ai écrit plus tôt, swagger n'autorise pas les types nuls. Cependant, il y a des moments où vous souhaitez retourner null, donc une note sur la façon de le gérer.

support x-nullable

Certains outils pour swagger ajoutent un attribut appelé x-nullable pour prendre en charge Nullable. En termes de swagger, les attributs commençant par x- peuvent être attachés librement.

La méthode pour résoudre ce problème est la suivante.

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,
})

Vous pouvez réellement l'utiliser comme ça.


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

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

Recommended Posts

Comment prendre en charge x-nullable pour swagger dans la bibliothèque jsonschema de python
Comment utiliser la bibliothèque C en Python
Comment utiliser la bibliothèque d'images Python dans la série python3
[Pour les débutants] Comment utiliser la commande say avec python!
Comment exécuter python dans l'espace virtuel (pour MacOS)
Comment déboguer une bibliothèque Python standard dans Visual Studio
Comment importer la bibliothèque Python configurée dans EFS dans Lambda
[python] Comment utiliser Matplotlib, une bibliothèque pour dessiner des graphiques
Comment définir plusieurs variables dans une instruction Python for
Comment spécifier Cache-Control pour le stockage BLOB dans le stockage Azure en Python
Comment implémenter Python EXE pour Windows avec le conteneur Docker
Pour les débutants, comment gérer les erreurs courantes dans les keras
Comment développer en Python
Remarques sur l'utilisation de la guimauve dans la bibliothèque de schémas
Comment définir la résolution de sortie pour chaque image clé dans Blender
[Pour les débutants] Comment implémenter l'exemple de code O'reilly dans Google Colab
Comment définir les paramètres CORS pour le service de stockage Azure dans Python
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
[Note du débutant] Comment spécifier le chemin de lecture de la bibliothèque en Python
Comment gérer une session dans SQLAlchemy
[Pour les non-programmeurs] Comment marcher Kaggle
Comment utiliser les classes dans Theano
Comment écrire sobrement avec des pandas
Comment collecter des images en Python
Comment mettre à jour Spyder dans Anaconda
Comment utiliser les requêtes (bibliothèque Python)
Comment utiliser SQLite en Python
Comment utiliser le module de journalisation de Python
Comment convertir 0,5 en 1056964608 en un seul coup
Comment refléter CSS dans Django
Comment tuer des processus en vrac
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment exécuter du code TensorFlow 1.0 en 2.0
Comment gérer le japonais avec Python
Comment se connecter à Docker + NGINX
Comment utiliser le gestionnaire de contexte de Python
Comment appeler PyTorch dans Julia
Comment faire un modèle pour la détection d'objets avec YOLO en 3 heures
Comment exécuter un démarrage rapide pour Google Cloud Text-to-Speech .NET dans Unity
Comment utiliser les colonnes calculées dans CASTable
[Introduction à Python] Comment utiliser la classe en Python?
Comment supprimer l'erreur d'affichage dans matplotlib
Comment définir dynamiquement des variables en Python
Comment faire R chartr () en Python
Comment créer un fichier * .spec pour pyinstaller.
Comment convertir csv en tsv dans la CLI
Comment supprimer des sessions expirées dans Django
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser Google Test en langage C
Comment mettre fin au grattage de défilement infini de Python
Comment implémenter un sérialiseur imbriqué avec drf-flex-fields
Comment utiliser BigQuery en Python
Comment exécuter des commandes avec Jupyter Notebook
Comment faire 'git fetch --tags' dans GitPython
Comment obtenir stacktrace en python