diff --git a/MANIFEST.in b/MANIFEST.in index 8233015e646ad1ad8224d1048cce8ed77eb67866..d04d86bae5866894f120e8c8bf88ee0c628cb5f2 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,4 @@ -include README.md +include README.rst include LICENSE graft homeassistant prune homeassistant/components/frontend/www_static/home-assistant-polymer diff --git a/homeassistant/components/light/blinksticklight.py b/homeassistant/components/light/blinksticklight.py index 086a004eba2f45a4249f47b9de3a356dc3507b62..5cc14a9034ba32020287b8e236ab9ef0abdf52d7 100644 --- a/homeassistant/components/light/blinksticklight.py +++ b/homeassistant/components/light/blinksticklight.py @@ -8,9 +8,7 @@ https://home-assistant.io/components/light.blinksticklight/ """ import logging -from blinkstick import blinkstick - -from homeassistant.components.light import (Light, ATTR_RGB_COLOR) +from homeassistant.components.light import Light, ATTR_RGB_COLOR _LOGGER = logging.getLogger(__name__) @@ -22,6 +20,8 @@ DEPENDENCIES = [] # pylint: disable=unused-argument def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Add device specified by serial number. """ + from blinkstick import blinkstick + stick = blinkstick.find_by_serial(config['serial']) add_devices_callback([BlinkStickLight(stick, config['name'])]) diff --git a/homeassistant/components/light/rfxtrx.py b/homeassistant/components/light/rfxtrx.py index ff52001353b124aa99f6a29c9634e4776f035711..8d6a2b86217a8d79ea91b6e6d8024e5f6d1d3a2a 100644 --- a/homeassistant/components/light/rfxtrx.py +++ b/homeassistant/components/light/rfxtrx.py @@ -8,7 +8,6 @@ https://home-assistant.io/components/light.rfxtrx/ """ import logging import homeassistant.components.rfxtrx as rfxtrx -import RFXtrx as rfxtrxmod from homeassistant.components.light import Light from homeassistant.util import slugify @@ -20,6 +19,8 @@ _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Setup the RFXtrx platform. """ + import RFXtrx as rfxtrxmod + lights = [] devices = config.get('devices', None) if devices: diff --git a/homeassistant/components/light/tellstick.py b/homeassistant/components/light/tellstick.py index 9a22a4dcdc0abf80c7d5557e5659dd5500832556..24d86c47c517d5ea0ed946550e86c09aff7c8b57 100644 --- a/homeassistant/components/light/tellstick.py +++ b/homeassistant/components/light/tellstick.py @@ -6,13 +6,9 @@ Support for Tellstick lights. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/light.tellstick/ """ -import logging -# pylint: disable=no-name-in-module, import-error from homeassistant.components.light import Light, ATTR_BRIGHTNESS from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, ATTR_FRIENDLY_NAME) -import tellcore.constants as tellcore_constants -from tellcore.library import DirectCallbackDispatcher REQUIREMENTS = ['tellcore-py==1.1.2'] @@ -20,12 +16,9 @@ REQUIREMENTS = ['tellcore-py==1.1.2'] def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Find and return Tellstick lights. """ - try: - import tellcore.telldus as telldus - except ImportError: - logging.getLogger(__name__).exception( - "Failed to import tellcore") - return [] + import tellcore.telldus as telldus + from tellcore.library import DirectCallbackDispatcher + import tellcore.constants as tellcore_constants core = telldus.TelldusCore(callback_dispatcher=DirectCallbackDispatcher()) @@ -58,17 +51,20 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): class TellstickLight(Light): """ Represents a Tellstick light. """ - last_sent_command_mask = (tellcore_constants.TELLSTICK_TURNON | - tellcore_constants.TELLSTICK_TURNOFF | - tellcore_constants.TELLSTICK_DIM | - tellcore_constants.TELLSTICK_UP | - tellcore_constants.TELLSTICK_DOWN) def __init__(self, tellstick_device): + import tellcore.constants as tellcore_constants + self.tellstick_device = tellstick_device self.state_attr = {ATTR_FRIENDLY_NAME: tellstick_device.name} self._brightness = 0 + self.last_sent_command_mask = (tellcore_constants.TELLSTICK_TURNON | + tellcore_constants.TELLSTICK_TURNOFF | + tellcore_constants.TELLSTICK_DIM | + tellcore_constants.TELLSTICK_UP | + tellcore_constants.TELLSTICK_DOWN) + @property def name(self): """ Returns the name of the switch if any. """ @@ -104,6 +100,8 @@ class TellstickLight(Light): def update(self): """ Update state of the light. """ + import tellcore.constants as tellcore_constants + last_command = self.tellstick_device.last_sent_command( self.last_sent_command_mask) diff --git a/homeassistant/components/light/zwave.py b/homeassistant/components/light/zwave.py index f1cd6f57fc00387106a9880acf81f52529a26b2a..31cd64d2530aec089f01671470165fa2fe5fbfb3 100644 --- a/homeassistant/components/light/zwave.py +++ b/homeassistant/components/light/zwave.py @@ -7,9 +7,6 @@ For more details about this platform, please refer to the documentation at https://home-assistant.io/components/light.zwave/ """ # pylint: disable=import-error -from openzwave.network import ZWaveNetwork -from pydispatch import dispatcher - import homeassistant.components.zwave as zwave from homeassistant.const import STATE_ON, STATE_OFF @@ -51,6 +48,9 @@ class ZwaveDimmer(Light): """ Provides a Z-Wave dimmer. """ # pylint: disable=too-many-arguments def __init__(self, value): + from openzwave.network import ZWaveNetwork + from pydispatch import dispatcher + self._value = value self._node = value.node diff --git a/homeassistant/components/sensor/rfxtrx.py b/homeassistant/components/sensor/rfxtrx.py index 0118c30ceb657ff9edcc51bbcae3b9413cdd7b92..c67810c86ebe099b947a5afd4118ed3d575184bf 100644 --- a/homeassistant/components/sensor/rfxtrx.py +++ b/homeassistant/components/sensor/rfxtrx.py @@ -11,7 +11,6 @@ from collections import OrderedDict from homeassistant.const import (TEMP_CELCIUS) from homeassistant.helpers.entity import Entity -from RFXtrx import SensorEvent import homeassistant.components.rfxtrx as rfxtrx from homeassistant.util import slugify @@ -28,6 +27,7 @@ _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Setup the RFXtrx platform. """ + from RFXtrx import SensorEvent def sensor_update(event): """ Callback for sensor updates from the RFXtrx gateway. """ diff --git a/homeassistant/components/sensor/tellstick.py b/homeassistant/components/sensor/tellstick.py index b6eb42f6dbbbe87f80ece48aea069b39175906d3..c6993de462d65942d7c972698ac3db1be6c8677c 100644 --- a/homeassistant/components/sensor/tellstick.py +++ b/homeassistant/components/sensor/tellstick.py @@ -9,9 +9,6 @@ https://home-assistant.io/components/sensor.tellstick/ import logging from collections import namedtuple -import tellcore.telldus as telldus -import tellcore.constants as tellcore_constants - from homeassistant.const import TEMP_CELCIUS from homeassistant.helpers.entity import Entity import homeassistant.util as util @@ -24,6 +21,9 @@ REQUIREMENTS = ['tellcore-py==1.1.2'] # pylint: disable=unused-argument def setup_platform(hass, config, add_devices, discovery_info=None): """ Sets up Tellstick sensors. """ + import tellcore.telldus as telldus + import tellcore.constants as tellcore_constants + sensor_value_descriptions = { tellcore_constants.TELLSTICK_TEMPERATURE: DatatypeDescription( diff --git a/homeassistant/components/sensor/transmission.py b/homeassistant/components/sensor/transmission.py index c4a40e64470e45d79cde63d6c33aee3260d3a0e0..484b045f295e7228820df74ec8377ae0fab62c8f 100644 --- a/homeassistant/components/sensor/transmission.py +++ b/homeassistant/components/sensor/transmission.py @@ -11,10 +11,6 @@ from datetime import timedelta from homeassistant.const import CONF_HOST, CONF_USERNAME, CONF_PASSWORD from homeassistant.helpers.entity import Entity -# pylint: disable=no-name-in-module, import-error -import transmissionrpc - -from transmissionrpc.error import TransmissionError import logging @@ -33,6 +29,9 @@ _THROTTLED_REFRESH = None # pylint: disable=unused-argument def setup_platform(hass, config, add_devices, discovery_info=None): """ Sets up the Transmission sensors. """ + import transmissionrpc + from transmissionrpc.error import TransmissionError + host = config.get(CONF_HOST) username = config.get(CONF_USERNAME, None) password = config.get(CONF_PASSWORD, None) @@ -97,6 +96,8 @@ class TransmissionSensor(Entity): def refresh_transmission_data(self): """ Calls the throttled Transmission refresh method. """ + from transmissionrpc.error import TransmissionError + if _THROTTLED_REFRESH is not None: try: _THROTTLED_REFRESH() diff --git a/homeassistant/components/sensor/zwave.py b/homeassistant/components/sensor/zwave.py index 0a9b3e8290f0a01fc31bc8f594ce72f1c92adb12..23d2f8948f8368818356f64043e5b6e1d19a6862 100644 --- a/homeassistant/components/sensor/zwave.py +++ b/homeassistant/components/sensor/zwave.py @@ -8,8 +8,6 @@ at https://home-assistant.io/components/zwave/ """ # pylint: disable=import-error from homeassistant.helpers.event import track_point_in_time -from openzwave.network import ZWaveNetwork -from pydispatch import dispatcher import datetime import homeassistant.util.dt as dt_util import homeassistant.components.zwave as zwave @@ -79,6 +77,9 @@ class ZWaveSensor(Entity): """ Represents a Z-Wave sensor. """ def __init__(self, sensor_value): + from openzwave.network import ZWaveNetwork + from pydispatch import dispatcher + self._value = sensor_value self._node = sensor_value.node diff --git a/homeassistant/components/switch/hikvisioncam.py b/homeassistant/components/switch/hikvisioncam.py index ec74a83dbc226c3e3c037c5030fb77bb1997b219..2d91acdf361888aa10f6a33a5de32882e9298aa7 100644 --- a/homeassistant/components/switch/hikvisioncam.py +++ b/homeassistant/components/switch/hikvisioncam.py @@ -11,12 +11,6 @@ from homeassistant.const import STATE_ON, STATE_OFF from homeassistant.const import CONF_HOST, CONF_USERNAME, CONF_PASSWORD import logging -try: - import hikvision.api - from hikvision.error import HikvisionError, MissingParamError -except ImportError: - hikvision.api = None - _LOGGING = logging.getLogger(__name__) REQUIREMENTS = ['hikvision==0.4'] # pylint: disable=too-many-arguments @@ -25,6 +19,8 @@ REQUIREMENTS = ['hikvision==0.4'] def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Setup Hikvision camera. """ + import hikvision.api + from hikvision.error import HikvisionError, MissingParamError host = config.get(CONF_HOST, None) port = config.get('port', "80") @@ -32,13 +28,6 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): username = config.get(CONF_USERNAME, "admin") password = config.get(CONF_PASSWORD, "12345") - if hikvision.api is None: - _LOGGING.error(( - "Failed to import hikvision. Did you maybe not install the " - "'hikvision' dependency?")) - - return False - try: hikvision_cam = hikvision.api.CreateDevice( host, port=port, username=username, diff --git a/homeassistant/components/switch/orvibo.py b/homeassistant/components/switch/orvibo.py index 04864e13fddd7a18f2f77feba4a2a4b1c86f57bc..b9469d15df0055d449b444bb26037089848ebcaf 100644 --- a/homeassistant/components/switch/orvibo.py +++ b/homeassistant/components/switch/orvibo.py @@ -10,8 +10,6 @@ import logging from homeassistant.components.switch import SwitchDevice -from orvibo.s20 import S20, S20Exception - DEFAULT_NAME = "Orvibo S20 Switch" REQUIREMENTS = ['orvibo==1.0.0'] _LOGGER = logging.getLogger(__name__) @@ -20,6 +18,8 @@ _LOGGER = logging.getLogger(__name__) # pylint: disable=unused-argument def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Find and return S20 switches. """ + from orvibo.s20 import S20, S20Exception + if config.get('host') is None: _LOGGER.error("Missing required variable: host") return @@ -34,9 +34,12 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): class S20Switch(SwitchDevice): """ Represents an S20 switch. """ def __init__(self, name, s20): + from orvibo.s20 import S20Exception + self._name = name self._s20 = s20 self._state = False + self._exc = S20Exception @property def should_poll(self): @@ -57,19 +60,19 @@ class S20Switch(SwitchDevice): """ Update device state. """ try: self._state = self._s20.on - except S20Exception: + except self._exc: _LOGGER.exception("Error while fetching S20 state") def turn_on(self, **kwargs): """ Turn the device on. """ try: self._s20.on = True - except S20Exception: + except self._exc: _LOGGER.exception("Error while turning on S20") def turn_off(self, **kwargs): """ Turn the device off. """ try: self._s20.on = False - except S20Exception: + except self._exc: _LOGGER.exception("Error while turning off S20") diff --git a/homeassistant/components/switch/rfxtrx.py b/homeassistant/components/switch/rfxtrx.py index 83100598245a96fb9632d2412e4ff03f3bbfd046..86bcf580f418222c709a3afc278b5da2fec28937 100644 --- a/homeassistant/components/switch/rfxtrx.py +++ b/homeassistant/components/switch/rfxtrx.py @@ -8,7 +8,6 @@ https://home-assistant.io/components/switch.rfxtrx/ """ import logging import homeassistant.components.rfxtrx as rfxtrx -from RFXtrx import LightingDevice from homeassistant.components.switch import SwitchDevice from homeassistant.util import slugify @@ -20,6 +19,7 @@ _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Setup the RFXtrx platform. """ + from RFXtrx import LightingDevice # Add switch from config file switchs = [] diff --git a/homeassistant/components/switch/tellstick.py b/homeassistant/components/switch/tellstick.py index 2966673520f0694a1139a91475c049f50ec63a76..61edbed0af4ae4c9cca76c89c706bfc083d87c0d 100644 --- a/homeassistant/components/switch/tellstick.py +++ b/homeassistant/components/switch/tellstick.py @@ -11,8 +11,6 @@ import logging from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, ATTR_FRIENDLY_NAME) from homeassistant.helpers.entity import ToggleEntity -import tellcore.constants as tellcore_constants -from tellcore.library import DirectCallbackDispatcher SIGNAL_REPETITIONS = 1 REQUIREMENTS = ['tellcore-py==1.1.2'] @@ -22,11 +20,9 @@ _LOGGER = logging.getLogger(__name__) # pylint: disable=unused-argument def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Find and return Tellstick switches. """ - try: - import tellcore.telldus as telldus - except ImportError: - _LOGGER.exception("Failed to import tellcore") - return + import tellcore.telldus as telldus + import tellcore.constants as tellcore_constants + from tellcore.library import DirectCallbackDispatcher core = telldus.TelldusCore(callback_dispatcher=DirectCallbackDispatcher()) @@ -62,14 +58,17 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): class TellstickSwitchDevice(ToggleEntity): """ Represents a Tellstick switch. """ - last_sent_command_mask = (tellcore_constants.TELLSTICK_TURNON | - tellcore_constants.TELLSTICK_TURNOFF) def __init__(self, tellstick_device, signal_repetitions): + import tellcore.constants as tellcore_constants + self.tellstick_device = tellstick_device self.state_attr = {ATTR_FRIENDLY_NAME: tellstick_device.name} self.signal_repetitions = signal_repetitions + self.last_sent_command_mask = (tellcore_constants.TELLSTICK_TURNON | + tellcore_constants.TELLSTICK_TURNOFF) + @property def should_poll(self): """ Tells Home Assistant not to poll this entity. """ @@ -88,6 +87,8 @@ class TellstickSwitchDevice(ToggleEntity): @property def is_on(self): """ True if switch is on. """ + import tellcore.constants as tellcore_constants + last_command = self.tellstick_device.last_sent_command( self.last_sent_command_mask) diff --git a/homeassistant/components/switch/transmission.py b/homeassistant/components/switch/transmission.py index bb4f6616975796014a1f6eb458bb35649077d63d..f3f6a9a87656b4413eeeec52301c76e2c90f18f7 100644 --- a/homeassistant/components/switch/transmission.py +++ b/homeassistant/components/switch/transmission.py @@ -10,9 +10,6 @@ from homeassistant.const import CONF_HOST, CONF_USERNAME, CONF_PASSWORD from homeassistant.const import STATE_ON, STATE_OFF from homeassistant.helpers.entity import ToggleEntity -# pylint: disable=no-name-in-module, import-error -import transmissionrpc -from transmissionrpc.error import TransmissionError import logging _LOGGING = logging.getLogger(__name__) @@ -22,6 +19,9 @@ REQUIREMENTS = ['transmissionrpc==0.11'] # pylint: disable=unused-argument def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Sets up the transmission sensor. """ + import transmissionrpc + from transmissionrpc.error import TransmissionError + host = config.get(CONF_HOST) username = config.get(CONF_USERNAME, None) password = config.get(CONF_PASSWORD, None) diff --git a/homeassistant/components/switch/zwave.py b/homeassistant/components/switch/zwave.py index 7d86605c6468eb0feba219f5216b81343d7a1050..493e2234bcfd2ca9f1d44077045f947dd6cb6554 100644 --- a/homeassistant/components/switch/zwave.py +++ b/homeassistant/components/switch/zwave.py @@ -5,8 +5,6 @@ homeassistant.components.switch.zwave Zwave platform that handles simple binary switches. """ # pylint: disable=import-error -from openzwave.network import ZWaveNetwork -from pydispatch import dispatcher import homeassistant.components.zwave as zwave @@ -36,11 +34,13 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class ZwaveSwitch(SwitchDevice): """ Provides a zwave switch. """ def __init__(self, value): + from openzwave.network import ZWaveNetwork + from pydispatch import dispatcher + self._value = value self._node = value.node self._state = value.data - dispatcher.connect( self._value_changed, ZWaveNetwork.SIGNAL_VALUE_CHANGED) diff --git a/requirements_all.txt b/requirements_all.txt index ce6cbfabc96dcbcc545b60aaf78aede1e6f7e68e..081c8235b12636847a9447aed790f348b6d955e1 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1,161 +1,168 @@ -# Required for Home Assistant core +# Home Assistant core requests>=2,<3 pyyaml>=3.11,<4 pytz>=2015.4 pip>=7.0.0 vincenty==0.1.3 -# Optional, needed for specific components +# homeassistant.components.arduino +PyMata==2.07a -# Sun (sun) -astral==0.8.1 +# homeassistant.components.device_tracker.netgear +pynetgear==0.3 -# Philips Hue (lights.hue) -phue==0.8 +# homeassistant.components.device_tracker.nmap_tracker +python-nmap==0.4.3 -# Limitlessled/Easybulb/Milight (lights.limitlessled) -ledcontroller==1.1.0 +# homeassistant.components.device_tracker.snmp +pysnmp==4.2.5 -# Chromecast (media_player.cast) -pychromecast==0.6.12 +# homeassistant.components.discovery +netdisco==0.5.1 -# Keyboard (keyboard) -pyuserinput==0.1.9 +# homeassistant.components.ifttt +pyfttt==0.3 -# Tellstick (*.tellstick) -tellcore-py==1.1.2 +# homeassistant.components.isy994 +PyISY==1.0.5 -# Nmap (device_tracker.nmap) -python-nmap==0.4.3 +# homeassistant.components.keyboard +pyuserinput==0.1.9 -# PushBullet (notify.pushbullet) -pushbullet.py==0.9.0 +# homeassistant.components.light.blinksticklight +blinkstick==1.1.7 -# Nest Thermostat (thermostat.nest) -python-nest==2.6.0 +# homeassistant.components.light.hue +phue==0.8 -# Z-Wave (*.zwave) -pydispatcher==2.0.5 +# homeassistant.components.light.limitlessled +ledcontroller==1.1.0 -# ISY994 (isy994) -PyISY==1.0.5 +# homeassistant.components.light.tellstick +# homeassistant.components.sensor.tellstick +# homeassistant.components.switch.tellstick +tellcore-py==1.1.2 -# PSutil (sensor.systemmonitor) -psutil==3.2.2 +# homeassistant.components.light.vera +# homeassistant.components.switch.vera +https://github.com/pavoni/home-assistant-vera-api/archive/efdba4e63d58a30bc9b36d9e01e69858af9130b8.zip#python-vera==0.1.1 -# Pushover (notify.pushover) -python-pushover==0.2 +# homeassistant.components.wink +# homeassistant.components.light.wink +# homeassistant.components.sensor.wink +# homeassistant.components.switch.wink +https://github.com/balloob/python-wink/archive/9eb39eaba0717922815e673ad1114c685839d890.zip#python-wink==0.1.1 -# Transmission Torrent Client (*.transmission) -transmissionrpc==0.11 +# homeassistant.components.media_player.cast +pychromecast==0.6.12 -# OpenWeatherMap (sensor.openweathermap) -pyowm==2.2.1 +# homeassistant.components.media_player.kodi +jsonrpc-requests==0.1 -# XMPP (notify.xmpp) -sleekxmpp==1.3.1 -dnspython3==1.12.0 +# homeassistant.components.media_player.mpd +python-mpd2==0.5.4 -# Blockchain (sensor.bitcoin) -blockchain==1.1.2 +# homeassistant.components.media_player.plex +plexapi==1.1.0 -# Music Player Daemon (media_player.mpd) -python-mpd2==0.5.4 +# homeassistant.components.media_player.sonos +SoCo==0.11.1 -# Hikvision (switch.hikvisioncam) -hikvision==0.4 +# homeassistant.components.modbus +https://github.com/bashwork/pymodbus/archive/d7fc4f1cc975631e0a9011390e8017f64b612661.zip#pymodbus==1.2.0 -# Console log coloring -colorlog==2.6.0 +# homeassistant.components.mqtt +paho-mqtt==1.1 -# JSON-RPC interface (media_player.kodi) -jsonrpc-requests==0.1 +# homeassistant.components.notify.pushbullet +pushbullet.py==0.9.0 -# Forecast.io (sensor.forecast) -python-forecastio==1.3.3 +# homeassistant.components.notify.pushetta +pushetta==1.0.15 -# Firmata (*.arduino) -PyMata==2.07a +# homeassistant.components.notify.pushover +python-pushover==0.2 -# Rfxtrx (rfxtrx) -https://github.com/Danielhiversen/pyRFXtrx/archive/ec7a1aaddf8270db6e5da1c13d58c1547effd7cf.zip#RFXtrx==0.15 +# homeassistant.components.notify.slack +slacker==0.6.8 -# Mysensors (sensor.mysensors) -https://github.com/theolind/pymysensors/archive/d4b809c2167650691058d1e29bfd2c4b1792b4b0.zip#pymysensors==0.3 +# homeassistant.components.notify.telegram +python-telegram-bot==2.8.7 -# Netgear (device_tracker.netgear) -pynetgear==0.3 +# homeassistant.components.notify.xmpp +sleekxmpp==1.3.1 -# Netdisco (discovery) -netdisco==0.5.1 +# homeassistant.components.notify.xmpp +dnspython3==1.12.0 -# Wemo (switch.wemo) -pywemo==0.3.2 +# homeassistant.components.rfxtrx +https://github.com/Danielhiversen/pyRFXtrx/archive/0.2.zip#RFXtrx==0.2 -# Wink (*.wink) -https://github.com/balloob/python-wink/archive/9eb39eaba0717922815e673ad1114c685839d890.zip#python-wink==0.1.1 +# homeassistant.components.sensor.bitcoin +blockchain==1.1.2 -# Slack notifier (notify.slack) -slacker==0.6.8 +# homeassistant.components.sensor.cpuspeed +py-cpuinfo==0.1.6 -# Temper sensors (sensor.temper) -https://github.com/rkabadi/temper-python/archive/3dbdaf2d87b8db9a3cd6e5585fc704537dd2d09b.zip#temperusb==1.2.3 +# homeassistant.components.sensor.dht +http://github.com/mala-zaba/Adafruit_Python_DHT/archive/4101340de8d2457dd194bca1e8d11cbfc237e919.zip#Adafruit_DHT==1.1.0 -# PyEdimax (switch.edimax) -https://github.com/rkabadi/pyedimax/archive/365301ce3ff26129a7910c501ead09ea625f3700.zip#pyedimax==0.1 +# homeassistant.components.sensor.forecast +python-forecastio==1.3.3 -# RPI-GPIO platform (*.rpi_gpio) -# Uncomment for Raspberry Pi -# RPi.GPIO==0.5.11 +# homeassistant.components.sensor.mysensors +https://github.com/theolind/pymysensors/archive/d4b809c2167650691058d1e29bfd2c4b1792b4b0.zip#pymysensors==0.3 -# Adafruit temperature/humidity sensor (sensor.dht) -# Uncomment on a Raspberry Pi / Beaglebone -# http://github.com/mala-zaba/Adafruit_Python_DHT/archive/4101340de8d2457dd194bca1e8d11cbfc237e919.zip#Adafruit_DHT==1.1.0 +# homeassistant.components.sensor.openweathermap +pyowm==2.2.1 -# PAHO MQTT (mqtt) -paho-mqtt==1.1 +# homeassistant.components.sensor.rpi_gpio +# homeassistant.components.switch.rpi_gpio +RPi.GPIO==0.5.11 -# PyModbus (modbus) -https://github.com/bashwork/pymodbus/archive/d7fc4f1cc975631e0a9011390e8017f64b612661.zip#pymodbus==1.2.0 +# homeassistant.components.sensor.sabnzbd +https://github.com/jamespcole/home-assistant-nzb-clients/archive/616cad59154092599278661af17e2a9f2cf5e2a9.zip#python-sabnzbd==0.1 -# Verisure (verisure) -https://github.com/persandstrom/python-verisure/archive/9873c4527f01b1ba1f72ae60f7f35854390d59be.zip#python-verisure==0.2.6 +# homeassistant.components.sensor.systemmonitor +psutil==3.2.2 -# IFTTT Maker Channel (ifttt) -pyfttt==0.3 +# homeassistant.components.sensor.temper +https://github.com/rkabadi/temper-python/archive/3dbdaf2d87b8db9a3cd6e5585fc704537dd2d09b.zip#temperusb==1.2.3 -# SABnzbd (sensor.sabnzbd) -https://github.com/balloob/home-assistant-nzb-clients/archive/616cad59154092599278661af17e2a9f2cf5e2a9.zip#python-sabnzbd==0.1 +# homeassistant.components.sensor.transmission +# homeassistant.components.switch.transmission +transmissionrpc==0.11 -# Vera (*.vera) -https://github.com/pavoni/home-assistant-vera-api/archive/efdba4e63d58a30bc9b36d9e01e69858af9130b8.zip#python-vera==0.1.1 +# homeassistant.components.sensor.vera +https://github.com/balloob/home-assistant-vera-api/archive/a8f823066ead6c7da6fb5e7abaf16fef62e63364.zip#python-vera==0.1 -# Sonos (media_player.sonos) -SoCo==0.11.1 +# homeassistant.components.sun +astral==0.8.1 -# PlexAPI (media_player.plex) -plexapi==1.1.0 +# homeassistant.components.switch.edimax +https://github.com/rkabadi/pyedimax/archive/365301ce3ff26129a7910c501ead09ea625f3700.zip#pyedimax==0.1 -# SNMP (device_tracker.snmp) -pysnmp==4.2.5 +# homeassistant.components.switch.hikvisioncam +hikvision==0.4 -# Blinkstick (light.blinksticklight) -blinkstick==1.1.7 +# homeassistant.components.switch.orvibo +orvibo==1.0.0 -# Telegram (notify.telegram) -python-telegram-bot==2.8.7 +# homeassistant.components.switch.wemo +pywemo==0.3.2 -# CPUinfo (sensor.cpuinfo) -py-cpuinfo==0.1.6 +# homeassistant.components.thermostat.honeywell +evohomeclient==0.2.3 + +# homeassistant.components.thermostat.nest +python-nest==2.6.0 -# Radio Thermostat (thermostat.radiotherm) +# homeassistant.components.thermostat.radiotherm radiotherm==1.2 -# Honeywell Evo Home Client (thermostat.honeywell) -evohomeclient==0.2.3 +# homeassistant.components.verisure +https://github.com/persandstrom/python-verisure/archive/9873c4527f01b1ba1f72ae60f7f35854390d59be.zip#python-verisure==0.2.6 -# Pushetta (notify.pushetta) -pushetta==1.0.15 +# homeassistant.components.zwave +pydispatcher==2.0.5 -# Orvibo S10 -orvibo==1.0.0 diff --git a/script/gen_requirements_all.py b/script/gen_requirements_all.py new file mode 100755 index 0000000000000000000000000000000000000000..15b11063efaa3474325b5764c456d2bdf4f35609 --- /dev/null +++ b/script/gen_requirements_all.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +""" +Generate an updated requirements_all.txt +""" + +from collections import OrderedDict +import importlib +import os +import pkgutil +import re + + +def explore_module(package, explore_children): + module = importlib.import_module(package) + + found = [] + + if not hasattr(module, '__path__'): + return found + + for _, name, ispkg in pkgutil.iter_modules(module.__path__, package + '.'): + found.append(name) + + if explore_children: + found.extend(explore_module(name, False)) + + return found + + +def core_requirements(): + with open('setup.py') as inp: + reqs_raw = re.search( + r'REQUIRES = \[(.*?)\]', inp.read(), re.S).group(1) + + return re.findall(r"'(.*?)'", reqs_raw) + + +def main(): + if not os.path.isfile('requirements_all.txt'): + print('Run this from HA root dir') + return + + reqs = OrderedDict() + + errors = [] + for package in sorted(explore_module('homeassistant.components', True)): + try: + module = importlib.import_module(package) + except ImportError: + errors.append(package) + continue + + if not getattr(module, 'REQUIREMENTS', None): + continue + + for req in module.REQUIREMENTS: + reqs.setdefault(req, []).append(package) + + if errors: + print("Found errors") + print('\n'.join(errors)) + return + + print('# Home Assistant core') + print('\n'.join(core_requirements())) + print() + + for pkg, requirements in reqs.items(): + for req in sorted(requirements, + key=lambda name: (len(name.split('.')), name)): + print('#', req) + print(pkg) + print() + +if __name__ == '__main__': + main()