core: 2022.7 haveibeenpwned integration stopped working
The problem
Since upgrading to 2022.7 (0,1,2) the HaveIBeenPwned integration stopped working. It no longer fetches breached/ non-breached statuses.
The log shows errors as indicated further down in the log-section.
Happy to provide more info/ test things out for you.
What version of Home Assistant Core has the issue?
2022.07.2
What was the last working version of Home Assistant Core?
2202.06.x
What type of installation are you running?
Home Assistant OS
Integration causing the issue
HaveIBeenPwned
Link to integration documentation on our website
https://www.home-assistant.io/integrations/haveibeenpwned/
Diagnostics information
No response
Example YAML snippet
No response
Anything in the logs that might be useful for us?
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/anyio/streams/tls.py", line 130, in _call_sslobject_method
result = func(*args)
File "/usr/local/lib/python3.10/ssl.py", line 917, in read
v = self._sslobj.read(len)
ssl.SSLWantReadError: The operation did not complete (read) (_ssl.c:2548)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/httpcore/backends/asyncio.py", line 33, in read
return await self._stream.receive(max_bytes=max_bytes)
File "/usr/local/lib/python3.10/site-packages/anyio/streams/tls.py", line 195, in receive
data = await self._call_sslobject_method(self._ssl_object.read, max_bytes)
File "/usr/local/lib/python3.10/site-packages/anyio/streams/tls.py", line 137, in _call_sslobject_method
data = await self.transport_stream.receive()
File "/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 1265, in receive
await self._protocol.read_event.wait()
File "/usr/local/lib/python3.10/asyncio/locks.py", line 214, in wait
await fut
asyncio.exceptions.CancelledError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/httpcore/_exceptions.py", line 8, in map_exceptions
yield
File "/usr/local/lib/python3.10/site-packages/httpcore/backends/asyncio.py", line 31, in read
with anyio.fail_after(timeout):
File "/usr/local/lib/python3.10/site-packages/anyio/_core/_tasks.py", line 118, in __exit__
raise TimeoutError
TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/httpx/_transports/default.py", line 60, in map_httpcore_exceptions
yield
File "/usr/local/lib/python3.10/site-packages/httpx/_transports/default.py", line 353, in handle_async_request
resp = await self._pool.handle_async_request(req)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/connection_pool.py", line 253, in handle_async_request
raise exc
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/connection_pool.py", line 237, in handle_async_request
response = await connection.handle_async_request(request)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/connection.py", line 90, in handle_async_request
return await self._connection.handle_async_request(request)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/http11.py", line 105, in handle_async_request
raise exc
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/http11.py", line 84, in handle_async_request
) = await self._receive_response_headers(**kwargs)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/http11.py", line 148, in _receive_response_headers
event = await self._receive_event(timeout=timeout)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/http11.py", line 177, in _receive_event
data = await self._network_stream.read(
File "/usr/local/lib/python3.10/site-packages/httpcore/backends/asyncio.py", line 30, in read
with map_exceptions(exc_map):
File "/usr/local/lib/python3.10/contextlib.py", line 153, in __exit__
self.gen.throw(typ, value, traceback)
File "/usr/local/lib/python3.10/site-packages/httpcore/_exceptions.py", line 12, in map_exceptions
raise to_exc(exc)
httpcore.ReadTimeout
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 205, in _async_refresh
self.data = await self._async_update_data()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 164, in _async_update_data
return await self.update_method()
File "/usr/src/homeassistant/homeassistant/components/luftdaten/__init__.py", line 43, in async_update
await sensor_community.get_data()
File "/usr/local/lib/python3.10/site-packages/luftdaten/__init__.py", line 29, in get_data
response = await client.get(str(url))
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1751, in get
return await self.request(
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1527, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1614, in send
response = await self._send_handling_auth(
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1642, in _send_handling_auth
response = await self._send_handling_redirects(
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1679, in _send_handling_redirects
response = await self._send_single_request(request)
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1716, in _send_single_request
response = await transport.handle_async_request(request)
File "/usr/local/lib/python3.10/site-packages/httpx/_transports/default.py", line 352, in handle_async_request
with map_httpcore_exceptions():
File "/usr/local/lib/python3.10/contextlib.py", line 153, in __exit__
self.gen.throw(typ, value, traceback)
File "/usr/local/lib/python3.10/site-packages/httpx/_transports/default.py", line 77, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ReadTimeout
2022-07-09 11:12:23 ERROR (SyncWorker_0) [homeassistant.components.haveibeenpwned.sensor] Failed fetching data for [email adress being checked]
Additional information
No response
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 26 (4 by maintainers)
I have a working version; I’ll clean up the code a bit and see if I can figure out the github stuff to get it into production.
FYI: I’ve cloned the repo and am working on seeing if I can understand the issue any better.
So I looked into it deeper and found the PyPi library for HaveIBeenPwned was outdated. It uses version 2 of the HaveIBeenPwned API, which has been deprecated with breaking changes. Version 3 of the API is a requirement. There is no way to ensure backwards compatibility with the library that uses V2 of the API because V3 requires the use of an API key. I just went through the effort of rewriting a new library that uses V3 of the API. It is tested and working.
When I get some time, I’ll see if I can get this included in PyPi, either as a new module specific for V3 of the API or as an upgrade to the existing module. Since it has breaking changes for the existing module, it might be better to add it as a new module until the previous version can be deprecated (even though, in theory, it is already broken since the v2 API is no longer functional). I think it would make sense to have one library in PyPi for each version of the HaveIBeenPwned API that is active.
I expect there will be a bunch of documentation and whatnot that I’ll have to prepared. Once that is complete, I can update the HA integration to use the new PyPi library that supports V3 of the HaveIBeenPwned API.
At least there is light at the end of the tunnel.
FYI: I have found the issue persists in 2022.7.3.