benleb / surepy

🐾 Library & CLI to monitor and control the Pet Door & Cat Flap Connect 🚪 the Pet Feeder Connect 🍽 and the Felaqua 💦 sold by Sure Petcare
https://pypi.org/project/surepy/
MIT License
76 stars 36 forks source link

SurePy initializes with 'TypeError: object of type 'int' has no len()' #163

Open paulcombuse opened 1 year ago

paulcombuse commented 1 year ago

The problem

I installed the Sure PetCare integration for Home Assistant and it seemed to work at first for my cat flap and the felaqua water fountain, but I keep getting the error TypeError: object of type 'int' has no len(). I have defined one household, with one pet and one person in the SurePetCare APP. Within the SurePetCare APP everything seems to work like a charm. It seems as if the length of a string object should be determined, but the object is an integer, but I do not know.

The trouble seems to result from this line of the [surepy] repository: https://github.com/benleb/surepy/blob/ff1e396216295be6c172cdfd26d7dbac105dc3b8/surepy/client.py#L281

What version of Home Assistant Core has the issue?

2022.10.2

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant OS

Integration causing the issue

Sure PetCare

Link to integration documentation on our website

No response

Diagnostics information

No response

Example YAML snippet

No response

Anything in the logs that might be useful for us?

Logger: homeassistant.components.surepetcare
Source: components/surepetcare/__init__.py:190
Integration: Sure Petcare (documentation, issues)

Unexpected error fetching surepetcare data: object of type 'int' has no len()
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/components/surepetcare/__init__.py", line 190, in _async_update_data
    return await self.surepy.get_entities(refresh=True)
  File "/usr/local/lib/python3.10/site-packages/surepy/__init__.py", line 400, in get_entities
    await self.get_latest_anonymous_drinks(household_id=household_id)
  File "/usr/local/lib/python3.10/site-packages/surepy/__init__.py", line 216, in get_latest_anonymous_drinks
    household_timeline = await self.get_household_timeline(household_id, entries=50)
  File "/usr/local/lib/python3.10/site-packages/surepy/__init__.py", line 266, in get_household_timeline
    if timeline := await self.sac.call(method="GET", resource=resource):
  File "/usr/local/lib/python3.10/site-packages/surepy/client.py", line 281, in call
    responselen = len(response_data.get("data", 0))
TypeError: object of type 'int' has no len()


### Additional information
Currently I have no devices or entities made available by this integration.
gracar2002 commented 10 months ago

Appears to still be a live issue. Any workarounds?

paulcombuse commented 10 months ago

@gracar2002 Well, I swapped to SureHA - same basis, but frequently updated and aligned to the most current HA versions. For me that solved the issue. Though, I do not really understand why this official repo is not updated more frequently, with the "developer" repository SureHA. What I realized over the past years is that due to the huge efforts and plenty of test runs needed to successfully Pull Requests for a HA integration a lot of developers have a second private "developer" repository - as SureHA in this case. Additionally it can be said that (all) HA integrations should be based on Python library being called by the integration itself - as far as I understood this is a design guideline for HA developers and should keep the integrations readable and compact, just calling the functions from the respective Python library. Now, the important part is that this Python library is SurePy BUT as the integrations INCLUDE these (mostly) from PyPi.org and NOT from github.com often the Python libraries on GitHub are outdated as these are not used/called by the integrations. Concluding the above means: if you want the most current integration release, then install HACS in your HA instance and with that install the "developer" repository - in this case SureHA which uses the most current Python library for the integration hosted at PyPi.org.

SureHA HACS integration @ github.com - release 0.4.2 (15.09.2021) --> SurePy @ PyPi.org - release 0.9.0a0 (04.04.2023) SurePetCare integration @ github.com - release 0.104 (11.08.2023) --> SurePy @ github.com - release 0.8.0 (07.09.2022)

gracar2002 commented 10 months ago

Happens on SureHA too - note that there is an open issue,