|
25 | 25 | from .helpers import device_list_from_string, host_valid |
26 | 26 |
|
27 | 27 |
|
| 28 | +def generate_config_schema(step_id: str, user_input: dict[str, Any]) -> vol.Schema: |
| 29 | + """Generate config flow or repair schema.""" |
| 30 | + schema: dict[vol.Marker, Any] = {} |
| 31 | + |
| 32 | + if step_id == "user": |
| 33 | + schema |= {vol.Required(CONF_NAME, default=user_input[CONF_NAME]): cv.string} |
| 34 | + |
| 35 | + if step_id in ["reconfigure", "confirm", "user"]: |
| 36 | + schema |= { |
| 37 | + vol.Required(CONF_HOST, default=user_input[CONF_HOST]): cv.string, |
| 38 | + vol.Required(CONF_PORT, default=user_input[CONF_PORT]): vol.Coerce(int), |
| 39 | + vol.Required( |
| 40 | + f"{ConfName.DEVICE_LIST}", |
| 41 | + default=user_input[ConfName.DEVICE_LIST], |
| 42 | + ): cv.string, |
| 43 | + } |
| 44 | + |
| 45 | + return vol.Schema(schema) |
| 46 | + |
| 47 | + |
28 | 48 | @callback |
29 | 49 | def solaredge_modbus_multi_entries(hass: HomeAssistant): |
30 | 50 | """Return the hosts already configured.""" |
@@ -96,19 +116,7 @@ async def async_step_user( |
96 | 116 |
|
97 | 117 | return self.async_show_form( |
98 | 118 | step_id="user", |
99 | | - data_schema=vol.Schema( |
100 | | - { |
101 | | - vol.Optional(CONF_NAME, default=user_input[CONF_NAME]): cv.string, |
102 | | - vol.Required(CONF_HOST, default=user_input[CONF_HOST]): cv.string, |
103 | | - vol.Required(CONF_PORT, default=user_input[CONF_PORT]): vol.Coerce( |
104 | | - int |
105 | | - ), |
106 | | - vol.Required( |
107 | | - f"{ConfName.DEVICE_LIST}", |
108 | | - default=user_input[ConfName.DEVICE_LIST], |
109 | | - ): cv.string, |
110 | | - }, |
111 | | - ), |
| 119 | + data_schema=generate_config_schema("user", user_input), |
112 | 120 | errors=errors, |
113 | 121 | ) |
114 | 122 |
|
@@ -169,18 +177,7 @@ async def async_step_reconfigure( |
169 | 177 |
|
170 | 178 | return self.async_show_form( |
171 | 179 | step_id="reconfigure", |
172 | | - data_schema=vol.Schema( |
173 | | - { |
174 | | - vol.Required(CONF_HOST, default=user_input[CONF_HOST]): cv.string, |
175 | | - vol.Required(CONF_PORT, default=user_input[CONF_PORT]): vol.Coerce( |
176 | | - int |
177 | | - ), |
178 | | - vol.Required( |
179 | | - f"{ConfName.DEVICE_LIST}", |
180 | | - default=user_input[ConfName.DEVICE_LIST], |
181 | | - ): cv.string, |
182 | | - }, |
183 | | - ), |
| 180 | + data_schema=generate_config_schema("reconfigure", user_input), |
184 | 181 | errors=errors, |
185 | 182 | ) |
186 | 183 |
|
|
0 commit comments