|
30 | 30 | ) |
31 | 31 |
|
32 | 32 |
|
| 33 | +def build_schema(defaults: dict) -> vol.Schema: |
| 34 | + """Build the configuration schema with provided defaults.""" |
| 35 | + return vol.Schema( |
| 36 | + { |
| 37 | + vol.Required( |
| 38 | + CONF_CLIENT_ID, |
| 39 | + default=defaults.get(CONF_CLIENT_ID), |
| 40 | + ): selector.TextSelector( |
| 41 | + selector.TextSelectorConfig( |
| 42 | + type=selector.TextSelectorType.TEXT |
| 43 | + ), |
| 44 | + ), |
| 45 | + vol.Required( |
| 46 | + CONF_CLIENT_SECRET, |
| 47 | + default=defaults.get(CONF_CLIENT_SECRET), |
| 48 | + ): selector.TextSelector( |
| 49 | + selector.TextSelectorConfig( |
| 50 | + type=selector.TextSelectorType.PASSWORD |
| 51 | + ), |
| 52 | + ), |
| 53 | + vol.Optional( |
| 54 | + CONF_SCAN_INTERVAL, |
| 55 | + default=defaults.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL), |
| 56 | + ): selector.NumberSelector( |
| 57 | + selector.NumberSelectorConfig( |
| 58 | + min=30, |
| 59 | + max=3600, |
| 60 | + unit_of_measurement="seconds", |
| 61 | + mode=selector.NumberSelectorMode.BOX, |
| 62 | + ), |
| 63 | + ), |
| 64 | + vol.Optional( |
| 65 | + CONF_SCAN_INTERVAL_CHARGE_POINTS, |
| 66 | + default=defaults.get(CONF_SCAN_INTERVAL_CHARGE_POINTS, DEFAULT_SCAN_INTERVAL_CHARGE_POINTS), |
| 67 | + ): selector.NumberSelector( |
| 68 | + selector.NumberSelectorConfig( |
| 69 | + min=30, |
| 70 | + max=3600, |
| 71 | + unit_of_measurement="seconds", |
| 72 | + mode=selector.NumberSelectorMode.BOX, |
| 73 | + ), |
| 74 | + ), |
| 75 | + vol.Optional( |
| 76 | + CONF_SCAN_INTERVAL_WALLET, |
| 77 | + default=defaults.get(CONF_SCAN_INTERVAL_WALLET, DEFAULT_SCAN_INTERVAL_WALLET), |
| 78 | + ): selector.NumberSelector( |
| 79 | + selector.NumberSelectorConfig( |
| 80 | + min=30, |
| 81 | + max=7200, |
| 82 | + unit_of_measurement="seconds", |
| 83 | + mode=selector.NumberSelectorMode.BOX, |
| 84 | + ), |
| 85 | + ), |
| 86 | + vol.Optional( |
| 87 | + CONF_SCAN_INTERVAL_TRANSACTIONS, |
| 88 | + default=defaults.get(CONF_SCAN_INTERVAL_TRANSACTIONS, DEFAULT_SCAN_INTERVAL_TRANSACTIONS), |
| 89 | + ): selector.NumberSelector( |
| 90 | + selector.NumberSelectorConfig( |
| 91 | + min=30, |
| 92 | + max=7200, |
| 93 | + unit_of_measurement="seconds", |
| 94 | + mode=selector.NumberSelectorMode.BOX, |
| 95 | + ), |
| 96 | + ), |
| 97 | + } |
| 98 | + ) |
| 99 | + |
| 100 | + |
33 | 101 | class MontaFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): |
34 | 102 | """Config flow for Monta.""" |
35 | 103 |
|
@@ -64,67 +132,7 @@ async def async_step_user( |
64 | 132 |
|
65 | 133 | return self.async_show_form( |
66 | 134 | step_id="user", |
67 | | - data_schema=vol.Schema( |
68 | | - { |
69 | | - vol.Required( |
70 | | - CONF_CLIENT_ID, |
71 | | - default=(user_input or {}).get(CONF_CLIENT_ID), |
72 | | - ): selector.TextSelector( |
73 | | - selector.TextSelectorConfig( |
74 | | - type=selector.TextSelectorType.TEXT |
75 | | - ), |
76 | | - ), |
77 | | - vol.Required(CONF_CLIENT_SECRET): selector.TextSelector( |
78 | | - selector.TextSelectorConfig( |
79 | | - type=selector.TextSelectorType.PASSWORD |
80 | | - ), |
81 | | - ), |
82 | | - vol.Optional( |
83 | | - CONF_SCAN_INTERVAL, |
84 | | - default=(user_input or {}).get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL), |
85 | | - ): selector.NumberSelector( |
86 | | - selector.NumberSelectorConfig( |
87 | | - min=30, |
88 | | - max=3600, |
89 | | - unit_of_measurement="seconds", |
90 | | - mode=selector.NumberSelectorMode.BOX, |
91 | | - ), |
92 | | - ), |
93 | | - vol.Optional( |
94 | | - CONF_SCAN_INTERVAL_CHARGE_POINTS, |
95 | | - default=(user_input or {}).get(CONF_SCAN_INTERVAL_CHARGE_POINTS, DEFAULT_SCAN_INTERVAL_CHARGE_POINTS), |
96 | | - ): selector.NumberSelector( |
97 | | - selector.NumberSelectorConfig( |
98 | | - min=30, |
99 | | - max=3600, |
100 | | - unit_of_measurement="seconds", |
101 | | - mode=selector.NumberSelectorMode.BOX, |
102 | | - ), |
103 | | - ), |
104 | | - vol.Optional( |
105 | | - CONF_SCAN_INTERVAL_WALLET, |
106 | | - default=(user_input or {}).get(CONF_SCAN_INTERVAL_WALLET, DEFAULT_SCAN_INTERVAL_WALLET), |
107 | | - ): selector.NumberSelector( |
108 | | - selector.NumberSelectorConfig( |
109 | | - min=30, |
110 | | - max=7200, |
111 | | - unit_of_measurement="seconds", |
112 | | - mode=selector.NumberSelectorMode.BOX, |
113 | | - ), |
114 | | - ), |
115 | | - vol.Optional( |
116 | | - CONF_SCAN_INTERVAL_TRANSACTIONS, |
117 | | - default=(user_input or {}).get(CONF_SCAN_INTERVAL_TRANSACTIONS, DEFAULT_SCAN_INTERVAL_TRANSACTIONS), |
118 | | - ): selector.NumberSelector( |
119 | | - selector.NumberSelectorConfig( |
120 | | - min=30, |
121 | | - max=7200, |
122 | | - unit_of_measurement="seconds", |
123 | | - mode=selector.NumberSelectorMode.BOX, |
124 | | - ), |
125 | | - ), |
126 | | - } |
127 | | - ), |
| 135 | + data_schema=build_schema(user_input or {}), |
128 | 136 | errors=_errors, |
129 | 137 | ) |
130 | 138 |
|
@@ -198,90 +206,37 @@ async def async_step_init( |
198 | 206 | ) |
199 | 207 | return self.async_create_entry(title="", data=user_input) |
200 | 208 |
|
| 209 | + # Build defaults from user_input -> options -> data |
| 210 | + defaults = { |
| 211 | + CONF_CLIENT_ID: (user_input or {}).get( |
| 212 | + CONF_CLIENT_ID, |
| 213 | + self.config_entry.data.get(CONF_CLIENT_ID), |
| 214 | + ), |
| 215 | + CONF_CLIENT_SECRET: (user_input or {}).get( |
| 216 | + CONF_CLIENT_SECRET, |
| 217 | + self.config_entry.data.get(CONF_CLIENT_SECRET), |
| 218 | + ), |
| 219 | + CONF_SCAN_INTERVAL: self.config_entry.options.get( |
| 220 | + CONF_SCAN_INTERVAL, |
| 221 | + self.config_entry.data.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL), |
| 222 | + ), |
| 223 | + CONF_SCAN_INTERVAL_CHARGE_POINTS: self.config_entry.options.get( |
| 224 | + CONF_SCAN_INTERVAL_CHARGE_POINTS, |
| 225 | + self.config_entry.data.get(CONF_SCAN_INTERVAL_CHARGE_POINTS, DEFAULT_SCAN_INTERVAL_CHARGE_POINTS), |
| 226 | + ), |
| 227 | + CONF_SCAN_INTERVAL_WALLET: self.config_entry.options.get( |
| 228 | + CONF_SCAN_INTERVAL_WALLET, |
| 229 | + self.config_entry.data.get(CONF_SCAN_INTERVAL_WALLET, DEFAULT_SCAN_INTERVAL_WALLET), |
| 230 | + ), |
| 231 | + CONF_SCAN_INTERVAL_TRANSACTIONS: self.config_entry.options.get( |
| 232 | + CONF_SCAN_INTERVAL_TRANSACTIONS, |
| 233 | + self.config_entry.data.get(CONF_SCAN_INTERVAL_TRANSACTIONS, DEFAULT_SCAN_INTERVAL_TRANSACTIONS), |
| 234 | + ), |
| 235 | + } |
| 236 | + |
201 | 237 | return self.async_show_form( |
202 | 238 | step_id="init", |
203 | | - data_schema=vol.Schema( |
204 | | - { |
205 | | - vol.Required( |
206 | | - CONF_CLIENT_ID, |
207 | | - default=(user_input or {}).get( |
208 | | - CONF_CLIENT_ID, |
209 | | - self.config_entry.data.get(CONF_CLIENT_ID), |
210 | | - ), |
211 | | - ): selector.TextSelector( |
212 | | - selector.TextSelectorConfig( |
213 | | - type=selector.TextSelectorType.TEXT |
214 | | - ), |
215 | | - ), |
216 | | - vol.Required( |
217 | | - CONF_CLIENT_SECRET, |
218 | | - default=(user_input or {}).get( |
219 | | - CONF_CLIENT_SECRET, |
220 | | - self.config_entry.data.get(CONF_CLIENT_SECRET), |
221 | | - ), |
222 | | - ): selector.TextSelector( |
223 | | - selector.TextSelectorConfig( |
224 | | - type=selector.TextSelectorType.PASSWORD |
225 | | - ), |
226 | | - ), |
227 | | - vol.Optional( |
228 | | - CONF_SCAN_INTERVAL, |
229 | | - default=self.config_entry.options.get( |
230 | | - CONF_SCAN_INTERVAL, |
231 | | - self.config_entry.data.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL), |
232 | | - ), |
233 | | - ): selector.NumberSelector( |
234 | | - selector.NumberSelectorConfig( |
235 | | - min=30, |
236 | | - max=3600, |
237 | | - unit_of_measurement="seconds", |
238 | | - mode=selector.NumberSelectorMode.BOX, |
239 | | - ), |
240 | | - ), |
241 | | - vol.Optional( |
242 | | - CONF_SCAN_INTERVAL_CHARGE_POINTS, |
243 | | - default=self.config_entry.options.get( |
244 | | - CONF_SCAN_INTERVAL_CHARGE_POINTS, |
245 | | - self.config_entry.data.get(CONF_SCAN_INTERVAL_CHARGE_POINTS, DEFAULT_SCAN_INTERVAL_CHARGE_POINTS), |
246 | | - ), |
247 | | - ): selector.NumberSelector( |
248 | | - selector.NumberSelectorConfig( |
249 | | - min=30, |
250 | | - max=3600, |
251 | | - unit_of_measurement="seconds", |
252 | | - mode=selector.NumberSelectorMode.BOX, |
253 | | - ), |
254 | | - ), |
255 | | - vol.Optional( |
256 | | - CONF_SCAN_INTERVAL_WALLET, |
257 | | - default=self.config_entry.options.get( |
258 | | - CONF_SCAN_INTERVAL_WALLET, |
259 | | - self.config_entry.data.get(CONF_SCAN_INTERVAL_WALLET, DEFAULT_SCAN_INTERVAL_WALLET), |
260 | | - ), |
261 | | - ): selector.NumberSelector( |
262 | | - selector.NumberSelectorConfig( |
263 | | - min=30, |
264 | | - max=7200, |
265 | | - unit_of_measurement="seconds", |
266 | | - mode=selector.NumberSelectorMode.BOX, |
267 | | - ), |
268 | | - ), |
269 | | - vol.Optional( |
270 | | - CONF_SCAN_INTERVAL_TRANSACTIONS, |
271 | | - default=self.config_entry.options.get( |
272 | | - CONF_SCAN_INTERVAL_TRANSACTIONS, |
273 | | - self.config_entry.data.get(CONF_SCAN_INTERVAL_TRANSACTIONS, DEFAULT_SCAN_INTERVAL_TRANSACTIONS), |
274 | | - ), |
275 | | - ): selector.NumberSelector( |
276 | | - selector.NumberSelectorConfig( |
277 | | - min=30, |
278 | | - max=7200, |
279 | | - unit_of_measurement="seconds", |
280 | | - mode=selector.NumberSelectorMode.BOX, |
281 | | - ), |
282 | | - ), |
283 | | - } |
284 | | - ), |
| 239 | + data_schema=build_schema(defaults), |
285 | 240 | errors=_errors, |
286 | 241 | ) |
287 | 242 |
|
|
0 commit comments