|
33 | 33 |
|
34 | 34 | _LOGGER = logging.getLogger(__name__) |
35 | 35 |
|
36 | | -MAXIMUM_RATES_PER_HOUR = 20 |
| 36 | +MAXIMUM_DISPATCH_REQUESTS_PER_HOUR = 20 |
37 | 37 |
|
38 | 38 | class IntelligentDispatchDataUpdateCoordinator(DataUpdateCoordinator): |
39 | 39 |
|
@@ -145,43 +145,46 @@ async def async_retrieve_intelligent_dispatches( |
145 | 145 | is_manual_refresh: bool, |
146 | 146 | planned_dispatches_supported: bool, |
147 | 147 | ): |
148 | | - requests_current_hour = existing_intelligent_dispatches_result.requests_current_hour if existing_intelligent_dispatches_result is not None else 0 |
149 | | - requests_last_reset = existing_intelligent_dispatches_result.requests_current_hour_last_reset if existing_intelligent_dispatches_result is not None else current |
150 | | - |
151 | | - if current - requests_last_reset >= timedelta(hours=1): |
152 | | - requests_current_hour = 0 |
153 | | - requests_last_reset = current |
154 | | - |
155 | | - if requests_current_hour >= MAXIMUM_RATES_PER_HOUR: |
156 | | - _LOGGER.debug('Maximum requests reached for current hour') |
157 | | - return IntelligentDispatchesCoordinatorResult( |
158 | | - existing_intelligent_dispatches_result.last_evaluated, |
159 | | - existing_intelligent_dispatches_result.request_attempts, |
160 | | - existing_intelligent_dispatches_result.dispatches, |
161 | | - existing_intelligent_dispatches_result.requests_current_hour, |
162 | | - existing_intelligent_dispatches_result.requests_current_hour_last_reset, |
163 | | - last_error=f"Maximum requests of {MAXIMUM_RATES_PER_HOUR}/hour reached. Will reset after {requests_last_reset + timedelta(hours=1)}" |
164 | | - ) |
165 | | - |
166 | | - # We don't want manual refreshing to occur too many times |
167 | | - if (is_manual_refresh and |
168 | | - existing_intelligent_dispatches_result is not None and |
169 | | - (existing_intelligent_dispatches_result.last_retrieved + timedelta(minutes=1)) > current): |
170 | | - _LOGGER.debug('Maximum requests reached for current hour') |
171 | | - return IntelligentDispatchesCoordinatorResult( |
172 | | - existing_intelligent_dispatches_result.last_evaluated, |
173 | | - existing_intelligent_dispatches_result.request_attempts, |
174 | | - existing_intelligent_dispatches_result.dispatches, |
175 | | - existing_intelligent_dispatches_result.requests_current_hour, |
176 | | - existing_intelligent_dispatches_result.requests_current_hour_last_reset, |
177 | | - last_error=f"Manual refreshing of dispatches cannot be be called again until {existing_intelligent_dispatches_result.last_retrieved + timedelta(minutes=1)}" |
178 | | - ) |
179 | | - |
180 | 148 | if (account_info is not None): |
181 | 149 | account_id = account_info["id"] |
182 | 150 | if (existing_intelligent_dispatches_result is None or |
183 | 151 | current >= existing_intelligent_dispatches_result.next_refresh or |
184 | 152 | is_manual_refresh): |
| 153 | + |
| 154 | + requests_current_hour = existing_intelligent_dispatches_result.requests_current_hour if existing_intelligent_dispatches_result is not None else 0 |
| 155 | + requests_last_reset = existing_intelligent_dispatches_result.requests_current_hour_last_reset if existing_intelligent_dispatches_result is not None else current |
| 156 | + |
| 157 | + if current - requests_last_reset >= timedelta(hours=1): |
| 158 | + requests_current_hour = 0 |
| 159 | + requests_last_reset = current |
| 160 | + |
| 161 | + if requests_current_hour >= MAXIMUM_DISPATCH_REQUESTS_PER_HOUR: |
| 162 | + error = f"Maximum requests of {MAXIMUM_DISPATCH_REQUESTS_PER_HOUR}/hour reached. Will reset after {requests_last_reset + timedelta(hours=1)}" |
| 163 | + _LOGGER.debug(error) |
| 164 | + return IntelligentDispatchesCoordinatorResult( |
| 165 | + existing_intelligent_dispatches_result.last_evaluated, |
| 166 | + existing_intelligent_dispatches_result.request_attempts, |
| 167 | + existing_intelligent_dispatches_result.dispatches, |
| 168 | + existing_intelligent_dispatches_result.requests_current_hour, |
| 169 | + existing_intelligent_dispatches_result.requests_current_hour_last_reset, |
| 170 | + last_error=error |
| 171 | + ) |
| 172 | + |
| 173 | + # We don't want manual refreshing to occur too many times |
| 174 | + if (is_manual_refresh and |
| 175 | + existing_intelligent_dispatches_result is not None and |
| 176 | + (existing_intelligent_dispatches_result.last_retrieved + timedelta(minutes=1)) > current): |
| 177 | + error = f"Manual refreshing of dispatches cannot be be called again until {existing_intelligent_dispatches_result.last_retrieved + timedelta(minutes=1)}" |
| 178 | + _LOGGER.debug(error) |
| 179 | + return IntelligentDispatchesCoordinatorResult( |
| 180 | + existing_intelligent_dispatches_result.last_evaluated, |
| 181 | + existing_intelligent_dispatches_result.request_attempts, |
| 182 | + existing_intelligent_dispatches_result.dispatches, |
| 183 | + existing_intelligent_dispatches_result.requests_current_hour, |
| 184 | + existing_intelligent_dispatches_result.requests_current_hour_last_reset, |
| 185 | + last_error=error |
| 186 | + ) |
| 187 | + |
185 | 188 | dispatches = None |
186 | 189 | raised_exception = None |
187 | 190 | if has_intelligent_tariff(current, account_info) and intelligent_device is not None: |
|
0 commit comments