* Move more constants to const.py
* Import constants directly from const
* ATTR_ENTITY_ID is not defined in media_player
* MEDIA_PLAYER_PLAY_MEDIA_SCHEMA is still in __init__.py
* Correct imports in tts
* PLATFORM_SCHEMA, SCHEMA is still defined in __init__.py
* Pandora imports several services
* Some additional fixes for move of const in media_player
* Fix hound lengths
* Add better handling of deprecated configs
* Embed the call to has_at_most_one_key in deprecated
* Add tests for checking the deprecated logs
* Add thoroughly documented tests
* Always check has_at_most_one_key
* Fix typing
* Move logging helpers to homea new logging helper
* Lint
* Rename to KeywordMessage instead of BraceMessage
* Remove unneeded KeywordStyleAdapter
* Lint
* Use dict directly rather than dict.keys() when creating set
* Patch the version in unit tests, update logging and use parse_version
* Re-add KeywordStyleAdapter and fix tests
* Lint
* Lint
* Add person component
* Required first name.
* Optional last name and user id.
* Optionally track device trackers. Last device tracker state change will
set state.
* Set device tracker state entity_id as source attribute.
* Set coordinates of device tracker state as state attributes.
* Restore state.
* Parse restored state too
* Clean up
* Add missing property decorator
* Validate source entities as device trackers
* Only use name instead of first and last name
* Add user_id validation
* Add unique_id
* Remove not needed properties
* Uniform docstrings
* Fail component setup if no valid entities
* Add tests
* Add id and use that for unique_id
* Clean up
* Added external auth provider that calls a configurable program
Closes#19975
* Raise proper InvalidAuth exception on OSError during program execution
* Changed name of external auth provider to command_line
* Renamed program config option to command in command_line auth provider
* Made meta variable parsing in command_line auth provider optional
* Added tests for command_line auth provider
* Fixed indentation
* Suppressed wrong pylint warning
* Fixed linting
* Added test for command line auth provider login flow
* Log error when user fails authentication
* Use %r formatter instead of explicit repr()
* Mix all used names of typing module into module namespace
I consider this nasty and bad coding style, but was requested by
@awarecan for consistency with the remaining codebase.
* Small code style change
* Strip usernames with command_line auth provider
* Allow both VOLUME_STEP and VOLUME_SET
Seems like it should be possible to support both at the same time.
* Update test to allow VOLUME_SET and VOLUME_STEP
* Move group to it's own setup
* Let each component to handle restore of state
* Move constants for climate into const.py
For now import all into __init__.py to keep backword compat
* Move media plyaer constants to const.py file
For now import all constants into __init__.py to keep
backword compatibility
* Move media player to it's own file
* Move climate to it's own file
* Remove ecobee service from common components
BREAKING CHANGE
* Add tests for climate
* Add test for media_player
* Make sure we clone timestamps of state
* Add tests for groups
* Remove old tests for media player, it's handled by other tests
* Add tests for calls to component functions
* Add docstring for climate const
* Add docstring for media_player const
* Explicitly import constants in climate
* Explicitly import constants in media_player
* Add period to climate const
* Add period to media_player const
* Fix some lint errors in climate
* Fix some lint errors in media_player
* Fix lint warnings on climate tests
* Fix lint warnings on group tests
* Fix lint warnings on media_player tests
* Fix lint warnings on state tests
* Adjust indent for state tests
* start test setup
test cleanup
test deps
update switch test
actually update test deps
cleanup and remove switch from coveragerc
comment
refactor to use fixtures and shared components
lint
* remove availability part that isn't in zha yet
* review comments and cleanup
* review comments
* add switch back unil post reorg merge
* Add SmartThings Light platform and tests
* Cleaned a few awk comments
* Updates per review feedback
* Switched to super
* Changes per review feedback
* Move mqtt_mock to tests/components/mqtt/conftest.py
* Move mqtt room presence sensor test to tests/components/mqtt
* Revert "Move mqtt room presence sensor test to tests/components/mqtt"
This reverts commit e08bc143
* Decouple mqtt room presence sensor test and mqtt_mock
* Added SmartThings component and switch platform
* Corrected comment typos.
* Embedded switch platform.
* Replaced custom view usage with webhook component.
* Replaced urls with tokens in strings.
* Fixed line length.
* Use generated webhook id instead of static one.
* Reuse core constant instead of defining again.
* Optimizations in anticipation of future platforms.
* Use async_generate_path instead of hard-coded path.
* Fixed line length.
* Updates per review feedback.
* Updates per latest review feedback.
* First draft of area registry
* Refactor based on input
* Add tests for areas
Add tests for updating device
* Updating a device shouldn't require area
* Fix Martins comment
* Require admin
* Save after deleting
* Rename read to list_areas
Fix device entry_dict
Remove area id from device when deleting area
* Fix tests
* Moving existing sensor file
* Initial functionality in place
* Added test for config flow
* Updated coverage and CODEOWNERS
* Linting
* Linting
* Member comments
* Hound
* Moving socket disconnect on HASS stop
* Member comments
* Removed unnecessary dispatcher call
* Config entry fix
* Added support in config flow for good accounts with no devices
* Hound
* Updated comment
* Member comments
* Stale docstrings
* Stale docstring
* Define the characteristics to poll (or subscribe to) up front
* Configure characteristics immediately instead of during first poll
* Do as much cover configuration upfront as possible
* Remove test workaround as no longer needed
* Remove switch code that is already handled by HomeKitEntity
* Remove lock code already handled by HomeKitEntity
* Remove light code already handled by HomeKitEntity
* Remove alarm code already handled by HomeKitEntity
* Remove climate code already handled by HomeKitEntity
* homekit_controller tests: automatically find entity ids in tests
Some entities use dynamic ids because of the nature of the test fakes it is
hard to predict the name of the entity that will be created. This inspects the
EntityComponent of the domain to find the freshly created entity.
* homekit_controller: Tests can now define their own Service models.
All existing tests use models as defined upstream. But upstream only defines a
few service models. This adds a generic model helper for creating test
service/characteristic models.
* homekit_controller: Add cover tests
* homekit_controller: Add lock tests
* homekit_controller: Add alarm_control_panel tests
* homekit_controller: Update light tests for color_temp.
* Revert "homekit_controller tests: automatically find entity ids in tests"
This reverts commit 506caa4c3e.
* homekit_controller: Mock entity name so entity_id is consistent.
Also remove spurious subclass overrides that are identical to parent class.
* homekit_controler: Make tests less awkward as allowed top level imports
* Embed device_tracker in locative
* Load/unload locative entities correctly between component and platform
* Await the coroutine directly
* Await the correct coroutine
* Add a test for a homekit_controller switch
* Add a test for a homekit_controller lightbulb
* Add a test for homekit_controller thermostat
* Changes from review
* Patch utcnow to known time in HK tests
* Neater fixture use per review
* Cleanup if discovered mqtt light can't be added
* No bare except
* Clear ALREADY_DISCOVERED list with helper
* Use constant instead of string literal
* Add data/data_template/title to alert component
* Fix line length
* Fix tests
* Fix lint
* fix line length
* Fix tests, make title templatable
* Fix test
* Fix test
* Optimize data, make title templated
* Fix line length
* Add title template
* typo
* Fix tests
* Added device tracker support for EE Brightbox 2
* removed timeago dependency
* get scanner checks and improved tests
* fixed lint issues
* removed redundant timeago from test requirements
* fixed variable naming in test
* removed unecessary blank line
* EverLights light integration. Supports single color (with color and brightness parameters) or saved pattern (with effect parameter).
* Fix pylint parameter name warning.
* Code review feedback.
* Add tests for the two helper functions of EverLights component.
* Fixes for review feedback.
* Change test style.
* Style fixes for hound.
Handle the case of async_render_with_possible_json_value's value argument
being something other than a string. This can happen, e.g., when using the
SQL sensor to extract a datetime column such as last_changed and also using
its value_template to convert that datetime to another format. This was
causing a TypeError from json.loads, but async_render_with_possible_json_value
was only catching ValueError's.
* Switch locative to use the webhook component
* Lint
* Remove dead test code
* Use voluptuous to validate the webhook schema
* Validate test mode schema as well
* Lint
* Remove allow_extra
* Return web.Response correctly
* #20043: Remove superfluous dict in WEBHOOK_SCHEMA validation
* Add notify.html5_dismiss service
* fix test
* add can_dismiss
* fix service data payload
* fix hasattr -> getattr
* fixes
* move dismiss service to html5
* fix services.yaml
* fix line to long
* Add gamut capability to color util
* Include gamut in hue_test
* Improve Philips Hue color conversion
* correct import for new location hue.light
* include file changes between PR's
* update aiohue version
* update aiohue version
* update aiohue version
* fix hue_test
Now Idea why it failed compared to the previous time
* Include gamut in hue_test
* fix hue_test
* Try to test hue gamut conversion
supply a color that is well outside the color gamut of the light, and see if the response is correctly converted to within the reach of the light.
* switch from gamut A to gamut B for the tests.
* remove white space in blanck line
* Fix gamut hue test
* Add Gamut tests for the util.color
* fix hue gamut test
* fix hue gamut test
* Improve Philips Hue color conversion
* fix for #19954, discovered tellsticks shows up to be configured
* fix for #19954, authentication issues
* updated tests
* move I/O to executer thread pool
* Apply suggestions from code review
Co-Authored-By: fredrike <fredrik.e@gmail.com>
* Adjust OpenUV integration for upcoming API limit changes
* Added fix for "Invalid API Key"
* Bugfix
* Add initial nighttime check
* Move from polling to a service-based model
* Fixed test
* Removed unnecessary scan interval
* Fixed test
* Moving test imports
* Member comments
* Hound
* Removed unused import
* Initial pass of cleanup for shabbat_times
* Switch to async defs
* First pass of unit tests + fixture data
* Completion of first round of unit tests, 100% passing
* Unit tests for state restoring
* Style fixes
* More style fixes
* Lint fix
* Add upcoming candelighting and havdalah sensors
* Add unit tests, remove havdalah offset
* More unit tests + small bugfix for weekly_portion
* Add issur melacha sensor
* Remove old shabbat_times work-in-progress files
* Bump required version of hdate
* Add havdalah offset config parameter
* Bump hdate version required
* Pin hdate requirement
* Lint fixes
* Changes based on review + API changes for hdate 0.8.7
* Add three-day holiday unit tests
* Remove debugging line
* Add missing docstring
* Fix doc lint comment
Thank you 👍
* added zwave lock state from alarm type workaround
* fixed test indents
* more linting fixes
* one more linting fix
* simplified logic
* fixed lint new lines
* fixed merge conflict issue
* fixed definition of _alarm_type_workaround in zwave lock
* Alexa: implement auth and proactive ChangeReport messages
* refactor after rebase from dev to use the new AlexaDirective and Response classes
* move to aiohttp; cleanup
* better function name
* move endpoint to config
* allow passing token function
* remove uneeded state get
* use iterable directly
Co-Authored-By: abmantis <abmantis@users.noreply.github.com>
* missing delete from previous commit
* checks for when user has no auth config
* update cloud component
* PR suggestions
* string lint
* Revert "string lint"
This reverts commit a05a1f134c9ebc7a6e67c093009744f142256365.
* linters are now happier
* more happy linters
* use internal date parser; improve json response handling
* remove unused import
* use await instead of async_add_job
* protect access token update method
* add test_report_state
* line too long
* add docstring
* Update test_smart_home.py
* test accept grant api
* init prefs if None
* add tests for auth and token requests
* replace global with hass.data
* doc lint
* awair: do not choke on no data
The awair API returns an empty response for various air data queries
when a device is offline. The underlying library (python_awair) does
not directly inform us that a device is offline, since we really can
only infer it from an empty response - there is no online/offline
indicator in the graphql API.
So - we should just ensure that we do not attempt to update device state
from an empty response. This ensures that the platform does not crash
when starting up with offline devices, and also ensures that the
platform is marked unavailable once devices go offline.
* Fix typo
Further proof that coding after 10pm is rolling the dice.
* Add ness alarm control panel using nessclient
* indenting
* .
* Remove availability functionality, will improve and add back in another PR
* Use call_count
* lint
* lint
* Review changes
* Lint
* Bump nessclient to 0.9.8
* Bump nessclient to 0.9.9
* Remove from .coveragerc
* some minor tests refactor
* async/await refactor
* toggle have not brightness
* test for race condition in unknown device
* test for 'no_command' and 'not_connected'
* test for race condition in unknown device
* sensor events are handled in sensor devices, RflinkDevice handle
command events
* test race conditions & bogus entity remove
* two more tests
* Test race condition for unknown components
* Test cleanup for `commands events` and `sensor events`
Rewrote the tests a bit
the 'wait for the timer to finish' part of the test is now it's own test.
The rest is a sequence of fire/assert. Which i rewrote to a loop to
reduce the amount of duplicate code
* Remove timer logic from sensor class
Proposed fix for issue #10500
* Updating the tests to remove timer logic
* Removing unecessary dependancy
* Fixing requested changes
* Commit to try to fix the CLA ?
* Disable creating port mappings from UI, add discovery from component
* Remove unused constant
* Upgrade to async_upnp_client==0.13.6 and use manufacturer from device
* Upgrade to async_upnp_client==0.13.7
* added new sensor platform to expose Islamic prayer times
* added new sensor platform to expose Islamic prayer times
* updated tests according to feedback
* make prayer_times_info a public attribute
* remove stale comments
* Add Mythic Beasts DNSAPI Component
* Added timeout, and tests for exceptions while updating
* Move API to external module
* Move mbddns import into function
* Updated tests to mock out mbddns library
* Add MVP
* Remove unused code
* Fix
* Add force back
* Fix tests
* Storage keyed
* Error out when storage doesnt find config
* Use old load_yaml
* Set config for panel correct
* Use instance cache var
* Make config option
* Set lock status correctly for Schlage BE469 Z-Wave locks
PR #17386 attempted to improve the state of z-wave lock tracking for
some problematic models. However, it operated under a flawed
assumptions. Namely, that we can always trust `self.values` to have
fresh data, and that the Schlage BE469 sends alarm reports after every
lock event. We can't trust `self.values`, and the Schlage is very
broken. :)
When we receive a notification from the driver about a state change,
we call `update_properties` - but we can (and do!) have _stale_
properties left over from previous updates. #17386 really works best
if you start from a clean slate each time. However, `update_properties`
is called on every value update, and we don't get a reason why.
Moreover, values that weren't just refreshed are not removed. So blindly
looking at something like `self.values.access_control` when deciding to
apply a workaround is not going to always be correct - it may or may not
be, depending on what happened in the past.
For the sad case of the BE469, here are the Z-Wave events that happen
under various circumstances:
RF Lock / Unlock:
- Send: door lock command set
- Receive: door lock report
- Send: door lock command get
- Receive: door lock report
Manual lock / Unlock:
- Receive: alarm
- Send: door lock command get
- Receive: door lock report
Keypad lock / Unlock:
- Receive: alarm
- Send: door lock command get
- Receive: door lock report
Thus, this PR introduces yet another work around - we track the current
and last z-wave command that the driver saw, and make assumptions based
on the sequence of events. This seems to be the most reliable way to go
- simply asking the driver to refresh various states doesn't clear out
alarms the way you would expect; this model doesn't support the access
control logging commands; and trying to manually clear out alarm state
when calling RF lock/unlock was tricky.
The lock state, when the z-wave network restarts, may look out of sync
for a few minutes. However, after the full network restart is complete,
everything looks good in my testing.
* Fix linter
* Fix unavailable
Change setting to unavailable when getting request exceptions only after 1 minute has past since 1st occurrence.
* Put common code in _check_state_available
Put common code to determine if available should be set to False in method _check_state_available
* remove the need to have query feature support
Some InfluxDB servers don't have /query support feature but are still valid servers for storing data.
Usually those servers are proxies to others timeseries databases.
The change proposes to still validate the configuration but with less requirements on the server side.
* `.query` call is replaced by `.write_points`
* no more query call in the influxdb component. remove test
* reset mock after the setup and before the test
* remove unused import
* reset mock stats after component setup
* Add new events for automation trigger and script run, fix context for image processing, add tests to ensure same context
* remove custom logbook entry for automation and add new automation event to logbook
* code review updates
* Allow verisure locks to be configured with a default code
* linting fix
* PR feedback
* PR feedback - try harder to prevent future typos
A python mock is a magical thing, and will respond to basicaly
any method you call on it. It's somewhat better to assert against
an explicit variable named 'mock', rather than to assert on the
method name you wanted to mock... could prevent a typo from messing up
tests.
* PR feedback: convert tests to integration-style tests
Set up a fake verisure hub, stub out a _lot_ of calls, then test
after platform discovery and service calls.
It should be noted that we're overriding the `update()` calls in
these tests. This was done to prevent even further mocking of
the verisure hub's responses.
Hopefully, this'll be a foundation for people to write more tests.
* more pr feedback
The `Config` object specific to the `google_assistant` component
had a default value for `allow_unlock`. We were not overriding this
default when constructing the Config object during `google_assistant`
component setup, whereas we do when setting up the `cloud` component.
To fix, we thread the `allow_unlock` parameter down through http setup,
and ensure that it's set correctly. Moreover, we also change the
ordering of the `Config` parameters, and remove the default. Future
refactoring should not miss it, as it is now a required parameter.
* added additional filters
Added base64_encode, base64_decode and ordinal filters.
* added test cases
added test cases for base64_encode, base64_decode and ordinal filters.
* forgot to add filters :)
* Create test for platform
Created test for platform.
Added media_stop to common.py test
* Multiple improvements
Fixed lint issue in common.py
Fixed lint issues in test_directv.py
Improved patching import using modile_patcher.start() and stop()
Added asserts for service calls.
* Updates based on Martin's review
Updates based on Martin's review.
* Updated test based on PR#18474
Updated test to use service play_media instead of select_source based on change from PR18474
* Lint issues
Lint issues
* Further updates based on feedback
Updates based on feedback provided.
* Using async_load_platform for discovery test
Using async_load_platform for discovery tests.
Added asserts to ensure entities are created with correct names.
* Used HASS event_loop to setup component
Use HASS event_loop to setup the component async.
* Updated to use state machine for # entities
Updated to use state machine to count # entities instead of entities.
* Use hass.loop instead of getting current loop
Small update to use hass.loop instead, thanks Martin!
* Forgot to remove asyncio
Removed asyncio import.
* Added fixtures
Added fixtures.
* Remove not needed updates and assertions
* Return mocked dtv instance from side_effect
* Fix return correct fixture instance
* Clean up assertions
* Fix remaining patches
* Mock time when setting up component in fixture
* Patch time correctly
* Attribute _last_update should return utcnow
* Added Entur departure information sensor.
* Fixed houndci-bot comments.
* Removed tailing whitespace.
* Fixed some comments from tox lint.
* Improved docstring, i think.
* Fix for C1801
* Unit test for entur platform setup
* Rewritten entur component to have pypi dependecy.
* Propper client id for api usage.
* Minor cleanup of usage of constants.
* Made location output configurable.
* Cleaned up usage of constants.
* Moved logic to be contained within setup or update methods.
* Moved icon consts to root in module.
* Using config directly in test
* Minor changes
* Store state last seen time separately
This ensures that infrequently updated entities aren't accidentally
dropped from the restore states store
* Fix mock restore cache
* Add support for Mode trait in Google Assistant.
* Simplify supported logic.
* Fix SUPPORTED_MODE_SETTINGS to correct rip failures.
* more stray commas
* update tests.
* Fix statistics for binary sensor
-) Binary sensors have 'on' and 'off' for state resulting in issue as numbers were expected. Fixed so that it works with non-numeric states as well.
-) Added check to skip unknown states.
-) Updates test so that binary sensor test will use non-numeric values for states.
* Using guard clause and changed debug to error
Changed to use a guard clause for state unknown.
Writing error on value error instead of debug.
* Add docstring
* Restore states through a JSON store
* Accept entity_id directly in restore state helper
* Keep states stored between runs for a limited time
* Remove warning
* Enable Google Assistant OnOffTrait for climate devices that support them
This commit enables the OnOffTrait for climate devices that have the SUPPORT_ON_OFF feature. I have tested this locally with a Sensibo device which supports ON_OFF and a nest device that does not.
* Update trait.py
* Add tests for onoff_climate
* Add OnOff trait to climate.heatpump
* Add on status to heatpump in google_assistant tests
* code cleanup to make use of new externalised feed manager
* fixed lint
* revert change, keep asynctest
* using asynctest
* changed unit test from mocking to inspecting dispatcher signals
* code clean-up
* Add cloud webhook support
* Simplify payload
* Add cloud http api tests
* Fix tests
* Lint
* Handle cloud webhooks
* Fix things
* Fix name
* Rename it to cloudhook
* Final rename
* Final final rename?
* Fix docstring
* More tests
* Lint
* Add types
* Fix things
* Add permission checks to Rest API
* Clean up unnecessary method
* Remove all the tuple stuff from entity check
* Simplify perms
* Correct param name for owner permission
* Hass.io make/update user to be admin
* Types
* Awair Sensor Platform
This commit adds a sensor platform for Awair devices, by accessing
their beta API. Awair heavily rate-limits this API, so we throttle
updates based on the number of devices found. We also allow for the
user to bypass API device listing entirely, because the device list
endpoint is limited to only 6 calls per day. A crashing or restarting
server would quickly hit that limit.
This sensor platform uses the python_awair library (also written
as part of this PR), which is available for async usage.
* Disable pylint warning for broad try/catch
It's true that this is generally not a great idea, but we really don't
want to crash here. If we can't set up the platform, logging it and
continuing is the right answer.
* Add space to satisfy the linter
* Awair platform PR feedback
- Bump python_awair to 0.0.2, which has support for more granular exceptions
- Ensure we have python_awair available in test
- Raise PlatformNotReady if we can't set up Awair
- Make the 'Awair score' its own sensor, rather than exposing it other ways
- Set the platform up as polling, and set a sensible default
- Pass in throttling parameters to the underlying data class, rather
than use hacky global variable access to dynamically set the interval
- Switch to dict access for required variables
- Use pytest coroutines, set up components via async_setup_component,
and test/modify/assert in generally better ways
- Commit test data as fixtures
* Awair PR feedback, volume 2
- Don't force updates in test, instead modify time itself and let
homeassistant update things "normally".
- Remove unneeded polling attribute
- Rename timestamp attribute to 'last_api_update', to better reflect
that it is the timestamp of the last time the Awair API servers
received data from this device.
- Use that attribute to flag the component as unavailable when data
is stale. My own Awair device periodically goes offline and it really
hardly indicates that at all.
- Dynamically set fixture timestamps to the test run utcnow() value,
so that we don't have to worry about ancient timestamps in tests
blowing up down the line.
- Don't assert on entities directly, for the most part. Find desired
attributes in ... the attributes dict.
* Patch an instance of utcnow I overlooked
* Switch to using a context manager for timestream modification
Honestly, it's just a lot easier to keep track of patches. Moreover,
the ones I seem to have missed are now caught, and tests seem to
consistently pass.
Also, switch test_throttle_async_update to manipulating time more
explicitly.
* Missing blank line, thank you hound
* Fix pydocstyle error
I very much need to set up a script to do this quickly w/o tox, because
running flake8 is not enough!
* PR feedback
* PR feedback