appdaemon 4.5.7__tar.gz → 4.5.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {appdaemon-4.5.7/appdaemon.egg-info → appdaemon-4.5.8}/PKG-INFO +1 -1
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/app_management.py +50 -35
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/dependency_manager.py +3 -2
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/events.py +3 -3
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/plugin.py +1 -1
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/internal/app_management.py +1 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/hass/hassapi.py +35 -37
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/hass/hassplugin.py +266 -214
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/threads.py +2 -2
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/utils.py +5 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/version.py +1 -1
- {appdaemon-4.5.7 → appdaemon-4.5.8/appdaemon.egg-info}/PKG-INFO +1 -1
- {appdaemon-4.5.7 → appdaemon-4.5.8}/LICENSE.md +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/MANIFEST.in +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/README.md +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/README.rst +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/__init__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/__main__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/adapi.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/adbase.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/admin.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/admin_loop.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/appdaemon.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/aui/appdaemon.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/aui/css/app.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/aui/css/chunk-vendors.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/aui/favicon.ico +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/aui/index.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/aui/js/app.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/aui/js/app.js.map +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/aui/js/chunk-vendors.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/aui/js/chunk-vendors.js.map +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/all.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/climacons-font.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/default/dashboard.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/default/variables.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/fontawesome.min.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/fonts.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/glassic/dashboard.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/glassic/img/carbon1.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/glassic/img/carbon2.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/glassic/img/carbon3.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/glassic/img/carbon4.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/glassic/img/glassic_bg.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/glassic/variables.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/images/ui-icons_444444_256x240.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/images/ui-icons_555555_256x240.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/images/ui-icons_777620_256x240.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/images/ui-icons_777777_256x240.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/images/ui-icons_cc0000_256x240.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/images/ui-icons_ffffff_256x240.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/jquery-ui.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/jquery.gridster.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/main.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/materialdesignicons.min.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/non_dashboard.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/obsidian/dashboard.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/obsidian/img/obsidian_bg.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/obsidian/img/obsidian_w_bg.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/obsidian/img/obsidianbg.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/obsidian/img/widgetbg.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/obsidian/variables.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/rickshaw.min.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/simplyred/dashboard.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/simplyred/img/goldgradient.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/simplyred/img/goldtexture.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/simplyred/js/timer.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/simplyred/variables.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/v4-shims.min.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/zen/dashboard.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/zen/img/zen_bg.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/zen/img/zen_bg2.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/zen/img/zen_weatherbg.jpg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/css/zen/variables.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/TickingTimebombBB.ttf +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/climacons-webfont.eot +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/climacons-webfont.svg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/climacons-webfont.ttf +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/climacons-webfont.woff +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/digital-7-mono.eot +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/digital-7-mono.ttf +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/materialdesignicons-webfont.eot +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/materialdesignicons-webfont.ttf +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/materialdesignicons-webfont.woff +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/materialdesignicons-webfont.woff2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/fonts/repetition.ttf +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/Blank.gif +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/android-chrome-192x192.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/android-chrome-512x512.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/apple-touch-icon.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/browserconfig.xml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/favicon-16x16.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/favicon-32x32.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/favicon.ico +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/manifest.json +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/mstile-144x144.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/mstile-150x150.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/mstile-310x150.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/mstile-310x310.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/images/mstile-70x70.png +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/admin.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/d3.layout.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/d3.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/dashboard.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/gauge.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/jquery-3.1.1.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/jquery-ui.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/jquery.gridster.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/justgage.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/knockout-3.4.1.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/list.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/plotly.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/raphael-2.1.4.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/reconnecting-websocket.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/rickshaw.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/socket.io.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/sockjs.min.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/javascript/stream.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/templates/admin.jinja2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/templates/body_include.jinja2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/templates/dashboard.jinja2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/templates/dashinit.jinja2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/templates/error.jinja2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/templates/head_include.jinja2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/templates/list.jinja2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/templates/logon.jinja2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-brands-400.eot +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-brands-400.svg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-brands-400.ttf +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-brands-400.woff +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-brands-400.woff2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-regular-400.eot +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-regular-400.svg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-regular-400.ttf +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-regular-400.woff +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-regular-400.woff2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-solid-900.eot +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-solid-900.svg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-solid-900.ttf +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-solid-900.woff +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/assets/webfonts/fa-solid-900.woff2 +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/callbacks.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/dashboard.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/dependency.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/entity.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/exceptions.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/futures.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/http.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/logging.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/__init__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/__init__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/api.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/app.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/appdaemon.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/common.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/dashboard.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/http.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/log.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/misc.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/sequence.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/config/yaml.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/internal/__init__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/internal/file_check.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/internal/plugin.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/internal/state.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/internal/threading.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/notification/__init__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/notification/android.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/notification/base.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/models/notification/iOS.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugin_management.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/__init__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/dummy/dummyapi.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/dummy/dummyplugin.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/hass/__init__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/hass/exceptions.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/hass/models.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/hass/notifications.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/hass/utils.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/mqtt/__init__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/mqtt/mqttapi.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/plugins/mqtt/mqttplugin.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/pyversions.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/scheduler.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/sequences.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/services.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/state.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/stream/__init__.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/stream/adstream.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/stream/socketio_handler.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/stream/sockjs_handler.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/stream/ws_handler.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/thread_async.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/utility_loop.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/AdminLog.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/AdminSummary.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/AdminTable.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/alarm.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basealarm/basealarm.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basealarm/basealarm.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basealarm/basealarm.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basecamera/basecamera.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basecamera/basecamera.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basecamera/basecamera.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseclimate/baseclimate.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseclimate/baseclimate.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseclimate/baseclimate.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseclock/baseclock.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseclock/baseclock.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseclock/baseclock.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basedatetime/basedatetime.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basedatetime/basedatetime.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basedatetime/basedatetime.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basedisplay/basedisplay.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basedisplay/basedisplay.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basedisplay/basedisplay.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseentitypicture/baseentitypicture.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseentitypicture/baseentitypicture.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseentitypicture/baseentitypicture.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseerror/baseerror.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseerror/baseerror.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseerror/baseerror.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basefan/basefan.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basefan/basefan.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basefan/basefan.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basegauge/basegauge.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basegauge/basegauge.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basegauge/basegauge.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseheater/baseheater.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseheater/baseheater.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseheater/baseheater.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseicon/baseicon.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseicon/baseicon.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseicon/baseicon.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseiframe/baseiframe.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseiframe/baseiframe.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseiframe/baseiframe.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseinputnumber/baseinputnumber.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseinputnumber/baseinputnumber.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseinputnumber/baseinputnumber.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basejavascript/basejavascript.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basejavascript/basejavascript.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basejavascript/basejavascript.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baselight/baselight.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baselight/baselight.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baselight/baselight.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basemedia/basemedia.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basemedia/basemedia.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basemedia/basemedia.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseradial/baseradial.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseradial/baseradial.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseradial/baseradial.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baserss/baserss.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baserss/baserss.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baserss/baserss.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseselect/baseselect.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseselect/baseselect.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseselect/baseselect.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseslider/baseslider.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseslider/baseslider.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseslider/baseslider.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseswitch/baseswitch.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseswitch/baseswitch.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseswitch/baseswitch.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basetemperature/basetemperature.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basetemperature/basetemperature.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basetemperature/basetemperature.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basetext/basetext.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basetext/basetext.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/basetext/basetext.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseweather/baseweather.css +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseweather/baseweather.html +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/baseweather/baseweather.js +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/binary_sensor.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/camera.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/climate.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/clock.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/cover.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/device_tracker.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/entitypicture.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/fan.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/gauge.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/group.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/heater.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/icon.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/iframe.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/input_boolean.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/input_datetime.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/input_number.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/input_select.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/input_slider.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/input_text.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/javascript.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/label.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/light.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/lock.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/london_underground.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/media_player.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/mode.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/navigate.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/person.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/pirateweather.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/radial.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/reload.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/rss.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/scene.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/script.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/sensor.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/sequence.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/switch.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/temperature.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/text_sensor.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/weather.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon/widgets/weather_summary.yaml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon.egg-info/SOURCES.txt +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon.egg-info/dependency_links.txt +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon.egg-info/entry_points.txt +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon.egg-info/requires.txt +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/appdaemon.egg-info/top_level.txt +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/apps/hello.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/ObjectTracker/general_app_functions.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/ObjectTracker/objectcontrole.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/alexa.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/battery.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/bysykkel.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/commute.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/dark_day.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/door_notification.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/eventCache.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/eventMonitor.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/globals.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/grandfather.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/hwcheck.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/ical.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/minimote.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/modes.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/momentary_switch.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/motion_lights.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/motion_notification.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/occusim.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/outside_lights.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/presence.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/ruter.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/secure.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/sensor_notification.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/sensor_notify.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/sequence.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/smart_heat.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/sound.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/switch_reset.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/conf/example_apps/yr.py +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/pyproject.toml +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/setup.cfg +0 -0
- {appdaemon-4.5.7 → appdaemon-4.5.8}/tests/test_main.py +0 -0
|
@@ -15,7 +15,7 @@ from copy import copy
|
|
|
15
15
|
from functools import partial, reduce, wraps
|
|
16
16
|
from logging import Logger
|
|
17
17
|
from pathlib import Path
|
|
18
|
-
from typing import TYPE_CHECKING, Literal, TypeVar
|
|
18
|
+
from typing import TYPE_CHECKING, Any, Literal, TypeVar
|
|
19
19
|
|
|
20
20
|
from pydantic import ValidationError
|
|
21
21
|
|
|
@@ -432,7 +432,7 @@ class AppManagement:
|
|
|
432
432
|
else:
|
|
433
433
|
return True
|
|
434
434
|
|
|
435
|
-
async def restart_app(self, app):
|
|
435
|
+
async def restart_app(self, app: str) -> None:
|
|
436
436
|
await self.stop_app(app, delete=False)
|
|
437
437
|
try:
|
|
438
438
|
await self.start_app(app)
|
|
@@ -513,8 +513,11 @@ class AppManagement:
|
|
|
513
513
|
def get_managed_app_names(self, include_globals: bool = False) -> set[str]:
|
|
514
514
|
apps = set(name for name, o in self.objects.items() if o.type == "app")
|
|
515
515
|
if include_globals:
|
|
516
|
-
|
|
517
|
-
|
|
516
|
+
globals = set(
|
|
517
|
+
name for name, cfg in self.app_config.root.items()
|
|
518
|
+
if isinstance(cfg, GlobalModule)
|
|
519
|
+
)
|
|
520
|
+
apps |= globals
|
|
518
521
|
return apps
|
|
519
522
|
|
|
520
523
|
def add_plugin_object(self, name: str, object: "PluginBase", use_dictionary_unpacking: bool = False) -> None:
|
|
@@ -763,7 +766,7 @@ class AppManagement:
|
|
|
763
766
|
return wrapper
|
|
764
767
|
|
|
765
768
|
# @utils.timeit
|
|
766
|
-
async def check_app_updates(self, plugin_ns: str = None, mode: UpdateMode = UpdateMode.NORMAL):
|
|
769
|
+
async def check_app_updates(self, plugin_ns: str | None = None, mode: UpdateMode = UpdateMode.NORMAL):
|
|
767
770
|
"""Checks the states of the Python files that define the apps, reloading when necessary.
|
|
768
771
|
|
|
769
772
|
Called as part of :meth:`.utility_loop.Utility.loop`
|
|
@@ -778,12 +781,18 @@ class AppManagement:
|
|
|
778
781
|
async with self.check_updates_lock:
|
|
779
782
|
await self._process_filters()
|
|
780
783
|
|
|
781
|
-
if mode == UpdateMode.INIT:
|
|
782
|
-
await self._process_import_paths()
|
|
783
|
-
await self._init_dep_manager()
|
|
784
|
-
|
|
785
784
|
update_actions = UpdateActions()
|
|
786
785
|
|
|
786
|
+
match mode:
|
|
787
|
+
case UpdateMode.INIT:
|
|
788
|
+
await self._process_import_paths()
|
|
789
|
+
await self._init_dep_manager()
|
|
790
|
+
case UpdateMode.RELOAD_APPS:
|
|
791
|
+
all_apps = self.get_managed_app_names(include_globals=False)
|
|
792
|
+
modules = self.dependency_manager.modules_from_apps(all_apps)
|
|
793
|
+
update_actions.apps.reload |= all_apps
|
|
794
|
+
update_actions.modules.reload |= modules
|
|
795
|
+
|
|
787
796
|
await self.check_app_config_files(update_actions)
|
|
788
797
|
|
|
789
798
|
await self._handle_sequence_change(update_actions, mode)
|
|
@@ -1285,40 +1294,39 @@ class AppManagement:
|
|
|
1285
1294
|
self.get_state(app, attribute="config_path")
|
|
1286
1295
|
)
|
|
1287
1296
|
|
|
1288
|
-
async def manage_services(
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1297
|
+
async def manage_services(
|
|
1298
|
+
self,
|
|
1299
|
+
namespace: str,
|
|
1300
|
+
domain: str,
|
|
1301
|
+
service: Literal["start", "stop", "restart", "reload", "enable", "disable", "create", "edit", "remove"],
|
|
1302
|
+
app: str | None = None,
|
|
1303
|
+
__name: str | None = None,
|
|
1304
|
+
**kwargs
|
|
1305
|
+
) -> None | bool | Any:
|
|
1295
1306
|
assert namespace == 'admin' and domain == 'app'
|
|
1296
|
-
|
|
1297
|
-
if app is None and service != "reload":
|
|
1298
|
-
self.logger.warning(
|
|
1299
|
-
"App not specified when calling '%s' service from %s. Specify App", service, __name)
|
|
1300
|
-
return
|
|
1301
|
-
|
|
1302
1307
|
match service:
|
|
1303
1308
|
case "reload" | "create":
|
|
1304
1309
|
pass
|
|
1305
1310
|
case _:
|
|
1306
|
-
if app not in self.
|
|
1311
|
+
if app not in self.get_managed_app_names(include_globals=False):
|
|
1307
1312
|
self.logger.warning(
|
|
1308
|
-
"Specified
|
|
1313
|
+
"Specified app '%s' for service '%s' is not valid from %s",
|
|
1314
|
+
app,
|
|
1315
|
+
service,
|
|
1316
|
+
__name
|
|
1317
|
+
)
|
|
1309
1318
|
return
|
|
1310
1319
|
|
|
1311
|
-
match service:
|
|
1312
|
-
case "start":
|
|
1313
|
-
asyncio.
|
|
1314
|
-
case "stop":
|
|
1315
|
-
asyncio.
|
|
1316
|
-
case "restart":
|
|
1317
|
-
asyncio.
|
|
1318
|
-
case "reload":
|
|
1319
|
-
asyncio.
|
|
1320
|
-
|
|
1321
|
-
case _:
|
|
1320
|
+
match (service, app):
|
|
1321
|
+
case ("start", str()):
|
|
1322
|
+
asyncio.create_task(self.start_app(app))
|
|
1323
|
+
case ("stop", str()):
|
|
1324
|
+
asyncio.create_task(self.stop_app(app, delete=False))
|
|
1325
|
+
case ("restart", str()):
|
|
1326
|
+
asyncio.create_task(self.restart_app(app))
|
|
1327
|
+
case ("reload", _):
|
|
1328
|
+
asyncio.create_task(self.check_app_updates(mode=UpdateMode.RELOAD_APPS))
|
|
1329
|
+
case (_, str()):
|
|
1322
1330
|
# first the check app updates needs to be stopped if on
|
|
1323
1331
|
mode = copy.deepcopy(self.AD.production_mode)
|
|
1324
1332
|
|
|
@@ -1343,3 +1351,10 @@ class AppManagement:
|
|
|
1343
1351
|
self.AD.production_mode = mode
|
|
1344
1352
|
|
|
1345
1353
|
return result
|
|
1354
|
+
case _:
|
|
1355
|
+
self.logger.warning(
|
|
1356
|
+
"Invalid app service call '%s' with app '%s' from app %s.",
|
|
1357
|
+
service,
|
|
1358
|
+
app,
|
|
1359
|
+
__name
|
|
1360
|
+
)
|
|
@@ -173,8 +173,9 @@ class DependencyManager:
|
|
|
173
173
|
return self.python_deps.get_dependents(modules)
|
|
174
174
|
|
|
175
175
|
def modules_from_apps(self, apps: str | Iterable[str], dependents: bool = True) -> set[str]:
|
|
176
|
-
"""Find the importable names of all the python modules that
|
|
177
|
-
|
|
176
|
+
"""Find the importable names of all the python modules that the given apps depend on.
|
|
177
|
+
|
|
178
|
+
This includes the transitive closure by default.
|
|
178
179
|
|
|
179
180
|
Args:
|
|
180
181
|
apps (str | Iterable[str]):
|
|
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class EventCallback(Protocol):
|
|
18
|
-
def __call__(self,
|
|
18
|
+
def __call__(self, event_type: str, data: dict[str, Any], **kwargs: Any) -> None: ...
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class Events:
|
|
@@ -214,8 +214,8 @@ class Events:
|
|
|
214
214
|
# if data["event_type"] == "__AD_ENTITY_REMOVED":
|
|
215
215
|
# print("process event")
|
|
216
216
|
|
|
217
|
-
self.logger.debug("Event type
|
|
218
|
-
self.logger.debug(data["data"])
|
|
217
|
+
self.logger.debug("Event type: %s:", data["event_type"])
|
|
218
|
+
# self.logger.debug(data["data"])
|
|
219
219
|
|
|
220
220
|
# Kick the scheduler so it updates it's clock
|
|
221
221
|
if self.AD.sched is not None and self.AD.sched.realtime is False and namespace != "admin":
|
|
@@ -92,7 +92,7 @@ class HASSConfig(PluginConfig):
|
|
|
92
92
|
enable_started_event: bool = True
|
|
93
93
|
"""If true, the plugin will wait for the 'homeassistant_started' event before starting the plugin."""
|
|
94
94
|
cert_path: CoercedPath | None = None
|
|
95
|
-
cert_verify: bool
|
|
95
|
+
cert_verify: bool = True
|
|
96
96
|
commtype: str = "WS"
|
|
97
97
|
q_timeout: int = 30
|
|
98
98
|
ws_timeout: Annotated[
|
|
@@ -58,10 +58,14 @@ class Hass(ADBase, ADAPI):
|
|
|
58
58
|
self.register_constraint("constrain_input_select")
|
|
59
59
|
|
|
60
60
|
@utils.sync_decorator
|
|
61
|
-
async def ping(self) -> float:
|
|
61
|
+
async def ping(self) -> float | None:
|
|
62
62
|
"""Gets the number of seconds """
|
|
63
63
|
if (plugin := self._plugin) is not None:
|
|
64
|
-
|
|
64
|
+
match await plugin.ping():
|
|
65
|
+
case {"ad_status": "OK", "ad_duration": ad_duration}:
|
|
66
|
+
return ad_duration
|
|
67
|
+
case _:
|
|
68
|
+
return None
|
|
65
69
|
|
|
66
70
|
@utils.sync_decorator
|
|
67
71
|
async def check_for_entity(self, entity_id: str, namespace: str | None = None) -> bool:
|
|
@@ -539,16 +543,14 @@ class Hass(ADBase, ADAPI):
|
|
|
539
543
|
Returns:
|
|
540
544
|
Information about the service in a dict with the following keys: ``name``, ``description``, ``target``, and
|
|
541
545
|
``fields``.
|
|
542
|
-
|
|
543
546
|
"""
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
if
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
self.logger.warning("Service info not found for domain '%s", domain)
|
|
547
|
+
match self._plugin:
|
|
548
|
+
case HassPlugin() as plugin:
|
|
549
|
+
domain, service_name = service.split("/", 2)
|
|
550
|
+
if info := plugin.services.get(domain, {}).get(service_name):
|
|
551
|
+
# Return a copy of the info dict to prevent accidental modification
|
|
552
|
+
return deepcopy(info)
|
|
553
|
+
self.logger.warning("Service info not found for domain '%s", domain)
|
|
552
554
|
|
|
553
555
|
# Methods that use self.call_service
|
|
554
556
|
|
|
@@ -680,7 +682,7 @@ class Hass(ADBase, ADAPI):
|
|
|
680
682
|
significant_changes_only: bool | None = None,
|
|
681
683
|
callback: Callable | None = None,
|
|
682
684
|
namespace: str | None = None,
|
|
683
|
-
) -> list[list[dict[str, Any]]]:
|
|
685
|
+
) -> list[list[dict[str, Any]]] | None:
|
|
684
686
|
"""Gets access to the HA Database.
|
|
685
687
|
This is a convenience function that allows accessing the HA Database, so the
|
|
686
688
|
history state of a device can be retrieved. It allows for a level of flexibility
|
|
@@ -755,31 +757,27 @@ class Hass(ADBase, ADAPI):
|
|
|
755
757
|
end_time = end_time or await self.get_now()
|
|
756
758
|
start_time = end_time - timedelta(days=days)
|
|
757
759
|
|
|
758
|
-
|
|
759
|
-
plugin:
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
self.logger.warning(
|
|
780
|
-
"Wrong Namespace selected, as %s has no database plugin attached to it",
|
|
781
|
-
namespace,
|
|
782
|
-
)
|
|
760
|
+
plugin = self.AD.plugins.get_plugin_object(namespace or self.namespace)
|
|
761
|
+
match plugin:
|
|
762
|
+
case HassPlugin():
|
|
763
|
+
coro = plugin.get_history(
|
|
764
|
+
filter_entity_id=entity_id,
|
|
765
|
+
timestamp=start_time,
|
|
766
|
+
end_time=end_time,
|
|
767
|
+
minimal_response=minimal_response,
|
|
768
|
+
no_attributes=no_attributes,
|
|
769
|
+
significant_changes_only=significant_changes_only,
|
|
770
|
+
)
|
|
771
|
+
|
|
772
|
+
if callback is not None and callable(callback):
|
|
773
|
+
self.create_task(coro, callback)
|
|
774
|
+
else:
|
|
775
|
+
return await coro
|
|
776
|
+
case _:
|
|
777
|
+
self.logger.warning(
|
|
778
|
+
"Wrong Namespace selected, as %s has no database plugin attached to it",
|
|
779
|
+
namespace,
|
|
780
|
+
)
|
|
783
781
|
|
|
784
782
|
@utils.sync_decorator
|
|
785
783
|
async def get_logbook(
|