|
14 | 14 | MontaApiClientCommunicationError, |
15 | 15 | MontaApiClientError, |
16 | 16 | ) |
17 | | -from .const import CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL, DOMAIN, LOGGER, STORAGE_KEY, STORAGE_VERSION |
| 17 | +from .const import ( |
| 18 | + CONF_SCAN_INTERVAL, |
| 19 | + CONF_SCAN_INTERVAL_CHARGE_POINTS, |
| 20 | + CONF_SCAN_INTERVAL_WALLET, |
| 21 | + CONF_SCAN_INTERVAL_TRANSACTIONS, |
| 22 | + DEFAULT_SCAN_INTERVAL, |
| 23 | + DEFAULT_SCAN_INTERVAL_CHARGE_POINTS, |
| 24 | + DEFAULT_SCAN_INTERVAL_WALLET, |
| 25 | + DEFAULT_SCAN_INTERVAL_TRANSACTIONS, |
| 26 | + DOMAIN, |
| 27 | + LOGGER, |
| 28 | + STORAGE_KEY, |
| 29 | + STORAGE_VERSION, |
| 30 | +) |
| 31 | + |
| 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 | + ) |
18 | 99 |
|
19 | 100 |
|
20 | 101 | class MontaFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): |
@@ -51,34 +132,7 @@ async def async_step_user( |
51 | 132 |
|
52 | 133 | return self.async_show_form( |
53 | 134 | step_id="user", |
54 | | - data_schema=vol.Schema( |
55 | | - { |
56 | | - vol.Required( |
57 | | - CONF_CLIENT_ID, |
58 | | - default=(user_input or {}).get(CONF_CLIENT_ID), |
59 | | - ): selector.TextSelector( |
60 | | - selector.TextSelectorConfig( |
61 | | - type=selector.TextSelectorType.TEXT |
62 | | - ), |
63 | | - ), |
64 | | - vol.Required(CONF_CLIENT_SECRET): selector.TextSelector( |
65 | | - selector.TextSelectorConfig( |
66 | | - type=selector.TextSelectorType.PASSWORD |
67 | | - ), |
68 | | - ), |
69 | | - vol.Optional( |
70 | | - CONF_SCAN_INTERVAL, |
71 | | - default=(user_input or {}).get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL), |
72 | | - ): selector.NumberSelector( |
73 | | - selector.NumberSelectorConfig( |
74 | | - min=30, |
75 | | - max=3600, |
76 | | - unit_of_measurement="seconds", |
77 | | - mode=selector.NumberSelectorMode.BOX, |
78 | | - ), |
79 | | - ), |
80 | | - } |
81 | | - ), |
| 135 | + data_schema=build_schema(user_input or {}), |
82 | 136 | errors=_errors, |
83 | 137 | ) |
84 | 138 |
|
@@ -145,52 +199,44 @@ async def async_step_init( |
145 | 199 | CONF_CLIENT_ID: user_input[CONF_CLIENT_ID], |
146 | 200 | CONF_CLIENT_SECRET: user_input[CONF_CLIENT_SECRET], |
147 | 201 | CONF_SCAN_INTERVAL: user_input.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL), |
| 202 | + CONF_SCAN_INTERVAL_CHARGE_POINTS: user_input.get(CONF_SCAN_INTERVAL_CHARGE_POINTS, DEFAULT_SCAN_INTERVAL_CHARGE_POINTS), |
| 203 | + CONF_SCAN_INTERVAL_WALLET: user_input.get(CONF_SCAN_INTERVAL_WALLET, DEFAULT_SCAN_INTERVAL_WALLET), |
| 204 | + CONF_SCAN_INTERVAL_TRANSACTIONS: user_input.get(CONF_SCAN_INTERVAL_TRANSACTIONS, DEFAULT_SCAN_INTERVAL_TRANSACTIONS), |
148 | 205 | }, |
149 | 206 | ) |
150 | 207 | return self.async_create_entry(title="", data=user_input) |
151 | 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 | + |
152 | 237 | return self.async_show_form( |
153 | 238 | step_id="init", |
154 | | - data_schema=vol.Schema( |
155 | | - { |
156 | | - vol.Required( |
157 | | - CONF_CLIENT_ID, |
158 | | - default=(user_input or {}).get( |
159 | | - CONF_CLIENT_ID, |
160 | | - self.config_entry.data.get(CONF_CLIENT_ID), |
161 | | - ), |
162 | | - ): selector.TextSelector( |
163 | | - selector.TextSelectorConfig( |
164 | | - type=selector.TextSelectorType.TEXT |
165 | | - ), |
166 | | - ), |
167 | | - vol.Required( |
168 | | - CONF_CLIENT_SECRET, |
169 | | - default=(user_input or {}).get( |
170 | | - CONF_CLIENT_SECRET, |
171 | | - self.config_entry.data.get(CONF_CLIENT_SECRET), |
172 | | - ), |
173 | | - ): selector.TextSelector( |
174 | | - selector.TextSelectorConfig( |
175 | | - type=selector.TextSelectorType.PASSWORD |
176 | | - ), |
177 | | - ), |
178 | | - vol.Optional( |
179 | | - CONF_SCAN_INTERVAL, |
180 | | - default=self.config_entry.options.get( |
181 | | - CONF_SCAN_INTERVAL, |
182 | | - self.config_entry.data.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL), |
183 | | - ), |
184 | | - ): selector.NumberSelector( |
185 | | - selector.NumberSelectorConfig( |
186 | | - min=30, |
187 | | - max=3600, |
188 | | - unit_of_measurement="seconds", |
189 | | - mode=selector.NumberSelectorMode.BOX, |
190 | | - ), |
191 | | - ), |
192 | | - } |
193 | | - ), |
| 239 | + data_schema=build_schema(defaults), |
194 | 240 | errors=_errors, |
195 | 241 | ) |
196 | 242 |
|
|
0 commit comments