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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use cached_property instead of stacked property + cache #67515

Merged
merged 1 commit into from Mar 3, 2022

Conversation

cdce8p
Copy link
Member

@cdce8p cdce8p commented Mar 3, 2022

Proposed change

Originally added in #67475
https://docs.python.org/3/library/functools.html#functools.cached_property

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)
  • 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
  • The code has been formatted using Black (black --fast 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.
  • Untested files have been added to .coveragerc.

The integration reached or maintains the following Integration Quality Scale:

  • No score or internal
  • 馃 Silver
  • 馃 Gold
  • 馃弳 Platinum

To help with the load of incoming pull requests:

@probot-home-assistant
Copy link

Hey there @chishm, mind taking a look at this pull request as it has been labeled with an integration (dlna_dms) you are listed as a code owner for? Thanks!
(message by CodeOwnersMention)

@cdce8p cdce8p added the smash Indicator this PR is close to finish for merging or closing label Mar 3, 2022
Copy link
Member

@Kane610 Kane610 left a comment

Choose a reason for hiding this comment

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

Looks good to me

@cdce8p cdce8p merged commit a55d20f into home-assistant:dev Mar 3, 2022
@cdce8p cdce8p deleted the fix-dlna_dms-cached_property branch March 3, 2022 22:59
@chishm
Copy link
Contributor

chishm commented Mar 4, 2022

Sorry I didn't get to this before merge. I'd written it using the property + cache decorators for memory efficiency, as described on the note to functools.cached_property:

Note, this decorator interferes with the operation of PEP 412 key-sharing dictionaries. This means that instance dictionaries can take more space than usual.

Is there any reason to prefer functools.cached_property instead (for future reference)?

@cdce8p
Copy link
Member Author

cdce8p commented Mar 4, 2022

Is there any reason to prefer functools.cached_property instead (for future reference)?

Where @cached_property is a bit less memory efficient, @property + @cache is slower. IMO it doesn't really matter to optimize for that at our scale. More important to use what is easily understood and best supported by linters / code completion.

If you really want to optimize it, I would suggest to precompute _sort_criteria and store the result inside a variable. That should avoid all negative side effects. But as I said before, it probably doesn't matter and isn't worth the effort.

Funny enough, I only saw it because the type: ignore was missing an error code. 馃槄

@chishm
Copy link
Contributor

chishm commented Mar 5, 2022

Where @cached_property is a bit less memory efficient, @property + @cache is slower. IMO it doesn't really matter to optimize for that at our scale. More important to use what is easily understood and best supported by linters / code completion.

That makes sense, thanks for the explanation. I'll use @cached_property in future unless there's a very good reason not to.

@github-actions github-actions bot locked and limited conversation to collaborators Mar 6, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
cla-signed code-quality integration: dlna_dms small-pr PRs with less than 30 lines. smash Indicator this PR is close to finish for merging or closing
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants