meerschaum 2.6.12__tar.gz → 2.6.13__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 (276) hide show
  1. {meerschaum-2.6.12/meerschaum.egg-info → meerschaum-2.6.13}/PKG-INFO +5 -2
  2. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/api.py +3 -2
  3. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/__init__.py +1 -0
  4. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/callbacks/dashboard.py +3 -3
  5. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/pipes.py +61 -43
  6. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_actions.py +12 -15
  7. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_jobs.py +6 -5
  8. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_login.py +9 -9
  9. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_version.py +1 -1
  10. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/User/_User.py +7 -0
  11. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/User/__init__.py +10 -11
  12. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/daemon/Daemon.py +8 -2
  13. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/packages/_packages.py +1 -0
  14. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/threading.py +14 -3
  15. {meerschaum-2.6.12 → meerschaum-2.6.13/meerschaum.egg-info}/PKG-INFO +5 -2
  16. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum.egg-info/requires.txt +3 -0
  17. {meerschaum-2.6.12 → meerschaum-2.6.13}/setup.py +1 -1
  18. {meerschaum-2.6.12 → meerschaum-2.6.13}/LICENSE +0 -0
  19. {meerschaum-2.6.12 → meerschaum-2.6.13}/NOTICE +0 -0
  20. {meerschaum-2.6.12 → meerschaum-2.6.13}/README.md +0 -0
  21. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/__init__.py +0 -0
  22. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/__main__.py +0 -0
  23. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/__init__.py +0 -0
  24. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/arguments/__init__.py +0 -0
  25. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
  26. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/arguments/_parser.py +0 -0
  27. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/docs/__init__.py +0 -0
  28. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/docs/index.py +0 -0
  29. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/entry.py +0 -0
  30. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/gui/__init__.py +0 -0
  31. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/gui/app/__init__.py +0 -0
  32. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/gui/app/_windows.py +0 -0
  33. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/gui/app/actions.py +0 -0
  34. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/gui/app/pipes.py +0 -0
  35. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/shell/Shell.py +0 -0
  36. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
  37. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
  38. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/shell/__init__.py +0 -0
  39. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/shell/resources/__init__.py +0 -0
  40. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/shell/updates.py +0 -0
  41. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/term/TermPageHandler.py +0 -0
  42. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/term/__init__.py +0 -0
  43. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/_internal/term/tools.py +0 -0
  44. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/__init__.py +0 -0
  45. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/attach.py +0 -0
  46. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/bootstrap.py +0 -0
  47. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/clear.py +0 -0
  48. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/copy.py +0 -0
  49. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/deduplicate.py +0 -0
  50. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/delete.py +0 -0
  51. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/drop.py +0 -0
  52. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/edit.py +0 -0
  53. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/install.py +0 -0
  54. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/login.py +0 -0
  55. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/os.py +0 -0
  56. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/pause.py +0 -0
  57. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/python.py +0 -0
  58. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/register.py +0 -0
  59. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/reload.py +0 -0
  60. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/restart.py +0 -0
  61. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/setup.py +0 -0
  62. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/sh.py +0 -0
  63. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/show.py +0 -0
  64. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/sql.py +0 -0
  65. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/stack.py +0 -0
  66. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/start.py +0 -0
  67. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/stop.py +0 -0
  68. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/sync.py +0 -0
  69. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/tag.py +0 -0
  70. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/uninstall.py +0 -0
  71. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/upgrade.py +0 -0
  72. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/actions/verify.py +0 -0
  73. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/__init__.py +0 -0
  74. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/_chain.py +0 -0
  75. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/_events.py +0 -0
  76. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/_oauth2.py +0 -0
  77. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/_websockets.py +0 -0
  78. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/assets/__init__.py +0 -0
  79. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/assets/ansi_up.js +0 -0
  80. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
  81. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/assets/favicon.ico +0 -0
  82. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
  83. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
  84. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/callbacks/__init__.py +0 -0
  85. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/callbacks/custom.py +0 -0
  86. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/callbacks/jobs.py +0 -0
  87. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/callbacks/login.py +0 -0
  88. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/callbacks/pipes.py +0 -0
  89. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/callbacks/plugins.py +0 -0
  90. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/callbacks/register.py +0 -0
  91. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/components.py +0 -0
  92. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/connectors.py +0 -0
  93. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/graphs.py +0 -0
  94. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/jobs.py +0 -0
  95. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/keys.py +0 -0
  96. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/pages/__init__.py +0 -0
  97. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/pages/dashboard.py +0 -0
  98. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/pages/error.py +0 -0
  99. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/pages/job.py +0 -0
  100. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/pages/login.py +0 -0
  101. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/pages/pipes.py +0 -0
  102. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/pages/plugins.py +0 -0
  103. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/pages/register.py +0 -0
  104. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/plugins.py +0 -0
  105. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/sessions.py +0 -0
  106. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/sync.py +0 -0
  107. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/users.py +0 -0
  108. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/websockets.py +0 -0
  109. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/dash/webterm.py +0 -0
  110. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/models/__init__.py +0 -0
  111. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/models/_interfaces.py +0 -0
  112. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/models/_locations.py +0 -0
  113. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/models/_metrics.py +0 -0
  114. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/models/_pipes.py +0 -0
  115. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/__init__.py +0 -0
  116. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/__init__.py +0 -0
  117. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/css/__init__.py +0 -0
  118. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
  119. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/css/dash.css +0 -0
  120. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
  121. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/css/styles.css +0 -0
  122. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/css/xterm.css +0 -0
  123. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/ico/__init__.py +0 -0
  124. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/ico/logo.ico +0 -0
  125. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/js/__init__.py +0 -0
  126. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/js/action_button.js +0 -0
  127. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/js/main.js +0 -0
  128. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/js/terminado.js +0 -0
  129. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/js/xterm.js +0 -0
  130. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/static/png/__init__.py +0 -0
  131. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/templates/__init__.py +0 -0
  132. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/templates/index.html +0 -0
  133. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/templates/old_index.html +0 -0
  134. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/templates/secret.html +0 -0
  135. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/resources/templates/termpage.html +0 -0
  136. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/__init__.py +0 -0
  137. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_connectors.py +0 -0
  138. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_index.py +0 -0
  139. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_misc.py +0 -0
  140. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_pipes.py +0 -0
  141. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_plugins.py +0 -0
  142. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_users.py +0 -0
  143. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_version.py +0 -0
  144. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/routes/_webterm.py +0 -0
  145. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/api/tables/__init__.py +0 -0
  146. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/__init__.py +0 -0
  147. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_dash.py +0 -0
  148. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_default.py +0 -0
  149. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_edit.py +0 -0
  150. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_environment.py +0 -0
  151. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_formatting.py +0 -0
  152. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_jobs.py +0 -0
  153. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_patch.py +0 -0
  154. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_paths.py +0 -0
  155. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_preprocess.py +0 -0
  156. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_read_config.py +0 -0
  157. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_shell.py +0 -0
  158. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/_sync.py +0 -0
  159. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/paths.py +0 -0
  160. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/resources/__init__.py +0 -0
  161. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/stack/__init__.py +0 -0
  162. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/stack/grafana/__init__.py +0 -0
  163. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
  164. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
  165. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/stack/resources/__init__.py +0 -0
  166. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/config/static/__init__.py +0 -0
  167. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/_Connector.py +0 -0
  168. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/__init__.py +0 -0
  169. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_APIConnector.py +0 -0
  170. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/__init__.py +0 -0
  171. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_actions.py +0 -0
  172. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_fetch.py +0 -0
  173. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_jobs.py +0 -0
  174. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_login.py +0 -0
  175. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_misc.py +0 -0
  176. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_pipes.py +0 -0
  177. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_plugins.py +0 -0
  178. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_request.py +0 -0
  179. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_uri.py +0 -0
  180. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/api/_users.py +0 -0
  181. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/parse.py +0 -0
  182. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
  183. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/plugin/__init__.py +0 -0
  184. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/poll.py +0 -0
  185. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_SQLConnector.py +0 -0
  186. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/__init__.py +0 -0
  187. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_cli.py +0 -0
  188. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_create_engine.py +0 -0
  189. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_fetch.py +0 -0
  190. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_instance.py +0 -0
  191. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_pipes.py +0 -0
  192. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_plugins.py +0 -0
  193. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_sql.py +0 -0
  194. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_uri.py +0 -0
  195. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/_users.py +0 -0
  196. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/tables/__init__.py +0 -0
  197. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/tables/types.py +0 -0
  198. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/sql/tools.py +0 -0
  199. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/valkey/_ValkeyConnector.py +0 -0
  200. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/valkey/__init__.py +0 -0
  201. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/valkey/_fetch.py +0 -0
  202. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/valkey/_pipes.py +0 -0
  203. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/valkey/_plugins.py +0 -0
  204. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/connectors/valkey/_users.py +0 -0
  205. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/__init__.py +0 -0
  206. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_attributes.py +0 -0
  207. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_bootstrap.py +0 -0
  208. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_clear.py +0 -0
  209. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_copy.py +0 -0
  210. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_data.py +0 -0
  211. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_deduplicate.py +0 -0
  212. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_delete.py +0 -0
  213. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_drop.py +0 -0
  214. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_dtypes.py +0 -0
  215. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_edit.py +0 -0
  216. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_fetch.py +0 -0
  217. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_register.py +0 -0
  218. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_show.py +0 -0
  219. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_sync.py +0 -0
  220. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Pipe/_verify.py +0 -0
  221. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/Plugin/__init__.py +0 -0
  222. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/core/__init__.py +0 -0
  223. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/jobs/_Executor.py +0 -0
  224. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/jobs/_Job.py +0 -0
  225. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/jobs/__init__.py +0 -0
  226. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/jobs/systemd.py +0 -0
  227. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/plugins/_Plugin.py +0 -0
  228. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/plugins/__init__.py +0 -0
  229. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/plugins/bootstrap.py +0 -0
  230. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/__init__.py +0 -0
  231. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/_get_pipes.py +0 -0
  232. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/daemon/FileDescriptorInterceptor.py +0 -0
  233. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/daemon/RotatingFile.py +0 -0
  234. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/daemon/StdinFile.py +0 -0
  235. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/daemon/__init__.py +0 -0
  236. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/daemon/_names.py +0 -0
  237. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/dataframe.py +0 -0
  238. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/debug.py +0 -0
  239. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/dtypes/__init__.py +0 -0
  240. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/dtypes/sql.py +0 -0
  241. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/formatting/__init__.py +0 -0
  242. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/formatting/_jobs.py +0 -0
  243. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/formatting/_pipes.py +0 -0
  244. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/formatting/_pprint.py +0 -0
  245. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/formatting/_shell.py +0 -0
  246. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/interactive.py +0 -0
  247. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/misc.py +0 -0
  248. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/networking.py +0 -0
  249. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/packages/__init__.py +0 -0
  250. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/packages/lazy_loader.py +0 -0
  251. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/pool.py +0 -0
  252. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/process.py +0 -0
  253. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/prompt.py +0 -0
  254. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/schedule.py +0 -0
  255. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/sql.py +0 -0
  256. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/typing.py +0 -0
  257. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/venv/_Venv.py +0 -0
  258. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/venv/__init__.py +0 -0
  259. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/warnings.py +0 -0
  260. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum/utils/yaml.py +0 -0
  261. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum.egg-info/SOURCES.txt +0 -0
  262. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum.egg-info/dependency_links.txt +0 -0
  263. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum.egg-info/entry_points.txt +0 -0
  264. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum.egg-info/top_level.txt +0 -0
  265. {meerschaum-2.6.12 → meerschaum-2.6.13}/meerschaum.egg-info/zip-safe +0 -0
  266. {meerschaum-2.6.12 → meerschaum-2.6.13}/setup.cfg +0 -0
  267. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_actions.py +0 -0
  268. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_arguments.py +0 -0
  269. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_deduplicate.py +0 -0
  270. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_jobs.py +0 -0
  271. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_pipe_data.py +0 -0
  272. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_pipes_dtypes.py +0 -0
  273. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_sql.py +0 -0
  274. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_sync.py +0 -0
  275. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_users.py +0 -0
  276. {meerschaum-2.6.12 → meerschaum-2.6.13}/tests/test_verify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.6.12
3
+ Version: 2.6.13
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -20,11 +20,11 @@ Classifier: Operating System :: POSIX :: Linux
20
20
  Classifier: Operating System :: Microsoft :: Windows
21
21
  Classifier: Operating System :: MacOS
22
22
  Classifier: Programming Language :: SQL
23
- Classifier: Programming Language :: Python :: 3.8
24
23
  Classifier: Programming Language :: Python :: 3.9
25
24
  Classifier: Programming Language :: Python :: 3.10
26
25
  Classifier: Programming Language :: Python :: 3.11
27
26
  Classifier: Programming Language :: Python :: 3.12
27
+ Classifier: Programming Language :: Python :: 3.13
28
28
  Classifier: Topic :: Database
29
29
  Classifier: Natural Language :: English
30
30
  Requires-Python: >=3.8
@@ -170,6 +170,7 @@ Requires-Dist: dash>=2.6.2; extra == "dash"
170
170
  Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "dash"
171
171
  Requires-Dist: dash-ace>=0.2.1; extra == "dash"
172
172
  Requires-Dist: dash-extensions>=1.0.4; extra == "dash"
173
+ Requires-Dist: dataclass-wizard>=0.28.0; extra == "dash"
173
174
  Requires-Dist: dash-daq>=0.5.0; extra == "dash"
174
175
  Requires-Dist: terminado>=0.12.1; extra == "dash"
175
176
  Requires-Dist: tornado>=6.1.0; extra == "dash"
@@ -237,6 +238,7 @@ Requires-Dist: dash>=2.6.2; extra == "api"
237
238
  Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "api"
238
239
  Requires-Dist: dash-ace>=0.2.1; extra == "api"
239
240
  Requires-Dist: dash-extensions>=1.0.4; extra == "api"
241
+ Requires-Dist: dataclass-wizard>=0.28.0; extra == "api"
240
242
  Requires-Dist: dash-daq>=0.5.0; extra == "api"
241
243
  Requires-Dist: terminado>=0.12.1; extra == "api"
242
244
  Requires-Dist: tornado>=6.1.0; extra == "api"
@@ -305,6 +307,7 @@ Requires-Dist: dash>=2.6.2; extra == "full"
305
307
  Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "full"
306
308
  Requires-Dist: dash-ace>=0.2.1; extra == "full"
307
309
  Requires-Dist: dash-extensions>=1.0.4; extra == "full"
310
+ Requires-Dist: dataclass-wizard>=0.28.0; extra == "full"
308
311
  Requires-Dist: dash-daq>=0.5.0; extra == "full"
309
312
  Requires-Dist: terminado>=0.12.1; extra == "full"
310
313
  Requires-Dist: tornado>=6.1.0; extra == "full"
@@ -9,6 +9,7 @@ from __future__ import annotations
9
9
  import os
10
10
  from meerschaum.utils.typing import SuccessTuple, Optional, List, Any
11
11
 
12
+
12
13
  def api(
13
14
  action: Optional[List[str]] = None,
14
15
  sysargs: Optional[List[str]] = None,
@@ -36,7 +37,6 @@ def api(
36
37
 
37
38
  """
38
39
  from meerschaum.utils.warnings import warn, info
39
- from meerschaum.utils.formatting import print_tuple
40
40
  from meerschaum._internal.arguments._parse_arguments import parse_dict_to_sysargs
41
41
 
42
42
  if action is None:
@@ -88,6 +88,7 @@ def api(
88
88
  success, message = api_conn.do_action(sysargs)
89
89
  return success, message
90
90
 
91
+
91
92
  def _api_start(
92
93
  action: Optional[List[str]] = None,
93
94
  host: Optional[str] = None,
@@ -191,7 +192,7 @@ def _api_start(
191
192
 
192
193
  if keyfile or certfile:
193
194
  if not keyfile or not certfile:
194
- return False, f"HTTPS requires both `--keyfile` and `--certfile`."
195
+ return False, "HTTPS requires both `--keyfile` and `--certfile`."
195
196
 
196
197
  pool = get_pool(workers=workers)
197
198
  if pool is None:
@@ -33,6 +33,7 @@ import warnings
33
33
  ### Suppress the depreciation warnings from importing enrich.
34
34
  with warnings.catch_warnings():
35
35
  warnings.simplefilter("ignore")
36
+ _ = attempt_import('dataclass_wizard', lazy=False)
36
37
  enrich = attempt_import('dash_extensions.enrich', lazy=False)
37
38
  html, dcc = import_html(), import_dcc()
38
39
  from meerschaum.api.dash.components import location
@@ -978,9 +978,9 @@ def sign_out_button_click(
978
978
  Input({'type': 'parameters-as-json-button', 'index': MATCH}, 'n_clicks'),
979
979
  )
980
980
  def parameters_as_yaml_or_json_click(
981
- yaml_n_clicks: Optional[int],
982
- json_n_clicks: Optional[int],
983
- ):
981
+ yaml_n_clicks: Optional[int],
982
+ json_n_clicks: Optional[int],
983
+ ):
984
984
  """
985
985
  When the `YAML` button is clicked under the parameters editor, switch the content to YAML.
986
986
  """
@@ -18,6 +18,7 @@ from meerschaum.utils.misc import string_to_dict
18
18
  from meerschaum.utils.packages import attempt_import, import_dcc, import_html, import_pandas
19
19
  from meerschaum.utils.sql import get_pd_type
20
20
  from meerschaum.utils.yaml import yaml
21
+ from meerschaum.utils.warnings import warn
21
22
  from meerschaum.utils.dataframe import to_json
22
23
  from meerschaum.connectors.sql._fetch import get_pipe_query
23
24
  from meerschaum.api import CHECK_UPDATE
@@ -49,7 +50,7 @@ def pipe_from_ctx(ctx, trigger_property: str = 'n_clicks') -> Union[mrsm.Pipe, N
49
50
  ### Because Dash JSON-ifies the ID dictionary and we are including a JSON-ified dictionary,
50
51
  ### we have to do some crazy parsing to get the pipe's meta-dict back out of it
51
52
  meta = json.loads(json.loads(ctx[0]['prop_id'].split('.' + trigger_property)[0])['index'])
52
- except Exception as e:
53
+ except Exception:
53
54
  meta = None
54
55
  if meta is None:
55
56
  return None
@@ -115,6 +116,7 @@ def build_pipe_card(
115
116
  pipe: mrsm.Pipe,
116
117
  authenticated: bool = False,
117
118
  include_manage: bool = True,
119
+ _build_parents_num: int = 10,
118
120
  _build_children_num: int = 10,
119
121
  ) -> 'dbc.Card':
120
122
  """
@@ -220,6 +222,7 @@ def build_pipe_card(
220
222
  accordion_items_from_pipe(
221
223
  pipe,
222
224
  authenticated=authenticated,
225
+ _build_parents_num=_build_parents_num,
223
226
  _build_children_num=_build_children_num,
224
227
  ),
225
228
  flush=True,
@@ -235,7 +238,7 @@ def build_pipe_card(
235
238
  if pipe.instance_keys != default_instance:
236
239
  query_params['instance'] = pipe.instance_keys
237
240
  pipe_url = (
238
- f"/dash/pipes/"
241
+ "/dash/pipes/"
239
242
  + f"{pipe.connector_keys}/"
240
243
  + f"{pipe.metric_key}/"
241
244
  + (f"{pipe.location_key}" if pipe.location_key is not None else '')
@@ -322,6 +325,7 @@ def accordion_items_from_pipe(
322
325
  pipe: mrsm.Pipe,
323
326
  active_items: Optional[List[str]] = None,
324
327
  authenticated: bool = False,
328
+ _build_parents_num: int = 10,
325
329
  _build_children_num: int = 10,
326
330
  ) -> 'List[dbc.AccordionItem]':
327
331
  """
@@ -494,7 +498,7 @@ def accordion_items_from_pipe(
494
498
  else None
495
499
  )
496
500
  rowcount = pipe.get_rowcount(debug=debug)
497
- except Exception as e:
501
+ except Exception:
498
502
  oldest_time = None
499
503
  newest_time = None
500
504
  interval = None
@@ -532,44 +536,44 @@ def accordion_items_from_pipe(
532
536
  ]
533
537
  columns_body = [html.Tbody(columns_rows)]
534
538
  columns_table = dbc.Table(columns_header + columns_body, bordered=False, hover=True)
535
- except Exception as e:
539
+ except Exception:
536
540
  columns_table = html.P("Could not retrieve columns ― please try again.")
537
541
  items_bodies['columns'] = columns_table
538
542
 
539
543
  if 'parameters' in active_items:
540
544
  parameters_editor = dash_ace.DashAceEditor(
541
- value = yaml.dump(pipe.parameters),
542
- mode = 'norm',
543
- tabSize = 4,
544
- theme = 'twilight',
545
- id = {'type': 'parameters-editor', 'index': json.dumps(pipe.meta)},
546
- width = '100%',
547
- height = '500px',
548
- readOnly = False,
549
- showGutter = True,
550
- showPrintMargin = True,
551
- highlightActiveLine = True,
552
- wrapEnabled = True,
553
- style = {'min-height': '120px'},
545
+ value=yaml.dump(pipe.parameters),
546
+ mode='norm',
547
+ tabSize=4,
548
+ theme='twilight',
549
+ id={'type': 'parameters-editor', 'index': json.dumps(pipe.meta)},
550
+ width='100%',
551
+ height='500px',
552
+ readOnly=False,
553
+ showGutter=True,
554
+ showPrintMargin=True,
555
+ highlightActiveLine=True,
556
+ wrapEnabled=True,
557
+ style={'min-height': '120px'},
554
558
  )
555
559
  update_parameters_button = dbc.Button(
556
560
  "Update",
557
- id = {'type': 'update-parameters-button', 'index': json.dumps(pipe.meta)},
561
+ id={'type': 'update-parameters-button', 'index': json.dumps(pipe.meta)},
558
562
  )
559
563
 
560
564
  as_yaml_button = dbc.Button(
561
565
  "YAML",
562
- id = {'type': 'parameters-as-yaml-button', 'index': json.dumps(pipe.meta)},
563
- color = 'link',
564
- size = 'sm',
565
- style = {'text-decoration': 'none'},
566
+ id={'type': 'parameters-as-yaml-button', 'index': json.dumps(pipe.meta)},
567
+ color='link',
568
+ size='sm',
569
+ style={'text-decoration': 'none'},
566
570
  )
567
571
  as_json_button = dbc.Button(
568
572
  "JSON",
569
- id = {'type': 'parameters-as-json-button', 'index': json.dumps(pipe.meta)},
570
- color = 'link',
571
- size = 'sm',
572
- style = {'text-decoration': 'none', 'margin-left': '10px'},
573
+ id={'type': 'parameters-as-json-button', 'index': json.dumps(pipe.meta)},
574
+ color='link',
575
+ size='sm',
576
+ style={'text-decoration': 'none', 'margin-left': '10px'},
573
577
  )
574
578
  parameters_div_children = [
575
579
  parameters_editor,
@@ -593,6 +597,20 @@ def accordion_items_from_pipe(
593
597
  )
594
598
  ]),
595
599
  ]
600
+
601
+ if _build_parents_num > 0 and pipe.parents:
602
+ parents_cards = [
603
+ build_pipe_card(
604
+ parent_pipe,
605
+ authenticated = authenticated,
606
+ _build_parents_num = (_build_parents_num - 1),
607
+ )
608
+ for parent_pipe in pipe.parents
609
+ ]
610
+ parents_grid = build_cards_grid(parents_cards, num_columns=1)
611
+ parents_div_items = [html.Br(), html.H3('Parent Pipes'), html.Br(), parents_grid]
612
+ parameters_div_children.extend([html.Br()] + parents_div_items)
613
+
596
614
  if _build_children_num > 0 and pipe.children:
597
615
  children_cards = [
598
616
  build_pipe_card(
@@ -603,31 +621,31 @@ def accordion_items_from_pipe(
603
621
  for child_pipe in pipe.children
604
622
  ]
605
623
  children_grid = build_cards_grid(children_cards, num_columns=1)
606
- chidren_div_items = [html.Br(), html.H3('Children Pipes'), html.Br(), children_grid]
607
- parameters_div_children.extend([html.Br()] + chidren_div_items)
624
+ children_div_items = [html.Br(), html.H3('Children Pipes'), html.Br(), children_grid]
625
+ parameters_div_children.extend([html.Br()] + children_div_items)
608
626
 
609
627
  items_bodies['parameters'] = html.Div(parameters_div_children)
610
628
 
611
629
  if 'sql' in active_items:
612
630
  query = dedent((get_pipe_query(pipe, warn=False) or "")).lstrip().rstrip()
613
631
  sql_editor = dash_ace.DashAceEditor(
614
- value = query,
615
- mode = 'sql',
616
- tabSize = 4,
617
- theme = 'twilight',
618
- id = {'type': 'sql-editor', 'index': json.dumps(pipe.meta)},
619
- width = '100%',
620
- height = '500px',
621
- readOnly = False,
622
- showGutter = True,
623
- showPrintMargin = False,
624
- highlightActiveLine = True,
625
- wrapEnabled = True,
626
- style = {'min-height': '120px'},
632
+ value=query,
633
+ mode='sql',
634
+ tabSize=4,
635
+ theme='twilight',
636
+ id={'type': 'sql-editor', 'index': json.dumps(pipe.meta)},
637
+ width='100%',
638
+ height='500px',
639
+ readOnly=False,
640
+ showGutter=True,
641
+ showPrintMargin=False,
642
+ highlightActiveLine=True,
643
+ wrapEnabled=True,
644
+ style={'min-height': '120px'},
627
645
  )
628
646
  update_sql_button = dbc.Button(
629
647
  "Update",
630
- id = {'type': 'update-sql-button', 'index': json.dumps(pipe.meta)},
648
+ id={'type': 'update-sql-button', 'index': json.dumps(pipe.meta)},
631
649
  )
632
650
  items_bodies['sql'] = html.Div([
633
651
  sql_editor,
@@ -648,7 +666,7 @@ def accordion_items_from_pipe(
648
666
  try:
649
667
  df = pipe.get_backtrack_data(backtrack_minutes=10, limit=10, debug=debug).astype(str)
650
668
  table = dbc.Table.from_dataframe(df, bordered=False, hover=True)
651
- except Exception as e:
669
+ except Exception:
652
670
  table = html.P("Could not retrieve recent data.")
653
671
  items_bodies['recent-data'] = table
654
672
 
@@ -10,10 +10,17 @@ from __future__ import annotations
10
10
 
11
11
  from meerschaum.utils.typing import SuccessTuple, List, Dict, Any
12
12
  from meerschaum.api import (
13
- fastapi, app, endpoints, get_api_connector, debug, manager, private, no_auth
13
+ fastapi,
14
+ app,
15
+ endpoints,
16
+ get_api_connector,
17
+ debug,
18
+ manager,
19
+ private,
20
+ no_auth,
14
21
  )
15
22
  from meerschaum.actions import actions
16
- from meerschaum.config import get_config
23
+ from meerschaum.core.User import is_user_allowed_to_execute
17
24
 
18
25
  actions_endpoint = endpoints['actions']
19
26
 
@@ -53,19 +60,9 @@ def do_action_legacy(
53
60
  -------
54
61
  A `SuccessTuple`.
55
62
  """
56
- if curr_user is not None and curr_user.type != 'admin':
57
- allow_non_admin = get_config(
58
- 'system', 'api', 'permissions', 'actions', 'non_admin', patch=True
59
- )
60
- if not allow_non_admin:
61
- return False, (
62
- "The administrator for this server has not allowed users to perform actions.\n\n"
63
- + "Please contact the system administrator, or if you are running this server, "
64
- + "open the configuration file with `edit config system` "
65
- + "and search for 'permissions'. "
66
- + "\nUnder the keys 'api:permissions:actions', "
67
- + "you can allow non-admin users to perform actions."
68
- )
63
+ allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user, debug=debug)
64
+ if not allowed_success:
65
+ return allowed_success, allowed_msg
69
66
 
70
67
  if action not in actions:
71
68
  return False, f"Invalid action '{action}'."
@@ -30,6 +30,7 @@ from meerschaum.api import (
30
30
  endpoints,
31
31
  manager,
32
32
  no_auth,
33
+ debug,
33
34
  )
34
35
  from meerschaum.config.static import STATIC_CONFIG
35
36
  from meerschaum.core.User import is_user_allowed_to_execute
@@ -143,7 +144,7 @@ def create_job(
143
144
  """
144
145
  Create and start a new job.
145
146
  """
146
- allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user)
147
+ allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user, debug=debug)
147
148
  if not allowed_success:
148
149
  return allowed_success, allowed_msg
149
150
 
@@ -178,7 +179,7 @@ def delete_job(
178
179
  """
179
180
  Delete a job.
180
181
  """
181
- allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user)
182
+ allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user, debug=debug)
182
183
  if not allowed_success:
183
184
  return allowed_success, allowed_msg
184
185
  job = _get_job(name)
@@ -230,7 +231,7 @@ def start_job(
230
231
  """
231
232
  Start a job if stopped.
232
233
  """
233
- allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user)
234
+ allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user, debug=debug)
234
235
  if not allowed_success:
235
236
  return allowed_success, allowed_msg
236
237
 
@@ -253,7 +254,7 @@ def stop_job(
253
254
  """
254
255
  Stop a job if running.
255
256
  """
256
- allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user)
257
+ allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user, debug=debug)
257
258
  if not allowed_success:
258
259
  return allowed_success, allowed_msg
259
260
 
@@ -276,7 +277,7 @@ def pause_job(
276
277
  """
277
278
  Pause a job if running.
278
279
  """
279
- allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user)
280
+ allowed_success, allowed_msg = is_user_allowed_to_execute(curr_user, debug=debug)
280
281
  if not allowed_success:
281
282
  return allowed_success, allowed_msg
282
283
 
@@ -7,24 +7,24 @@ Manage access and refresh tokens.
7
7
  """
8
8
 
9
9
  from datetime import datetime, timedelta, timezone
10
+
10
11
  import fastapi
11
12
  from fastapi import Request, status
12
13
  from fastapi_login.exceptions import InvalidCredentialsException
13
14
  from fastapi.exceptions import RequestValidationError
14
- from starlette.responses import Response, JSONResponse
15
+ from starlette.responses import JSONResponse
16
+
15
17
  from meerschaum.api import endpoints, get_api_connector, app, debug, manager, no_auth
16
18
  from meerschaum.core import User
17
19
  from meerschaum.config.static import STATIC_CONFIG
18
- from meerschaum.utils.typing import Dict, Any, Optional
20
+ from meerschaum.utils.typing import Dict, Any
19
21
  from meerschaum.core.User._User import verify_password
20
22
  from meerschaum.utils.warnings import warn
21
23
  from meerschaum.api._oauth2 import CustomOAuth2PasswordRequestForm
22
24
 
23
25
 
24
26
  @manager.user_loader()
25
- def load_user(
26
- username: str
27
- ) -> User:
27
+ def load_user(username: str) -> User:
28
28
  """
29
29
  Create the `meerschaum.core.User` object from the username.
30
30
  """
@@ -56,8 +56,8 @@ def login(
56
56
  expires_delta = timedelta(minutes=expires_minutes)
57
57
  expires_dt = datetime.now(timezone.utc).replace(tzinfo=None) + expires_delta
58
58
  access_token = manager.create_access_token(
59
- data = {'sub': username},
60
- expires = expires_delta
59
+ data={'sub': username},
60
+ expires=expires_delta
61
61
  )
62
62
  return {
63
63
  'access_token': access_token,
@@ -73,6 +73,6 @@ async def validation_exception_handler(request: Request, exc: RequestValidationE
73
73
  """
74
74
  warn(f"Validation error: {exc.errors()}", stack=False)
75
75
  return JSONResponse(
76
- status_code = status.HTTP_422_UNPROCESSABLE_ENTITY,
77
- content = {"detail": exc.errors()},
76
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
77
+ content={"detail": exc.errors()},
78
78
  )
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.6.12"
5
+ __version__ = "2.6.13"
@@ -11,6 +11,8 @@ import os
11
11
  import hashlib
12
12
  import hmac
13
13
  from binascii import b2a_base64, a2b_base64, Error as _BinAsciiError
14
+
15
+ import meerschaum as mrsm
14
16
  from meerschaum.utils.typing import Optional, Dict, Any, Union
15
17
  from meerschaum.config.static import STATIC_CONFIG
16
18
  from meerschaum.utils.warnings import warn
@@ -18,6 +20,7 @@ from meerschaum.utils.warnings import warn
18
20
 
19
21
  __all__ = ('hash_password', 'verify_password', 'User')
20
22
 
23
+
21
24
  def hash_password(
22
25
  password: str,
23
26
  salt: Optional[bytes] = None,
@@ -113,9 +116,11 @@ _BASE64_STRIP = b"=\n"
113
116
  _BASE64_PAD1 = b"="
114
117
  _BASE64_PAD2 = b"=="
115
118
 
119
+
116
120
  def ab64_encode(data):
117
121
  return b64s_encode(data).replace(b"+", b".")
118
122
 
123
+
119
124
  def ab64_decode(data):
120
125
  """
121
126
  decode from shortened base64 format which omits padding & whitespace.
@@ -133,6 +138,7 @@ def ab64_decode(data):
133
138
  def b64s_encode(data):
134
139
  return b2a_base64(data).rstrip(_BASE64_STRIP)
135
140
 
141
+
136
142
  def b64s_decode(data):
137
143
  """
138
144
  decode from shortened base64 format which omits padding & whitespace.
@@ -222,5 +228,6 @@ class User:
222
228
  _password_hash = self.__dict__.get('_password_hash', None)
223
229
  if _password_hash is not None:
224
230
  return _password_hash
231
+
225
232
  self._password_hash = hash_password(self.password)
226
233
  return self._password_hash
@@ -12,28 +12,27 @@ import meerschaum as mrsm
12
12
  from meerschaum.core.User._User import User, hash_password, verify_password
13
13
 
14
14
 
15
- def is_user_allowed_to_execute(user: Optional[User]) -> mrsm.SuccessTuple:
15
+ def is_user_allowed_to_execute(
16
+ user: Optional[User],
17
+ debug: bool = False,
18
+ ) -> mrsm.SuccessTuple:
16
19
  """
17
20
  Return a `SuccessTuple` indicating whether a given user is allowed to execute actions.
18
21
  """
22
+ print(f"{debug=}")
23
+ print(f"{user=}")
19
24
  if user is None:
20
25
  return True, "Success"
21
26
 
22
- if user.type == 'admin':
27
+ user_type = user.instance_connector.get_user_type(user, debug=debug)
28
+
29
+ if user_type == 'admin':
23
30
  return True, "Success"
24
31
 
25
32
  from meerschaum.config import get_config
26
33
 
27
34
  allow_non_admin = get_config('system', 'api', 'permissions', 'actions', 'non_admin')
28
35
  if not allow_non_admin:
29
- return False, (
30
- "The administrator for this server has not allowed users to perform actions.\n\n"
31
- + "Please contact the system administrator, or if you are running this server, "
32
- + "open the configuration file with `edit config system` "
33
- + "and search for 'permissions'. "
34
- + "\nUnder the keys 'api:permissions:actions', "
35
- + "you can allow non-admin users to perform actions."
36
- )
36
+ return False, "The administrator for this server has not allowed users to perform actions."
37
37
 
38
38
  return True, "Success"
39
-
@@ -315,7 +315,13 @@ class Daemon:
315
315
  with open(self.pid_path, 'w+', encoding='utf-8') as f:
316
316
  f.write(str(os.getpid()))
317
317
 
318
- self._log_refresh_timer.start()
318
+ ### NOTE: The timer fails to start for remote actions to localhost.
319
+ try:
320
+ if not self._log_refresh_timer.is_running():
321
+ self._log_refresh_timer.start()
322
+ except Exception:
323
+ pass
324
+
319
325
  self.properties['result'] = None
320
326
  self._capture_process_timestamp('began')
321
327
  result = self.target(*self.target_args, **self.target_kw)
@@ -345,7 +351,7 @@ class Daemon:
345
351
  except BrokenPipeError:
346
352
  pass
347
353
 
348
- except Exception as e:
354
+ except Exception:
349
355
  daemon_error = traceback.format_exc()
350
356
  with open(DAEMON_ERROR_LOG_PATH, 'a+', encoding='utf-8') as f:
351
357
  f.write(daemon_error)
@@ -152,6 +152,7 @@ packages['dash'] = {
152
152
  'dash_bootstrap_components' : 'dash-bootstrap-components>=1.2.1',
153
153
  'dash_ace' : 'dash-ace>=0.2.1',
154
154
  'dash_extensions' : 'dash-extensions>=1.0.4',
155
+ 'dataclass_wizard' : 'dataclass-wizard>=0.28.0',
155
156
  'dash_daq' : 'dash-daq>=0.5.0',
156
157
  'terminado' : 'terminado>=0.12.1',
157
158
  'tornado' : 'tornado>=6.1.0',
@@ -10,7 +10,6 @@ from __future__ import annotations
10
10
  from meerschaum.utils.typing import Optional
11
11
 
12
12
  import threading
13
- import traceback
14
13
  Lock = threading.Lock
15
14
  RLock = threading.RLock
16
15
  Event = threading.Event
@@ -67,8 +66,8 @@ class Worker(threading.Thread):
67
66
  def run(self):
68
67
  while True:
69
68
  try:
70
- item = self.queue.get(timeout=self.timeout)
71
- except queue.Empty:
69
+ _ = self.queue.get(timeout=self.timeout)
70
+ except self.queue.Empty:
72
71
  return None
73
72
 
74
73
  self.queue.task_done()
@@ -79,9 +78,21 @@ class RepeatTimer(Timer):
79
78
  Fire the timer's target function in a loop, every `interval` seconds.
80
79
  """
81
80
 
81
+ def __init__(self, *args, **kwargs):
82
+ super().__init__(*args, **kwargs)
83
+ self._is_running = False
84
+
85
+ def is_running(self) -> bool:
86
+ """
87
+ Return whether this timer has been started and is running.
88
+ """
89
+ return self._is_running
90
+
82
91
  def run(self) -> None:
83
92
  """
84
93
  Fire the target function in a loop.
85
94
  """
95
+ self._is_running = True
86
96
  while not self.finished.wait(self.interval):
87
97
  self.function(*self.args, **self.kwargs)
98
+ self._is_running = False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.6.12
3
+ Version: 2.6.13
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -20,11 +20,11 @@ Classifier: Operating System :: POSIX :: Linux
20
20
  Classifier: Operating System :: Microsoft :: Windows
21
21
  Classifier: Operating System :: MacOS
22
22
  Classifier: Programming Language :: SQL
23
- Classifier: Programming Language :: Python :: 3.8
24
23
  Classifier: Programming Language :: Python :: 3.9
25
24
  Classifier: Programming Language :: Python :: 3.10
26
25
  Classifier: Programming Language :: Python :: 3.11
27
26
  Classifier: Programming Language :: Python :: 3.12
27
+ Classifier: Programming Language :: Python :: 3.13
28
28
  Classifier: Topic :: Database
29
29
  Classifier: Natural Language :: English
30
30
  Requires-Python: >=3.8
@@ -170,6 +170,7 @@ Requires-Dist: dash>=2.6.2; extra == "dash"
170
170
  Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "dash"
171
171
  Requires-Dist: dash-ace>=0.2.1; extra == "dash"
172
172
  Requires-Dist: dash-extensions>=1.0.4; extra == "dash"
173
+ Requires-Dist: dataclass-wizard>=0.28.0; extra == "dash"
173
174
  Requires-Dist: dash-daq>=0.5.0; extra == "dash"
174
175
  Requires-Dist: terminado>=0.12.1; extra == "dash"
175
176
  Requires-Dist: tornado>=6.1.0; extra == "dash"
@@ -237,6 +238,7 @@ Requires-Dist: dash>=2.6.2; extra == "api"
237
238
  Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "api"
238
239
  Requires-Dist: dash-ace>=0.2.1; extra == "api"
239
240
  Requires-Dist: dash-extensions>=1.0.4; extra == "api"
241
+ Requires-Dist: dataclass-wizard>=0.28.0; extra == "api"
240
242
  Requires-Dist: dash-daq>=0.5.0; extra == "api"
241
243
  Requires-Dist: terminado>=0.12.1; extra == "api"
242
244
  Requires-Dist: tornado>=6.1.0; extra == "api"
@@ -305,6 +307,7 @@ Requires-Dist: dash>=2.6.2; extra == "full"
305
307
  Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "full"
306
308
  Requires-Dist: dash-ace>=0.2.1; extra == "full"
307
309
  Requires-Dist: dash-extensions>=1.0.4; extra == "full"
310
+ Requires-Dist: dataclass-wizard>=0.28.0; extra == "full"
308
311
  Requires-Dist: dash-daq>=0.5.0; extra == "full"
309
312
  Requires-Dist: terminado>=0.12.1; extra == "full"
310
313
  Requires-Dist: tornado>=6.1.0; extra == "full"