2
2
# Generate it instead with the provided metadata.json
3
3
# for them to be able to report invalid prop
4
4
5
+ import json
5
6
import os
6
7
import re
7
8
9
+ from dash .development ._py_prop_typing import get_custom_ignore
10
+
8
11
9
12
init_check_re = re .compile ("proptypes.js" )
10
13
25
28
26
29
prop_type_file_template = """// AUTOGENERATED FILE - DO NOT EDIT
27
30
28
- var PropTypes = window.PropTypes;
29
-
31
+ var pt = window.PropTypes;
32
+ var pk = window['{package_name}'];
30
33
31
34
{components_prop_types}
32
35
"""
33
36
34
- component_prop_types_template = (
35
- "window['{package_name}'].{component_name}.propTypes = {prop_types}"
36
- )
37
+ component_prop_types_template = "pk.{component_name}.propTypes = {prop_types};"
37
38
38
39
39
40
def generate_type (type_name ):
40
41
def wrap (* _ ):
41
- return f"PropTypes .{ type_name } "
42
+ return f"pt .{ type_name } "
42
43
43
44
return wrap
44
45
45
46
46
47
def generate_union (prop_info ):
47
48
types = [generate_prop_type (t ) for t in prop_info ["value" ]]
48
- return f"PropTypes .oneOfType([{ ',' .join (types )} ])"
49
+ return f"pt .oneOfType([{ ',' .join (types )} ])"
49
50
50
51
51
52
def generate_shape (prop_info ):
52
53
props = []
53
54
for key , value in prop_info ["value" ].items ():
54
55
props .append (f"{ key } :{ generate_prop_type (value )} " )
55
56
inner = "{" + "," .join (props ) + "}"
56
- return f"PropTypes .shape({ inner } )"
57
+ return f"pt .shape({ inner } )"
57
58
58
59
59
60
def generate_array_of (prop_info ):
60
61
inner_type = generate_prop_type (prop_info ["value" ])
61
- return f"PropTypes .arrayOf({ inner_type } )"
62
+ return f"pt .arrayOf({ inner_type } )"
62
63
63
64
64
65
def generate_any (* _ ):
65
- return "PropTypes .any"
66
+ return "pt .any"
66
67
67
68
68
69
def generate_enum (prop_info ):
69
70
values = str ([v ["value" ] for v in prop_info ["value" ]])
70
- return f"PropTypes .oneOf({ values } )"
71
+ return f"pt .oneOf({ values } )"
71
72
72
73
73
74
def generate_object_of (prop_info ):
74
- return f"PropTypes .objectOf({ generate_prop_type (prop_info ['value' ])} )"
75
+ return f"pt .objectOf({ generate_prop_type (prop_info ['value' ])} )"
75
76
76
77
77
78
def generate_tuple (* _ ):
78
79
# PropTypes don't have a tuple... just generate an array.
79
- return "PropTypes.array"
80
+ return "pt.array"
81
+
82
+
83
+ def generate_literal (prop_info ):
84
+ return f"pt.oneOf([{ json .dumps (prop_info ['value' ])} ])"
80
85
81
86
82
87
prop_types = {
@@ -97,6 +102,7 @@ def generate_tuple(*_):
97
102
"enum" : generate_enum ,
98
103
"objectOf" : generate_object_of ,
99
104
"tuple" : generate_tuple ,
105
+ "literal" : generate_literal ,
100
106
}
101
107
102
108
@@ -122,9 +128,12 @@ def check_init(namespace):
122
128
def generate_prop_types (
123
129
metadata ,
124
130
package_name ,
131
+ custom_typing_module ,
125
132
):
126
133
patched = []
127
134
135
+ custom_ignore = get_custom_ignore (custom_typing_module )
136
+
128
137
for component_path , data in metadata .items ():
129
138
filename = component_path .split ("/" )[- 1 ]
130
139
extension = filename .split ("/" )[- 1 ].split ("." )[- 1 ]
@@ -135,13 +144,17 @@ def generate_prop_types(
135
144
136
145
props = []
137
146
for prop_name , prop_data in data .get ("props" , {}).items ():
138
- props .append (f" { prop_name } :{ generate_prop_type (prop_data ['type' ])} " )
147
+ if prop_name in custom_ignore :
148
+ prop_type = "pt.any"
149
+ else :
150
+ prop_type = generate_prop_type (prop_data ["type" ])
151
+ props .append (f"{ prop_name } :{ prop_type } " )
139
152
140
153
patched .append (
141
154
component_prop_types_template .format (
142
155
package_name = package_name ,
143
156
component_name = component_name ,
144
- prop_types = "{" + ",\n " .join (props ) + "}" ,
157
+ prop_types = "{" + ",\n " .join (props ) + "}" ,
145
158
)
146
159
)
147
160
@@ -151,7 +164,7 @@ def generate_prop_types(
151
164
) as f :
152
165
f .write (
153
166
prop_type_file_template .format (
154
- components_prop_types = "\n \n " .join (patched )
167
+ package_name = package_name , components_prop_types = "\n " .join (patched )
155
168
)
156
169
)
157
170
0 commit comments