From e7530725d7a2d4f2f87a82111729eb83490e4c61 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Fri, 16 Aug 2019 01:05:42 +0900 Subject: [PATCH] Support BaseSettings --- resources/META-INF/plugin.xml | 7 ++++++- src/com/koxudaxi/pydantic/PydanticTypeProvider.kt | 11 ++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index af644229..2a872281 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -1,9 +1,14 @@ com.koxudaxi.pydantic Pydantic - 0.0.12 + 0.0.13 Koudai Aono @koxudaxi version 0.0.13 +

Features

+
    +
  • No arguments required for BaseSettings [#]
  • +

version 0.0.12

Features

    diff --git a/src/com/koxudaxi/pydantic/PydanticTypeProvider.kt b/src/com/koxudaxi/pydantic/PydanticTypeProvider.kt index 2c5525c3..a66abb78 100644 --- a/src/com/koxudaxi/pydantic/PydanticTypeProvider.kt +++ b/src/com/koxudaxi/pydantic/PydanticTypeProvider.kt @@ -90,7 +90,7 @@ class PydanticTypeProvider : PyTypeProviderBase() { .asReversed() .asSequence() .filterNot { PyTypingTypeProvider.isClassVar(it, context) } - .mapNotNull { fieldToParameter(it, ellipsis, context) } + .mapNotNull { fieldToParameter(it, ellipsis, context, current) } .forEach { parameter -> parameter.name?.let { if (!collected.containsKey(it)) { @@ -105,16 +105,21 @@ class PydanticTypeProvider : PyTypeProviderBase() { private fun fieldToParameter(field: PyTargetExpression, ellipsis: PyNoneLiteralExpression, - context: TypeEvalContext): PyCallableParameter? { + context: TypeEvalContext, + pyClass: PyClass): PyCallableParameter? { val stub = field.stub val fieldStub = if (stub == null) PydanticFieldStubImpl.create(field) else stub.getCustomStub(PydanticFieldStub::class.java) if (fieldStub != null && !fieldStub.initValue()) return null if (fieldStub == null && field.annotationValue == null) return null // skip fields that are not annotated + val defaultValue = when { + pyClass.isSubclass("pydantic.env_settings.BaseSettings", context) -> ellipsis + else -> getDefaultValueForParameter(field, fieldStub, ellipsis, context) + } return PyCallableParameterImpl.nonPsi(field.name, getTypeForParameter(field, context), - getDefaultValueForParameter(field, fieldStub, ellipsis, context)) + defaultValue) } private fun getTypeForParameter(field: PyTargetExpression,