← Back to index
dataclasses_transform_field.py
True Positive
False Positive
False Negative
Optional (detected)
Warning or Info
TP: 2
FP: 0
FN: 0
Optional: 0 / 0
1
"""
2
Tests
the
dataclass_transform
mechanism
honors
implicit
default
values
3
in
field
parameters
.
4
"""
5
6
# Specification: https://typing.readthedocs.io/en/latest/spec/dataclasses.html#field-specifier-parameters
7
8
from
typing
import
Any
,
Callable
,
Literal
,
TypeVar
,
dataclass_transform
,
overload
9
10
T
=
TypeVar
(
"T"
)
11
12
# > Field specifier functions can use overloads that implicitly specify the
13
# > value of init using a literal bool value type (Literal[False] or Literal[True]).
14
15
@overload
16
def
field1
(
17
*
,
18
default
:
str
|
None
=
None
,
19
resolver
:
Callable
[[],
Any
],
20
init
:
Literal
[
False
]
=
False
,
21
)
->
Any
:
22
...
23
24
25
@overload
26
def
field1
(
27
*
,
28
default
:
str
|
None
=
None
,
29
resolver
:
None
=
None
,
30
init
:
Literal
[
True
]
=
True
,
31
)
->
Any
:
32
...
33
34
35
def
field1
(
36
*
,
37
default
:
str
|
None
=
None
,
38
resolver
:
Callable
[[],
Any
]
|
None
=
None
,
39
init
:
bool
=
True
,
40
)
->
Any
:
41
...
42
43
44
def
field2
(
*
,
init
:
bool
=
False
,
kw_only
:
bool
=
True
)
->
Any
:
45
...
46
47
48
@dataclass_transform
(
kw_only_default
=
True
,
field_specifiers
=
(
field1
,
field2
))
49
def
create_model
(
*
,
init
:
bool
=
True
)
->
Callable
[[
type
[
T
]],
type
[
T
]]:
50
raise
NotImplementedError
51
52
53
@create_model
()
54
class
CustomerModel1
:
55
id
:
int
=
field1
(
resolver
=
lambda
:
0
)
56
name
:
str
=
field1
(
default
=
"Voldemort"
)
57
58
59
CustomerModel1
()
60
CustomerModel1
(
name
=
"hi"
)
61
62
# This should generate an error because "id" is not
63
# supposed to be part of the init function.
64
CustomerModel1
(
id
=
1
,
name
=
"hi"
)
# E
[unknown-argument] Argument `id` does not match any known parameter
65
66
67
@create_model
()
68
class
CustomerModel2
:
69
id
:
int
=
field2
()
70
name
:
str
=
field2
(
init
=
True
)
71
72
73
# This should generate an error because kw_only is True
74
# by default for field2.
75
CustomerModel2
(
1
)
# E
[missing-argument] No argument provided for required parameter `name` [too-many-positional-arguments] Too many positional arguments: expected 0, got 1
76
77
CustomerModel2
(
name
=
"Fred"
)