meerschaum 2.4.12__tar.gz → 2.4.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.4.12/meerschaum.egg-info → meerschaum-2.4.13}/PKG-INFO +1 -1
  2. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/entry.py +1 -0
  3. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/bootstrap.py +9 -11
  4. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/delete.py +1 -1
  5. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/edit.py +40 -14
  6. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/sh.py +11 -10
  7. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/start.py +58 -2
  8. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/sync.py +14 -16
  9. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/upgrade.py +5 -4
  10. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_version.py +1 -1
  11. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_fetch.py +2 -0
  12. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/plugins/__init__.py +6 -2
  13. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/plugins/bootstrap.py +15 -15
  14. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/process.py +18 -8
  15. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/venv/__init__.py +35 -24
  16. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/warnings.py +7 -7
  17. {meerschaum-2.4.12 → meerschaum-2.4.13/meerschaum.egg-info}/PKG-INFO +1 -1
  18. {meerschaum-2.4.12 → meerschaum-2.4.13}/LICENSE +0 -0
  19. {meerschaum-2.4.12 → meerschaum-2.4.13}/NOTICE +0 -0
  20. {meerschaum-2.4.12 → meerschaum-2.4.13}/README.md +0 -0
  21. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/__init__.py +0 -0
  22. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/__main__.py +0 -0
  23. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/__init__.py +0 -0
  24. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/arguments/__init__.py +0 -0
  25. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
  26. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/arguments/_parser.py +0 -0
  27. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/docs/__init__.py +0 -0
  28. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/docs/index.py +0 -0
  29. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/gui/__init__.py +0 -0
  30. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/gui/app/__init__.py +0 -0
  31. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/gui/app/_windows.py +0 -0
  32. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/gui/app/actions.py +0 -0
  33. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/gui/app/pipes.py +0 -0
  34. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/shell/Shell.py +0 -0
  35. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
  36. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
  37. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/shell/__init__.py +0 -0
  38. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/shell/resources/__init__.py +0 -0
  39. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/shell/updates.py +0 -0
  40. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/term/TermPageHandler.py +0 -0
  41. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/term/__init__.py +0 -0
  42. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/_internal/term/tools.py +0 -0
  43. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/__init__.py +0 -0
  44. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/api.py +0 -0
  45. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/attach.py +0 -0
  46. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/clear.py +0 -0
  47. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/copy.py +0 -0
  48. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/deduplicate.py +0 -0
  49. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/drop.py +0 -0
  50. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/install.py +0 -0
  51. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/login.py +0 -0
  52. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/os.py +0 -0
  53. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/pause.py +0 -0
  54. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/python.py +0 -0
  55. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/register.py +0 -0
  56. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/reload.py +0 -0
  57. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/restart.py +0 -0
  58. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/setup.py +0 -0
  59. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/show.py +0 -0
  60. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/sql.py +0 -0
  61. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/stack.py +0 -0
  62. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/stop.py +0 -0
  63. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/tag.py +0 -0
  64. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/uninstall.py +0 -0
  65. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/actions/verify.py +0 -0
  66. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/__init__.py +0 -0
  67. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/_chain.py +0 -0
  68. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/_events.py +0 -0
  69. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/_oauth2.py +0 -0
  70. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/_websockets.py +0 -0
  71. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/__init__.py +0 -0
  72. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/assets/__init__.py +0 -0
  73. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/assets/ansi_up.js +0 -0
  74. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
  75. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/assets/favicon.ico +0 -0
  76. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
  77. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
  78. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/callbacks/__init__.py +0 -0
  79. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/callbacks/custom.py +0 -0
  80. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/callbacks/dashboard.py +0 -0
  81. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/callbacks/jobs.py +0 -0
  82. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/callbacks/login.py +0 -0
  83. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/callbacks/pipes.py +0 -0
  84. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/callbacks/plugins.py +0 -0
  85. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/callbacks/register.py +0 -0
  86. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/components.py +0 -0
  87. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/connectors.py +0 -0
  88. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/graphs.py +0 -0
  89. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/jobs.py +0 -0
  90. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/keys.py +0 -0
  91. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/pages/__init__.py +0 -0
  92. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/pages/dashboard.py +0 -0
  93. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/pages/error.py +0 -0
  94. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/pages/job.py +0 -0
  95. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/pages/login.py +0 -0
  96. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/pages/pipes.py +0 -0
  97. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/pages/plugins.py +0 -0
  98. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/pages/register.py +0 -0
  99. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/pipes.py +0 -0
  100. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/plugins.py +0 -0
  101. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/sessions.py +0 -0
  102. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/sync.py +0 -0
  103. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/users.py +0 -0
  104. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/websockets.py +0 -0
  105. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/dash/webterm.py +0 -0
  106. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/models/__init__.py +0 -0
  107. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/models/_interfaces.py +0 -0
  108. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/models/_locations.py +0 -0
  109. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/models/_metrics.py +0 -0
  110. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/models/_pipes.py +0 -0
  111. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/__init__.py +0 -0
  112. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/__init__.py +0 -0
  113. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/css/__init__.py +0 -0
  114. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
  115. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/css/dash.css +0 -0
  116. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
  117. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/css/styles.css +0 -0
  118. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/css/xterm.css +0 -0
  119. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/ico/__init__.py +0 -0
  120. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/ico/logo.ico +0 -0
  121. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/js/__init__.py +0 -0
  122. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/js/action_button.js +0 -0
  123. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/js/main.js +0 -0
  124. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/js/terminado.js +0 -0
  125. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/js/xterm.js +0 -0
  126. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/static/png/__init__.py +0 -0
  127. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/templates/__init__.py +0 -0
  128. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/templates/index.html +0 -0
  129. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/templates/old_index.html +0 -0
  130. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/templates/secret.html +0 -0
  131. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/resources/templates/termpage.html +0 -0
  132. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/__init__.py +0 -0
  133. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_actions.py +0 -0
  134. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_connectors.py +0 -0
  135. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_index.py +0 -0
  136. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_jobs.py +0 -0
  137. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_login.py +0 -0
  138. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_misc.py +0 -0
  139. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_pipes.py +0 -0
  140. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_plugins.py +0 -0
  141. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_users.py +0 -0
  142. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_version.py +0 -0
  143. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/routes/_webterm.py +0 -0
  144. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/api/tables/__init__.py +0 -0
  145. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/__init__.py +0 -0
  146. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_dash.py +0 -0
  147. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_default.py +0 -0
  148. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_edit.py +0 -0
  149. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_environment.py +0 -0
  150. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_formatting.py +0 -0
  151. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_jobs.py +0 -0
  152. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_patch.py +0 -0
  153. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_paths.py +0 -0
  154. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_preprocess.py +0 -0
  155. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_read_config.py +0 -0
  156. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_shell.py +0 -0
  157. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/_sync.py +0 -0
  158. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/paths.py +0 -0
  159. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/resources/__init__.py +0 -0
  160. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/stack/__init__.py +0 -0
  161. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/stack/grafana/__init__.py +0 -0
  162. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
  163. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
  164. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/stack/resources/__init__.py +0 -0
  165. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/config/static/__init__.py +0 -0
  166. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/_Connector.py +0 -0
  167. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/__init__.py +0 -0
  168. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_APIConnector.py +0 -0
  169. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/__init__.py +0 -0
  170. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_actions.py +0 -0
  171. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_fetch.py +0 -0
  172. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_jobs.py +0 -0
  173. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_login.py +0 -0
  174. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_misc.py +0 -0
  175. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_pipes.py +0 -0
  176. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_plugins.py +0 -0
  177. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_request.py +0 -0
  178. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_uri.py +0 -0
  179. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/api/_users.py +0 -0
  180. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/parse.py +0 -0
  181. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
  182. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/plugin/__init__.py +0 -0
  183. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/poll.py +0 -0
  184. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_SQLConnector.py +0 -0
  185. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/__init__.py +0 -0
  186. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_cli.py +0 -0
  187. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_create_engine.py +0 -0
  188. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_instance.py +0 -0
  189. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_pipes.py +0 -0
  190. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_plugins.py +0 -0
  191. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_sql.py +0 -0
  192. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_uri.py +0 -0
  193. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/_users.py +0 -0
  194. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/tables/__init__.py +0 -0
  195. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/tables/types.py +0 -0
  196. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/sql/tools.py +0 -0
  197. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/valkey/_ValkeyConnector.py +0 -0
  198. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/valkey/__init__.py +0 -0
  199. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/valkey/_fetch.py +0 -0
  200. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/valkey/_pipes.py +0 -0
  201. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/valkey/_plugins.py +0 -0
  202. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/connectors/valkey/_users.py +0 -0
  203. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/__init__.py +0 -0
  204. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_attributes.py +0 -0
  205. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_bootstrap.py +0 -0
  206. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_clear.py +0 -0
  207. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_copy.py +0 -0
  208. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_data.py +0 -0
  209. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_deduplicate.py +0 -0
  210. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_delete.py +0 -0
  211. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_drop.py +0 -0
  212. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_dtypes.py +0 -0
  213. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_edit.py +0 -0
  214. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_fetch.py +0 -0
  215. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_register.py +0 -0
  216. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_show.py +0 -0
  217. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_sync.py +0 -0
  218. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Pipe/_verify.py +0 -0
  219. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/Plugin/__init__.py +0 -0
  220. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/User/_User.py +0 -0
  221. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/User/__init__.py +0 -0
  222. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/core/__init__.py +0 -0
  223. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/jobs/_Executor.py +0 -0
  224. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/jobs/_Job.py +0 -0
  225. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/jobs/__init__.py +0 -0
  226. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/jobs/systemd.py +0 -0
  227. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/plugins/_Plugin.py +0 -0
  228. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/__init__.py +0 -0
  229. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/_get_pipes.py +0 -0
  230. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/daemon/Daemon.py +0 -0
  231. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/daemon/FileDescriptorInterceptor.py +0 -0
  232. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/daemon/RotatingFile.py +0 -0
  233. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/daemon/StdinFile.py +0 -0
  234. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/daemon/__init__.py +0 -0
  235. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/daemon/_names.py +0 -0
  236. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/dataframe.py +0 -0
  237. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/debug.py +0 -0
  238. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/dtypes/__init__.py +0 -0
  239. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/dtypes/sql.py +0 -0
  240. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/formatting/__init__.py +0 -0
  241. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/formatting/_jobs.py +0 -0
  242. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/formatting/_pipes.py +0 -0
  243. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/formatting/_pprint.py +0 -0
  244. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/formatting/_shell.py +0 -0
  245. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/interactive.py +0 -0
  246. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/misc.py +0 -0
  247. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/networking.py +0 -0
  248. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/packages/__init__.py +0 -0
  249. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/packages/_packages.py +0 -0
  250. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/packages/lazy_loader.py +0 -0
  251. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/pool.py +0 -0
  252. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/prompt.py +0 -0
  253. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/schedule.py +0 -0
  254. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/sql.py +0 -0
  255. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/threading.py +0 -0
  256. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/typing.py +0 -0
  257. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/venv/_Venv.py +0 -0
  258. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum/utils/yaml.py +0 -0
  259. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum.egg-info/SOURCES.txt +0 -0
  260. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum.egg-info/dependency_links.txt +0 -0
  261. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum.egg-info/entry_points.txt +0 -0
  262. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum.egg-info/requires.txt +0 -0
  263. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum.egg-info/top_level.txt +0 -0
  264. {meerschaum-2.4.12 → meerschaum-2.4.13}/meerschaum.egg-info/zip-safe +0 -0
  265. {meerschaum-2.4.12 → meerschaum-2.4.13}/setup.cfg +0 -0
  266. {meerschaum-2.4.12 → meerschaum-2.4.13}/setup.py +0 -0
  267. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_actions.py +0 -0
  268. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_arguments.py +0 -0
  269. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_deduplicate.py +0 -0
  270. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_jobs.py +0 -0
  271. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_pipe_data.py +0 -0
  272. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_pipes_dtypes.py +0 -0
  273. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_sql.py +0 -0
  274. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_sync.py +0 -0
  275. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_users.py +0 -0
  276. {meerschaum-2.4.12 → meerschaum-2.4.13}/tests/test_verify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.4.12
3
+ Version: 2.4.13
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -43,6 +43,7 @@ if (_STATIC_CONFIG['environment']['systemd_log_path']) in os.environ:
43
43
  if _systemd_stdin_path:
44
44
  sys.stdin = _StdinFile(_systemd_stdin_path)
45
45
 
46
+
46
47
  def entry(
47
48
  sysargs: Optional[List[str]] = None,
48
49
  _patch_args: Optional[Dict[str, Any]] = None,
@@ -19,7 +19,7 @@ def bootstrap(
19
19
  ) -> SuccessTuple:
20
20
  """
21
21
  Launch an interactive wizard to bootstrap pipes or connectors.
22
-
22
+
23
23
  Example:
24
24
  `bootstrap pipes`
25
25
 
@@ -462,7 +462,6 @@ def _bootstrap_jobs(
462
462
  if not action:
463
463
  action = [prompt("What is the name of the job you'd like to create?")]
464
464
 
465
- new_jobs = {}
466
465
  for name in action:
467
466
  clear_screen(debug=debug)
468
467
  job = mrsm.Job(name, executor_keys=executor_keys)
@@ -473,13 +472,14 @@ def _bootstrap_jobs(
473
472
  continue
474
473
 
475
474
  info(
476
- "Press [Esc + Enter] to submit, [CTRL + C] to exit.\n"
475
+ f"Editing arguments for job '{name}'.\n"
476
+ " Press [Esc + Enter] to submit, [CTRL + C] to exit.\n\n"
477
477
  " Tip: join multiple actions with `+`, add pipeline arguments with `:`.\n"
478
478
  " https://meerschaum.io/reference/actions/#chaining-actions\n"
479
479
  )
480
480
  try:
481
481
  new_sysargs_str = prompt(
482
- f"Arguments for job '{name}':",
482
+ "",
483
483
  multiline=True,
484
484
  icon=False,
485
485
  completer=ShellCompleter(),
@@ -491,6 +491,7 @@ def _bootstrap_jobs(
491
491
  new_sysargs, pipeline_args = split_pipeline_sysargs(new_sysargs)
492
492
  chained_sysargs = split_chained_sysargs(new_sysargs)
493
493
 
494
+ clear_screen(debug=debug)
494
495
  if len(chained_sysargs) > 1:
495
496
  print_options(
496
497
  [
@@ -508,6 +509,7 @@ def _bootstrap_jobs(
508
509
  if pipeline_args:
509
510
  print('\n' + make_header("Pipeline Arguments:"))
510
511
  print(shlex.join(pipeline_args))
512
+ print()
511
513
 
512
514
  if not yes_no(
513
515
  (
@@ -524,15 +526,11 @@ def _bootstrap_jobs(
524
526
  if not start_success:
525
527
  return start_success, start_msg
526
528
 
527
- new_jobs[name] = new_job
528
-
529
- if not new_jobs:
530
- return False, "No new jobs were created."
531
-
532
529
  msg = (
533
530
  "Successfully bootstrapped job"
534
- + ('s' if len(new_jobs) != 1 else '')
535
- + items_str(list(new_jobs.keys()))
531
+ + ('s' if len(action) != 1 else '')
532
+ + ' '
533
+ + items_str(action)
536
534
  + '.'
537
535
  )
538
536
  return True, msg
@@ -498,7 +498,7 @@ def _complete_delete_jobs(
498
498
  action: Optional[List[str]] = None,
499
499
  executor_keys: Optional[str] = None,
500
500
  line: str = '',
501
- _get_job_method: Optional[str, List[str]] = None,
501
+ _get_job_method: Union[str, List[str], None] = None,
502
502
  **kw
503
503
  ) -> List[str]:
504
504
  from meerschaum._internal.shell.Shell import shell_attrs
@@ -38,10 +38,17 @@ def _complete_edit(
38
38
  """
39
39
  Override the default Meerschaum `complete_` function.
40
40
  """
41
+ from meerschaum.actions.delete import _complete_delete_jobs
42
+
43
+ if action is None:
44
+ action = []
45
+
41
46
  options = {
42
47
  'config': _complete_edit_config,
43
48
  'plugin': _complete_edit_plugins,
44
49
  'plugins': _complete_edit_plugins,
50
+ 'job': _complete_delete_jobs,
51
+ 'jobs': _complete_delete_jobs,
45
52
  }
46
53
 
47
54
  if action is None:
@@ -133,7 +140,7 @@ def _edit_pipes(
133
140
 
134
141
  pipes = get_pipes(debug=debug, as_list=True, **kw)
135
142
  if pipes:
136
- print_options(pipes, header=f'Pipes to be edited:')
143
+ print_options(pipes, header='Pipes to be edited:')
137
144
  else:
138
145
  return False, "No pipes to edit."
139
146
 
@@ -144,10 +151,10 @@ def _edit_pipes(
144
151
  f"Press [Enter] to begin editing the above {len(pipes)} pipe"
145
152
  + ("s" if len(pipes) != 1 else "")
146
153
  + " or [CTRL-C] to cancel:",
147
- icon = False,
154
+ icon=False,
148
155
  )
149
156
  except KeyboardInterrupt:
150
- return False, f"No pipes changed."
157
+ return False, "No pipes changed."
151
158
 
152
159
  interactive = (not bool(params))
153
160
  success, msg = True, ""
@@ -393,41 +400,51 @@ def _edit_jobs(
393
400
  )
394
401
  from meerschaum.utils.formatting import make_header, print_options
395
402
  from meerschaum.utils.warnings import info
396
- from meerschaum.actions import actions
403
+ from meerschaum._internal.shell.ShellCompleter import ShellCompleter
404
+ from meerschaum.utils.misc import items_str
405
+ from meerschaum.utils.formatting._shell import clear_screen
406
+
397
407
  jobs = get_filtered_jobs(executor_keys, action, debug=debug)
398
408
  if not jobs:
399
409
  return False, "No jobs to edit."
400
410
 
401
- info(
402
- "Press [Esc + Enter] to submit, [CTRL + C] to exit.\n"
403
- " Tip: join multiple actions with `+`, add pipeline arguments with `:`.\n"
404
- " https://meerschaum.io/reference/actions/#chaining-actions\n"
405
- )
406
-
411
+ num_edited = 0
407
412
  for name, job in jobs.items():
408
413
  sysargs_str = shlex.join(job.sysargs)
414
+ clear_screen(debug=debug)
415
+ info(
416
+ f"Editing arguments for job '{name}'.\n"
417
+ " Press [Esc + Enter] to submit, [CTRL + C] to exit.\n\n"
418
+ " Tip: join actions with `+`, manage pipeline with `:`.\n"
419
+ " https://meerschaum.io/reference/actions/#chaining-actions\n"
420
+ )
409
421
 
410
422
  try:
411
423
  new_sysargs_str = prompt(
412
- f"Arguments for job '{name}':",
413
- default_editable=sysargs_str.lstrip().rstrip(),
424
+ "",
425
+ default_editable=sysargs_str.lstrip().rstrip().replace(' + ', '\n+ '),
414
426
  multiline=True,
415
427
  icon=False,
428
+ completer=ShellCompleter(),
416
429
  )
417
430
  except KeyboardInterrupt:
418
431
  return True, "Nothing was changed."
419
432
 
433
+ if new_sysargs_str.strip() == sysargs_str.strip():
434
+ continue
435
+
420
436
  new_sysargs = shlex.split(new_sysargs_str)
421
437
  new_sysargs, pipeline_args = split_pipeline_sysargs(new_sysargs)
422
438
  chained_sysargs = split_chained_sysargs(new_sysargs)
423
439
 
440
+ clear_screen(debug=debug)
424
441
  if len(chained_sysargs) > 1:
425
442
  print_options(
426
443
  [
427
444
  shlex.join(step_sysargs)
428
445
  for step_sysargs in chained_sysargs
429
446
  ],
430
- header=f"Steps in Job '{name}':",
447
+ header=f"\nSteps in Job '{name}':",
431
448
  number_options=True,
432
449
  **kwargs
433
450
  )
@@ -438,6 +455,7 @@ def _edit_jobs(
438
455
  if pipeline_args:
439
456
  print('\n' + make_header("Pipeline Arguments:"))
440
457
  print(shlex.join(pipeline_args))
458
+ print()
441
459
 
442
460
  if not yes_no(
443
461
  (
@@ -457,8 +475,16 @@ def _edit_jobs(
457
475
  start_success, start_msg = new_job.start()
458
476
  if not start_success:
459
477
  return start_success, start_msg
478
+ num_edited += 1
460
479
 
461
- return True, "Success"
480
+ msg = (
481
+ "Successfully edit job"
482
+ + ('s' if len(jobs) != 1 else '')
483
+ + ' '
484
+ + items_str(list(jobs.keys()))
485
+ + '.'
486
+ ) if num_edited > 0 else "Nothing was edited."
487
+ return True, msg
462
488
 
463
489
 
464
490
  ### NOTE: This must be the final statement of the module.
@@ -9,14 +9,15 @@ NOTE: This action may be a huge security vulnerability
9
9
 
10
10
  from meerschaum.utils.typing import SuccessTuple, List, Any, Optional
11
11
 
12
+
12
13
  def sh(
13
- action: Optional[List[str]] = None,
14
- sub_args: Optional[List[str]] = None,
15
- filtered_sysargs: Optional[List[str]] = None,
16
- use_bash: bool = True,
17
- debug: bool = False,
18
- **kw: Any
19
- ) -> SuccessTuple:
14
+ action: Optional[List[str]] = None,
15
+ sub_args: Optional[List[str]] = None,
16
+ filtered_sysargs: Optional[List[str]] = None,
17
+ use_bash: bool = True,
18
+ debug: bool = False,
19
+ **kw: Any
20
+ ) -> SuccessTuple:
20
21
  """
21
22
  Execute system commands.
22
23
  """
@@ -50,7 +51,7 @@ def sh(
50
51
  if len(action) != 0:
51
52
  try:
52
53
  command_list += ["-c", shlex.join(cmd_list)]
53
- except Exception as e:
54
+ except Exception:
54
55
  command_list += ["-c", ' '.join(cmd_list)]
55
56
  else:
56
57
  if len(action) == 0:
@@ -64,8 +65,8 @@ def sh(
64
65
  try:
65
66
  process = subprocess.Popen(
66
67
  command_list,
67
- shell = False,
68
- env = os.environ,
68
+ shell=False,
69
+ env=os.environ,
69
70
  )
70
71
  exit_code = process.wait()
71
72
  except FileNotFoundError:
@@ -541,6 +541,7 @@ def _start_pipeline(
541
541
  action: Optional[List[str]] = None,
542
542
  loop: bool = False,
543
543
  min_seconds: Union[float, int, None] = 1.0,
544
+ timeout_seconds: Optional[int] = None,
544
545
  params: Optional[Dict[str, Any]] = None,
545
546
  **kwargs
546
547
  ) -> SuccessTuple:
@@ -557,10 +558,39 @@ def _start_pipeline(
557
558
  `show version + show arguments :: --loop`
558
559
 
559
560
  """
561
+ import json
560
562
  import time
563
+ import sys
561
564
  from meerschaum._internal.entry import entry
562
565
  from meerschaum.utils.warnings import info, warn
563
566
  from meerschaum.utils.misc import is_int
567
+ from meerschaum.utils.venv import venv_exec
568
+ from meerschaum.utils.process import poll_process
569
+ fence_begin, fence_end = '<MRSM_RESULT>', '</MRSM_RESULT>'
570
+
571
+ success, msg = False, "Did not run pipeline."
572
+ def write_line(line):
573
+ nonlocal success, msg
574
+ decoded = line.decode('utf-8')
575
+ begin_index, end_index = decoded.find(fence_begin), decoded.find(fence_end)
576
+
577
+ ### Found the beginning of the return value.
578
+ ### Don't write the parsed success tuple message.
579
+ if begin_index >= 0:
580
+ success, msg = tuple(json.loads(
581
+ decoded[begin_index + len(fence_begin):end_index]
582
+ ))
583
+ return
584
+
585
+ print(decoded)
586
+
587
+ def timeout_handler(*args, **kw):
588
+ nonlocal success, msg
589
+ success, msg = False, (
590
+ f"Failed to execute pipeline within {timeout_seconds} second"
591
+ + ('s' if timeout_seconds != 1 else '') + '.'
592
+ )
593
+ write_line((fence_begin + json.dumps((success, msg)) + fence_end).encode('utf-8'))
564
594
 
565
595
  do_n_times = (
566
596
  int(action[0].lstrip('x'))
@@ -578,12 +608,38 @@ def _start_pipeline(
578
608
  if min_seconds is None:
579
609
  min_seconds = 1.0
580
610
 
611
+ def do_entry() -> None:
612
+ nonlocal success, msg
613
+ if timeout_seconds is None:
614
+ success, msg = entry(sub_args_line, _patch_args=patch_args)
615
+ return
616
+
617
+ sub_args_line_escaped = sub_args_line.replace("'", "<QUOTE>")
618
+ patch_args_escaped_str = json.dumps(patch_args).replace("'", "<QUOTE>")
619
+ src = (
620
+ "import json\n"
621
+ "from meerschaum._internal.entry import entry\n\n"
622
+ f"sub_args_line = '{sub_args_line_escaped}'.replace(\"<QUOTE>\", \"'\")\n"
623
+ f"patch_args = json.loads('{patch_args_escaped_str}'.replace('<QUOTE>', \"'\"))\n"
624
+ "success, msg = entry(sub_args_line, _patch_args=patch_args)\n"
625
+ f"print('{fence_begin}' + json.dumps((success, msg)) + '{fence_end}')"
626
+ )
627
+ proc = venv_exec(src, venv=None, as_proc=True)
628
+ poll_process(
629
+ proc,
630
+ write_line,
631
+ timeout_seconds,
632
+ timeout_handler,
633
+ )
634
+
581
635
  ran_n_times = 0
582
- success, msg = False, "Did not run pipeline."
583
636
  def run_loop():
584
637
  nonlocal ran_n_times, success, msg
585
638
  while True:
586
- success, msg = entry(sub_args_line, _patch_args=patch_args)
639
+ try:
640
+ do_entry()
641
+ except Exception as e:
642
+ warn(e)
587
643
  ran_n_times += 1
588
644
 
589
645
  if not loop and do_n_times == 1:
@@ -129,7 +129,6 @@ def _pipes_lap(
129
129
  stack=False,
130
130
  )
131
131
 
132
-
133
132
  def _task_label(count: int):
134
133
  return f"[cyan]Syncing {count} pipe{'s' if count != 1 else ''}..."
135
134
 
@@ -137,7 +136,6 @@ def _pipes_lap(
137
136
  _progress.add_task(_task_label(len(pipes)), start=True, total=len(pipes))
138
137
  ) if _progress is not None else None
139
138
 
140
-
141
139
  def worker_fn():
142
140
  while not stop_event.is_set():
143
141
  try:
@@ -188,7 +186,7 @@ def _pipes_lap(
188
186
  decoded[begin_index + len(fence_begin):end_index]
189
187
  ))
190
188
  return
191
- sys.stdout.buffer.write(line)
189
+ print(decoded)
192
190
 
193
191
  def timeout_handler(p, *args, **kw):
194
192
  success, msg = False, (
@@ -227,7 +225,7 @@ def _pipes_lap(
227
225
  write_line,
228
226
  timeout_seconds,
229
227
  timeout_handler,
230
- (p,)
228
+ (p,),
231
229
  )
232
230
  return _success_tuple
233
231
 
@@ -249,18 +247,18 @@ def _pipes_lap(
249
247
 
250
248
 
251
249
  def _sync_pipes(
252
- loop: bool = False,
253
- min_seconds: int = 1,
254
- unblock: bool = False,
255
- verify: bool = False,
256
- deduplicate: bool = False,
257
- bounded: Optional[bool] = None,
258
- chunk_interval: Union[timedelta, int, None] = None,
259
- shell: bool = False,
260
- nopretty: bool = False,
261
- debug: bool = False,
262
- **kw: Any
263
- ) -> SuccessTuple:
250
+ loop: bool = False,
251
+ min_seconds: int = 1,
252
+ unblock: bool = False,
253
+ verify: bool = False,
254
+ deduplicate: bool = False,
255
+ bounded: Optional[bool] = None,
256
+ chunk_interval: Union[timedelta, int, None] = None,
257
+ shell: bool = False,
258
+ nopretty: bool = False,
259
+ debug: bool = False,
260
+ **kw: Any
261
+ ) -> SuccessTuple:
264
262
  """
265
263
  Fetch and sync new data for pipes.
266
264
 
@@ -9,16 +9,17 @@ Upgrade your current Meerschaum environment
9
9
  from __future__ import annotations
10
10
  from meerschaum.utils.typing import SuccessTuple, Any, List, Optional, Union
11
11
 
12
+
12
13
  def upgrade(
13
14
  action: Optional[List[str]] = None,
14
15
  **kw: Any
15
16
  ) -> SuccessTuple:
16
17
  """
17
18
  Upgrade Meerschaum, plugins, or packages.
18
-
19
+
19
20
  Command:
20
21
  `upgrade {option}`
21
-
22
+
22
23
  Example:
23
24
  `upgrade meerschaum`
24
25
  """
@@ -77,7 +78,7 @@ def _upgrade_meerschaum(
77
78
  if force:
78
79
  answer = True
79
80
  else:
80
- answer = yes_no(f"Take down the stack?", default='y', yes=yes, noask=noask)
81
+ answer = yes_no("Take down the stack?", default='n', yes=yes, noask=noask)
81
82
 
82
83
  if answer:
83
84
  if debug:
@@ -95,7 +96,7 @@ def _upgrade_meerschaum(
95
96
  if debug:
96
97
  dprint('Upgrade meerschaum with dependencies: \"' + f'{dependencies}' + '\"')
97
98
  if not pip_install(install_name, venv=None, debug=debug):
98
- return False, f"Failed to upgrade Meerschaum via pip."
99
+ return False, "Failed to upgrade Meerschaum via pip."
99
100
 
100
101
  if debug:
101
102
  dprint("Pulling new Docker images...")
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.4.12"
5
+ __version__ = "2.4.13"
@@ -309,6 +309,8 @@ def _simple_fetch_query(
309
309
  """Build a fetch query from a pipe's definition."""
310
310
  from meerschaum.utils.sql import format_cte_subquery
311
311
  definition = get_pipe_query(pipe)
312
+ if definition is None:
313
+ raise ValueError(f"No SQL definition could be found for {pipe}.")
312
314
  return format_cte_subquery(definition, flavor, 'definition')
313
315
 
314
316
 
@@ -316,7 +316,11 @@ def sync_plugins_symlinks(debug: bool = False, warn: bool = True) -> None:
316
316
 
317
317
  ### NOTE: Allow plugins to be installed via `pip`.
318
318
  packaged_plugin_paths = []
319
- discovered_packaged_plugins_eps = entry_points(group='meerschaum.plugins')
319
+ try:
320
+ discovered_packaged_plugins_eps = entry_points(group='meerschaum.plugins')
321
+ except TypeError:
322
+ discovered_packaged_plugins_eps = []
323
+
320
324
  for ep in discovered_packaged_plugins_eps:
321
325
  module_name = ep.name
322
326
  for package_file_path in ep.dist.files:
@@ -330,7 +334,7 @@ def sync_plugins_symlinks(debug: bool = False, warn: bool = True) -> None:
330
334
  if is_symlink(PLUGINS_RESOURCES_PATH) or not PLUGINS_RESOURCES_PATH.exists():
331
335
  try:
332
336
  PLUGINS_RESOURCES_PATH.unlink()
333
- except Exception as e:
337
+ except Exception:
334
338
  pass
335
339
 
336
340
  PLUGINS_RESOURCES_PATH.mkdir(exist_ok=True)
@@ -47,7 +47,6 @@ IMPORTS_LINES: Dict[str, str] = {
47
47
  ),
48
48
  }
49
49
 
50
- ### TODO: Add feature for custom connectors.
51
50
  FEATURE_LINES: Dict[str, str] = {
52
51
  'header': (
53
52
  "#! /usr/bin/env python3\n"
@@ -94,7 +93,7 @@ FEATURE_LINES: Dict[str, str] = {
94
93
  "class {plugin_name_capitalized}Connector(Connector):\n"
95
94
  " \"\"\"Implement '{plugin_name_lower}' connectors.\"\"\"\n\n"
96
95
  " REQUIRED_ATTRIBUTES: list[str] = []\n"
97
- " \n"
96
+ "\n"
98
97
  " def fetch(\n"
99
98
  " self,\n"
100
99
  " pipe: mrsm.Pipe,\n"
@@ -149,11 +148,12 @@ FEATURE_LINES: Dict[str, str] = {
149
148
  ),
150
149
  }
151
150
 
151
+
152
152
  def bootstrap_plugin(
153
- plugin_name: str,
154
- debug: bool = False,
155
- **kwargs: Any
156
- ) -> SuccessTuple:
153
+ plugin_name: str,
154
+ debug: bool = False,
155
+ **kwargs: Any
156
+ ) -> SuccessTuple:
157
157
  """
158
158
  Prompt the user for features and create a plugin file.
159
159
  """
@@ -177,9 +177,9 @@ def bootstrap_plugin(
177
177
  features: List[str] = choose(
178
178
  "Which of the following features would you like to add to your plugin?",
179
179
  list(FEATURE_CHOICES.items()),
180
- default = 'fetch',
181
- multiple = True,
182
- as_indices = True,
180
+ default='fetch',
181
+ multiple=True,
182
+ as_indices=True,
183
183
  **kwargs
184
184
  )
185
185
 
@@ -256,7 +256,7 @@ def bootstrap_plugin(
256
256
  _ = prompt(
257
257
  f"Press [Enter] to edit plugin '{plugin_name}',"
258
258
  + " [CTRL+C] to skip.",
259
- icon = False,
259
+ icon=False,
260
260
  )
261
261
  except (KeyboardInterrupt, Exception):
262
262
  return True, "Success"
@@ -267,7 +267,7 @@ def bootstrap_plugin(
267
267
 
268
268
  def _get_plugins_dir_path() -> pathlib.Path:
269
269
  from meerschaum.config.paths import PLUGINS_DIR_PATHS
270
-
270
+
271
271
  if not PLUGINS_DIR_PATHS:
272
272
  raise EnvironmentError("No plugin dir path could be found.")
273
273
 
@@ -278,9 +278,9 @@ def _get_plugins_dir_path() -> pathlib.Path:
278
278
  choose(
279
279
  "In which directory do you want to write your plugin?",
280
280
  [path.as_posix() for path in PLUGINS_DIR_PATHS],
281
- numeric = True,
282
- multiple = False,
283
- default = PLUGINS_DIR_PATHS[0].as_posix(),
281
+ numeric=True,
282
+ multiple=False,
283
+ default=PLUGINS_DIR_PATHS[0].as_posix(),
284
284
  )
285
285
  )
286
286
 
@@ -290,7 +290,7 @@ def _ask_to_uninstall(plugin: mrsm.Plugin, **kwargs: Any) -> SuccessTuple:
290
290
  warn(f"Plugin '{plugin}' is already installed!", stack=False)
291
291
  uninstall_plugin = yes_no(
292
292
  f"Do you want to first uninstall '{plugin}'?",
293
- default = 'n',
293
+ default='n',
294
294
  **kwargs
295
295
  )
296
296
  if not uninstall_plugin:
@@ -178,22 +178,32 @@ def run_process(
178
178
 
179
179
  return ret
180
180
 
181
+
181
182
  def poll_process(
182
- proc: subprocess.Popen,
183
- line_callback: Callable[[bytes], Any],
184
- timeout_seconds: Union[int, float, None] = None,
185
- timeout_callback: Optional[Callable[[Any], Any]] = None,
186
- timeout_callback_args: Optional[Tuple[Any]] = None,
187
- timeout_callback_kwargs: Optional[Dict[str, Any]] = None,
188
- ) -> int:
183
+ proc: subprocess.Popen,
184
+ line_callback: Callable[[bytes], Any],
185
+ timeout_seconds: Union[int, float, None] = None,
186
+ timeout_callback: Optional[Callable[[Any], Any]] = None,
187
+ timeout_callback_args: Optional[Tuple[Any]] = None,
188
+ timeout_callback_kwargs: Optional[Dict[str, Any]] = None,
189
+ ) -> int:
189
190
  """
190
191
  Poll a process and execute a callback function for each line printed to the process's `stdout`.
191
192
  """
192
193
  from meerschaum.utils.threading import Timer
194
+ from meerschaum.utils.warnings import warn
193
195
 
194
196
  def timeout_handler():
195
197
  nonlocal timeout_callback_args, timeout_callback_kwargs
196
- proc.terminate()
198
+ try:
199
+ if platform.system() != 'Windows':
200
+ ### The process being killed may have children.
201
+ os.killpg(os.getpgid(proc.pid), signal.SIGKILL)
202
+ else:
203
+ proc.send_signal(signal.CTRL_BREAK_EVENT)
204
+ proc.terminate()
205
+ except Exception as e:
206
+ warn(f"Failed to kill process:\n{e}")
197
207
  if timeout_callback_args is None:
198
208
  timeout_callback_args = []
199
209
  if timeout_callback_kwargs is None: