|
2 | 2 | import json |
3 | 3 | import string |
4 | 4 | import textwrap |
| 5 | +import importlib |
5 | 6 |
|
6 | 7 | import stringcase |
7 | 8 |
|
|
15 | 16 | custom_imports = collections.defaultdict(lambda: collections.defaultdict(list)) |
16 | 17 |
|
17 | 18 |
|
| 19 | +def _get_custom(module_name, prop, default): |
| 20 | + if not module_name: |
| 21 | + return default |
| 22 | + try: |
| 23 | + module = importlib.import_module(module_name) |
| 24 | + return getattr(module, prop, default) |
| 25 | + except ImportError: |
| 26 | + return default |
| 27 | + |
| 28 | + |
| 29 | +def get_custom_imports(module_name): |
| 30 | + return _get_custom(module_name, "custom_imports", {}) |
| 31 | + |
| 32 | + |
| 33 | +def get_custom_props(module_name): |
| 34 | + return _get_custom(module_name, "custom_props", {}) |
| 35 | + |
| 36 | + |
18 | 37 | def _clean_key(key): |
19 | 38 | k = "" |
20 | 39 | for ch in key: |
@@ -118,17 +137,18 @@ def generate_enum(type_info, *_): |
118 | 137 |
|
119 | 138 |
|
120 | 139 | def get_prop_typing( |
121 | | - type_name: str, component_name: str, prop_name: str, type_info, namespace=None |
| 140 | + type_name: str, |
| 141 | + component_name: str, |
| 142 | + prop_name: str, |
| 143 | + type_info, |
| 144 | + custom_props=None, |
122 | 145 | ): |
123 | 146 | if prop_name == "id": |
124 | 147 | # Id is always the same either a string or a dict for pattern matching. |
125 | 148 | return "typing.Union[str, dict]" |
126 | 149 |
|
127 | | - if namespace: |
128 | | - # Only check the namespace once |
129 | | - special = ( |
130 | | - special_cases.get(namespace, {}).get(component_name, {}).get(prop_name) |
131 | | - ) |
| 150 | + if custom_props: |
| 151 | + special = custom_props.get(component_name, {}).get(prop_name) |
132 | 152 | if special: |
133 | 153 | return special(type_info, component_name, prop_name) |
134 | 154 |
|
@@ -158,27 +178,6 @@ def generator(*_): |
158 | 178 | return generator |
159 | 179 |
|
160 | 180 |
|
161 | | -special_cases = { |
162 | | - "dash_core_components": { |
163 | | - "Graph": {"figure": generate_plotly_figure}, |
164 | | - "DatePickerRange": { |
165 | | - "start_date": generate_datetime_prop("DatePickerRange"), |
166 | | - "end_date": generate_datetime_prop("DatePickerRange"), |
167 | | - "min_date_allowed": generate_datetime_prop("DatePickerRange"), |
168 | | - "max_date_allowed": generate_datetime_prop("DatePickerRange"), |
169 | | - "disabled_days": generate_datetime_prop("DatePickerRange", True), |
170 | | - }, |
171 | | - "DatePickerSingle": { |
172 | | - "date": generate_datetime_prop("DatePickerSingle"), |
173 | | - "min_date_allowed": generate_datetime_prop("DatePickerSingle"), |
174 | | - "max_date_allowed": generate_datetime_prop("DatePickerSingle"), |
175 | | - "disabled_days": generate_datetime_prop("DatePickerSingle", True), |
176 | | - "initial_visible_month": generate_datetime_prop("DatePickerSingle"), |
177 | | - }, |
178 | | - } |
179 | | -} |
180 | | - |
181 | | - |
182 | 181 | PROP_TYPING = { |
183 | 182 | "array": generate_type("typing.Sequence"), |
184 | 183 | "arrayOf": generate_array_of, |
|
0 commit comments