Commit Graph

136 Commits (00307e1ade7fab5919166ca41789ff7b77bd1e76)

Author SHA1 Message Date
Paulus Schoutsen 29f385ea76 Fix automations listening to HOMEASSISTANT_START (#6936)
* Fire EVENT_HOMEASSISTANT_START automations off right away while starting

* Actually have core state be set to 'starting' during boot

* Fix correct start implementation

* Test and deprecate event automation platform on start

* Fix doc strings

* Remove shutting down exception

* More strict when to mark an instance as finished

* Add automation platform to listen for start/shutdown

* When we stop we should wait till it's all done

* Fix testing

* Fix async bugs in tests

* Only set UVLOOP when hass starts from CLI

* This hangs normal asyncio event loop

* Clean up Z-Wave node entity test
2017-04-05 23:23:02 -07:00
Martin Nöhrer f5d8327d9a Fix hass script execution on Windows (#4977). (#6601)
* Fix hass script execution on Windows (#4977).

hass.exe returned ERRNO2 on a windows machine and must be started using
package loading. This fix adapts the command line options for
`setup_and_run_hass()` to start
either a script with `python homeassistant/__main__.py` or with
`Scripts/hass.exe`

* Fix code style
2017-03-17 17:07:36 -07:00
Brandon Weeks 52f6fe3e06 Add version test for monkey_patch_asyncio() (#5127)
* Add version test for monkey_patch_asyncio()

* Update __main__.py
2017-01-03 17:47:33 +01:00
Fabian Affolter c128919b5f Remove globally disabled pylint warnings (#4204) 2016-11-03 18:40:43 -07:00
Pascal Vizeli 26490109ac Change event loop on windows (#4075)
* Change event loop on windows

* fix

* split PR

* remove set event loop

* Add paulus suggestion

* fix missing import

* revert stuff from PR Splitting

* fix event loop on test
2016-11-02 21:53:52 +01:00
Ben Bangert 892bbdc2dd Monkey-patch a weakref set in Task to be a no-op. (#3639)
* Monkey-patch a weakref set in Task to be a no-op.

* Fix linting issues
2016-10-01 12:08:25 -07:00
Paulus Schoutsen 609d7ebea5 Migrate core from threads to async awesomeness (#3248)
* Add event loop to the core

* Add block_till_done to HA core object

* Fix some tests

* Linting core

* Fix statemachine tests

* Core test fixes

* fix block_till_done to wait for loop and queue to empty

* fix test_core for passing, and correct start/stop/block_till_done

* Fix remote tests

* Fix tests: block_till_done

* Fix linting

* Fix more tests

* Fix final linting

* Fix remote test

* remove unnecessary import

* reduce sleep to avoid slowing down the tests excessively

* fix remaining tests to wait for non-threadsafe operations

* Add async_ doc strings for event loop / coroutine info

* Fix command line test to block for the right timeout

* Fix py3.4.2 loop var access

* Fix SERVICE_CALL_LIMIT being in effect for other tests

* Fix lint errors

* Fix lint error with proper placement

* Fix slave start to not start a timer

* Add asyncio compatible listeners.

* Increase min Python version to 3.4.2

* Move async backports to util

* Add backported async tests

* Fix linting

* Simplify Python version check

* Fix lint

* Remove unneeded try/except and queue listener appproriately.

* Fix tuple vs. list unorderable error on version compare.

* Fix version tests
2016-09-12 19:16:14 -07:00
Fabian Heredia Montiel 0377338a81 Improvement typing (#2735)
* Fix: Circular dependencies of internal files

* Change: dt.date for Date and dt.datetime for DateTime

* Use NewType if available

* FIX: Wrong version test

* Remove: Date and DateTime types due to error

* Change to HomeAssistantType

* General Improvement of Typing

* Improve typing config_validation

* Improve typing script

* General Typing Improvements

* Improve NewType check

* Improve typing db_migrator

* Improve util/__init__ typing

* Improve helpers/location typing

* Regroup imports and remove pylint: disable=ungrouped-imports

* General typing improvements
2016-08-07 16:26:35 -07:00
Fabian Heredia Montiel 08226a4864 Type Hints - __main__ (#2574)
* Add __main__ type hints

* Fix most errors of __main__

* Add ignore for script.run()

* Add type annotations for from_config_dict and from_config_file

* Fix errors

* Fix requirement error

* Add mypy type check to tests

* Enable travis typing check

* Messed up the tox deps

* Laxer type checker
2016-07-20 22:38:52 -07:00
Paulus Schoutsen 3447fdc76f Make scripts available via CLI (#2426)
* Rename sqlalchemy migrate script

* Add script support to CLI
2016-07-03 11:38:14 -07:00
Fabian Affolter 1f602be80a Remove print (already covered by logger) (#2184) 2016-05-31 14:02:31 -07:00
Jan Harkes dc8e55fb8b Don't even bother trying to kill stray child processes.
When we change our process group id we don't get keyboard interrupt
signals passed if our parent is a bash script.
2016-05-23 23:30:41 -04:00
Jan Harkes 05946ae5a2 Ignore assertions from python threading when looking for leaked threads. (#2130)
While looking for leaked resources (threads) after shutdown and before restart
we in some cases get an assertion in the python threading module where we find
a thread marked as running at the python level but it has no associated thread
at the C level.
2016-05-22 00:35:33 -04:00
Jan Harkes 53d51a467d Single process restart fixes (#2118)
* Ignore permission errors on setpgid.

When launched in a docker container we got a permission denied error
from setpgid.

* Don't fail if we find our own pidfile.

When we restart using exec we are running a new instance of home-assistant with
the same process id so we shouldn't be surprised to find an existing pidfile in
that case.

* Allow restart to work when started as python -m homeassistant.

When we are started with `python -m homeassistant`, the restart command line
becomes `python /path/to/hass/homeassistant/__main__.py`. But in that case the
python path includes `/path/to/hass/homeassistant` instead of `/path/to/hass`
and we fail on the first import.

Fix this by recognizing `/__main__.py` as part of the first argument and
injecting the proper path as PYTHONPATH environment before we start the new
home-assistant instance.
2016-05-20 11:45:16 -07:00
Jan Harkes 6b724f7da4 Not sure why, but this fixed a bad filedescriptor error. (#2116) 2016-05-20 07:03:08 -07:00
Jan Harkes 5f92ceeea9 Allow for restart without using parent/child processes. (#1793)
* Allow for restart without using parent/child processes.

Assuming that we normally correctly shut down running threads and
release resources, we just do some minimal scrubbing of open file
descriptors and child processes which would stay around across an
exec() boundary.

* Use sys.executable instead of multiprocessing.spawn.get_executable()

* Limit how many file descriptors we try to close.

Don't even try to close on OSX/Darwin until we figure out how to
recognize guarded fds because the kernel will yell at us, and kill
the process.

* Use the close on exec flag on MacOS to clean up.

* Introduce a small process runner to handle restart on windows.

* Handle missing signal.SIGHUP on Windows.
2016-05-19 23:20:59 -07:00
Per Sandström f0f1fadee1 redirect daemon file descriptors (#2103) 2016-05-19 23:20:07 -07:00
Jan Harkes 241735c924 Change local library path from {config_dir}/lib to {config_dir}/deps. (#1799)
Just on the off chance that someone who happens to run as root and also
doesn't correctly parse "just remove config /lib and restart".
2016-04-11 20:07:50 -07:00
Paulus Schoutsen 5baa98b79f Add initial config validation 2016-03-28 23:46:12 -07:00
Paulus Schoutsen c63a3311f4 Fix broken Python check for Python 2 2016-03-27 08:44:15 -07:00
Fabian Affolter 897b5c668f Fix PEP257 issues 2016-03-08 00:06:04 +01:00
Alexander Fortin ac69db8133 Move hardcoded required Python version into homeassistant.const 2016-02-28 05:41:03 +01:00
Paulus Schoutsen e80309c03c Fix imports (using isort) 2016-02-18 21:27:50 -08:00
Ian Copp e53785f30c Fix __main__.py permissions change 2016-02-10 21:20:56 -08:00
Ian Copp c9c15c4cf7 Fix comment phrasing
Somehow I left out the "some". Whoops.
2016-02-10 11:32:56 -08:00
Ian Copp 3046bfce7b Add small time delay to restart-osx command 2016-02-10 11:29:25 -08:00
Per Sandström d867d26612 Merge pull request #1168 from persandstrom/sigterm_handler
fix sigterm crash
2016-02-08 19:27:26 +01:00
Per SandstrÃom 564e328698 fix sigterm crash 2016-02-08 18:09:46 +00:00
Ryan Kraus 11a2b8888b Fixes for issue #1114
1. Moved RESTART_EXIT_CODE to constants so it can safely be used by
__main__.py.
2. Allowed __main__/main to return the desired exit code.
3. Forwarded the child processes exit code to the parent process to be
duplicated.
4. Added —debug flag to pass command to force Home Assistant to run in
only one process. A warning is printed to STDERR to indicate HASS is in
debug mode. Another is printed if HASS requests a restart in debug
mode. A restart request in debug mode will quit.
5. Added an argument to __main__/main/setup_and_run_hass to indicate
that it is running in the top process. This tells it to return the exit
code rather than exiting.
2016-02-06 09:48:36 -05:00
Ryan Kraus b56369855a Cleaned up restart handling in __main__.py
1. Fixed logged message about SIGTERM binding failure.
2. Set to only restart HASS with an exit code of 100.
3. Fixed typo in comment.
2016-01-29 22:11:11 -05:00
Ryan Kraus 519abbbfa2 Better handling of second KeyboardInterrupt
Now the second KeyboardInterrupt will be cleanly handled by the parent
process.
2016-01-26 22:41:57 -05:00
Ryan Kraus b596fa33d6 Implemented restart service
Implemented an OS and environment safe restart service. This works by
running Home Assistant in a child process. If the child process
terminates with an exit code > 0, HASS is restarted. SIGTERM and
KeyboardInterrupts to the parent process are forwarded to the child
process. KeyboardInterrupts will only be forwarded once. The second
KeyboardInterrupt will be handled by the parent.
2016-01-26 22:39:59 -05:00
Jon Maddox e0c1885a71 add blank line 2015-09-17 03:52:04 -04:00
Jon Maddox d25a42426a add a way to restart on os x 2015-09-17 03:25:36 -04:00
Jon Maddox bb172d8c98 indention 2015-09-15 02:58:13 -04:00
Jon Maddox acb288f9e7 error handling when writing 2015-09-15 02:54:22 -04:00
Jon Maddox c7565baa6d NOPE 2015-09-15 02:54:11 -04:00
Jon Maddox fb29611c15 🔥 codecs 2015-09-15 02:51:23 -04:00
Jon Maddox 37cd62447e let it get overwritten 2015-09-15 02:50:15 -04:00
Jon Maddox 5cbcd72912 dupe 2015-09-15 02:48:23 -04:00
Jon Maddox 8bba0b88fd blocks! 2015-09-15 02:46:06 -04:00
Jon Maddox 3b27bef1ac DOCS 2015-09-15 02:35:20 -04:00
Jon Maddox 1fc2204ca9 get the right path 2015-09-15 02:30:19 -04:00
Jon Maddox 834ce5269d we don't actually have to do this 2015-09-15 02:30:13 -04:00
Jon Maddox fcad068016 strip the dash 2015-09-15 02:17:01 -04:00
Jon Maddox e12cc2fbbf attempts at dodging pep8 terror 2015-09-15 02:12:31 -04:00
Jon Maddox 9588fcc5cc install scripts 2015-09-15 02:09:02 -04:00
Andrew Thigpen 2e636f598e Add option to rotate log file daily.
Adds a command line option to rotate the log daily at midnight and
retain up to the specified amount of days.
2015-09-04 19:52:59 -05:00
Andrew Thigpen 6519e589b5 Add option to skip pip install on startup.
Since the requirements only change when the software is updated,
this adds a command line switch to disable pip installs on
startup.  The default behavior is maintained when the switch is
not specified.  Skipping pip helps a lot with startup on older RPi
hardware.
2015-09-04 16:50:57 -05:00
Ryan Kraus 7992882fa3 Cleanup PID checking logic and write PID logic. 2015-09-01 03:29:07 -04:00
Ryan Kraus 4ca8f184e6 Updated Debian daemon script. 2015-09-01 03:22:43 -04:00
Ryan Kraus 5b06e8d25e Daemon handling cleanup.
More cleanly handling whether a PID file should be checked.
Fatal Error on PID file IOError.
Pylint fix to bootstrap.
2015-09-01 02:37:52 -04:00
Ryan Kraus ff470c8ffe Added core daemon function as flags.
Created three additional flags for the hass command:
-v -  Toggle verbose log file output
—pid-file -  Specify PID file path
—daemon -  Launch as daemon (nix only)

The core now binds to SIGQUIT on nix systems to trigger a clean
shutdown.

Modified HTTP server to write logging messages through the logging
module.
2015-09-01 02:12:00 -04:00
Paulus Schoutsen 9eefa67035 Add Python 3.4 check back 2015-08-31 08:53:59 -07:00
Paulus Schoutsen 9acf3db435 Improved console output for new users 2015-08-30 21:24:10 -07:00
Paulus Schoutsen 81466246cf Add --version command line argument 2015-08-30 00:59:27 -07:00
Paulus Schoutsen fc6613ffb1 Fix documentation in __main__ 2015-08-29 23:35:19 -07:00
Paulus Schoutsen a5a1f30798 Make launch more smooth 2015-08-29 23:02:07 -07:00
Ryan Kraus bea81ddd92 Minor tweaks
Moved another import to the top of main.
Forced an exit code of 1 when there is an error initializing.
2015-08-29 23:31:33 -04:00
Ryan Kraus f5b98c86f0 Mostly PyLint and Flake8 updates.
Rewrote imports of exceptions to be from the exceptions module.
Made nmap scanner check for libnmap dependency without crashing.
Various flake8 and pylint updates.
2015-08-29 22:34:35 -04:00
Ryan Kraus 0b6358e759 Implemented comments from Paulus.
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.
2015-08-29 22:19:52 -04:00
Ryan Kraus 6fdf9b8d7c Many changes to cleanup config directory and lib installations.
Cleaned up default config directory determination.
Made bootstrap creators for HA always set config directory.
Made bootstrap creators set the local library in the Python Path.
Moved all exceptions to their own file to make imports easier.
Moved default configuration directory be in the users’ profile.
Moved pip installs to be done to a lib folder in the config directory.
Reduced requirements.txt to only the barebones reqs.
2015-08-29 21:11:24 -04:00
Ryan Kraus 18e32165a4 Cleaned up main file to remove dependency management. 2015-08-29 20:06:54 -04:00
Paulus Schoutsen e277decd4c Add a check to ensure pip is installed 2015-07-19 19:00:48 -07:00
Paulus Schoutsen a3906242e9 Make life of Windows users a bit better 2015-07-19 18:32:35 -07:00
Paulus Schoutsen c532a28a98 Increase robustness dependency installation 2015-07-15 18:37:24 -07:00
Paulus Schoutsen 2b23eec0f7 Fix pip 1.5.4 compatibility 2015-07-10 21:24:28 -07:00
Paulus Schoutsen 90739c9df9 Auto install core dependencies on boot 2015-07-06 23:59:21 -07:00
Paulus Schoutsen f3f2240e4a Remove usage of deprecated hass.local_api in __main__ 2015-05-15 23:28:16 -07:00
Paulus Schoutsen 09f1983d40 Update dependency check in __main__ 2015-04-30 22:44:24 -07:00
Paulus Schoutsen ad016de653 Move config code to separate module + test cover it 2015-04-26 10:05:01 -07:00
Paulus Schoutsen 424f05a4da Add logbook to default configuration 2015-04-24 08:47:11 -07:00
theolind f2b602c7ec Added logic to main that prefers .yaml-config over .conf 2015-02-28 17:42:23 +01:00
Paulus Schoutsen 6c4e044c92 Enable history component instead of recorder by default 2015-02-07 22:52:36 -08:00
Paulus Schoutsen 10bbc3d6e1 Default config: add recorder 2015-01-31 19:52:00 -08:00
Paulus Schoutsen 6878fc254a Add frontend to default config 2015-01-30 08:28:04 -08:00
Paulus Schoutsen 99c87ff862 Increased environment validation upon start 2015-01-20 22:18:44 -08:00
Paulus Schoutsen ff230cefe3 Disable pylint unused-argument check 2015-01-19 23:40:51 -08:00
Paulus Schoutsen 5f0f06b22d Add command-line toggle to run in demo mode 2015-01-17 22:23:07 -08:00
Paulus Schoutsen ed05ff6fd9 Allow for running Home Assistant without password 2015-01-17 21:55:33 -08:00
Paulus Schoutsen 50eecd11c1 Added command line toggle to open UI on start 2015-01-17 21:13:02 -08:00
Paulus Schoutsen f5683797aa Reorganized the main to be more modular 2015-01-08 18:45:27 -08:00
Paulus Schoutsen bc4b81d525 Reorganized testing 2014-11-23 13:00:06 -08:00
Paulus Schoutsen c3c1383ae6 More error checking added on start 2014-11-08 11:01:47 -08:00
Paulus Schoutsen 9f24101348 Refactor __main__ to use ArgParse 2014-11-05 07:58:20 -08:00
Paulus Schoutsen 94d9cbf76e Starting home assistant is now done via __main__.py 2014-11-02 17:27:32 -08:00