Allow generating requirements_all.txt

This commit is contained in:
Paulus Schoutsen 2015-11-17 00:18:42 -08:00
parent 8be53af78f
commit 377d2c6e5a
17 changed files with 283 additions and 206 deletions

View file

@ -1,4 +1,4 @@
include README.md
include README.rst
include LICENSE
graft homeassistant
prune homeassistant/components/frontend/www_static/home-assistant-polymer

View file

@ -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'])])

View file

@ -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:

View file

@ -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 []
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 |
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)
def __init__(self, tellstick_device):
self.tellstick_device = tellstick_device
self.state_attr = {ATTR_FRIENDLY_NAME: tellstick_device.name}
self._brightness = 0
@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)

View file

@ -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

View file

@ -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. """

View file

@ -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(

View file

@ -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()

View file

@ -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

View file

@ -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,

View file

@ -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")

View file

@ -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 = []

View file

@ -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.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)

View file

@ -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)

View file

@ -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)

View file

@ -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
# Sun (sun)
astral==0.8.1
# Philips Hue (lights.hue)
phue==0.8
# Limitlessled/Easybulb/Milight (lights.limitlessled)
ledcontroller==1.1.0
# Chromecast (media_player.cast)
pychromecast==0.6.12
# Keyboard (keyboard)
pyuserinput==0.1.9
# Tellstick (*.tellstick)
tellcore-py==1.1.2
# Nmap (device_tracker.nmap)
python-nmap==0.4.3
# PushBullet (notify.pushbullet)
pushbullet.py==0.9.0
# Nest Thermostat (thermostat.nest)
python-nest==2.6.0
# Z-Wave (*.zwave)
pydispatcher==2.0.5
# ISY994 (isy994)
PyISY==1.0.5
# PSutil (sensor.systemmonitor)
psutil==3.2.2
# Pushover (notify.pushover)
python-pushover==0.2
# Transmission Torrent Client (*.transmission)
transmissionrpc==0.11
# OpenWeatherMap (sensor.openweathermap)
pyowm==2.2.1
# XMPP (notify.xmpp)
sleekxmpp==1.3.1
dnspython3==1.12.0
# Blockchain (sensor.bitcoin)
blockchain==1.1.2
# Music Player Daemon (media_player.mpd)
python-mpd2==0.5.4
# Hikvision (switch.hikvisioncam)
hikvision==0.4
# Console log coloring
colorlog==2.6.0
# JSON-RPC interface (media_player.kodi)
jsonrpc-requests==0.1
# Forecast.io (sensor.forecast)
python-forecastio==1.3.3
# Firmata (*.arduino)
# homeassistant.components.arduino
PyMata==2.07a
# Rfxtrx (rfxtrx)
https://github.com/Danielhiversen/pyRFXtrx/archive/ec7a1aaddf8270db6e5da1c13d58c1547effd7cf.zip#RFXtrx==0.15
# Mysensors (sensor.mysensors)
https://github.com/theolind/pymysensors/archive/d4b809c2167650691058d1e29bfd2c4b1792b4b0.zip#pymysensors==0.3
# Netgear (device_tracker.netgear)
# homeassistant.components.device_tracker.netgear
pynetgear==0.3
# Netdisco (discovery)
netdisco==0.5.1
# homeassistant.components.device_tracker.nmap_tracker
python-nmap==0.4.3
# Wemo (switch.wemo)
pywemo==0.3.2
# Wink (*.wink)
https://github.com/balloob/python-wink/archive/9eb39eaba0717922815e673ad1114c685839d890.zip#python-wink==0.1.1
# Slack notifier (notify.slack)
slacker==0.6.8
# Temper sensors (sensor.temper)
https://github.com/rkabadi/temper-python/archive/3dbdaf2d87b8db9a3cd6e5585fc704537dd2d09b.zip#temperusb==1.2.3
# PyEdimax (switch.edimax)
https://github.com/rkabadi/pyedimax/archive/365301ce3ff26129a7910c501ead09ea625f3700.zip#pyedimax==0.1
# RPI-GPIO platform (*.rpi_gpio)
# Uncomment for Raspberry Pi
# RPi.GPIO==0.5.11
# 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
# PAHO MQTT (mqtt)
paho-mqtt==1.1
# PyModbus (modbus)
https://github.com/bashwork/pymodbus/archive/d7fc4f1cc975631e0a9011390e8017f64b612661.zip#pymodbus==1.2.0
# Verisure (verisure)
https://github.com/persandstrom/python-verisure/archive/9873c4527f01b1ba1f72ae60f7f35854390d59be.zip#python-verisure==0.2.6
# IFTTT Maker Channel (ifttt)
pyfttt==0.3
# SABnzbd (sensor.sabnzbd)
https://github.com/balloob/home-assistant-nzb-clients/archive/616cad59154092599278661af17e2a9f2cf5e2a9.zip#python-sabnzbd==0.1
# Vera (*.vera)
https://github.com/pavoni/home-assistant-vera-api/archive/efdba4e63d58a30bc9b36d9e01e69858af9130b8.zip#python-vera==0.1.1
# Sonos (media_player.sonos)
SoCo==0.11.1
# PlexAPI (media_player.plex)
plexapi==1.1.0
# SNMP (device_tracker.snmp)
# homeassistant.components.device_tracker.snmp
pysnmp==4.2.5
# Blinkstick (light.blinksticklight)
# homeassistant.components.discovery
netdisco==0.5.1
# homeassistant.components.ifttt
pyfttt==0.3
# homeassistant.components.isy994
PyISY==1.0.5
# homeassistant.components.keyboard
pyuserinput==0.1.9
# homeassistant.components.light.blinksticklight
blinkstick==1.1.7
# Telegram (notify.telegram)
python-telegram-bot==2.8.7
# homeassistant.components.light.hue
phue==0.8
# CPUinfo (sensor.cpuinfo)
py-cpuinfo==0.1.6
# homeassistant.components.light.limitlessled
ledcontroller==1.1.0
# Radio Thermostat (thermostat.radiotherm)
radiotherm==1.2
# homeassistant.components.light.tellstick
# homeassistant.components.sensor.tellstick
# homeassistant.components.switch.tellstick
tellcore-py==1.1.2
# Honeywell Evo Home Client (thermostat.honeywell)
evohomeclient==0.2.3
# homeassistant.components.light.vera
# homeassistant.components.switch.vera
https://github.com/pavoni/home-assistant-vera-api/archive/efdba4e63d58a30bc9b36d9e01e69858af9130b8.zip#python-vera==0.1.1
# Pushetta (notify.pushetta)
# 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
# homeassistant.components.media_player.cast
pychromecast==0.6.12
# homeassistant.components.media_player.kodi
jsonrpc-requests==0.1
# homeassistant.components.media_player.mpd
python-mpd2==0.5.4
# homeassistant.components.media_player.plex
plexapi==1.1.0
# homeassistant.components.media_player.sonos
SoCo==0.11.1
# homeassistant.components.modbus
https://github.com/bashwork/pymodbus/archive/d7fc4f1cc975631e0a9011390e8017f64b612661.zip#pymodbus==1.2.0
# homeassistant.components.mqtt
paho-mqtt==1.1
# homeassistant.components.notify.pushbullet
pushbullet.py==0.9.0
# homeassistant.components.notify.pushetta
pushetta==1.0.15
# Orvibo S10
# homeassistant.components.notify.pushover
python-pushover==0.2
# homeassistant.components.notify.slack
slacker==0.6.8
# homeassistant.components.notify.telegram
python-telegram-bot==2.8.7
# homeassistant.components.notify.xmpp
sleekxmpp==1.3.1
# homeassistant.components.notify.xmpp
dnspython3==1.12.0
# homeassistant.components.rfxtrx
https://github.com/Danielhiversen/pyRFXtrx/archive/0.2.zip#RFXtrx==0.2
# homeassistant.components.sensor.bitcoin
blockchain==1.1.2
# homeassistant.components.sensor.cpuspeed
py-cpuinfo==0.1.6
# homeassistant.components.sensor.dht
http://github.com/mala-zaba/Adafruit_Python_DHT/archive/4101340de8d2457dd194bca1e8d11cbfc237e919.zip#Adafruit_DHT==1.1.0
# homeassistant.components.sensor.forecast
python-forecastio==1.3.3
# homeassistant.components.sensor.mysensors
https://github.com/theolind/pymysensors/archive/d4b809c2167650691058d1e29bfd2c4b1792b4b0.zip#pymysensors==0.3
# homeassistant.components.sensor.openweathermap
pyowm==2.2.1
# homeassistant.components.sensor.rpi_gpio
# homeassistant.components.switch.rpi_gpio
RPi.GPIO==0.5.11
# homeassistant.components.sensor.sabnzbd
https://github.com/jamespcole/home-assistant-nzb-clients/archive/616cad59154092599278661af17e2a9f2cf5e2a9.zip#python-sabnzbd==0.1
# homeassistant.components.sensor.systemmonitor
psutil==3.2.2
# homeassistant.components.sensor.temper
https://github.com/rkabadi/temper-python/archive/3dbdaf2d87b8db9a3cd6e5585fc704537dd2d09b.zip#temperusb==1.2.3
# homeassistant.components.sensor.transmission
# homeassistant.components.switch.transmission
transmissionrpc==0.11
# homeassistant.components.sensor.vera
https://github.com/balloob/home-assistant-vera-api/archive/a8f823066ead6c7da6fb5e7abaf16fef62e63364.zip#python-vera==0.1
# homeassistant.components.sun
astral==0.8.1
# homeassistant.components.switch.edimax
https://github.com/rkabadi/pyedimax/archive/365301ce3ff26129a7910c501ead09ea625f3700.zip#pyedimax==0.1
# homeassistant.components.switch.hikvisioncam
hikvision==0.4
# homeassistant.components.switch.orvibo
orvibo==1.0.0
# homeassistant.components.switch.wemo
pywemo==0.3.2
# homeassistant.components.thermostat.honeywell
evohomeclient==0.2.3
# homeassistant.components.thermostat.nest
python-nest==2.6.0
# homeassistant.components.thermostat.radiotherm
radiotherm==1.2
# homeassistant.components.verisure
https://github.com/persandstrom/python-verisure/archive/9873c4527f01b1ba1f72ae60f7f35854390d59be.zip#python-verisure==0.2.6
# homeassistant.components.zwave
pydispatcher==2.0.5

76
script/gen_requirements_all.py Executable file
View file

@ -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()