Skip to content

Commit

Permalink
Merge pull request #368 from koxudaxi/fix_false_positive_detection_of…
Browse files Browse the repository at this point in the history
…_extra_fields_not_permitted

Fix false positive detection of "extra fields not permitted"
  • Loading branch information
koxudaxi committed Sep 6, 2021
2 parents cd5b608 + 7c6ef75 commit 7f23b5c
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
7 changes: 6 additions & 1 deletion resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
<idea-plugin url="https://github.com/koxudaxi/pydantic-pycharm-plugin" require-restart="true">
<id>com.koxudaxi.pydantic</id>
<name>Pydantic</name>
<version>0.3.6</version>
<version>0.3.7</version>
<vendor email="koaxudai@gmail.com">Koudai Aono @koxudaxi</vendor>
<change-notes><![CDATA[
<h2>version 0.3.7</h2>
<p>BugFixes</p>
<ul>
<li>Fix false positive detection of "extra fields not permitted" [#368]</li>
</ul>
<h2>version 0.3.6</h2>
<p>BugFixes</p>
<ul>
Expand Down
5 changes: 3 additions & 2 deletions src/com/koxudaxi/pydantic/PydanticInspection.kt
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,9 @@ class PydanticInspection : PyInspection() {
val config = getConfig(pyClass, myTypeEvalContext, true)
if (config["extra"] != EXTRA.FORBID) return
pyClass.getAncestorClasses(myTypeEvalContext)
val parameters = (pyClass.getAncestorClasses(myTypeEvalContext) + pyClass)
.flatMap { getClassVariables(pyClass, myTypeEvalContext)
val ancestorPydanticModels = pyClass.getAncestorClasses(myTypeEvalContext).filter { isPydanticModel(it, false, myTypeEvalContext) }
val parameters = (ancestorPydanticModels + pyClass)
.flatMap { pydanticModel -> getClassVariables(pydanticModel, myTypeEvalContext)
.filter { it.name != null }
.filter { isValidField(it, myTypeEvalContext) }
.map { it.name }
Expand Down
16 changes: 15 additions & 1 deletion testData/inspection/extra.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,18 @@ class B(BaseModel):
class Config:
extra = Extra.forbid

B(a='abc', <error descr="'b' extra fields not permitted">b='123'</error>)
B(a='abc', <error descr="'b' extra fields not permitted">b='123'</error>)


class C(BaseModel):
id: int


class D(C):
data: List[int]

class Config:
extra = Extra.forbid


d = D(id=1, data=[1, 2, 3])

0 comments on commit 7f23b5c

Please sign in to comment.