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

Update decorators #1586

Closed
wants to merge 2 commits into from
Closed

Conversation

starkillerOG
Copy link
Contributor

  • set the id to the qualified_name instead of only the function name (in order to prevent unique_id collisions in HomeAssistant for example with DNDStatus.start and CleaningDetails.start)
  • fix sensor unit beeing set to "" instead of None (HomeAssistant default)
  • remove setter input from setting decorator, since it will not work to put in a function directly in the decorator since the class object has not yet been created. Therefore always the setter_name schould be used and the binding of the setter methods schould take place when the class object gets created.

@starkillerOG
Copy link
Contributor Author

@rytilahti this is split out from #1543
Could you merge this?

@codecov-commenter
Copy link

codecov-commenter commented Nov 9, 2022

Codecov Report

Merging #1586 (ba2f64b) into master (1c3b463) will increase coverage by 0.00%.
The diff coverage is 75.00%.

@@           Coverage Diff           @@
##           master    #1586   +/-   ##
=======================================
  Coverage   80.88%   80.88%           
=======================================
  Files         156      156           
  Lines       15255    15257    +2     
  Branches     3283     3283           
=======================================
+ Hits        12339    12341    +2     
  Misses       2667     2667           
  Partials      249      249           
Impacted Files Coverage Δ
miio/devicestatus.py 90.66% <75.00%> (+0.25%) ⬆️

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

Comment on lines +193 to +194
if setter_name is None:
raise Exception("Setter_name needs to be defined")
Copy link
Owner

@rytilahti rytilahti Nov 9, 2022

Choose a reason for hiding this comment

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

Why is setter parameter being removed?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Since it will not work to put in a function directly in the decorator since the class object has not yet been created. Therefore always the setter_name schould be used and the binding of the setter methods schould take place when the class object gets created.

I tried to use the setter parameter in my code directly in the decorator, but I could not get it to work (I think it will never work).

Copy link
Owner

Choose a reason for hiding this comment

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

One way would be to give it a reference to a callable (like DeviceClass.set_something), and binding that to the instance object much like what is done for the setter_name one, no?`.

But that is not important at the moment, let's however keep the code in place just in case for the time being.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't think that works since how would you get the instance object from the DeviceClass.set_something callable. But I am quite new to all these decorators, still figuring it all out a bit.
Learning a lot from your coding skills!

Schould I just keep the setter parameter and add a Exception that it is not yet implemented instead?

Copy link
Owner

Choose a reason for hiding this comment

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

Yes, just add an exception there. I'm also learning, so it's all good :-)

I think something like this could work for the binding, but I haven't tried it out:

from functools import partial
method = partial(setter, self)  # now the `self` is passed as the first parameter to the method calls

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I made the exception in a seperate PR.

@rytilahti
Copy link
Owner

fix sensor unit beeing set to "" instead of None (HomeAssistant default)

It's better to keep one type of change in one PR, this also makes it easier to write more clear PR titles than "update X".

Could you move this into a separate PR? I'm wondering if we should remove the unit altogether from the decorator signature, making it go into the extras...

@starkillerOG
Copy link
Contributor Author

@rytilahti I think we schould leave the unit for sensors since I think it is very important for almost all sensors and this streches the importance of the unit.

Split out into these PRs:
#1589
#1590
#1591

rytilahti pushed a commit that referenced this pull request Nov 9, 2022
Split out from #1586

set the id to the qualified_name instead of only the function name (in
order to prevent unique_id collisions in HomeAssistant for example with
DNDStatus.start and CleaningDetails.start)
@rytilahti
Copy link
Owner

rytilahti commented Nov 9, 2022

I think we schould leave the unit for sensors since I think it is very important for almost all sensors and this streches the importance of the unit.

Fair enough, let's keep it for now, especially as we may want to create a standardized set of units (in a form of enum?) to make the unit information consistent across the integrations.

rytilahti pushed a commit that referenced this pull request Nov 9, 2022
Split out from: #1586
fix sensor unit beeing set to "" instead of None (HomeAssistant default)
rytilahti added a commit that referenced this pull request Nov 10, 2022
Split out from #1586
warn for setter input from setting decorator, since it will not work to
put in a function directly in the decorator since the class object has
not yet been created. Therefore always the setter_name schould be used
and the binding of the setter methods schould take place when the class
object gets created.

Co-authored-by: Teemu R. <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants