Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch to using fast cached_property implementation in propcache #127339

Merged
merged 10 commits into from
Oct 3, 2024

Conversation

bdraco
Copy link
Member

@bdraco bdraco commented Oct 2, 2024

Proposed change

propcache is derived from yarl which uses an accelerated cached_property implementation. It also has an under_cached_property implementation which stores the cache in self._cache which is compatibility with __slots__ which will allow use to restore __slots__ to many objects that we had to remove it from to allow for the stdlib @cached_property which does not support __slots__ in a future PR. The under_cached_property implementation is what yarl and aiohttp use internally as cached_property in yarl and reify in aiohttp.

Currently yarl and aiohttp both implement the same property caching code and cython code. The goal of the propcache library is to replace both implementations in yarl and aiohttp and maintain it in a single place. With aiohttp 3.11 propcache is expected to replace the internal yarl and aiohttp implementations.

TODO Done

Future work (not required for this PR)

Type of change

  • Dependency upgrade
  • Bugfix (non-breaking change which fixes an issue)
  • New integration (thank you!)
  • New feature (which adds functionality to an existing integration)
  • Deprecation (breaking change to happen in the future)
  • Breaking change (fix/feature causing existing functionality to break)
  • Code quality improvements to existing code or addition of tests

Additional information

  • This PR fixes or closes issue: fixes #
  • This PR is related to issue:
  • Link to documentation pull request:

Checklist

  • The code change is tested and works locally.
  • Local tests pass. Your PR cannot be merged unless tests pass
  • There is no commented out code in this PR.
  • I have followed the development checklist
  • I have followed the perfect PR recommendations
  • The code has been formatted using Ruff (ruff format homeassistant tests)
  • Tests have been added to verify that the new code works.

If user exposed functionality or configuration variables are added/changed:

If the code communicates with devices, web services, or third-party tools:

  • The manifest file has all fields filled out correctly.
    Updated and included derived files by running: python3 -m script.hassfest.
  • New or updated dependencies have been added to requirements_all.txt.
    Updated by running python3 -m script.gen_requirements_all.
  • For the updated dependencies - a link to the changelog, or at minimum a diff between library versions is added to the PR description.

To help with the load of incoming pull requests:

propcache is derived from yarl which uses an accelerated cached_property
implementation. It also has an under_cached_property implementation which
stores the cache in self._cache which is compatiblity with __slots__ which
will allow use to restore __slots__ to many objects that we had to remove it
from to allow for the stdlib @cached_property which does not support __slots__

Currently yarl and aiohttp both implement the same property caching
code and cython code. The goal of the propcache library is to replace
both implementations in yarl and aiohttp and maintain it in a single place
in aiohttp 3.11 propcache is expected to replace the internal yarl and
aiohttp implementations.
bdraco added a commit that referenced this pull request Oct 3, 2024
@bdraco bdraco mentioned this pull request Oct 3, 2024
19 tasks
@bdraco bdraco changed the title DNM: Switch to using fast cached_property implementation in propcache Switch to using fast cached_property implementation in propcache Oct 3, 2024
@bdraco bdraco marked this pull request as ready for review October 3, 2024 17:11
@bdraco
Copy link
Member Author

bdraco commented Oct 3, 2024

Looks like 8 is failing on all PRs https://github.com/home-assistant/core/actions/runs/11165721781/job/31038488490 so not related to this one

Will give it one more try though

@bdraco
Copy link
Member Author

bdraco commented Oct 3, 2024

Thanks @Kane610

Copy link
Contributor

@epenet epenet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small thing: should we add to pylint deprecated imports so functools.cached_property not imported?

@epenet
Copy link
Contributor

epenet commented Oct 3, 2024

Small thing: should we add to pylint deprecated imports so functools.cached_property not imported?

Or can be done in follow up - depends if we want to enforce throughout.

@bdraco
Copy link
Member Author

bdraco commented Oct 3, 2024

Small thing: should we add to pylint deprecated imports so functools.cached_property not imported?

Or can be done in follow up - depends if we want to enforce throughout.

Probably best do to in a followup 👍

@bdraco
Copy link
Member Author

bdraco commented Oct 3, 2024

FAILED tests/components/reolink/test_init.py::test_new_device_discovered - AssertionError: assert 24 == 0
 +  where 24 = <AsyncMock name='Host().logout' spec='function' id='140555237552496'>.call_count
 +    where <AsyncMock name='Host().logout' spec='function' id='140555237552496'> = <NonCallableMagicMock name='Host()' spec='Host' id='140555[232](https://github.com/home-assistant/core/actions/runs/11166757369/job/31042558122?pr=127339#step:10:233)049248'>.logout

Test failure is unrelated and generally failing on most full runs

@bdraco bdraco merged commit 0f29fd3 into dev Oct 3, 2024
39 of 40 checks passed
@bdraco bdraco deleted the fast_cached_property branch October 3, 2024 18:11
@github-actions github-actions bot locked and limited conversation to collaborators Oct 4, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants