diff --git a/homeassistant/components/alexa.py b/homeassistant/components/alexa.py index 5678aa509b7..65d26a2360e 100644 --- a/homeassistant/components/alexa.py +++ b/homeassistant/components/alexa.py @@ -1,7 +1,5 @@ """ -components.alexa -~~~~~~~~~~~~~~~~ -Component to offer a service end point for an Alexa skill. +Support for Alexa skill service end point. For more details about this component, please refer to the documentation at https://home-assistant.io/components/alexa/ @@ -11,7 +9,7 @@ import logging from homeassistant.const import HTTP_OK, HTTP_UNPROCESSABLE_ENTITY from homeassistant.helpers.service import call_from_config -from homeassistant.util import template +from homeassistant.helpers import template DOMAIN = 'alexa' DEPENDENCIES = ['http'] @@ -28,7 +26,7 @@ CONF_ACTION = 'action' def setup(hass, config): - """ Activate Alexa component. """ + """Activate Alexa component.""" _CONFIG.update(config[DOMAIN].get(CONF_INTENTS, {})) hass.http.register_path('POST', API_ENDPOINT, _handle_alexa, True) @@ -37,7 +35,7 @@ def setup(hass, config): def _handle_alexa(handler, path_match, data): - """ Handle Alexa. """ + """Handle Alexa.""" _LOGGER.debug('Received Alexa request: %s', data) req = data.get('request') @@ -99,19 +97,19 @@ def _handle_alexa(handler, path_match, data): class SpeechType(enum.Enum): - """ Alexa speech types. """ + """Alexa speech types.""" plaintext = "PlainText" ssml = "SSML" class CardType(enum.Enum): - """ Alexa card types. """ + """Alexa card types.""" simple = "Simple" link_account = "LinkAccount" class AlexaResponse(object): - """ Helps generating the response for Alexa. """ + """Helps generating the response for Alexa.""" def __init__(self, hass, intent=None): self.hass = hass @@ -154,7 +152,7 @@ class AlexaResponse(object): } def add_reprompt(self, speech_type, text): - """ Add repromopt if user does not answer. """ + """Add reprompt if user does not answer.""" assert self.reprompt is None key = 'ssml' if speech_type == SpeechType.ssml else 'text' @@ -165,7 +163,7 @@ class AlexaResponse(object): } def as_dict(self): - """ Returns response in an Alexa valid dict. """ + """Returns response in an Alexa valid dict.""" response = { 'shouldEndSession': self.should_end_session } @@ -188,5 +186,5 @@ class AlexaResponse(object): } def _render(self, template_string): - """ Render a response, adding data from intent if available. """ + """Render a response, adding data from intent if available.""" return template.render(self.hass, template_string, self.variables) diff --git a/homeassistant/components/api.py b/homeassistant/components/api.py index e9c25ca5dac..6f785f19896 100644 --- a/homeassistant/components/api.py +++ b/homeassistant/components/api.py @@ -1,7 +1,5 @@ """ -homeassistant.components.api -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Provides a Rest API for Home Assistant. +Rest API for Home Assistant. For more details about the RESTful API, please refer to the documentation at https://home-assistant.io/developers/api/ @@ -23,7 +21,7 @@ from homeassistant.const import ( URL_API_STREAM, URL_API_TEMPLATE) from homeassistant.exceptions import TemplateError from homeassistant.helpers.state import TrackStates -from homeassistant.util import template +from homeassistant.helpers import template DOMAIN = 'api' DEPENDENCIES = ['http'] @@ -35,7 +33,7 @@ _LOGGER = logging.getLogger(__name__) def setup(hass, config): - """ Register the API with the HTTP interface. """ + """Register the API with the HTTP interface.""" # /api - for validation purposes hass.http.register_path('GET', URL_API, _handle_get_api) @@ -98,12 +96,12 @@ def setup(hass, config): def _handle_get_api(handler, path_match, data): - """ Renders the debug interface. """ + """Renders the debug interface.""" handler.write_json_message("API running.") def _handle_get_api_stream(handler, path_match, data): - """ Provide a streaming interface for the event bus. """ + """Provide a streaming interface for the event bus.""" gracefully_closed = False hass = handler.server.hass wfile = handler.wfile @@ -116,7 +114,7 @@ def _handle_get_api_stream(handler, path_match, data): restrict = restrict.split(',') def write_message(payload): - """ Writes a message to the output. """ + """Writes a message to the output.""" with write_lock: msg = "data: {}\n\n".format(payload) @@ -129,7 +127,7 @@ def _handle_get_api_stream(handler, path_match, data): block.set() def forward_events(event): - """ Forwards events to the open request. """ + """Forwards events to the open request.""" nonlocal gracefully_closed if block.is_set() or event.event_type == EVENT_TIME_CHANGED: @@ -173,17 +171,17 @@ def _handle_get_api_stream(handler, path_match, data): def _handle_get_api_config(handler, path_match, data): - """ Returns the Home Assistant config. """ + """Returns the Home Assistant configuration.""" handler.write_json(handler.server.hass.config.as_dict()) def _handle_get_api_states(handler, path_match, data): - """ Returns a dict containing all entity ids and their state. """ + """Returns a dict containing all entity ids and their state.""" handler.write_json(handler.server.hass.states.all()) def _handle_get_api_states_entity(handler, path_match, data): - """ Returns the state of a specific entity. """ + """Returns the state of a specific entity.""" entity_id = path_match.group('entity_id') state = handler.server.hass.states.get(entity_id) @@ -195,7 +193,7 @@ def _handle_get_api_states_entity(handler, path_match, data): def _handle_post_state_entity(handler, path_match, data): - """ Handles updating the state of an entity. + """Handles updating the state of an entity. This handles the following paths: /api/states/ @@ -242,12 +240,12 @@ def _handle_delete_state_entity(handler, path_match, data): def _handle_get_api_events(handler, path_match, data): - """ Handles getting overview of event listeners. """ + """Handles getting overview of event listeners.""" handler.write_json(events_json(handler.server.hass)) def _handle_api_post_events_event(handler, path_match, event_data): - """ Handles firing of an event. + """Handles firing of an event. This handles the following paths: /api/events/ @@ -278,13 +276,13 @@ def _handle_api_post_events_event(handler, path_match, event_data): def _handle_get_api_services(handler, path_match, data): - """ Handles getting overview of services. """ + """Handles getting overview of services.""" handler.write_json(services_json(handler.server.hass)) # pylint: disable=invalid-name def _handle_post_api_services_domain_service(handler, path_match, data): - """ Handles calling a service. + """Handles calling a service. This handles the following paths: /api/services// @@ -300,8 +298,7 @@ def _handle_post_api_services_domain_service(handler, path_match, data): # pylint: disable=invalid-name def _handle_post_api_event_forward(handler, path_match, data): - """ Handles adding an event forwarding target. """ - + """Handles adding an event forwarding target.""" try: host = data['host'] api_password = data['api_password'] @@ -334,8 +331,7 @@ def _handle_post_api_event_forward(handler, path_match, data): def _handle_delete_api_event_forward(handler, path_match, data): - """ Handles deleting an event forwarding target. """ - + """Handles deleting an event forwarding target.""" try: host = data['host'] except KeyError: @@ -358,26 +354,25 @@ def _handle_delete_api_event_forward(handler, path_match, data): def _handle_get_api_components(handler, path_match, data): - """ Returns all the loaded components. """ - + """Returns all the loaded components.""" handler.write_json(handler.server.hass.config.components) def _handle_get_api_error_log(handler, path_match, data): - """ Returns the logged errors for this session. """ + """Returns the logged errors for this session.""" handler.write_file(handler.server.hass.config.path(ERROR_LOG_FILENAME), False) def _handle_post_api_log_out(handler, path_match, data): - """ Log user out. """ + """Log user out.""" handler.send_response(HTTP_OK) handler.destroy_session() handler.end_headers() def _handle_post_api_template(handler, path_match, data): - """ Log user out. """ + """Log user out.""" template_string = data.get('template', '') try: @@ -393,12 +388,12 @@ def _handle_post_api_template(handler, path_match, data): def services_json(hass): - """ Generate services data to JSONify. """ + """Generate services data to JSONify.""" return [{"domain": key, "services": value} for key, value in hass.services.services.items()] def events_json(hass): - """ Generate event data to JSONify. """ + """Generate event data to JSONify.""" return [{"event": key, "listener_count": value} for key, value in hass.bus.listeners.items()] diff --git a/homeassistant/components/automation/numeric_state.py b/homeassistant/components/automation/numeric_state.py index 96ab2121688..10c2402bb0e 100644 --- a/homeassistant/components/automation/numeric_state.py +++ b/homeassistant/components/automation/numeric_state.py @@ -11,7 +11,7 @@ from functools import partial from homeassistant.const import CONF_VALUE_TEMPLATE from homeassistant.helpers.event import track_state_change -from homeassistant.util import template +from homeassistant.helpers import template CONF_ENTITY_ID = "entity_id" CONF_BELOW = "below" diff --git a/homeassistant/components/automation/template.py b/homeassistant/components/automation/template.py index 8615538c42a..4aaac359c46 100644 --- a/homeassistant/components/automation/template.py +++ b/homeassistant/components/automation/template.py @@ -10,7 +10,7 @@ import logging from homeassistant.const import CONF_VALUE_TEMPLATE, EVENT_STATE_CHANGED from homeassistant.exceptions import TemplateError -from homeassistant.util import template +from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/binary_sensor/command_sensor.py b/homeassistant/components/binary_sensor/command_sensor.py index 677a4f2b95c..bd93ce27afa 100644 --- a/homeassistant/components/binary_sensor/command_sensor.py +++ b/homeassistant/components/binary_sensor/command_sensor.py @@ -11,7 +11,7 @@ from datetime import timedelta from homeassistant.components.binary_sensor import BinarySensorDevice from homeassistant.components.sensor.command_sensor import CommandSensorData from homeassistant.const import CONF_VALUE_TEMPLATE -from homeassistant.util import template +from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/binary_sensor/mqtt.py b/homeassistant/components/binary_sensor/mqtt.py index 139720bb117..3712936e57e 100644 --- a/homeassistant/components/binary_sensor/mqtt.py +++ b/homeassistant/components/binary_sensor/mqtt.py @@ -9,7 +9,7 @@ import logging import homeassistant.components.mqtt as mqtt from homeassistant.components.binary_sensor import BinarySensorDevice from homeassistant.const import CONF_VALUE_TEMPLATE -from homeassistant.util import template +from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/binary_sensor/rest.py b/homeassistant/components/binary_sensor/rest.py index 63c7f7a3e19..0e05a24826f 100644 --- a/homeassistant/components/binary_sensor/rest.py +++ b/homeassistant/components/binary_sensor/rest.py @@ -9,7 +9,7 @@ import logging from homeassistant.components.binary_sensor import BinarySensorDevice from homeassistant.components.sensor.rest import RestData from homeassistant.const import CONF_VALUE_TEMPLATE -from homeassistant.util import template +from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/light/mqtt.py b/homeassistant/components/light/mqtt.py index 2cdb9ee3fc4..f6e2438b5cd 100644 --- a/homeassistant/components/light/mqtt.py +++ b/homeassistant/components/light/mqtt.py @@ -1,7 +1,5 @@ """ -homeassistant.components.light.mqtt -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Allows to configure a MQTT light. +Support for MQTT lights. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/light.mqtt/ @@ -12,7 +10,7 @@ from functools import partial import homeassistant.components.mqtt as mqtt from homeassistant.components.light import ( ATTR_BRIGHTNESS, ATTR_RGB_COLOR, Light) -from homeassistant.util.template import render_with_possible_json_value +from homeassistant.helpers.template import render_with_possible_json_value _LOGGER = logging.getLogger(__name__) @@ -26,7 +24,7 @@ DEPENDENCIES = ['mqtt'] def setup_platform(hass, config, add_devices_callback, discovery_info=None): - """ Add MQTT Light. """ + """Add MQTT Light.""" if config.get('command_topic') is None: _LOGGER.error("Missing required variable: command_topic") @@ -50,7 +48,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): class MqttLight(Light): - """ Provides a MQTT light. """ + """Provides a MQTT light.""" # pylint: disable=too-many-arguments,too-many-instance-attributes def __init__(self, hass, name, topic, templates, qos, payload, optimistic): @@ -71,7 +69,7 @@ class MqttLight(Light): for key, tpl in templates.items()} def state_received(topic, payload, qos): - """ A new MQTT message has been received. """ + """A new MQTT message has been received.""" payload = templates['state'](payload) if payload == self._payload["on"]: self._state = True @@ -85,7 +83,7 @@ class MqttLight(Light): state_received, self._qos) def brightness_received(topic, payload, qos): - """ A new MQTT message for the brightness has been received. """ + """A new MQTT message for the brightness has been received.""" self._brightness = int(templates['brightness'](payload)) self.update_ha_state() @@ -97,7 +95,7 @@ class MqttLight(Light): self._brightness = None def rgb_received(topic, payload, qos): - """ A new MQTT message has been received. """ + """A new MQTT message has been received.""" self._rgb = [int(val) for val in templates['rgb'](payload).split(',')] self.update_ha_state() @@ -111,27 +109,27 @@ class MqttLight(Light): @property def brightness(self): - """ Brightness of this light between 0..255. """ + """Brightness of this light between 0..255.""" return self._brightness @property def rgb_color(self): - """ RGB color value. """ + """RGB color value.""" return self._rgb @property def should_poll(self): - """ No polling needed for a MQTT light. """ + """No polling needed for a MQTT light.""" return False @property def name(self): - """ Returns the name of the device if any. """ + """Returns the name of the device if any.""" return self._name @property def is_on(self): - """ True if device is on. """ + """True if device is on.""" return self._state @property @@ -140,7 +138,7 @@ class MqttLight(Light): return self._optimistic def turn_on(self, **kwargs): - """ Turn the device on. """ + """Turn the device on.""" should_update = False if ATTR_RGB_COLOR in kwargs and \ @@ -166,7 +164,7 @@ class MqttLight(Light): self._payload["on"], self._qos) if self._optimistic: - # optimistically assume that switch has changed state + # Optimistically assume that switch has changed state. self._state = True should_update = True @@ -174,11 +172,11 @@ class MqttLight(Light): self.update_ha_state() def turn_off(self, **kwargs): - """ Turn the device off. """ + """Turn the device off.""" mqtt.publish(self._hass, self._topic["command_topic"], self._payload["off"], self._qos) if self._optimistic: - # optimistically assume that switch has changed state + # Optimistically assume that switch has changed state. self._state = False self.update_ha_state() diff --git a/homeassistant/components/logbook.py b/homeassistant/components/logbook.py index 1e66c27686d..95fbcc9a793 100644 --- a/homeassistant/components/logbook.py +++ b/homeassistant/components/logbook.py @@ -1,7 +1,5 @@ """ -homeassistant.components.logbook -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Parses events and generates a human log. +Event parser and human readable log generator. For more details about this component, please refer to the documentation at https://home-assistant.io/components/logbook/ @@ -19,7 +17,7 @@ from homeassistant.const import ( from homeassistant.core import DOMAIN as HA_DOMAIN from homeassistant.core import State from homeassistant.helpers.entity import split_entity_id -from homeassistant.util import template +from homeassistant.helpers import template DOMAIN = "logbook" DEPENDENCIES = ['recorder', 'http'] @@ -43,7 +41,7 @@ ATTR_ENTITY_ID = 'entity_id' def log_entry(hass, name, message, domain=None, entity_id=None): - """ Adds an entry to the logbook. """ + """Adds an entry to the logbook.""" data = { ATTR_NAME: name, ATTR_MESSAGE: message @@ -57,10 +55,10 @@ def log_entry(hass, name, message, domain=None, entity_id=None): def setup(hass, config): - """ Listens for download events to download files. """ - # create service handler + """Listens for download events to download files.""" + def log_message(service): - """ Handle sending notification message service calls. """ + """Handle sending notification message service calls.""" message = service.data.get(ATTR_MESSAGE) name = service.data.get(ATTR_NAME) domain = service.data.get(ATTR_DOMAIN, None) @@ -78,7 +76,7 @@ def setup(hass, config): def _handle_get_logbook(handler, path_match, data): - """ Return logbook entries. """ + """Return logbook entries.""" date_str = path_match.group('date') if date_str: @@ -102,10 +100,9 @@ def _handle_get_logbook(handler, path_match, data): class Entry(object): - """ A human readable version of the log. """ + """A human readable version of the log.""" # pylint: disable=too-many-arguments, too-few-public-methods - def __init__(self, when=None, name=None, message=None, domain=None, entity_id=None): self.when = when @@ -115,7 +112,7 @@ class Entry(object): self.entity_id = entity_id def as_dict(self): - """ Convert Entry to a dict to be used within JSON. """ + """Convert entry to a dict to be used within JSON.""" return { 'when': dt_util.datetime_to_str(self.when), 'name': self.name, @@ -134,7 +131,6 @@ def humanify(events): - if home assistant stop and start happen in same minute call it restarted """ # pylint: disable=too-many-branches - # Group events in batches of GROUP_BY_MINUTES for _, g_events in groupby( events, @@ -145,7 +141,7 @@ def humanify(events): # Keep track of last sensor states last_sensor_event = {} - # group HA start/stop events + # Group HA start/stop events # Maps minute of event to 1: stop, 2: stop + start start_stop_events = {} @@ -182,7 +178,7 @@ def humanify(events): to_state = State.from_dict(event.data.get('new_state')) - # if last_changed != last_updated only attributes have changed + # If last_changed != last_updated only attributes have changed # we do not report on that yet. Also filter auto groups. if not to_state or \ to_state.last_changed != to_state.last_updated or \ @@ -238,7 +234,7 @@ def humanify(events): def _entry_message_from_state(domain, state): - """ Convert a state to a message for the logbook. """ + """Convert a state to a message for the logbook.""" # We pass domain in so we don't have to split entity_id again # pylint: disable=too-many-return-statements diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index ae47613339f..44b11b3df1b 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -1,7 +1,5 @@ """ -homeassistant.components.mqtt -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -MQTT component, using paho-mqtt. +Support for MQTT message handling.. For more details about this component, please refer to the documentation at https://home-assistant.io/components/mqtt/ @@ -15,7 +13,7 @@ import time from homeassistant.config import load_yaml_config_file from homeassistant.exceptions import HomeAssistantError import homeassistant.util as util -from homeassistant.util import template +from homeassistant.helpers import template from homeassistant.helpers import validate_config from homeassistant.const import ( EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP) diff --git a/homeassistant/components/notify/__init__.py b/homeassistant/components/notify/__init__.py index a44dd638479..2b1ece959ac 100644 --- a/homeassistant/components/notify/__init__.py +++ b/homeassistant/components/notify/__init__.py @@ -1,6 +1,4 @@ """ -homeassistant.components.notify -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Provides functionality to notify people. For more details about this component, please refer to the documentation at @@ -13,7 +11,7 @@ import os import homeassistant.bootstrap as bootstrap from homeassistant.config import load_yaml_config_file from homeassistant.helpers import config_per_platform -from homeassistant.util import template +from homeassistant.helpers import template from homeassistant.const import CONF_NAME @@ -35,7 +33,7 @@ _LOGGER = logging.getLogger(__name__) def send_message(hass, message, title=None): - """ Send a notification message. """ + """Send a notification message.""" data = { ATTR_MESSAGE: message } @@ -47,14 +45,13 @@ def send_message(hass, message, title=None): def setup(hass, config): - """ Sets up notify services. """ + """Sets up notify services.""" success = False descriptions = load_yaml_config_file( os.path.join(os.path.dirname(__file__), 'services.yaml')) for platform, p_config in config_per_platform(config, DOMAIN, _LOGGER): - # get platform notify_implementation = bootstrap.prepare_setup_platform( hass, config, DOMAIN, platform) @@ -62,7 +59,6 @@ def setup(hass, config): _LOGGER.error("Unknown notification service specified.") continue - # create platform service notify_service = notify_implementation.get_service(hass, p_config) if notify_service is None: @@ -70,9 +66,8 @@ def setup(hass, config): platform) continue - # create service handler def notify_message(notify_service, call): - """ Handle sending notification message service calls. """ + """Handle sending notification message service calls.""" message = call.data.get(ATTR_MESSAGE) if message is None: @@ -85,7 +80,6 @@ def setup(hass, config): notify_service.send_message(message, title=title, target=target) - # register service service_call_handler = partial(notify_message, notify_service) service_notify = p_config.get(CONF_NAME, SERVICE_NOTIFY) hass.services.register(DOMAIN, service_notify, service_call_handler, @@ -97,7 +91,7 @@ def setup(hass, config): # pylint: disable=too-few-public-methods class BaseNotificationService(object): - """ Provides an ABC for notification services. """ + """Provides an ABC for notification services.""" def send_message(self, message, **kwargs): """ diff --git a/homeassistant/components/rollershutter/command_rollershutter.py b/homeassistant/components/rollershutter/command_rollershutter.py index bd6241f4648..1808901ef3a 100644 --- a/homeassistant/components/rollershutter/command_rollershutter.py +++ b/homeassistant/components/rollershutter/command_rollershutter.py @@ -1,7 +1,5 @@ """ -homeassistant.components.rollershutter.command_rollershutter -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Allows to configure a command rollershutter. +Support for command roller shutters. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/rollershutter.command_rollershutter/ @@ -11,13 +9,13 @@ import subprocess from homeassistant.components.rollershutter import RollershutterDevice from homeassistant.const import CONF_VALUE_TEMPLATE -from homeassistant.util import template +from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_devices_callback, discovery_info=None): - """ Find and return rollershutter controlled by shell commands. """ + """Setup rollershutter controlled by shell commands.""" rollershutters = config.get('rollershutters', {}) devices = [] diff --git a/homeassistant/components/rollershutter/mqtt.py b/homeassistant/components/rollershutter/mqtt.py index 97c8094f865..d5d5a7acb97 100644 --- a/homeassistant/components/rollershutter/mqtt.py +++ b/homeassistant/components/rollershutter/mqtt.py @@ -1,7 +1,5 @@ """ -homeassistant.components.rollershutter.mqtt -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Allows to configure a MQTT rollershutter. +Support for MQTT roller shutters. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/rollershutter.mqtt/ @@ -11,7 +9,7 @@ import logging import homeassistant.components.mqtt as mqtt from homeassistant.components.rollershutter import RollershutterDevice from homeassistant.const import CONF_VALUE_TEMPLATE -from homeassistant.util import template +from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) @@ -25,7 +23,7 @@ DEFAULT_PAYLOAD_STOP = "STOP" def setup_platform(hass, config, add_devices_callback, discovery_info=None): - """ Add MQTT Rollershutter """ + """Add MQTT Rollershutter.""" if config.get('command_topic') is None: _LOGGER.error("Missing required variable: command_topic") @@ -45,7 +43,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): # pylint: disable=too-many-arguments, too-many-instance-attributes class MqttRollershutter(RollershutterDevice): - """ Represents a rollershutter that can be controlled using MQTT. """ + """Represents a rollershutter that can be controlled using MQTT.""" def __init__(self, hass, name, state_topic, command_topic, qos, payload_up, payload_down, payload_stop, value_template): self._state = None @@ -62,7 +60,7 @@ class MqttRollershutter(RollershutterDevice): return def message_received(topic, payload, qos): - """ A new MQTT message has been received. """ + """A new MQTT message has been received.""" if value_template is not None: payload = template.render_with_possible_json_value( hass, value_template, payload) @@ -77,12 +75,12 @@ class MqttRollershutter(RollershutterDevice): @property def should_poll(self): - """ No polling needed """ + """No polling needed.""" return False @property def name(self): - """ The name of the rollershutter. """ + """The name of the rollershutter.""" return self._name @property @@ -94,16 +92,16 @@ class MqttRollershutter(RollershutterDevice): return self._state def move_up(self, **kwargs): - """ Move the rollershutter up. """ + """Move the rollershutter up.""" mqtt.publish(self.hass, self._command_topic, self._payload_up, self._qos) def move_down(self, **kwargs): - """ Move the rollershutter down. """ + """Move the rollershutter down.""" mqtt.publish(self.hass, self._command_topic, self._payload_down, self._qos) def stop(self, **kwargs): - """ Stop the device. """ + """Stop the device.""" mqtt.publish(self.hass, self._command_topic, self._payload_stop, self._qos) diff --git a/homeassistant/components/sensor/arest.py b/homeassistant/components/sensor/arest.py index c731060d6dc..46b42a3422f 100644 --- a/homeassistant/components/sensor/arest.py +++ b/homeassistant/components/sensor/arest.py @@ -13,11 +13,12 @@ from homeassistant.const import ( ATTR_UNIT_OF_MEASUREMENT, CONF_VALUE_TEMPLATE, DEVICE_DEFAULT_NAME) from homeassistant.exceptions import TemplateError from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle, template +from homeassistant.helpers import template +from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) -# Return cached results if last scan was less then this time ago +# Return cached results if last scan was less then this time ago. MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=30) CONF_RESOURCE = 'resource' diff --git a/homeassistant/components/sensor/command_sensor.py b/homeassistant/components/sensor/command_sensor.py index d87010a5525..7f222f52b78 100644 --- a/homeassistant/components/sensor/command_sensor.py +++ b/homeassistant/components/sensor/command_sensor.py @@ -10,7 +10,8 @@ from datetime import timedelta from homeassistant.const import CONF_VALUE_TEMPLATE from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle, template +from homeassistant.helpers import template +from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/sensor/dweet.py b/homeassistant/components/sensor/dweet.py index a618594b1f9..f02c5706d8a 100644 --- a/homeassistant/components/sensor/dweet.py +++ b/homeassistant/components/sensor/dweet.py @@ -10,7 +10,8 @@ from datetime import timedelta from homeassistant.const import CONF_VALUE_TEMPLATE, STATE_UNKNOWN from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle, template +from homeassistant.helpers import template +from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) REQUIREMENTS = ['dweepy==0.2.0'] diff --git a/homeassistant/components/sensor/mqtt.py b/homeassistant/components/sensor/mqtt.py index 1c7c549144c..c2a352ef154 100644 --- a/homeassistant/components/sensor/mqtt.py +++ b/homeassistant/components/sensor/mqtt.py @@ -9,7 +9,7 @@ import logging import homeassistant.components.mqtt as mqtt from homeassistant.const import CONF_VALUE_TEMPLATE, STATE_UNKNOWN from homeassistant.helpers.entity import Entity -from homeassistant.util import template +from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/sensor/rest.py b/homeassistant/components/sensor/rest.py index 126ac4265cb..2d023a7c542 100644 --- a/homeassistant/components/sensor/rest.py +++ b/homeassistant/components/sensor/rest.py @@ -11,7 +11,8 @@ import requests from homeassistant.const import CONF_VALUE_TEMPLATE, STATE_UNKNOWN from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle, template +from homeassistant.helpers import template +from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/sensor/tcp.py b/homeassistant/components/sensor/tcp.py index 8c021474753..2798d100153 100644 --- a/homeassistant/components/sensor/tcp.py +++ b/homeassistant/components/sensor/tcp.py @@ -9,7 +9,7 @@ import socket import select from homeassistant.const import CONF_NAME, CONF_HOST -from homeassistant.util import template +from homeassistant.helpers import template from homeassistant.exceptions import TemplateError from homeassistant.helpers.entity import Entity diff --git a/homeassistant/components/sensor/template.py b/homeassistant/components/sensor/template.py index bd4ece7d450..65df431d2b9 100644 --- a/homeassistant/components/sensor/template.py +++ b/homeassistant/components/sensor/template.py @@ -13,7 +13,8 @@ from homeassistant.const import ( from homeassistant.core import EVENT_STATE_CHANGED from homeassistant.exceptions import TemplateError from homeassistant.helpers.entity import Entity, generate_entity_id -from homeassistant.util import slugify, template +from homeassistant.helpers import template +from homeassistant.util import slugify ENTITY_ID_FORMAT = DOMAIN + '.{}' diff --git a/homeassistant/components/switch/command_switch.py b/homeassistant/components/switch/command_switch.py index a90ed61c3e2..cac705ae2b1 100644 --- a/homeassistant/components/switch/command_switch.py +++ b/homeassistant/components/switch/command_switch.py @@ -1,7 +1,5 @@ """ -homeassistant.components.switch.command_switch -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Allows to configure custom shell commands to turn a switch on/off. +Support for custom shell commands to turn a switch on/off. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/switch.command_switch/ @@ -11,15 +9,14 @@ import subprocess from homeassistant.components.switch import SwitchDevice from homeassistant.const import CONF_VALUE_TEMPLATE -from homeassistant.util import template +from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) # pylint: disable=unused-argument def setup_platform(hass, config, add_devices_callback, discovery_info=None): - """ Find and return switches controlled by shell commands. """ - + """Find and return switches controlled by shell commands.""" switches = config.get('switches', {}) devices = [] @@ -37,7 +34,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): class CommandSwitch(SwitchDevice): - """ Represents a switch that can be togggled using shell commands. """ + """Represents a switch that can be toggled using shell commands.""" # pylint: disable=too-many-arguments def __init__(self, hass, name, command_on, command_off, @@ -53,7 +50,7 @@ class CommandSwitch(SwitchDevice): @staticmethod def _switch(command): - """ Execute the actual commands. """ + """Execute the actual commands.""" _LOGGER.info('Running command: %s', command) success = (subprocess.call(command, shell=True) == 0) @@ -65,7 +62,7 @@ class CommandSwitch(SwitchDevice): @staticmethod def _query_state_value(command): - """ Execute state command for return value. """ + """Execute state command for return value.""" _LOGGER.info('Running state command: %s', command) try: @@ -76,27 +73,27 @@ class CommandSwitch(SwitchDevice): @staticmethod def _query_state_code(command): - """ Execute state command for return code. """ + """Execute state command for return code.""" _LOGGER.info('Running state command: %s', command) return subprocess.call(command, shell=True) == 0 @property def should_poll(self): - """ Only poll if we have statecmd. """ + """Only poll if we have state command.""" return self._command_state is not None @property def name(self): - """ The name of the switch. """ + """The name of the switch.""" return self._name @property def is_on(self): - """ True if device is on. """ + """True if device is on.""" return self._state def _query_state(self): - """ Query for state. """ + """Query for state.""" if not self._command_state: _LOGGER.error('No state command specified') return @@ -105,7 +102,7 @@ class CommandSwitch(SwitchDevice): return CommandSwitch._query_state_code(self._command_state) def update(self): - """ Update device state. """ + """Update device state.""" if self._command_state: payload = str(self._query_state()) if self._value_template: @@ -114,14 +111,14 @@ class CommandSwitch(SwitchDevice): self._state = (payload.lower() == "true") def turn_on(self, **kwargs): - """ Turn the device on. """ + """Turn the device on.""" if (CommandSwitch._switch(self._command_on) and not self._command_state): self._state = True self.update_ha_state() def turn_off(self, **kwargs): - """ Turn the device off. """ + """Turn the device off.""" if (CommandSwitch._switch(self._command_off) and not self._command_state): self._state = False diff --git a/homeassistant/components/switch/mqtt.py b/homeassistant/components/switch/mqtt.py index 6b8089daed3..40876e71891 100644 --- a/homeassistant/components/switch/mqtt.py +++ b/homeassistant/components/switch/mqtt.py @@ -1,7 +1,5 @@ """ -homeassistant.components.switch.mqtt -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Allows to configure a MQTT switch. +Support for MQTT switches. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/switch.mqtt/ @@ -11,7 +9,7 @@ import logging import homeassistant.components.mqtt as mqtt from homeassistant.components.switch import SwitchDevice from homeassistant.const import CONF_VALUE_TEMPLATE -from homeassistant.util import template +from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) @@ -27,7 +25,7 @@ DEPENDENCIES = ['mqtt'] # pylint: disable=unused-argument def setup_platform(hass, config, add_devices_callback, discovery_info=None): - """ Add MQTT Switch. """ + """Add MQTT switch.""" if config.get('command_topic') is None: _LOGGER.error("Missing required variable: command_topic") @@ -48,7 +46,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): # pylint: disable=too-many-arguments, too-many-instance-attributes class MqttSwitch(SwitchDevice): - """ Represents a switch that can be toggled using MQTT. """ + """Represents a switch that can be toggled using MQTT.""" def __init__(self, hass, name, state_topic, command_topic, qos, retain, payload_on, payload_off, optimistic, value_template): self._state = False @@ -63,7 +61,7 @@ class MqttSwitch(SwitchDevice): self._optimistic = optimistic def message_received(topic, payload, qos): - """ A new MQTT message has been received. """ + """A new MQTT message has been received.""" if value_template is not None: payload = template.render_with_possible_json_value( hass, value_template, payload) @@ -75,26 +73,25 @@ class MqttSwitch(SwitchDevice): self.update_ha_state() if self._state_topic is None: - # force optimistic mode + # Force into optimistic mode. self._optimistic = True else: - # subscribe the state_topic mqtt.subscribe(hass, self._state_topic, message_received, self._qos) @property def should_poll(self): - """ No polling needed. """ + """No polling needed.""" return False @property def name(self): - """ The name of the switch. """ + """The name of the switch.""" return self._name @property def is_on(self): - """ True if device is on. """ + """True if device is on.""" return self._state @property @@ -103,19 +100,19 @@ class MqttSwitch(SwitchDevice): return self._optimistic def turn_on(self, **kwargs): - """ Turn the device on. """ + """Turn the device on.""" mqtt.publish(self.hass, self._command_topic, self._payload_on, self._qos, self._retain) if self._optimistic: - # optimistically assume that switch has changed state + # Optimistically assume that switch has changed state. self._state = True self.update_ha_state() def turn_off(self, **kwargs): - """ Turn the device off. """ + """Turn the device off.""" mqtt.publish(self.hass, self._command_topic, self._payload_off, self._qos, self._retain) if self._optimistic: - # optimistically assume that switch has changed state + # Optimistically assume that switch has changed state. self._state = False self.update_ha_state() diff --git a/homeassistant/components/switch/template.py b/homeassistant/components/switch/template.py index 5c8227346ea..ec6cb7d2e8e 100644 --- a/homeassistant/components/switch/template.py +++ b/homeassistant/components/switch/template.py @@ -1,7 +1,5 @@ """ -homeassistant.components.switch.template -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Allows the creation of a switch that integrates other components together +Support for switches which integrates with other components. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/switch.template/ @@ -15,7 +13,8 @@ from homeassistant.core import EVENT_STATE_CHANGED from homeassistant.exceptions import TemplateError from homeassistant.helpers.entity import generate_entity_id from homeassistant.helpers.service import call_from_config -from homeassistant.util import slugify, template +from homeassistant.helpers import template +from homeassistant.util import slugify ENTITY_ID_FORMAT = DOMAIN + '.{}' @@ -31,7 +30,7 @@ OFF_ACTION = 'turn_off' # pylint: disable=unused-argument def setup_platform(hass, config, add_devices, discovery_info=None): - """ Sets up the switches. """ + """Sets up the Template switch.""" switches = [] if config.get(CONF_SWITCHES) is None: @@ -80,7 +79,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class SwitchTemplate(SwitchDevice): - """ Represents a Template Switch. """ + """Represents a Template switch.""" # pylint: disable=too-many-arguments def __init__(self, @@ -103,37 +102,37 @@ class SwitchTemplate(SwitchDevice): self.update() def _update_callback(_event): - """ Called when the target device changes state. """ + """Called when the target device changes state.""" self.update_ha_state(True) self.hass.bus.listen(EVENT_STATE_CHANGED, _update_callback) @property def name(self): - """ Returns the name of the device. """ + """Returns the name of the switch.""" return self._name @property def should_poll(self): - """ Tells Home Assistant not to poll this entity. """ + """No polling needed.""" return False def turn_on(self, **kwargs): - """ Fires the on action. """ + """Fires the on action.""" call_from_config(self.hass, self._on_action, True) def turn_off(self, **kwargs): - """ Fires the off action. """ + """Fires the off action.""" call_from_config(self.hass, self._off_action, True) @property def is_on(self): - """ True if device is on. """ + """True if device is on.""" return self._value.lower() == 'true' or self._value == STATE_ON @property def is_off(self): - """ True if device is off. """ + """True if device is off.""" return self._value.lower() == 'false' or self._value == STATE_OFF @property @@ -142,7 +141,7 @@ class SwitchTemplate(SwitchDevice): return self.is_on or self.is_off def update(self): - """ Updates the state from the template. """ + """Updates the state from the template.""" try: self._value = template.render(self.hass, self._template) if not self.available: diff --git a/homeassistant/util/template.py b/homeassistant/helpers/template.py similarity index 95% rename from homeassistant/util/template.py rename to homeassistant/helpers/template.py index 7b00fb6dcc1..bc80fd89a81 100644 --- a/homeassistant/util/template.py +++ b/homeassistant/helpers/template.py @@ -1,7 +1,5 @@ """ -homeassistant.util.template -~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Template utility methods for rendering strings with HA data. +Template helper methods for rendering strings with HA data. """ # pylint: disable=too-few-public-methods import json @@ -23,8 +21,10 @@ _SENTINEL = object() def render_with_possible_json_value(hass, template, value, error_value=_SENTINEL): - """ Renders template with value exposed. - If valid JSON will expose value_json too. """ + """ + Renders template with value exposed. + If valid JSON will expose value_json too. + """ variables = { 'value': value } @@ -41,7 +41,7 @@ def render_with_possible_json_value(hass, template, value, def render(hass, template, variables=None, **kwargs): - """ Render given template. """ + """Render given template.""" if variables is not None: kwargs.update(variables) @@ -63,7 +63,7 @@ def render(hass, template, variables=None, **kwargs): class AllStates(object): - """ Class to expose all HA states as attributes. """ + """Class to expose all HA states as attributes.""" def __init__(self, hass): self._hass = hass @@ -80,7 +80,7 @@ class AllStates(object): class DomainStates(object): - """ Class to expose a specific HA domain as attributes. """ + """Class to expose a specific HA domain as attributes.""" def __init__(self, hass, domain): self._hass = hass diff --git a/tests/util/test_template.py b/tests/helpers/test_template.py similarity index 97% rename from tests/util/test_template.py rename to tests/helpers/test_template.py index 7a0b990a04a..1420ac44b6b 100644 --- a/tests/util/test_template.py +++ b/tests/helpers/test_template.py @@ -1,8 +1,5 @@ """ -tests.util.test_template -~~~~~~~~~~~~~~~~~~~~~~~~ - -Tests Home Assistant template util methods. +Tests Home Assistant template helper methods. """ # pylint: disable=too-many-public-methods import unittest @@ -10,7 +7,7 @@ from unittest.mock import patch from homeassistant.components import group from homeassistant.exceptions import TemplateError -from homeassistant.util import template +from homeassistant.helpers import template import homeassistant.util.dt as dt_util from tests.common import get_test_home_assistant @@ -22,7 +19,7 @@ class TestUtilTemplate(unittest.TestCase): self.hass = get_test_home_assistant() def tearDown(self): # pylint: disable=invalid-name - """ Stop down stuff we started. """ + """Stop down stuff we started.""" self.hass.stop() def test_referring_states_by_entity_id(self): @@ -174,16 +171,16 @@ class TestUtilTemplate(unittest.TestCase): template.render(self.hass, '{{ states("test.object2") }}')) @patch('homeassistant.core.dt_util.utcnow', return_value=dt_util.utcnow()) - @patch('homeassistant.util.template.TemplateEnvironment.is_safe_callable', - return_value=True) + @patch('homeassistant.helpers.template.TemplateEnvironment.' + 'is_safe_callable', return_value=True) def test_now(self, mock_is_safe, mock_utcnow): self.assertEqual( dt_util.utcnow().isoformat(), template.render(self.hass, '{{ now.isoformat() }}')) @patch('homeassistant.core.dt_util.utcnow', return_value=dt_util.utcnow()) - @patch('homeassistant.util.template.TemplateEnvironment.is_safe_callable', - return_value=True) + @patch('homeassistant.helpers.template.TemplateEnvironment.' + 'is_safe_callable', return_value=True) def test_utcnow(self, mock_is_safe, mock_utcnow): self.assertEqual( dt_util.utcnow().isoformat(),