It's minimal, but I'm posting things.
Note: la génération de code en python est peu robuste.
J'ai constaté des problèmes d'échappement d'apostrophes simples.
On nous force à utiliser une validation des modèles auto-générées via pydantic
.
Seul un parmi les six générateurs Python fournis sont compatibles avec pydantic v1
.
Gros soucis de mapping d'un type primitif datetime
définit tel que date
dans un payload json
.
A essayer dans avec autre language davantage standardisé.
Globalement une perte de temps pour un projet serieux ou enterprise.
#!/bin/sh
# ------------------------------
# Script utilitaire pour générer automatiquement les clients HTTP Python à partir du fichier de spécification OpenAPI.
# @author Kévin COJEAN
# ------------------------------
# À changer selon votre cas d'utilisation.
generatorEngine="python-pydantic-v1"
additionalProperties="library=asyncio"
specificationFilePath="open-api-without-deprecated-paths.yml"
outputDirPath="generated"
openApiGitHubProjectPath=/tmp/openapi-generator
# Constants
openApiGeneratorVersion="v7.10.0"
builtJar="$openApiGitHubProjectPath/modules/openapi-generator-cli/target/openapi-generator-cli.jar"
# Pour obtenir la documentation et additionalProperties spécifiques au generatorEngine utilisé, exécuter la commande suivante:
# java -jar "$builtJar" config-help -g $generatorEngine
set -e
# Run this once
#git clone https://github.com/OpenAPITools/openapi-generator.git /tmp/openapi-generator
#git -C "$openApiGitHubProjectPath" checkout "$openApiGeneratorVersion"
#mvn -f "$openApiGitHubProjectPath/pom.xml" clean package -DskipTests -Dmaven.javadoc.skip=true
# Valide la structure du fichier de spécification
#java -jar "$builtJar" validate
/bin/rm "$outputDirPath" -rf
# Génére les clients HTTP Python à partir de la spécification OpenAPI.
java -jar "$builtJar" \
generate \
-g "$generatorEngine" \
-i "$specificationFilePath" \
-o "$outputDirPath" \
--additional-properties "$additionalProperties" \
--global-property generateAliasAsModel=false,apis,models,supportingFiles,apiDocs=false,modelDocs=false,modelTests=false,apiTests=false \