meerschaum 3.0.0rc3__tar.gz → 3.0.0rc4__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 (291) hide show
  1. {meerschaum-3.0.0rc3/meerschaum.egg-info → meerschaum-3.0.0rc4}/PKG-INFO +1 -1
  2. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/_events.py +5 -0
  3. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/dashboard.py +74 -97
  4. meerschaum-3.0.0rc4/meerschaum/api/dash/callbacks/pipes.py +235 -0
  5. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/tokens.py +2 -1
  6. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/components.py +6 -7
  7. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/keys.py +17 -1
  8. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/pipes.py +14 -4
  9. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pipes.py +114 -29
  10. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/tokens.py +1 -1
  11. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_version.py +1 -1
  12. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_pipes.py +10 -5
  13. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/tables/__init__.py +20 -3
  14. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/__init__.py +17 -1
  15. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/_get_pipes.py +30 -4
  16. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/formatting/_pprint.py +1 -0
  17. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/pipes.py +6 -2
  18. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4/meerschaum.egg-info}/PKG-INFO +1 -1
  19. meerschaum-3.0.0rc3/meerschaum/api/dash/callbacks/pipes.py +0 -156
  20. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/LICENSE +0 -0
  21. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/MANIFEST.in +0 -0
  22. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/NOTICE +0 -0
  23. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/README.md +0 -0
  24. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/__init__.py +0 -0
  25. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/__main__.py +0 -0
  26. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/__init__.py +0 -0
  27. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/arguments/__init__.py +0 -0
  28. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
  29. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/arguments/_parser.py +0 -0
  30. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/docs/__init__.py +0 -0
  31. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/docs/index.py +0 -0
  32. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/entry.py +0 -0
  33. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/shell/Shell.py +0 -0
  34. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
  35. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
  36. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/shell/__init__.py +0 -0
  37. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/shell/resources/__init__.py +0 -0
  38. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/shell/updates.py +0 -0
  39. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/static.py +0 -0
  40. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/term/TermPageHandler.py +0 -0
  41. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/term/__init__.py +0 -0
  42. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/_internal/term/tools.py +0 -0
  43. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/__init__.py +0 -0
  44. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/api.py +0 -0
  45. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/attach.py +0 -0
  46. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/bootstrap.py +0 -0
  47. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/clear.py +0 -0
  48. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/copy.py +0 -0
  49. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/deduplicate.py +0 -0
  50. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/delete.py +0 -0
  51. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/drop.py +0 -0
  52. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/edit.py +0 -0
  53. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/index.py +0 -0
  54. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/install.py +0 -0
  55. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/login.py +0 -0
  56. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/os.py +0 -0
  57. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/pause.py +0 -0
  58. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/python.py +0 -0
  59. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/register.py +0 -0
  60. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/reload.py +0 -0
  61. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/restart.py +0 -0
  62. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/setup.py +0 -0
  63. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/sh.py +0 -0
  64. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/show.py +0 -0
  65. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/sql.py +0 -0
  66. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/stack.py +0 -0
  67. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/start.py +0 -0
  68. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/stop.py +0 -0
  69. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/sync.py +0 -0
  70. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/tag.py +0 -0
  71. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/uninstall.py +0 -0
  72. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/upgrade.py +0 -0
  73. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/actions/verify.py +0 -0
  74. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/__init__.py +0 -0
  75. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/_chain.py +0 -0
  76. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/_chunks.py +0 -0
  77. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/_exceptions.py +0 -0
  78. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/_oauth2.py +0 -0
  79. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/_tokens.py +0 -0
  80. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/_websockets.py +0 -0
  81. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/__init__.py +0 -0
  82. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/assets/__init__.py +0 -0
  83. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/assets/ansi_up.js +0 -0
  84. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
  85. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/assets/favicon.ico +0 -0
  86. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
  87. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
  88. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/__init__.py +0 -0
  89. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/custom.py +0 -0
  90. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/jobs.py +0 -0
  91. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/login.py +0 -0
  92. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/plugins.py +0 -0
  93. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/register.py +0 -0
  94. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/settings/__init__.py +0 -0
  95. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/callbacks/settings/password_reset.py +0 -0
  96. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/connectors.py +0 -0
  97. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/graphs.py +0 -0
  98. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/jobs.py +0 -0
  99. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/__init__.py +0 -0
  100. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/dashboard.py +0 -0
  101. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/error.py +0 -0
  102. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/jobs.py +0 -0
  103. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/login.py +0 -0
  104. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/plugins.py +0 -0
  105. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/register.py +0 -0
  106. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/settings/__init__.py +0 -0
  107. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/settings/password_reset.py +0 -0
  108. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/pages/tokens.py +0 -0
  109. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/plugins.py +0 -0
  110. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/sessions.py +0 -0
  111. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/sync.py +0 -0
  112. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/users.py +0 -0
  113. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/websockets.py +0 -0
  114. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/dash/webterm.py +0 -0
  115. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/models/__init__.py +0 -0
  116. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/models/_actions.py +0 -0
  117. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/models/_pipes.py +0 -0
  118. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/models/_tokens.py +0 -0
  119. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/__init__.py +0 -0
  120. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/__init__.py +0 -0
  121. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/css/__init__.py +0 -0
  122. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
  123. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/css/dash.css +0 -0
  124. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
  125. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/css/styles.css +0 -0
  126. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/css/xterm.css +0 -0
  127. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/ico/__init__.py +0 -0
  128. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/ico/logo.ico +0 -0
  129. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/js/__init__.py +0 -0
  130. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/js/action_button.js +0 -0
  131. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/js/main.js +0 -0
  132. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/js/terminado.js +0 -0
  133. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/js/xterm.js +0 -0
  134. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/static/png/__init__.py +0 -0
  135. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/templates/__init__.py +0 -0
  136. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/templates/index.html +0 -0
  137. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/templates/old_index.html +0 -0
  138. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/templates/secret.html +0 -0
  139. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/resources/templates/termpage.html +0 -0
  140. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/__init__.py +0 -0
  141. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_actions.py +0 -0
  142. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_connectors.py +0 -0
  143. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_index.py +0 -0
  144. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_jobs.py +0 -0
  145. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_login.py +0 -0
  146. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_misc.py +0 -0
  147. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_pipes.py +0 -0
  148. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_plugins.py +0 -0
  149. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_tokens.py +0 -0
  150. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_users.py +0 -0
  151. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_version.py +0 -0
  152. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/routes/_webterm.py +0 -0
  153. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/api/tables/__init__.py +0 -0
  154. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/__init__.py +0 -0
  155. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_dash.py +0 -0
  156. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_default.py +0 -0
  157. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_edit.py +0 -0
  158. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_environment.py +0 -0
  159. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_formatting.py +0 -0
  160. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_jobs.py +0 -0
  161. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_patch.py +0 -0
  162. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_paths.py +0 -0
  163. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_preprocess.py +0 -0
  164. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_read_config.py +0 -0
  165. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_shell.py +0 -0
  166. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/_sync.py +0 -0
  167. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/paths.py +0 -0
  168. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/resources/__init__.py +0 -0
  169. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/stack/__init__.py +0 -0
  170. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/stack/grafana/__init__.py +0 -0
  171. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
  172. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
  173. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/stack/resources/__init__.py +0 -0
  174. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/config/static.py +0 -0
  175. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/_Connector.py +0 -0
  176. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/__init__.py +0 -0
  177. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_APIConnector.py +0 -0
  178. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/__init__.py +0 -0
  179. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_actions.py +0 -0
  180. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_fetch.py +0 -0
  181. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_jobs.py +0 -0
  182. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_login.py +0 -0
  183. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_misc.py +0 -0
  184. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_pipes.py +0 -0
  185. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_plugins.py +0 -0
  186. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_request.py +0 -0
  187. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_tokens.py +0 -0
  188. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_uri.py +0 -0
  189. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/api/_users.py +0 -0
  190. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/instance/_InstanceConnector.py +0 -0
  191. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/instance/__init__.py +0 -0
  192. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/instance/_pipes.py +0 -0
  193. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/instance/_plugins.py +0 -0
  194. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/instance/_tokens.py +0 -0
  195. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/instance/_users.py +0 -0
  196. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/parse.py +0 -0
  197. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
  198. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/plugin/__init__.py +0 -0
  199. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/poll.py +0 -0
  200. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_SQLConnector.py +0 -0
  201. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/__init__.py +0 -0
  202. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_cli.py +0 -0
  203. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_create_engine.py +0 -0
  204. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_fetch.py +0 -0
  205. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_instance.py +0 -0
  206. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_plugins.py +0 -0
  207. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_sql.py +0 -0
  208. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_uri.py +0 -0
  209. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/_users.py +0 -0
  210. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/tables/types.py +0 -0
  211. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/sql/tools.py +0 -0
  212. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/valkey/_ValkeyConnector.py +0 -0
  213. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/valkey/__init__.py +0 -0
  214. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/valkey/_fetch.py +0 -0
  215. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/valkey/_pipes.py +0 -0
  216. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/valkey/_plugins.py +0 -0
  217. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/connectors/valkey/_users.py +0 -0
  218. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_attributes.py +0 -0
  219. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_bootstrap.py +0 -0
  220. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_clear.py +0 -0
  221. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_copy.py +0 -0
  222. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_data.py +0 -0
  223. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_deduplicate.py +0 -0
  224. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_delete.py +0 -0
  225. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_drop.py +0 -0
  226. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_dtypes.py +0 -0
  227. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_edit.py +0 -0
  228. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_fetch.py +0 -0
  229. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_index.py +0 -0
  230. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_register.py +0 -0
  231. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_show.py +0 -0
  232. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_sync.py +0 -0
  233. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Pipe/_verify.py +0 -0
  234. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Plugin/_Plugin.py +0 -0
  235. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Plugin/__init__.py +0 -0
  236. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Token/_Token.py +0 -0
  237. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/Token/__init__.py +0 -0
  238. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/User/_User.py +0 -0
  239. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/User/__init__.py +0 -0
  240. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/core/__init__.py +0 -0
  241. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/jobs/_Executor.py +0 -0
  242. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/jobs/_Job.py +0 -0
  243. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/jobs/__init__.py +0 -0
  244. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/jobs/systemd.py +0 -0
  245. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/models/__init__.py +0 -0
  246. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/models/pipes.py +0 -0
  247. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/models/tokens.py +0 -0
  248. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/models/users.py +0 -0
  249. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/plugins/__init__.py +0 -0
  250. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/plugins/bootstrap.py +0 -0
  251. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/__init__.py +0 -0
  252. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/daemon/Daemon.py +0 -0
  253. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/daemon/FileDescriptorInterceptor.py +0 -0
  254. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/daemon/RotatingFile.py +0 -0
  255. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/daemon/StdinFile.py +0 -0
  256. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/daemon/__init__.py +0 -0
  257. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/daemon/_names.py +0 -0
  258. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/dataframe.py +0 -0
  259. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/debug.py +0 -0
  260. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/dtypes/__init__.py +0 -0
  261. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/dtypes/sql.py +0 -0
  262. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/formatting/__init__.py +0 -0
  263. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/formatting/_jobs.py +0 -0
  264. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/formatting/_pipes.py +0 -0
  265. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/formatting/_shell.py +0 -0
  266. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/interactive.py +0 -0
  267. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/misc.py +0 -0
  268. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/networking.py +0 -0
  269. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/packages/__init__.py +0 -0
  270. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/packages/_packages.py +0 -0
  271. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/packages/lazy_loader.py +0 -0
  272. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/pool.py +0 -0
  273. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/process.py +0 -0
  274. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/prompt.py +0 -0
  275. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/schedule.py +0 -0
  276. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/sql.py +0 -0
  277. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/threading.py +0 -0
  278. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/typing.py +0 -0
  279. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/venv/_Venv.py +0 -0
  280. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/venv/__init__.py +0 -0
  281. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/warnings.py +0 -0
  282. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum/utils/yaml.py +0 -0
  283. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum.egg-info/SOURCES.txt +0 -0
  284. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum.egg-info/dependency_links.txt +0 -0
  285. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum.egg-info/entry_points.txt +0 -0
  286. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum.egg-info/requires.txt +0 -0
  287. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum.egg-info/top_level.txt +0 -0
  288. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/meerschaum.egg-info/zip-safe +0 -0
  289. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/pyproject.toml +0 -0
  290. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/setup.cfg +0 -0
  291. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meerschaum
3
- Version: 3.0.0rc3
3
+ Version: 3.0.0rc4
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Author-email: Bennett Meares <bennett.meares@gmail.com>
6
6
  Maintainer-email: Bennett Meares <bennett.meares@gmail.com>
@@ -98,6 +98,11 @@ async def startup():
98
98
  await shutdown()
99
99
  os._exit(1)
100
100
 
101
+ conn = get_api_connector()
102
+ if conn.type == 'sql':
103
+ from meerschaum.connectors.sql.tables import get_tables
104
+ _ = get_tables(conn, refresh=True, create=True, debug=debug)
105
+
101
106
  start_check_jobs_thread()
102
107
 
103
108
 
@@ -498,13 +498,9 @@ def update_flags(input_flags_dropdown_values, n_clicks, input_flags_texts):
498
498
 
499
499
  @dash_app.callback(
500
500
  Output('connector-keys-dropdown', 'options'),
501
- Output('connector-keys-dropdown', 'value'),
502
501
  Output('metric-keys-dropdown', 'options'),
503
- Output('metric-keys-dropdown', 'value'),
504
502
  Output('location-keys-dropdown', 'options'),
505
- Output('location-keys-dropdown', 'value'),
506
503
  Output('tags-dropdown', 'options'),
507
- Output('tags-dropdown', 'value'),
508
504
  Output('instance-select', 'value'),
509
505
  Output('instance-alert-div', 'children'),
510
506
  Input('connector-keys-dropdown', 'value'),
@@ -546,15 +542,6 @@ def update_keys_options(
546
542
  except Exception as e:
547
543
  instance_alerts += [alert_from_success_tuple((False, str(e)))]
548
544
 
549
- ### Update the keys filters.
550
- if connector_keys is None:
551
- connector_keys = []
552
- if metric_keys is None:
553
- metric_keys = []
554
- if location_keys is None:
555
- location_keys = []
556
- if tags is None:
557
- tags = []
558
545
  num_filter = 0
559
546
  if connector_keys:
560
547
  num_filter += 1
@@ -565,10 +552,6 @@ def update_keys_options(
565
552
  if tags:
566
553
  num_filter += 1
567
554
 
568
- _ck_filter = connector_keys
569
- _mk_filter = metric_keys
570
- _lk_filter = location_keys
571
- _tags_filter = tags
572
555
  _ck_alone = (connector_keys and num_filter == 1) or instance_click
573
556
  _mk_alone = (metric_keys and num_filter == 1) or instance_click
574
557
  _lk_alone = (location_keys and num_filter == 1) or instance_click
@@ -581,101 +564,95 @@ def update_keys_options(
581
564
  _keys = fetch_pipes_keys(
582
565
  'registered',
583
566
  get_web_connector(ctx.states),
584
- connector_keys=_ck_filter,
585
- metric_keys=_mk_filter,
586
- location_keys=_lk_filter,
587
- tags=_tags_filter,
567
+ connector_keys=connector_keys,
568
+ metric_keys=metric_keys,
569
+ location_keys=location_keys,
570
+ tags=tags,
588
571
  )
589
572
  _tags_pipes = mrsm.get_pipes(
590
- connector_keys=_ck_filter,
591
- metric_keys=_mk_filter,
592
- location_keys=_lk_filter,
593
- tags=_tags_filter,
573
+ connector_keys=connector_keys,
574
+ metric_keys=metric_keys,
575
+ location_keys=location_keys,
576
+ tags=tags,
594
577
  instance=get_web_connector(ctx.states),
595
578
  as_tags_dict=True,
596
579
  )
597
580
  _all_tags = list(
598
- mrsm.get_pipes(
599
- instance=get_web_connector(ctx.states),
600
- as_tags_dict=True,
601
- )
581
+ set(
582
+ mrsm.get_pipes(
583
+ instance=get_web_connector(ctx.states),
584
+ as_tags_dict=True,
585
+ )
586
+ ).union(tags or [])
602
587
  ) if _tags_alone else []
603
588
  except Exception as e:
604
589
  instance_alerts += [alert_from_success_tuple((False, str(e)))]
605
- _all_keys, _keys = [], []
606
- _connectors_options = []
607
- _metrics_options = []
608
- _locations_options = []
609
- _tags_options = []
610
-
611
- _seen_keys = {'ck' : set(), 'mk' : set(), 'lk' : set(), 'tags': set()}
612
-
613
- def add_options(options, keys, key_type):
614
- for ck, mk, lk in keys:
615
- k = locals()[key_type]
616
- if k not in _seen_keys[key_type]:
617
- _k = 'None' if k in (None, '[None]', 'None', 'null') else k
618
- options.append({'label': _k, 'value': _k})
619
- _seen_keys[key_type].add(k)
620
-
621
- add_options(_connectors_options, _all_keys if _ck_alone else _keys, 'ck')
622
- add_options(_metrics_options, _all_keys if _mk_alone else _keys, 'mk')
623
- add_options(_locations_options, _all_keys if _lk_alone else _keys, 'lk')
624
-
625
- _tags_options = [
626
- {'label': tag, 'value': tag}
627
- for tag in (_all_tags if _tags_alone else _tags_pipes)
628
- ]
590
+ _all_keys, _all_tags, _keys = [], [], []
591
+
592
+ connectors_options = sorted(
593
+ list(
594
+ set(
595
+ keys_tuple[0] for keys_tuple in (_all_keys if _ck_alone else _keys)
596
+ ).union(set(connector_keys or []))
597
+ ),
598
+ key=(lambda x: str(x).lower()),
599
+ )
600
+ metrics_options = sorted(
601
+ list(
602
+ set(
603
+ keys_tuple[1] for keys_tuple in (_all_keys if _mk_alone else _keys)
604
+ ).union(set(metric_keys or []))
605
+ ),
606
+ key=(lambda x: str(x).lower()),
607
+ )
608
+ locations_options = sorted(
609
+ list(
610
+ set(
611
+ (
612
+ str(keys_tuple[2])
613
+ for keys_tuple in (_all_keys if _lk_alone else _keys)
614
+ )
615
+ ).union(set((str(_lk) for _lk in (location_keys or []))))
616
+ ),
617
+ key=(lambda x: str(x).lower()),
618
+ )
619
+
620
+ tags_options = sorted(
621
+ list(
622
+ set(
623
+ (_all_tags if _tags_alone else _tags_pipes)
624
+ ).union(set(tags or []))
625
+ ),
626
+ key=(lambda x: str(x).lower()),
627
+ )
629
628
 
630
- _connectors_options.sort(key=lambda x: str(x).lower())
631
- _metrics_options.sort(key=lambda x: str(x).lower())
632
- _locations_options.sort(key=lambda x: str(x).lower())
633
- _tags_options.sort(key=lambda x: str(x).lower())
634
- connector_keys = [
635
- ck
636
- for ck in connector_keys
637
- if ck in [
638
- _ck['value']
639
- for _ck in _connectors_options
640
- ]
641
- ]
642
- metric_keys = [
643
- mk
644
- for mk in metric_keys
645
- if mk in [
646
- _mk['value']
647
- for _mk in _metrics_options
648
- ]
649
- ]
650
- location_keys = [
651
- lk
652
- for lk in location_keys
653
- if lk in [
654
- _lk['value']
655
- for _lk in _locations_options
656
- ]
657
- ]
658
- tags = [
659
- tag
660
- for tag in tags
661
- if tag in [
662
- _tag['value']
663
- for _tag in _tags_options
664
- ]
665
- ]
666
629
  return (
667
- _connectors_options,
668
- connector_keys,
669
- _metrics_options,
670
- metric_keys,
671
- _locations_options,
672
- location_keys,
673
- _tags_options,
674
- tags,
630
+ connectors_options,
631
+ metrics_options,
632
+ locations_options,
633
+ tags_options,
675
634
  (instance_keys if update_instance_keys else dash.no_update),
676
635
  instance_alerts,
677
636
  )
678
637
 
638
+
639
+ @dash_app.callback(
640
+ Output('connector-keys-dropdown', 'value'),
641
+ Output('metric-keys-dropdown', 'value'),
642
+ Output('location-keys-dropdown', 'value'),
643
+ Output('tags-dropdown', 'value'),
644
+ Input('clear-all-keys-button', 'n_clicks'),
645
+ prevent_initial_call=True,
646
+ )
647
+ def clear_all_keys_button_click(n_clicks):
648
+ """
649
+ Clear the keys dropdowns when the `Clear all` button is clicked.
650
+ """
651
+ if not n_clicks:
652
+ raise PreventUpdate
653
+
654
+ return [], [], [], []
655
+
679
656
  dash_app.clientside_callback(
680
657
  """
681
658
  function(
@@ -0,0 +1,235 @@
1
+ #! /usr/bin/env python3
2
+ # vim:fenc=utf-8
3
+
4
+ """
5
+ Define callbacks for the `/dash/pipes/` page.
6
+ """
7
+
8
+ from urllib.parse import parse_qs, quote_plus
9
+ from typing import List, Optional, Dict, Any
10
+
11
+ import dash
12
+ from dash.dependencies import Input, Output, State
13
+ from dash import no_update
14
+ from dash.exceptions import PreventUpdate
15
+ import dash_bootstrap_components as dbc
16
+
17
+ import meerschaum as mrsm
18
+ from meerschaum.api.dash import dash_app
19
+ from meerschaum.api.dash.components import (
20
+ alert_from_success_tuple,
21
+ build_cards_grid,
22
+ )
23
+ from meerschaum.api.dash.pipes import (
24
+ build_pipe_card,
25
+ build_pipes_dropdown_keys_row,
26
+ build_pipes_tags_dropdown,
27
+ build_pipes_navbar,
28
+ )
29
+ from meerschaum.api import CHECK_UPDATE, get_api_connector
30
+ from meerschaum.utils.packages import import_html, import_dcc
31
+ from meerschaum.api.dash.sessions import is_session_authenticated
32
+ html, dcc = import_html(check_update=CHECK_UPDATE), import_dcc(check_update=CHECK_UPDATE)
33
+
34
+
35
+ @dash_app.callback(
36
+ Output('pipes-navbar-div', 'children'),
37
+ Output('pipe-output-div', 'children'),
38
+ Input('pipes-location', 'pathname'),
39
+ State('pipes-location', 'search'),
40
+ State('session-store', 'data'),
41
+ )
42
+ def render_pipe_page_from_url(
43
+ pathname: str,
44
+ pipe_search: str,
45
+ session_data: Optional[Dict[str, Any]],
46
+ ):
47
+ if not str(pathname).startswith('/dash/pipes'):
48
+ raise PreventUpdate
49
+
50
+ session_id = (session_data or {}).get('session-id', None)
51
+ authenticated = is_session_authenticated(str(session_id))
52
+ query_params = parse_qs(pipe_search.lstrip('?')) if pipe_search else {}
53
+ instance = query_params.get('instance', [None])[0] or str(get_api_connector())
54
+ tags = query_params.get('tags', [None])[0] or []
55
+ if isinstance(tags, str):
56
+ tags = tags.split(',')
57
+
58
+ connector_keys = query_params.get('connector_keys', [None])[0] or []
59
+ if isinstance(connector_keys, str):
60
+ connector_keys = connector_keys.split(',')
61
+
62
+ metric_keys = query_params.get('metric_keys', [None])[0] or []
63
+ if isinstance(metric_keys, str):
64
+ metric_keys = metric_keys.split(',')
65
+
66
+ location_keys = query_params.get('location_keys', [None])[0] or []
67
+ if isinstance(location_keys, str):
68
+ location_keys = location_keys.split(',')
69
+
70
+ keys = pathname.replace('/dash/pipes', '').lstrip('/').rstrip('/').split('/')
71
+ instance_connector = mrsm.get_connector(instance)
72
+ viewing_single_pipe = len(keys) in (2, 3)
73
+ if instance_connector is None:
74
+ return (
75
+ build_pipes_navbar(instance, with_instance_select=(not viewing_single_pipe)),
76
+ [
77
+ html.Br(),
78
+ alert_from_success_tuple((False, f"Invalid instance keys '{instance}'.")),
79
+ html.Br(),
80
+ ]
81
+ )
82
+
83
+ if not viewing_single_pipe:
84
+ try:
85
+ pipes = mrsm.get_pipes(
86
+ as_list=True,
87
+ connector_keys=connector_keys,
88
+ metric_keys=metric_keys,
89
+ location_keys=location_keys,
90
+ tags=tags,
91
+ instance=instance_connector,
92
+ )
93
+ except Exception as e:
94
+ return (
95
+ build_pipes_navbar(instance, with_instance_select=False),
96
+ [
97
+ html.Br(),
98
+ alert_from_success_tuple(
99
+ (False, f"Failed to get pipes for instance '{instance}':\n{e}")
100
+ ),
101
+ html.Br(),
102
+ dbc.Row(
103
+ [
104
+ dbc.Button(
105
+ "Reload",
106
+ id='pipes-reload-button',
107
+ size='lg',
108
+ href=(
109
+ "/dash/pipes"
110
+ if pathname.startswith('/dash/pipes/')
111
+ else "/dash/pipes/"
112
+ )
113
+ ),
114
+ ],
115
+ justify='center',
116
+ align='center',
117
+ className='h-50',
118
+ ),
119
+ ]
120
+ )
121
+
122
+ cards = [
123
+ build_pipe_card(pipe, authenticated=authenticated, include_manage=False)
124
+ for pipe in pipes
125
+ ]
126
+ return (
127
+ build_pipes_navbar(instance, with_instance_select=True),
128
+ [
129
+ html.Div([
130
+ html.Br(),
131
+ build_pipes_dropdown_keys_row(
132
+ connector_keys,
133
+ metric_keys,
134
+ location_keys,
135
+ tags,
136
+ pipes,
137
+ instance_connector,
138
+ ),
139
+ html.Br(),
140
+ build_pipes_tags_dropdown(
141
+ connector_keys,
142
+ metric_keys,
143
+ location_keys,
144
+ tags,
145
+ instance,
146
+ ),
147
+ ]),
148
+ html.Br(),
149
+ build_cards_grid(cards, 1),
150
+ html.Br(),
151
+ ]
152
+ )
153
+
154
+ ck = keys[0]
155
+ mk = keys[1]
156
+ lk = keys[2] if len(keys) == 3 else None
157
+
158
+ pipe = mrsm.Pipe(ck, mk, lk, instance=instance)
159
+ return (
160
+ build_pipes_navbar(instance, with_instance_select=False),
161
+ [
162
+ html.Br(),
163
+ build_pipe_card(pipe, authenticated=authenticated, include_manage=False),
164
+ html.Br(),
165
+ ]
166
+ )
167
+
168
+
169
+ @dash_app.callback(
170
+ Output('pipes-location', 'search'),
171
+ Input('pipes-connector-keys-dropdown', 'value'),
172
+ Input('pipes-metric-keys-dropdown', 'value'),
173
+ Input('pipes-location-keys-dropdown', 'value'),
174
+ Input('pipes-tags-dropdown', 'value'),
175
+ Input('instance-select', 'value'),
176
+ Input('pipes-clear-all-button', 'n_clicks'),
177
+ )
178
+ def update_location_on_pipes_filter_change(
179
+ connector_keys: Optional[List[str]],
180
+ metric_keys: Optional[List[str]],
181
+ location_keys: Optional[List[str]],
182
+ tags: Optional[List[str]],
183
+ instance_keys: str,
184
+ clear_all_button_n_clicks: Optional[int],
185
+ ):
186
+ """
187
+ Update the URL parameters when clicking the dropdowns.
188
+ """
189
+ ctx = dash.callback_context.triggered
190
+ if len(ctx) != 1:
191
+ raise PreventUpdate
192
+
193
+ if not any(
194
+ (connector_keys or [])
195
+ + (metric_keys or [])
196
+ + (location_keys or [])
197
+ + (tags or [])
198
+ + ([instance_keys] if instance_keys else [])
199
+ ):
200
+ return ''
201
+
202
+ if ctx[0].get('prop_id', None) == 'pipes-clear-all-button.n_clicks':
203
+ connector_keys = []
204
+ metric_keys = []
205
+ location_keys = []
206
+ tags = []
207
+
208
+ include_instance_keys = instance_keys and instance_keys != str(get_api_connector())
209
+ search_str = ""
210
+
211
+ if connector_keys:
212
+ search_str += "connector_keys=" + ','.join((quote_plus(ck) for ck in connector_keys))
213
+ if metric_keys or location_keys or tags or include_instance_keys:
214
+ search_str += '&'
215
+
216
+ if metric_keys:
217
+ search_str += "metric_keys=" + ','.join((quote_plus(mk) for mk in metric_keys))
218
+ if location_keys or tags or include_instance_keys:
219
+ search_str += '&'
220
+
221
+ if location_keys:
222
+ search_str += "location_keys=" + ','.join((quote_plus(str(lk)) for lk in location_keys))
223
+ if tags or include_instance_keys:
224
+ search_str += '&'
225
+
226
+ if tags:
227
+ search_str += "tags=" + ','.join((quote_plus(tag) for tag in tags))
228
+ if include_instance_keys:
229
+ search_str += '&'
230
+
231
+ if instance_keys:
232
+ if include_instance_keys:
233
+ search_str += "instance=" + quote_plus(instance_keys)
234
+
235
+ return ('?' + search_str) if search_str else ''
@@ -54,7 +54,8 @@ def refresh_tokens_button_click(
54
54
  html.H4('No tokens registered.'),
55
55
  html.P('Click the `+` button to register a new token.'),
56
56
  ],
57
- alerts
57
+ build_tokens_register_input_modal(),
58
+ alerts,
58
59
  )
59
60
 
60
61
  return tokens_table, build_tokens_register_input_modal(), alerts
@@ -13,7 +13,7 @@ from meerschaum.utils.typing import SuccessTuple, List
13
13
  from meerschaum._internal.static import STATIC_CONFIG
14
14
  from meerschaum.utils.misc import remove_ansi
15
15
  from meerschaum._internal.shell.Shell import get_shell_intro
16
- from meerschaum.api import endpoints, CHECK_UPDATE, docs_enabled
16
+ from meerschaum.api import endpoints, CHECK_UPDATE, docs_enabled, get_api_connector
17
17
  from meerschaum.connectors import instance_types, _load_builtin_custom_connectors
18
18
  from meerschaum.utils.misc import get_connector_labels
19
19
  from meerschaum.config import __doc__ as doc
@@ -104,7 +104,7 @@ instance_select = dbc.Select(
104
104
  id='instance-select',
105
105
  size='sm',
106
106
  options=[
107
- {'label': i, 'value': i}
107
+ {'label': (i[:32] + '…') if len(i) > 32 else i, 'value': i}
108
108
  for i in get_connector_labels(*instance_types)
109
109
  ],
110
110
  class_name='dbc_dark custom-select custom-select-sm',
@@ -163,6 +163,7 @@ pages_navbar = html.Div(
163
163
  id='pages-navbar-div',
164
164
  )
165
165
 
166
+
166
167
  navbar = dbc.Navbar(
167
168
  dbc.Container(
168
169
  [
@@ -171,13 +172,11 @@ navbar = dbc.Navbar(
171
172
  dbc.Collapse(
172
173
  dbc.Row(
173
174
  [
174
- dbc.Col(instance_select),
175
- dbc.Col(
176
- sign_out_button,
177
- className="ms-auto",
178
- ),
175
+ dbc.Col(instance_select, width="auto"),
176
+ dbc.Col(sign_out_button, width="auto"),
179
177
  ],
180
178
  className="g-0 ms-auto flex-nowrap mt-3 mt-md-0",
179
+ align="center",
181
180
  ),
182
181
  id='navbar-collapse',
183
182
  is_open=False,
@@ -227,7 +227,23 @@ dropdown_tab_content = html.Div([
227
227
  [
228
228
  dropdown_keys_row,
229
229
  html.Br(),
230
- tags_dropdown,
230
+ dbc.Row(
231
+ [
232
+ dbc.Col(tags_dropdown, width=True),
233
+ dbc.Col(
234
+ dbc.Button(
235
+ "Clear all",
236
+ id='clear-all-keys-button',
237
+ color='link',
238
+ size='sm',
239
+ style={'text-decoration': 'none'},
240
+ ),
241
+ width='auto',
242
+ ),
243
+ ],
244
+ className='g-0',
245
+ align='center',
246
+ ),
231
247
  ], ### end of card children
232
248
  className='card-text',
233
249
  )
@@ -7,17 +7,27 @@ Display pipes via a shareable URL.
7
7
 
8
8
  from meerschaum.api import CHECK_UPDATE
9
9
  from meerschaum.utils.packages import import_html, import_dcc
10
- from meerschaum.api.dash.components import download_dataframe, pages_navbar, navbar
10
+ from meerschaum.api.dash.components import (
11
+ download_dataframe,
12
+ )
11
13
 
12
14
  html, dcc = import_html(check_update=CHECK_UPDATE), import_dcc(check_update=CHECK_UPDATE)
13
15
  import dash_bootstrap_components as dbc
14
16
 
15
-
16
17
  layout = [
17
- pages_navbar,
18
+ html.Div(id='pipes-navbar-div'),
18
19
  dcc.Location('pipes-location'),
19
20
  download_dataframe,
20
21
  dbc.Container([
21
- html.Div(id='pipe-output-div'),
22
+ dcc.Loading(
23
+ html.Div(id='pipe-output-div'),
24
+ id='pipes-loading',
25
+ type='circle',
26
+ delay_hide=1000,
27
+ delay_show=1000,
28
+ style={
29
+ 'padding-top': '100px',
30
+ },
31
+ ),
22
32
  ])
23
33
  ]