Skip to content

Commit

Permalink
Implemented comments from Paulus.
Browse files Browse the repository at this point in the history
Revised main to use frontend and demo strings rather than importing
their domains.
Removed submodule validation.
Moved local library mounting to the bootstrap module and out of core.
Added requirements_all.txt for all dependencies.
Made core dependencies looser.
Small updates to setup.py.
  • Loading branch information
rmkraus committed Aug 30, 2015
1 parent 893ae15 commit 0b6358e
Show file tree
Hide file tree
Showing 7 changed files with 155 additions and 35 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ language: python
python:
- "3.4"
install:
- pip install -r requirements.txt
- pip install -r requirements_all.txt
- pip install flake8 pylint coveralls
script:
- flake8 homeassistant --exclude bower_components,external
Expand Down
33 changes: 12 additions & 21 deletions homeassistant/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

from homeassistant import bootstrap
import homeassistant.config as config_util
from homeassistant.components import frontend, demo


def validate_python():
Expand All @@ -30,17 +29,6 @@ def ensure_pip():
sys.exit()


def validate_git_submodules():
""" Validate the git submodules are cloned. """
try:
# pylint: disable=no-name-in-module, unused-variable
from homeassistant.external.noop import WORKING # noqa
except ImportError:
print("Repository submodules have not been initialized")
print("Please run: git submodule update --init --recursive")
sys.exit()


def ensure_config_path(config_dir):
""" Gets the path to the configuration file.
Creates one if it not exists. """
Expand All @@ -49,11 +37,16 @@ def ensure_config_path(config_dir):

# Test if configuration directory exists
if not os.path.isdir(config_dir):
try:
os.mkdir(config_dir)
except OSError:
print(('Fatal Error: Unable to create specified configuration '
'directory {} ').format(config_dir))
if config_dir == config_util.get_default_config_dir():
try:
os.mkdir(config_dir)
except OSError:
print(('Fatal Error: Unable to create default configuration '
'directory {} ').format(config_dir))
sys.exit()
else:
print(('Fatal Error: Specified configuration directory does '
'not exist {} ').format(config_dir))
sys.exit()

# Test if library directory exists
Expand Down Expand Up @@ -98,17 +91,15 @@ def main():
""" Starts Home Assistant. """
validate_python()

validate_git_submodules()

args = get_arguments()

config_dir = os.path.join(os.getcwd(), args.config)
config_path = ensure_config_path(config_dir)

if args.demo_mode:
hass = bootstrap.from_config_dict({
frontend.DOMAIN: {},
demo.DOMAIN: {}
'frontend': {},
'demo': {}
}, config_dir=config_dir)
else:
hass = bootstrap.from_config_file(config_path)
Expand Down
15 changes: 11 additions & 4 deletions homeassistant/bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,11 @@ def prepare_setup_platform(hass, config, domain, platform_name):
return platform


def mount_local_lib_path(config_dir):
""" Add local library to Python Path """
sys.path.insert(0, os.path.join(config_dir, 'lib'))


# pylint: disable=too-many-branches, too-many-statements
def from_config_dict(config, hass=None, config_dir=None):
"""
Expand All @@ -154,8 +159,9 @@ def from_config_dict(config, hass=None, config_dir=None):
if hass is None:
hass = core.HomeAssistant()
if config_dir is not None:
hass.config.config_dir = os.path.abspath(config_dir)
hass.config.mount_local_path()
config_dir = os.path.abspath(config_dir)
hass.config.config_dir = config_dir
mount_local_lib_path(config_dir)

process_ha_core_config(hass, config.get(core.DOMAIN, {}))

Expand Down Expand Up @@ -198,8 +204,9 @@ def from_config_file(config_path, hass=None):
hass = core.HomeAssistant()

# Set config dir to directory holding config file
hass.config.config_dir = os.path.abspath(os.path.dirname(config_path))
hass.config.mount_local_path()
config_dir = os.path.abspath(os.path.dirname(config_path))
hass.config.config_dir = config_dir
mount_local_lib_path(config_dir)

config_dict = config_util.load_config_file(config_path)

Expand Down
4 changes: 0 additions & 4 deletions homeassistant/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -666,10 +666,6 @@ def __init__(self):
# Directory that holds the configuration
self.config_dir = get_default_config_dir()

def mount_local_path(self):
""" Add local library to Python Path """
sys.path.insert(0, self.path('lib'))

def path(self, *path):
""" Returns path to the file within the config dir. """
return os.path.join(self.config_dir, *path)
Expand Down
6 changes: 3 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
requests==2.7.0
pyyaml==3.11
pytz==2015.4
requests>=2,<3
pyyaml>=3.11,<4
pytz>=2015.4
120 changes: 120 additions & 0 deletions requirements_all.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Required for Home Assistant core
requests>=2,<3
pyyaml>=3.11,<4
pytz>=2015.4

# Optional, needed for specific components

# Sun (sun)
astral==0.8.1

# Philips Hue library (lights.hue)
phue==0.8

# Limitlessled/Easybulb/Milight library (lights.limitlessled)
ledcontroller==1.0.7

# Chromecast bindings (media_player.cast)
pychromecast==0.6.10

# Keyboard (keyboard)
pyuserinput==0.1.9

# Tellstick bindings (*.tellstick)
tellcore-py==1.0.4

# Nmap bindings (device_tracker.nmap)
python-libnmap==0.6.3

# PushBullet bindings (notify.pushbullet)
pushbullet.py==0.7.1

# Nest Thermostat bindings (thermostat.nest)
python-nest==2.4.0

# Z-Wave (*.zwave)
pydispatcher==2.0.5

# ISY994 bindings (*.isy994)
PyISY==1.0.5

# PSutil (sensor.systemmonitor)
psutil==3.0.0

# Pushover bindings (notify.pushover)
python-pushover==0.2

# Transmission Torrent Client (*.transmission)
transmissionrpc==0.11

# OpenWeatherMap Web API (sensor.openweathermap)
pyowm==2.2.1

# XMPP Bindings (notify.xmpp)
sleekxmpp==1.3.1
dnspython3==1.12.0

# Blockchain (sensor.bitcoin)
blockchain==1.1.2

# MPD Bindings (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 Bindings (sensor.forecast)
python-forecastio==1.3.3

# Firmata Bindings (*.arduino)
PyMata==2.07a

# Rfxtrx sensor (sensor.rfxtrx)
https://github.com/Danielhiversen/pyRFXtrx/archive/ec7a1aaddf8270db6e5da1c13d58c1547effd7cf.zip

# Mysensors
https://github.com/theolind/pymysensors/archive/35b87d880147a34107da0d40cb815d75e6cb4af7.zip

# Netgear (device_tracker.netgear)
pynetgear==0.3

# Netdisco (discovery)
netdisco==0.3

# Wemo (switch.wemo)
pywemo==0.2

# Wink (*.wink)
https://github.com/balloob/python-wink/archive/c2b700e8ca866159566ecf5e644d9c297f69f257.zip

# Slack notifier (notify.slack)
slacker==0.6.8

# Temper sensors (sensor.temper)
https://github.com/rkabadi/temper-python/archive/3dbdaf2d87b8db9a3cd6e5585fc704537dd2d09b.zip

# PyEdimax
https://github.com/rkabadi/pyedimax/archive/365301ce3ff26129a7910c501ead09ea625f3700.zip

# RPI-GPIO platform (*.rpi_gpio)
# Uncomment for Raspberry Pi
# RPi.GPIO ==0.5.11

# Adafruit temperature/humidity sensor
# uncomment on a Raspberry Pi / Beaglebone
# http://github.com/mala-zaba/Adafruit_Python_DHT/archive/4101340de8d2457dd194bca1e8d11cbfc237e919.zip

# PAHO MQTT Binding (mqtt)
paho-mqtt==1.1

# PyModbus (modbus)
https://github.com/bashwork/pymodbus/archive/d7fc4f1cc975631e0a9011390e8017f64b612661.zip

# Verisure (verisure)
https://github.com/persandstrom/python-verisure/archive/9873c4527f01b1ba1f72ae60f7f35854390d59be.zip
10 changes: 8 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
HERE = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(HERE, PACKAGE_NAME, 'const.py')) as fp:
VERSION = re.search("__version__ = ['\"]([^']+)['\"]\n", fp.read()).group(1)
DOWNLOAD_URL = \
'https://github.com/balloob/home-assistant/tarball/{}'.format(VERSION)

PACKAGES = find_packages() + \
['homeassistant.external', 'homeassistant.external.noop',
Expand All @@ -16,12 +18,15 @@
'homeassistant.components.frontend.www_static': ['*.*'],
'homeassistant.components.frontend.www_static.images': ['*.*']}

REQUIRES = \
[line.strip() for line in open('requirements.txt', 'r')]

setup(
name=PACKAGE_NAME,
version=VERSION,
license='MIT License',
url='https://home-assistant.io/',
download_url='https://github.com/automicus/pyisy/tarball/0.7.0',
download_url=DOWNLOAD_URL,
author='Paulus Schoutsen',
author_email='paulus@paulusschoutsen.nl',
description='Open-source home automation platform running on Python 3.',
Expand All @@ -30,7 +35,7 @@
package_data=PACKAGE_DATA,
zip_safe=False,
platforms='any',
install_requires=['requests==2.7.0', 'pyyaml==3.11', 'pytz==2015.4'],
install_requires=REQUIRES,
keywords=['home', 'automation'],
entry_points={
'console_scripts': [
Expand All @@ -39,6 +44,7 @@
},
classifiers=[
'Intended Audience :: End Users/Desktop',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Programming Language :: Python :: 3.4',
Expand Down

0 comments on commit 0b6358e

Please sign in to comment.