appdaemon 4.5.3__tar.gz → 4.5.4__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.
Files changed (354) hide show
  1. {appdaemon-4.5.3/appdaemon.egg-info → appdaemon-4.5.4}/PKG-INFO +1 -1
  2. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/app_management.py +9 -6
  3. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/entity.py +1 -1
  4. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugin_management.py +8 -2
  5. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/hass/hassapi.py +9 -6
  6. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/hass/hassplugin.py +2 -2
  7. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/stream/adstream.py +12 -10
  8. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/stream/ws_handler.py +4 -3
  9. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/threads.py +6 -1
  10. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/version.py +1 -1
  11. {appdaemon-4.5.3 → appdaemon-4.5.4/appdaemon.egg-info}/PKG-INFO +1 -1
  12. {appdaemon-4.5.3 → appdaemon-4.5.4}/LICENSE.md +0 -0
  13. {appdaemon-4.5.3 → appdaemon-4.5.4}/MANIFEST.in +0 -0
  14. {appdaemon-4.5.3 → appdaemon-4.5.4}/README.md +0 -0
  15. {appdaemon-4.5.3 → appdaemon-4.5.4}/README.rst +0 -0
  16. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/__init__.py +0 -0
  17. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/__main__.py +0 -0
  18. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/adapi.py +0 -0
  19. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/adbase.py +0 -0
  20. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/admin.py +0 -0
  21. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/admin_loop.py +0 -0
  22. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/appdaemon.py +0 -0
  23. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/aui/appdaemon.png +0 -0
  24. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/aui/css/app.css +0 -0
  25. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/aui/css/chunk-vendors.css +0 -0
  26. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/aui/favicon.ico +0 -0
  27. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/aui/index.html +0 -0
  28. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/aui/js/app.js +0 -0
  29. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/aui/js/app.js.map +0 -0
  30. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/aui/js/chunk-vendors.js +0 -0
  31. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/aui/js/chunk-vendors.js.map +0 -0
  32. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/all.css +0 -0
  33. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/climacons-font.css +0 -0
  34. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/default/dashboard.css +0 -0
  35. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/default/variables.yaml +0 -0
  36. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/fontawesome.min.css +0 -0
  37. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/fonts.css +0 -0
  38. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/dashboard.css +0 -0
  39. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/carbon1.jpg +0 -0
  40. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/carbon2.jpg +0 -0
  41. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/carbon3.jpg +0 -0
  42. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/carbon4.jpg +0 -0
  43. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/glassic_bg.jpg +0 -0
  44. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/variables.yaml +0 -0
  45. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_444444_256x240.png +0 -0
  46. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_555555_256x240.png +0 -0
  47. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_777620_256x240.png +0 -0
  48. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_777777_256x240.png +0 -0
  49. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_cc0000_256x240.png +0 -0
  50. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_ffffff_256x240.png +0 -0
  51. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/jquery-ui.css +0 -0
  52. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/jquery.gridster.css +0 -0
  53. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/main.css +0 -0
  54. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/materialdesignicons.min.css +0 -0
  55. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/non_dashboard.css +0 -0
  56. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/dashboard.css +0 -0
  57. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/img/obsidian_bg.jpg +0 -0
  58. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/img/obsidian_w_bg.jpg +0 -0
  59. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/img/obsidianbg.jpg +0 -0
  60. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/img/widgetbg.jpg +0 -0
  61. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/variables.yaml +0 -0
  62. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/rickshaw.min.css +0 -0
  63. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/dashboard.css +0 -0
  64. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/img/goldgradient.png +0 -0
  65. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/img/goldtexture.jpg +0 -0
  66. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/js/timer.js +0 -0
  67. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/variables.yaml +0 -0
  68. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/v4-shims.min.css +0 -0
  69. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/zen/dashboard.css +0 -0
  70. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/zen/img/zen_bg.jpg +0 -0
  71. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/zen/img/zen_bg2.jpg +0 -0
  72. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/zen/img/zen_weatherbg.jpg +0 -0
  73. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/css/zen/variables.yaml +0 -0
  74. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/TickingTimebombBB.ttf +0 -0
  75. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/climacons-webfont.eot +0 -0
  76. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/climacons-webfont.svg +0 -0
  77. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/climacons-webfont.ttf +0 -0
  78. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/climacons-webfont.woff +0 -0
  79. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/digital-7-mono.eot +0 -0
  80. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/digital-7-mono.ttf +0 -0
  81. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/materialdesignicons-webfont.eot +0 -0
  82. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/materialdesignicons-webfont.ttf +0 -0
  83. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/materialdesignicons-webfont.woff +0 -0
  84. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/materialdesignicons-webfont.woff2 +0 -0
  85. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/fonts/repetition.ttf +0 -0
  86. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/Blank.gif +0 -0
  87. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/android-chrome-192x192.png +0 -0
  88. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/android-chrome-512x512.png +0 -0
  89. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/apple-touch-icon.png +0 -0
  90. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/browserconfig.xml +0 -0
  91. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/favicon-16x16.png +0 -0
  92. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/favicon-32x32.png +0 -0
  93. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/favicon.ico +0 -0
  94. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/manifest.json +0 -0
  95. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-144x144.png +0 -0
  96. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-150x150.png +0 -0
  97. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-310x150.png +0 -0
  98. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-310x310.png +0 -0
  99. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-70x70.png +0 -0
  100. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/admin.js +0 -0
  101. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/d3.layout.min.js +0 -0
  102. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/d3.min.js +0 -0
  103. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/dashboard.js +0 -0
  104. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/gauge.min.js +0 -0
  105. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/jquery-3.1.1.min.js +0 -0
  106. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/jquery-ui.js +0 -0
  107. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/jquery.gridster.js +0 -0
  108. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/justgage.js +0 -0
  109. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/knockout-3.4.1.js +0 -0
  110. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/list.min.js +0 -0
  111. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/plotly.min.js +0 -0
  112. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/raphael-2.1.4.min.js +0 -0
  113. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/reconnecting-websocket.min.js +0 -0
  114. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/rickshaw.min.js +0 -0
  115. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/socket.io.js +0 -0
  116. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/sockjs.min.js +0 -0
  117. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/javascript/stream.js +0 -0
  118. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/templates/admin.jinja2 +0 -0
  119. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/templates/body_include.jinja2 +0 -0
  120. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/templates/dashboard.jinja2 +0 -0
  121. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/templates/dashinit.jinja2 +0 -0
  122. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/templates/error.jinja2 +0 -0
  123. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/templates/head_include.jinja2 +0 -0
  124. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/templates/list.jinja2 +0 -0
  125. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/templates/logon.jinja2 +0 -0
  126. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.eot +0 -0
  127. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.svg +0 -0
  128. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.ttf +0 -0
  129. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.woff +0 -0
  130. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.woff2 +0 -0
  131. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.eot +0 -0
  132. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.svg +0 -0
  133. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.ttf +0 -0
  134. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.woff +0 -0
  135. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.woff2 +0 -0
  136. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.eot +0 -0
  137. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.svg +0 -0
  138. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.ttf +0 -0
  139. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.woff +0 -0
  140. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.woff2 +0 -0
  141. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/callbacks.py +0 -0
  142. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/dashboard.py +0 -0
  143. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/dependency.py +0 -0
  144. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/dependency_manager.py +0 -0
  145. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/events.py +0 -0
  146. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/exceptions.py +0 -0
  147. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/futures.py +0 -0
  148. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/http.py +0 -0
  149. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/logging.py +0 -0
  150. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/__init__.py +0 -0
  151. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/__init__.py +0 -0
  152. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/api.py +0 -0
  153. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/app.py +0 -0
  154. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/appdaemon.py +0 -0
  155. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/common.py +0 -0
  156. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/dashboard.py +0 -0
  157. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/http.py +0 -0
  158. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/log.py +0 -0
  159. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/misc.py +0 -0
  160. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/plugin.py +0 -0
  161. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/sequence.py +0 -0
  162. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/config/yaml.py +0 -0
  163. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/internal/__init__.py +0 -0
  164. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/internal/app_management.py +0 -0
  165. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/internal/file_check.py +0 -0
  166. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/internal/plugin.py +0 -0
  167. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/internal/state.py +0 -0
  168. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/internal/threading.py +0 -0
  169. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/notification/__init__.py +0 -0
  170. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/notification/android.py +0 -0
  171. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/notification/base.py +0 -0
  172. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/models/notification/iOS.py +0 -0
  173. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/__init__.py +0 -0
  174. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/dummy/dummyapi.py +0 -0
  175. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/dummy/dummyplugin.py +0 -0
  176. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/hass/__init__.py +0 -0
  177. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/hass/exceptions.py +0 -0
  178. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/hass/models.py +0 -0
  179. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/hass/notifications.py +0 -0
  180. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/hass/utils.py +0 -0
  181. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/mqtt/__init__.py +0 -0
  182. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/mqtt/mqttapi.py +0 -0
  183. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/plugins/mqtt/mqttplugin.py +0 -0
  184. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/pyversions.py +0 -0
  185. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/scheduler.py +0 -0
  186. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/sequences.py +0 -0
  187. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/services.py +0 -0
  188. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/state.py +0 -0
  189. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/stream/__init__.py +0 -0
  190. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/stream/socketio_handler.py +0 -0
  191. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/stream/sockjs_handler.py +0 -0
  192. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/thread_async.py +0 -0
  193. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/utility_loop.py +0 -0
  194. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/utils.py +0 -0
  195. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/AdminLog.yaml +0 -0
  196. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/AdminSummary.yaml +0 -0
  197. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/AdminTable.yaml +0 -0
  198. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/alarm.yaml +0 -0
  199. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basealarm/basealarm.css +0 -0
  200. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basealarm/basealarm.html +0 -0
  201. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basealarm/basealarm.js +0 -0
  202. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basecamera/basecamera.css +0 -0
  203. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basecamera/basecamera.html +0 -0
  204. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basecamera/basecamera.js +0 -0
  205. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseclimate/baseclimate.css +0 -0
  206. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseclimate/baseclimate.html +0 -0
  207. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseclimate/baseclimate.js +0 -0
  208. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseclock/baseclock.css +0 -0
  209. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseclock/baseclock.html +0 -0
  210. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseclock/baseclock.js +0 -0
  211. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basedatetime/basedatetime.css +0 -0
  212. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basedatetime/basedatetime.html +0 -0
  213. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basedatetime/basedatetime.js +0 -0
  214. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basedisplay/basedisplay.css +0 -0
  215. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basedisplay/basedisplay.html +0 -0
  216. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basedisplay/basedisplay.js +0 -0
  217. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseentitypicture/baseentitypicture.css +0 -0
  218. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseentitypicture/baseentitypicture.html +0 -0
  219. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseentitypicture/baseentitypicture.js +0 -0
  220. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseerror/baseerror.css +0 -0
  221. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseerror/baseerror.html +0 -0
  222. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseerror/baseerror.js +0 -0
  223. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basefan/basefan.css +0 -0
  224. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basefan/basefan.html +0 -0
  225. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basefan/basefan.js +0 -0
  226. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basegauge/basegauge.css +0 -0
  227. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basegauge/basegauge.html +0 -0
  228. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basegauge/basegauge.js +0 -0
  229. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseheater/baseheater.css +0 -0
  230. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseheater/baseheater.html +0 -0
  231. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseheater/baseheater.js +0 -0
  232. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseicon/baseicon.css +0 -0
  233. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseicon/baseicon.html +0 -0
  234. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseicon/baseicon.js +0 -0
  235. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseiframe/baseiframe.css +0 -0
  236. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseiframe/baseiframe.html +0 -0
  237. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseiframe/baseiframe.js +0 -0
  238. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseinputnumber/baseinputnumber.css +0 -0
  239. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseinputnumber/baseinputnumber.html +0 -0
  240. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseinputnumber/baseinputnumber.js +0 -0
  241. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basejavascript/basejavascript.css +0 -0
  242. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basejavascript/basejavascript.html +0 -0
  243. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basejavascript/basejavascript.js +0 -0
  244. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baselight/baselight.css +0 -0
  245. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baselight/baselight.html +0 -0
  246. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baselight/baselight.js +0 -0
  247. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basemedia/basemedia.css +0 -0
  248. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basemedia/basemedia.html +0 -0
  249. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basemedia/basemedia.js +0 -0
  250. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseradial/baseradial.css +0 -0
  251. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseradial/baseradial.html +0 -0
  252. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseradial/baseradial.js +0 -0
  253. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baserss/baserss.css +0 -0
  254. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baserss/baserss.html +0 -0
  255. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baserss/baserss.js +0 -0
  256. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseselect/baseselect.css +0 -0
  257. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseselect/baseselect.html +0 -0
  258. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseselect/baseselect.js +0 -0
  259. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseslider/baseslider.css +0 -0
  260. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseslider/baseslider.html +0 -0
  261. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseslider/baseslider.js +0 -0
  262. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseswitch/baseswitch.css +0 -0
  263. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseswitch/baseswitch.html +0 -0
  264. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseswitch/baseswitch.js +0 -0
  265. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basetemperature/basetemperature.css +0 -0
  266. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basetemperature/basetemperature.html +0 -0
  267. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basetemperature/basetemperature.js +0 -0
  268. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basetext/basetext.css +0 -0
  269. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basetext/basetext.html +0 -0
  270. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/basetext/basetext.js +0 -0
  271. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseweather/baseweather.css +0 -0
  272. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseweather/baseweather.html +0 -0
  273. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/baseweather/baseweather.js +0 -0
  274. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/binary_sensor.yaml +0 -0
  275. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/camera.yaml +0 -0
  276. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/climate.yaml +0 -0
  277. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/clock.yaml +0 -0
  278. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/cover.yaml +0 -0
  279. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/device_tracker.yaml +0 -0
  280. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/entitypicture.yaml +0 -0
  281. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/fan.yaml +0 -0
  282. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/gauge.yaml +0 -0
  283. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/group.yaml +0 -0
  284. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/heater.yaml +0 -0
  285. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/icon.yaml +0 -0
  286. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/iframe.yaml +0 -0
  287. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/input_boolean.yaml +0 -0
  288. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/input_datetime.yaml +0 -0
  289. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/input_number.yaml +0 -0
  290. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/input_select.yaml +0 -0
  291. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/input_slider.yaml +0 -0
  292. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/input_text.yaml +0 -0
  293. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/javascript.yaml +0 -0
  294. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/label.yaml +0 -0
  295. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/light.yaml +0 -0
  296. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/lock.yaml +0 -0
  297. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/london_underground.yaml +0 -0
  298. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/media_player.yaml +0 -0
  299. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/mode.yaml +0 -0
  300. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/navigate.yaml +0 -0
  301. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/person.yaml +0 -0
  302. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/pirateweather.yaml +0 -0
  303. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/radial.yaml +0 -0
  304. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/reload.yaml +0 -0
  305. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/rss.yaml +0 -0
  306. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/scene.yaml +0 -0
  307. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/script.yaml +0 -0
  308. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/sensor.yaml +0 -0
  309. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/sequence.yaml +0 -0
  310. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/switch.yaml +0 -0
  311. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/temperature.yaml +0 -0
  312. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/text_sensor.yaml +0 -0
  313. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/weather.yaml +0 -0
  314. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon/widgets/weather_summary.yaml +0 -0
  315. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon.egg-info/SOURCES.txt +0 -0
  316. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon.egg-info/dependency_links.txt +0 -0
  317. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon.egg-info/entry_points.txt +0 -0
  318. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon.egg-info/requires.txt +0 -0
  319. {appdaemon-4.5.3 → appdaemon-4.5.4}/appdaemon.egg-info/top_level.txt +0 -0
  320. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/apps/hello.py +0 -0
  321. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/ObjectTracker/general_app_functions.py +0 -0
  322. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/ObjectTracker/objectcontrole.py +0 -0
  323. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/alexa.py +0 -0
  324. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/battery.py +0 -0
  325. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/bysykkel.py +0 -0
  326. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/commute.py +0 -0
  327. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/dark_day.py +0 -0
  328. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/door_notification.py +0 -0
  329. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/eventCache.py +0 -0
  330. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/eventMonitor.py +0 -0
  331. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/globals.py +0 -0
  332. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/grandfather.py +0 -0
  333. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/hwcheck.py +0 -0
  334. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/ical.py +0 -0
  335. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/minimote.py +0 -0
  336. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/modes.py +0 -0
  337. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/momentary_switch.py +0 -0
  338. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/motion_lights.py +0 -0
  339. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/motion_notification.py +0 -0
  340. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/occusim.py +0 -0
  341. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/outside_lights.py +0 -0
  342. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/presence.py +0 -0
  343. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/ruter.py +0 -0
  344. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/secure.py +0 -0
  345. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/sensor_notification.py +0 -0
  346. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/sensor_notify.py +0 -0
  347. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/sequence.py +0 -0
  348. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/smart_heat.py +0 -0
  349. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/sound.py +0 -0
  350. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/switch_reset.py +0 -0
  351. {appdaemon-4.5.3 → appdaemon-4.5.4}/conf/example_apps/yr.py +0 -0
  352. {appdaemon-4.5.3 → appdaemon-4.5.4}/pyproject.toml +0 -0
  353. {appdaemon-4.5.3 → appdaemon-4.5.4}/setup.cfg +0 -0
  354. {appdaemon-4.5.3 → appdaemon-4.5.4}/tests/test_main.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: appdaemon
3
- Version: 4.5.3
3
+ Version: 4.5.4
4
4
  Summary: Apps for the Home Assistant home automation package.
5
5
  Author-email: Andrew I Cockburn <appdaemon@acockburn.com>
6
6
  Project-URL: documentation, https://appdaemon.readthedocs.io
@@ -191,10 +191,11 @@ class AppManagement:
191
191
  def app_rel_path(self, app_name: str) -> Path:
192
192
  return self.app_config.root[app_name].config_path.relative_to(self.AD.app_dir.parent)
193
193
 
194
- def mod_rel_path(self, app_obj: object) -> Path:
194
+ def err_app_path(self, app_obj: object) -> Path:
195
195
  module_path = Path(sys.modules[app_obj.__module__].__file__)
196
- rel_path = module_path.relative_to(self.AD.app_dir.parent)
197
- return rel_path
196
+ if module_path.is_relative_to(self.AD.app_dir.parent):
197
+ return module_path.relative_to(self.AD.app_dir.parent)
198
+ return module_path
198
199
 
199
200
  async def init_admin_stats(self):
200
201
  # create sensors
@@ -266,16 +267,18 @@ class AppManagement:
266
267
  async def initialize_app(self, app_name: str):
267
268
  assert app_name in self.objects, 'Something is very wrong'
268
269
  app_obj = self.objects[app_name].object
269
- rel_path = self.mod_rel_path(app_obj)
270
+
271
+ # Get the path that will be used for the exception
272
+ err_path = self.err_app_path(app_obj)
270
273
 
271
274
  try:
272
275
  init_func = app_obj.initialize
273
276
  except AttributeError:
274
- raise ade.NoInitializeMethod(app_obj.__class__, rel_path)
277
+ raise ade.NoInitializeMethod(app_obj.__class__, err_path)
275
278
 
276
279
  signature = inspect.signature(init_func)
277
280
  if len(signature.parameters) != 0:
278
- raise ade.BadInitializeMethod(app_obj.__class__, rel_path, signature)
281
+ raise ade.BadInitializeMethod(app_obj.__class__, err_path, signature)
279
282
 
280
283
  # Call its initialize function
281
284
  await self.set_state(app_name, state="initializing")
@@ -435,7 +435,7 @@ class Entity:
435
435
  self.logger.warning(f"State Wait for {self.entity_id} Timed Out")
436
436
  raise TimeOutException("The entity timed out") from e
437
437
  finally:
438
- self._async_events.pop(wait_id)
438
+ self._async_events.pop(wait_id, None) # Ignore if already removed
439
439
 
440
440
  async def entity_state_changed(self, *args, wait_id: str, **kwargs) -> None:
441
441
  """The entity state changed"""
@@ -126,8 +126,14 @@ class PluginBase(abc.ABC):
126
126
  pass
127
127
 
128
128
  # @abc.abstractmethod
129
- async def set_plugin_state(self):
130
- raise NotImplementedError
129
+ # async def set_plugin_state(
130
+ # self,
131
+ # namespace: str,
132
+ # entity_id: str,
133
+ # state: Any | None = None,
134
+ # attributes: Any | None = None,
135
+ # ) -> dict[str, Any] | None:
136
+ # pass
131
137
 
132
138
  # @abc.abstractmethod
133
139
  async def fire_plugin_event(self):
@@ -411,7 +411,7 @@ class Hass(ADBase, ADAPI):
411
411
  case str():
412
412
  constraints = [value]
413
413
 
414
- assert isinstance(value, list) and all(isinstance(v, str) for v in value)
414
+ assert isinstance(constraints, list) and all(isinstance(v, str) for v in constraints)
415
415
 
416
416
  for constraint in constraints:
417
417
  # using re.split allows for an arbitrary amount of whitespace after the comma
@@ -1343,7 +1343,7 @@ class Hass(ADBase, ADAPI):
1343
1343
  # Functions that use self.render_template
1344
1344
 
1345
1345
  @utils.sync_decorator
1346
- async def render_template(self, template: str, namespace: str | None = None) -> Any:
1346
+ async def render_template(self, template: str, namespace: str | None = None, **kwargs) -> Any:
1347
1347
  """Renders a Home Assistant Template.
1348
1348
 
1349
1349
  See the documentation for the `Template Integration <https://www.home-assistant.io/integrations/template>`__ and
@@ -1351,9 +1351,9 @@ class Hass(ADBase, ADAPI):
1351
1351
 
1352
1352
  Args:
1353
1353
  template (str): The Home Assistant template to be rendered.
1354
- namespace (str, optional): Namespace to use for the call. See the section on
1355
- `namespaces <APPGUIDE.html#namespaces>`__ for a detailed description.
1356
- In most cases it is safe to ignore this parameter.
1354
+ namespace (str, optional): Optional namespace to use. Defaults to using the app's current namespace. See the
1355
+ `namespace documentation <APPGUIDE.html#namespaces>`__ for more information.
1356
+ **kwargs (optional): Zero or more keyword arguments that get passed to the template rendering.
1357
1357
 
1358
1358
  Returns:
1359
1359
  The rendered template in a native Python type.
@@ -1368,11 +1368,14 @@ class Hass(ADBase, ADAPI):
1368
1368
  >>> self.render_template("{{ states('sensor.outside_temp') }}")
1369
1369
  97.2
1370
1370
 
1371
+ >>> self.render_template("hello {{ name }}", variables={"name": "bob"})
1372
+ hello bob
1373
+
1371
1374
  """
1372
1375
  plugin: "HassPlugin" = self.AD.plugins.get_plugin_object(
1373
1376
  namespace or self.namespace
1374
1377
  )
1375
- result = await plugin.render_template(self.namespace, template)
1378
+ result = await plugin.render_template(self.namespace, template, **kwargs)
1376
1379
  try:
1377
1380
  return literal_eval(result)
1378
1381
  except (SyntaxError, ValueError):
@@ -888,7 +888,7 @@ class HassPlugin(PluginBase):
888
888
  return result
889
889
 
890
890
  @utils.warning_decorator(error_text='Unexpected error rendering template')
891
- async def render_template(self, namespace: str, template: str):
891
+ async def render_template(self, namespace: str, template: str, **kwargs):
892
892
  self.logger.debug(
893
893
  "render_template() namespace=%s data=%s",
894
894
  namespace,
@@ -897,4 +897,4 @@ class HassPlugin(PluginBase):
897
897
 
898
898
  # if we get a request for not our namespace something has gone very wrong
899
899
  assert namespace == self.namespace
900
- return await self.http_method("post", "/api/template", template=template)
900
+ return await self.http_method("post", "/api/template", template=template, **kwargs)
@@ -1,15 +1,16 @@
1
+ import asyncio
2
+ import threading
1
3
  import traceback
2
- import bcrypt
3
4
  import uuid
4
- import threading
5
- import asyncio
6
5
 
7
- from appdaemon.appdaemon import AppDaemon
6
+ import bcrypt
7
+
8
8
  import appdaemon.utils as utils
9
+ from appdaemon.appdaemon import AppDaemon
10
+ from appdaemon.exceptions import RequestHandlerException
9
11
  from appdaemon.stream.socketio_handler import SocketIOHandler
10
- from appdaemon.stream.ws_handler import WSHandler
11
12
  from appdaemon.stream.sockjs_handler import SockJSHandler
12
- from appdaemon.exceptions import RequestHandlerException
13
+ from appdaemon.stream.ws_handler import WSHandler
13
14
 
14
15
 
15
16
  class ADStream:
@@ -51,7 +52,7 @@ class ADStream:
51
52
  rh = RequestHandler(self.AD, self, handle, request)
52
53
  with self.handlers_lock:
53
54
  self.handlers[handle] = rh
54
- await rh.stream.run()
55
+ return await rh.stream.run()
55
56
 
56
57
  async def on_disconnect(self, handle):
57
58
  with self.handlers_lock:
@@ -98,9 +99,7 @@ class RequestHandler:
98
99
 
99
100
  # Create a stream
100
101
  #
101
- self.stream = self.adstream.stream_handler.makeStream(
102
- self.AD, request, on_message=self._on_message, on_disconnect=self._on_disconnect
103
- )
102
+ self.stream = self.adstream.stream_handler.makeStream(self.AD, request, on_message=self._on_message, on_disconnect=self._on_disconnect)
104
103
  #
105
104
 
106
105
  async def _on_message(self, data):
@@ -331,6 +330,9 @@ class RequestHandler:
331
330
 
332
331
  service_data = data["data"]
333
332
 
333
+ if "__name" in service_data:
334
+ del service_data["__name"]
335
+
334
336
  return await self.AD.services.call_service(
335
337
  namespace=data["namespace"],
336
338
  domain=domain,
@@ -1,9 +1,9 @@
1
- import traceback
1
+ import asyncio
2
2
  import json
3
+ import traceback
3
4
 
4
5
  import aiohttp
5
6
  from aiohttp import web
6
- import asyncio
7
7
 
8
8
  from appdaemon import utils as utils
9
9
 
@@ -24,7 +24,7 @@ class WSHandler:
24
24
  # We have a connection
25
25
  #
26
26
  # Add handler
27
- await self.ADStream.on_connect(request)
27
+ return await self.ADStream.on_connect(request)
28
28
 
29
29
  def makeStream(self, ad, request, **kwargs):
30
30
  return WSStream(ad, request, **kwargs)
@@ -76,6 +76,7 @@ class WSStream:
76
76
  self.logger.debug("Closing websocket ...")
77
77
  await self.ws.close()
78
78
  self.logger.debug("Done")
79
+ return self.ws
79
80
 
80
81
  async def sendclient(self, data):
81
82
  try:
@@ -78,10 +78,15 @@ class Threading:
78
78
  self.callback_list = []
79
79
 
80
80
  @property
81
- def pin_apps(self):
81
+ def pin_apps(self) -> bool:
82
82
  "Whether each app should be pinned to a thread"
83
83
  return self.AD.config.pin_apps
84
84
 
85
+ @pin_apps.setter
86
+ def pin_apps(self, new: bool) -> None:
87
+ """Set whether each app should be pinned to a thread"""
88
+ self.AD.config.pin_apps = new
89
+
85
90
  @property
86
91
  def total_threads(self) -> int:
87
92
  """Number of threads created for apps.
@@ -1,2 +1,2 @@
1
- __version__ = "4.5.3"
1
+ __version__ = "4.5.4"
2
2
  __version_comments__ = ""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: appdaemon
3
- Version: 4.5.3
3
+ Version: 4.5.4
4
4
  Summary: Apps for the Home Assistant home automation package.
5
5
  Author-email: Andrew I Cockburn <appdaemon@acockburn.com>
6
6
  Project-URL: documentation, https://appdaemon.readthedocs.io
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes