src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticUtils.py

Sat, 22 Feb 2025 18:04:02 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 22 Feb 2025 18:04:02 +0100
branch
eric7
changeset 11143
ef75c265ab47
permissions
-rw-r--r--

Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.

11143
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing utility functions for the PydanticVisitor class.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import ast
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 #######################################################################
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 ## adapted from: flake8-pydantic v0.4.0
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 ##
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 ## Original: Copyright (c) 2023 Victorien
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 #######################################################################
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 def getDecoratorNames(decoratorList):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 Function to extract the set of decorator names.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 @param decoratorList list of decorators to be processed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 @type list of ast.expr
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 @return set containing the decorator names
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 @rtype set of str
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 names = set()
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 for dec in decoratorList:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 if isinstance(dec, ast.Call):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 names.add(
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 dec.func.attr if isinstance(dec.func, ast.Attribute) else dec.func.id
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 )
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 elif isinstance(dec, ast.Name):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 names.add(dec.id)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 elif isinstance(dec, ast.Attribute):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 names.add(dec.attr)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 return names
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 def _hasPydanticModelBase(node, *, includeRootModel):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 Function to check, if a class definition inherits from Pydantic model classes.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @type ast.ClassDef
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @keyparam includeRootModel flag indicating to include the root model
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @type bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @return flag indicating that the class definition inherits from a Pydantic model
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 class
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 modelClassNames = {"BaseModel"}
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 if includeRootModel:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 modelClassNames.add("RootModel")
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 for base in node.bases:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 if isinstance(base, ast.Name) and base.id in modelClassNames:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 return True
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 if isinstance(base, ast.Attribute) and base.attr in modelClassNames:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 return True
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 return False
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 def _hasModelConfig(node):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 Function to check, if the class has a `model_config` attribute set.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 @type ast.ClassDef
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @return flag indicating that the class has a `model_config` attribute set
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 for stmt in node.body:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 if (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 isinstance(stmt, ast.AnnAssign)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 and isinstance(stmt.target, ast.Name)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 and stmt.target.id == "model_config"
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 ):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 ##~ model_config: ... = ...
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 return True
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 if isinstance(stmt, ast.Assign) and any(
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 t.id == "model_config" for t in stmt.targets if isinstance(t, ast.Name)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 ):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 ##~ model_config = ...
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 return True
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 return False
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 PYDANTIC_FIELD_ARGUMENTS = {
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 "default",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 "default_factory",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 "alias",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 "alias_priority",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 "validation_alias",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 "title",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 "description",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 "examples",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 "exclude",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 "discriminator",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 "json_schema_extra",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 "frozen",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 "validate_default",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 "repr",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 "init",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 "init_var",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 "kw_only",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 "pattern",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 "strict",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 "gt",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 "ge",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 "lt",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 "le",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 "multiple_of",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 "allow_inf_nan",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 "max_digits",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 "decimal_places",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 "min_length",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 "max_length",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 "union_mode",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 }
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 def _hasFieldFunction(node):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 Function to check, if the class has a field defined with the `Field` function.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 @type ast.ClassDef
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 @return flag indicating that the class has a field defined with the `Field` function
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 if any(
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 isinstance(stmt, (ast.Assign, ast.AnnAssign))
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 and isinstance(stmt.value, ast.Call)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 and (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 isinstance(stmt.value.func, ast.Name) and stmt.value.func.id == "Field"
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 ) # f = Field(...)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 or (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 isinstance(stmt.value.func, ast.Attribute)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 and stmt.value.func.attr == "Field"
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 ) # f = pydantic.Field(...)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 )
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 and all(
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 kw.arg in PYDANTIC_FIELD_ARGUMENTS
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 for kw in stmt.value.keywords
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 if kw.arg is not None
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 )
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 for stmt in node.body
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 ):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 return True
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 return False
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 def _hasAnnotatedField(node):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 Function to check if the class has a field making use of `Annotated`.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 @type ast.ClassDef
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 @return flag indicating that the class has a field making use of `Annotated`
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 for stmt in node.body:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 if isinstance(stmt, ast.AnnAssign) and isinstance(
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 stmt.annotation, ast.Subscript
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 ):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 if (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 isinstance(stmt.annotation.value, ast.Name)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 and stmt.annotation.value.id == "Annotated"
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 ):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 ##~ f: Annotated[...]
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 return True
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 if (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 isinstance(stmt.annotation.value, ast.Attribute)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 and stmt.annotation.value.attr == "Annotated"
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 ):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 ##~ f: typing.Annotated[...]
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 return True
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 return False
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 PYDANTIC_DECORATORS = {
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 "computed_field",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 "field_serializer",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 "model_serializer",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 "field_validator",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 "model_validator",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 }
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 def _hasPydanticDecorator(node):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 Function to check, if the class makes use of Pydantic decorators, such as
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 `computed_field` or `model_validator`.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 @type ast.ClassDef
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 @return flag indicating that the class makes use of Pydantic decorators, such as
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 `computed_field` or `model_validator`.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 for stmt in node.body:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 if isinstance(stmt, ast.FunctionDef):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 decoratorNames = getDecoratorNames(stmt.decorator_list)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 if PYDANTIC_DECORATORS & decoratorNames:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 return True
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 return False
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 PYDANTIC_METHODS = {
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 "model_construct",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 "model_copy",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 "model_dump",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 "model_dump_json",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 "model_json_schema",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 "model_parametrized_name",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 "model_rebuild",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 "model_validate",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 "model_validate_json",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 "model_validate_strings",
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 }
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 def _hasPydanticMethod(node: ast.ClassDef) -> bool:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 Function to check, if the class overrides any of the Pydantic methods, such as
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 `model_dump`.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 @type ast.ClassDef
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 @return flag indicating that class overrides any of the Pydantic methods, such as
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 `model_dump`
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 if any(
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 isinstance(stmt, ast.FunctionDef)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 and (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 stmt.name.startswith(("__pydantic_", "__get_pydantic_"))
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 or stmt.name in PYDANTIC_METHODS
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 )
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 for stmt in node.body
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 ):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 return True
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 return False
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 def isPydanticModel(node, *, includeRootModel=True):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 Function to determine if a class definition is a Pydantic model.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 Multiple heuristics are use to determine if this is the case:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 - The class inherits from `BaseModel` (or `RootModel` if `includeRootModel` is
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 `True`).
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 - The class has a `model_config` attribute set.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 - The class has a field defined with the `Field` function.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 - The class has a field making use of `Annotated`.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 - The class makes use of Pydantic decorators, such as `computed_field` or
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 `model_validator`.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 - The class overrides any of the Pydantic methods, such as `model_dump`.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 @type ast.ClassDef
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 @keyparam includeRootModel flag indicating to include the root model
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 (defaults to True)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 @type bool (optional)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 @return flag indicating a Pydantic model class
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 if not node.bases:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 return False
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 return (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 _hasPydanticModelBase(node, includeRootModel=includeRootModel)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 or _hasModelConfig(node)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 or _hasFieldFunction(node)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 or _hasAnnotatedField(node)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 or _hasPydanticDecorator(node)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 or _hasPydanticMethod(node)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 )
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 def isDataclass(node):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 Function to check, if a class is a dataclass.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 @type ast.ClassDef
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @return flag indicating that the class is a dataclass.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 """Determine if a class is a dataclass."""
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 return bool(
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 {"dataclass", "pydantic_dataclass"} & getDecoratorNames(node.decorator_list)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 )
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 def isFunction(node, functionName):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 Function to check, if a function call is referencing a given function name.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 @type ast.Call
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 @param functionName name of the function to check for
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 @type str
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 @return flag indicating that the function call is referencing the given function
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 name
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 return (isinstance(node.func, ast.Name) and node.func.id == functionName) or (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 isinstance(node.func, ast.Attribute) and node.func.attr == functionName
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 )
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 def isName(node, name):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 Function to check, if an expression is referencing a given name.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 @param node reference to the node to be be analyzed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 @type ast.expr
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 @param name name to check for
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 @type str
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 @return flag indicating that the expression is referencing teh given name
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 @rtype bool
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 return (isinstance(node, ast.Name) and node.id == name) or (
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 isinstance(node, ast.Attribute) and node.attr == name
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 )
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 def extractAnnotations(node):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 Function to extract the annotations of an expression.
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 @param node reference to the node to be be processed
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 @type ast.expr
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 @return set containing the annotation names
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 @rtype set[str]
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 """
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 annotations = set()
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 if isinstance(node, ast.Name):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 ##~ foo: date = ...
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 annotations.add(node.id)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 elif isinstance(node, ast.BinOp):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 ##~ foo: date | None = ...
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 annotations |= extractAnnotations(node.left)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 annotations |= extractAnnotations(node.right)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 elif isinstance(node, ast.Subscript):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 ##~ foo: dict[str, date]
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 ##~ foo: Annotated[list[date], ...]
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 if isinstance(node.slice, ast.Tuple):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 for elt in node.slice.elts:
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 annotations |= extractAnnotations(elt)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 if isinstance(node.slice, ast.Name):
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 annotations.add(node.slice.id)
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369
ef75c265ab47 Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 return annotations

eric ide

mercurial