meerschaum 2.3.0rc1__tar.gz → 2.3.0rc2__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 (264) hide show
  1. {meerschaum-2.3.0rc1/meerschaum.egg-info → meerschaum-2.3.0rc2}/PKG-INFO +1 -1
  2. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/arguments/__init__.py +1 -1
  3. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/arguments/_parse_arguments.py +56 -2
  4. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/entry.py +63 -22
  5. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/shell/Shell.py +80 -15
  6. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/delete.py +13 -7
  7. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/start.py +2 -6
  8. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_version.py +1 -1
  9. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/static/__init__.py +2 -0
  10. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/parse.py +0 -1
  11. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/jobs/_Job.py +9 -1
  12. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/jobs/_SystemdExecutor.py +48 -43
  13. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/jobs/__init__.py +35 -12
  14. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/formatting/_jobs.py +2 -14
  15. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2/meerschaum.egg-info}/PKG-INFO +1 -1
  16. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/LICENSE +0 -0
  17. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/NOTICE +0 -0
  18. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/README.md +0 -0
  19. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/__init__.py +0 -0
  20. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/__main__.py +0 -0
  21. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/__init__.py +0 -0
  22. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/arguments/_parser.py +0 -0
  23. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/docs/__init__.py +0 -0
  24. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/docs/index.py +0 -0
  25. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/gui/__init__.py +0 -0
  26. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/gui/app/__init__.py +0 -0
  27. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/gui/app/_windows.py +0 -0
  28. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/gui/app/actions.py +0 -0
  29. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/gui/app/pipes.py +0 -0
  30. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
  31. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
  32. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/shell/__init__.py +0 -0
  33. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/shell/resources/__init__.py +0 -0
  34. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/shell/updates.py +0 -0
  35. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/term/TermPageHandler.py +0 -0
  36. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/term/__init__.py +0 -0
  37. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/_internal/term/tools.py +0 -0
  38. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/__init__.py +0 -0
  39. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/api.py +0 -0
  40. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/attach.py +0 -0
  41. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/bootstrap.py +0 -0
  42. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/clear.py +0 -0
  43. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/copy.py +0 -0
  44. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/deduplicate.py +0 -0
  45. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/drop.py +0 -0
  46. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/edit.py +0 -0
  47. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/install.py +0 -0
  48. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/login.py +0 -0
  49. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/os.py +0 -0
  50. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/pause.py +0 -0
  51. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/python.py +0 -0
  52. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/register.py +0 -0
  53. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/reload.py +0 -0
  54. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/restart.py +0 -0
  55. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/setup.py +0 -0
  56. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/sh.py +0 -0
  57. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/show.py +0 -0
  58. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/sql.py +0 -0
  59. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/stack.py +0 -0
  60. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/stop.py +0 -0
  61. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/sync.py +0 -0
  62. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/tag.py +0 -0
  63. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/uninstall.py +0 -0
  64. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/upgrade.py +0 -0
  65. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/actions/verify.py +0 -0
  66. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/__init__.py +0 -0
  67. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/_chain.py +0 -0
  68. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/_events.py +0 -0
  69. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/_oauth2.py +0 -0
  70. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/_websockets.py +0 -0
  71. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/__init__.py +0 -0
  72. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/actions.py +0 -0
  73. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/assets/__init__.py +0 -0
  74. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/assets/ansi_up.js +0 -0
  75. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
  76. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/assets/favicon.ico +0 -0
  77. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
  78. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
  79. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/callbacks/__init__.py +0 -0
  80. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/callbacks/custom.py +0 -0
  81. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/callbacks/dashboard.py +0 -0
  82. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/callbacks/jobs.py +0 -0
  83. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/callbacks/login.py +0 -0
  84. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/callbacks/plugins.py +0 -0
  85. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/callbacks/register.py +0 -0
  86. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/components.py +0 -0
  87. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/connectors.py +0 -0
  88. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/graphs.py +0 -0
  89. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/jobs.py +0 -0
  90. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/keys.py +0 -0
  91. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/pages/__init__.py +0 -0
  92. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/pages/dashboard.py +0 -0
  93. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/pages/error.py +0 -0
  94. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/pages/login.py +0 -0
  95. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/pages/plugins.py +0 -0
  96. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/pages/register.py +0 -0
  97. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/pipes.py +0 -0
  98. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/plugins.py +0 -0
  99. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/sync.py +0 -0
  100. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/users.py +0 -0
  101. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/websockets.py +0 -0
  102. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/dash/webterm.py +0 -0
  103. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/models/__init__.py +0 -0
  104. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/models/_interfaces.py +0 -0
  105. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/models/_locations.py +0 -0
  106. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/models/_metrics.py +0 -0
  107. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/models/_pipes.py +0 -0
  108. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/__init__.py +0 -0
  109. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/__init__.py +0 -0
  110. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/css/__init__.py +0 -0
  111. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
  112. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/css/dash.css +0 -0
  113. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
  114. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/css/styles.css +0 -0
  115. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/css/xterm.css +0 -0
  116. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/ico/__init__.py +0 -0
  117. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/ico/logo.ico +0 -0
  118. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/js/__init__.py +0 -0
  119. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/js/action_button.js +0 -0
  120. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/js/main.js +0 -0
  121. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/js/terminado.js +0 -0
  122. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/js/xterm.js +0 -0
  123. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/static/png/__init__.py +0 -0
  124. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/templates/__init__.py +0 -0
  125. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/templates/index.html +0 -0
  126. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/templates/old_index.html +0 -0
  127. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/templates/secret.html +0 -0
  128. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/resources/templates/termpage.html +0 -0
  129. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/__init__.py +0 -0
  130. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_actions.py +0 -0
  131. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_connectors.py +0 -0
  132. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_index.py +0 -0
  133. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_jobs.py +0 -0
  134. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_login.py +0 -0
  135. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_misc.py +0 -0
  136. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_pipes.py +0 -0
  137. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_plugins.py +0 -0
  138. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_users.py +0 -0
  139. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_version.py +0 -0
  140. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/routes/_webterm.py +0 -0
  141. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/api/tables/__init__.py +0 -0
  142. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/__init__.py +0 -0
  143. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_dash.py +0 -0
  144. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_default.py +0 -0
  145. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_edit.py +0 -0
  146. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_environment.py +0 -0
  147. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_formatting.py +0 -0
  148. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_jobs.py +0 -0
  149. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_patch.py +0 -0
  150. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_paths.py +0 -0
  151. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_preprocess.py +0 -0
  152. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_read_config.py +0 -0
  153. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_shell.py +0 -0
  154. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/_sync.py +0 -0
  155. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/paths.py +0 -0
  156. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/resources/__init__.py +0 -0
  157. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/stack/__init__.py +0 -0
  158. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/stack/grafana/__init__.py +0 -0
  159. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
  160. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
  161. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/config/stack/resources/__init__.py +0 -0
  162. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/Connector.py +0 -0
  163. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/__init__.py +0 -0
  164. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/APIConnector.py +0 -0
  165. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/__init__.py +0 -0
  166. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_actions.py +0 -0
  167. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_fetch.py +0 -0
  168. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_jobs.py +0 -0
  169. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_login.py +0 -0
  170. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_misc.py +0 -0
  171. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_pipes.py +0 -0
  172. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_plugins.py +0 -0
  173. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_request.py +0 -0
  174. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_uri.py +0 -0
  175. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/api/_users.py +0 -0
  176. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
  177. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/plugin/__init__.py +0 -0
  178. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/poll.py +0 -0
  179. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/SQLConnector.py +0 -0
  180. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/__init__.py +0 -0
  181. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/_cli.py +0 -0
  182. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/_create_engine.py +0 -0
  183. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/_fetch.py +0 -0
  184. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/_instance.py +0 -0
  185. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/_pipes.py +0 -0
  186. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/_plugins.py +0 -0
  187. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/_sql.py +0 -0
  188. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/_uri.py +0 -0
  189. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/_users.py +0 -0
  190. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/tables/__init__.py +0 -0
  191. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/tables/types.py +0 -0
  192. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/connectors/sql/tools.py +0 -0
  193. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/__init__.py +0 -0
  194. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_attributes.py +0 -0
  195. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_bootstrap.py +0 -0
  196. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_clear.py +0 -0
  197. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_data.py +0 -0
  198. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_deduplicate.py +0 -0
  199. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_delete.py +0 -0
  200. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_drop.py +0 -0
  201. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_dtypes.py +0 -0
  202. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_edit.py +0 -0
  203. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_fetch.py +0 -0
  204. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_register.py +0 -0
  205. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_show.py +0 -0
  206. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_sync.py +0 -0
  207. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Pipe/_verify.py +0 -0
  208. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/Plugin/__init__.py +0 -0
  209. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/User/_User.py +0 -0
  210. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/User/__init__.py +0 -0
  211. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/core/__init__.py +0 -0
  212. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/jobs/_Executor.py +0 -0
  213. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/jobs/_LocalExecutor.py +0 -0
  214. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/plugins/_Plugin.py +0 -0
  215. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/plugins/__init__.py +0 -0
  216. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/plugins/bootstrap.py +0 -0
  217. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/__init__.py +0 -0
  218. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/_get_pipes.py +0 -0
  219. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/daemon/Daemon.py +0 -0
  220. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/daemon/FileDescriptorInterceptor.py +0 -0
  221. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/daemon/RotatingFile.py +0 -0
  222. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/daemon/StdinFile.py +0 -0
  223. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/daemon/__init__.py +0 -0
  224. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/daemon/_names.py +0 -0
  225. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/dataframe.py +0 -0
  226. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/debug.py +0 -0
  227. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/dtypes/__init__.py +0 -0
  228. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/dtypes/sql.py +0 -0
  229. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/formatting/__init__.py +0 -0
  230. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/formatting/_pipes.py +0 -0
  231. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/formatting/_pprint.py +0 -0
  232. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/formatting/_shell.py +0 -0
  233. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/interactive.py +0 -0
  234. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/misc.py +0 -0
  235. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/networking.py +0 -0
  236. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/packages/__init__.py +0 -0
  237. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/packages/_packages.py +0 -0
  238. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/packages/lazy_loader.py +0 -0
  239. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/pool.py +0 -0
  240. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/process.py +0 -0
  241. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/prompt.py +0 -0
  242. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/schedule.py +0 -0
  243. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/sql.py +0 -0
  244. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/threading.py +0 -0
  245. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/typing.py +0 -0
  246. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/venv/_Venv.py +0 -0
  247. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/venv/__init__.py +0 -0
  248. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/warnings.py +0 -0
  249. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum/utils/yaml.py +0 -0
  250. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum.egg-info/SOURCES.txt +0 -0
  251. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum.egg-info/dependency_links.txt +0 -0
  252. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum.egg-info/entry_points.txt +0 -0
  253. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum.egg-info/requires.txt +0 -0
  254. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum.egg-info/top_level.txt +0 -0
  255. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/meerschaum.egg-info/zip-safe +0 -0
  256. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/setup.cfg +0 -0
  257. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/setup.py +0 -0
  258. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/tests/test_deduplicate.py +0 -0
  259. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/tests/test_jobs.py +0 -0
  260. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/tests/test_pipes_dtypes.py +0 -0
  261. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/tests/test_sql.py +0 -0
  262. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/tests/test_sync.py +0 -0
  263. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/tests/test_users.py +0 -0
  264. {meerschaum-2.3.0rc1 → meerschaum-2.3.0rc2}/tests/test_verify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.3.0rc1
3
+ Version: 2.3.0rc2
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -8,7 +8,7 @@ This package includes argument parsing utilities.
8
8
 
9
9
  from meerschaum._internal.arguments._parse_arguments import (
10
10
  parse_arguments, parse_line, remove_leading_action,
11
- parse_dict_to_sysargs,
11
+ parse_dict_to_sysargs, split_chained_sysargs,
12
12
  )
13
13
  from meerschaum._internal.arguments._parser import parser
14
14
  from meerschaum.plugins import add_plugin_argument
@@ -19,6 +19,44 @@ _locks = {
19
19
  _loaded_plugins_args: bool = False
20
20
 
21
21
 
22
+ def split_chained_sysargs(sysargs: List[str]) -> List[List[str]]:
23
+ """
24
+ Split a `sysargs` list containing "and" keys (`&&`)
25
+ into a list of individual `sysargs`.
26
+ """
27
+ from meerschaum.config.static import STATIC_CONFIG
28
+ and_key = STATIC_CONFIG['system']['arguments']['and_key']
29
+
30
+ if not sysargs or and_key not in sysargs:
31
+ return [sysargs]
32
+
33
+ ### Coalesce and consecutive joiners into one.
34
+ coalesce_args = []
35
+ previous_arg = None
36
+ for arg in [_arg for _arg in sysargs]:
37
+ if arg == and_key and previous_arg == and_key:
38
+ continue
39
+ coalesce_args.append(arg)
40
+ previous_arg = arg
41
+
42
+ ### Remove any joiners from the ends.
43
+ if coalesce_args[0] == and_key:
44
+ coalesce_args = coalesce_args[1:]
45
+ if coalesce_args[-1] == and_key:
46
+ coalesce_args = coalesce_args[:-1]
47
+
48
+ chained_sysargs = []
49
+ current_sysargs = []
50
+ for arg in coalesce_args:
51
+ if arg != and_key:
52
+ current_sysargs.append(arg)
53
+ else:
54
+ chained_sysargs.append(current_sysargs)
55
+ current_sysargs = []
56
+ chained_sysargs.append(current_sysargs)
57
+ return chained_sysargs
58
+
59
+
22
60
  def parse_arguments(sysargs: List[str]) -> Dict[str, Any]:
23
61
  """
24
62
  Parse a list of arguments into standard Meerschaum arguments.
@@ -206,9 +244,24 @@ def parse_dict_to_sysargs(
206
244
  args_dict: Dict[str, Any]
207
245
  ) -> List[str]:
208
246
  """Revert an arguments dictionary back to a command line list."""
247
+ import shlex
209
248
  from meerschaum._internal.arguments._parser import get_arguments_triggers
210
- sysargs = []
211
- sysargs += args_dict.get('action', [])
249
+ from meerschaum.config.static import STATIC_CONFIG
250
+ from meerschaum.utils.warnings import warn
251
+
252
+ and_key = STATIC_CONFIG['system']['arguments']['and_key']
253
+ if (line := args_dict.get('line', None)):
254
+ return shlex.split(line)
255
+
256
+ if (_sysargs := args_dict.get('sysargs', None)):
257
+ return _sysargs
258
+
259
+ action = args_dict.get('action', None)
260
+ if action and and_key in action:
261
+ warn(f"Cannot determine flags from chained actions:\n{args_dict}")
262
+
263
+ sysargs: List[str] = []
264
+ sysargs.extend(action or [])
212
265
  allow_none_args = {'location_keys'}
213
266
 
214
267
  triggers = get_arguments_triggers()
@@ -216,6 +269,7 @@ def parse_dict_to_sysargs(
216
269
  for a, t in triggers.items():
217
270
  if a == 'action' or a not in args_dict:
218
271
  continue
272
+
219
273
  ### Add boolean flags
220
274
  if isinstance(args_dict[a], bool):
221
275
  if args_dict[a] is True:
@@ -40,31 +40,68 @@ def entry(sysargs: Optional[List[str]] = None) -> SuccessTuple:
40
40
  -------
41
41
  A `SuccessTuple` indicating success.
42
42
  """
43
- from meerschaum._internal.arguments import parse_arguments
43
+ import shlex
44
+ from meerschaum.utils.formatting import make_header
45
+ from meerschaum._internal.arguments import parse_arguments, split_chained_sysargs
44
46
  from meerschaum.config.static import STATIC_CONFIG
45
47
  if sysargs is None:
46
48
  sysargs = []
47
49
  if not isinstance(sysargs, list):
48
- import shlex
49
50
  sysargs = shlex.split(sysargs)
50
- args = parse_arguments(sysargs)
51
- argparse_exception = args.get(
52
- STATIC_CONFIG['system']['arguments']['failure_key'],
53
- None,
51
+
52
+ has_daemon = '-d' in sysargs or '--daemon' in sysargs
53
+ has_start_job = sysargs[:2] == ['start', 'job']
54
+ chained_sysargs = (
55
+ [sysargs]
56
+ if has_daemon or has_start_job
57
+ else split_chained_sysargs(sysargs)
54
58
  )
55
- if argparse_exception is not None:
56
- args_text = args.get('text', '')
57
- if not args_text.startswith('show arguments'):
58
- return (
59
- False,
59
+ results: List[SuccessTuple] = []
60
+
61
+ for _sysargs in chained_sysargs:
62
+ args = parse_arguments(_sysargs)
63
+ argparse_exception = args.get(
64
+ STATIC_CONFIG['system']['arguments']['failure_key'],
65
+ None,
66
+ )
67
+ if argparse_exception is not None:
68
+ args_text = args.get('text', '')
69
+ if not args_text.startswith('show arguments'):
70
+ return (
71
+ False,
72
+ (
73
+ "Invalid arguments:"
74
+ + (f"\n{args_text}" if args_text else '')
75
+ + f"\n {argparse_exception}"
76
+ )
77
+ )
78
+
79
+ entry_success, entry_msg = entry_with_args(**args)
80
+ if not entry_success:
81
+ return entry_success, entry_msg
82
+
83
+ results.append((entry_success, entry_msg))
84
+
85
+ success = all(_success for _success, _ in results)
86
+ msg = (
87
+ results[0][1]
88
+ if len(results) == 1
89
+ else 'Successfully completed steps:\n\n' + '\n'.join(
90
+ [
60
91
  (
61
- "Invalid arguments:"
62
- + (f"\n{args_text}" if args_text else '')
63
- + f"\n {argparse_exception}"
92
+ make_header(shlex.join(_sysargs))
93
+ + '\n ' + _msg + '\n'
64
94
  )
65
- )
95
+ for i, ((_, _msg), _sysargs) in enumerate(zip(results, chained_sysargs))
96
+ ]
97
+ )
98
+ )
99
+ if _systemd_result_path:
100
+ import json
101
+ with open(_systemd_result_path, 'w+', encoding='utf-8') as f:
102
+ json.dump((success, msg), f)
66
103
 
67
- return entry_with_args(**args)
104
+ return success, msg
68
105
 
69
106
 
70
107
  def entry_with_args(
@@ -79,7 +116,16 @@ def entry_with_args(
79
116
  import inspect
80
117
  from meerschaum.actions import get_action, get_main_action_name
81
118
  from meerschaum._internal.arguments import remove_leading_action
82
- from meerschaum.utils.venv import Venv, active_venvs, deactivate_venv
119
+ from meerschaum.utils.venv import active_venvs, deactivate_venv
120
+ from meerschaum.config.static import STATIC_CONFIG
121
+
122
+ and_key = STATIC_CONFIG['system']['arguments']['and_key']
123
+ escaped_and_key = STATIC_CONFIG['system']['arguments']['escaped_and_key']
124
+ if and_key in (sysargs := kw.get('sysargs', [])):
125
+ if '-d' in sysargs or '--daemon' in sysargs:
126
+ sysargs = [(arg if arg != and_key else escaped_and_key) for arg in sysargs]
127
+ return entry(sysargs)
128
+
83
129
  if kw.get('trace', None):
84
130
  from meerschaum.utils.misc import debug_trace
85
131
  debug_trace()
@@ -159,11 +205,6 @@ def entry_with_args(
159
205
  for venv in [venv for venv in active_venvs]:
160
206
  deactivate_venv(venv, debug=kw.get('debug', False), force=True)
161
207
 
162
- if _systemd_result_path:
163
- import json
164
- with open(_systemd_result_path, 'w+', encoding='utf-8') as f:
165
- json.dump(result, f)
166
-
167
208
  return result
168
209
 
169
210
 
@@ -8,6 +8,8 @@ This module is the entry point for the interactive shell.
8
8
  from __future__ import annotations
9
9
  import os
10
10
  from copy import deepcopy
11
+ from itertools import chain
12
+
11
13
  from meerschaum.utils.typing import Union, SuccessTuple, Any, Callable, Optional, List, Dict
12
14
  from meerschaum.utils.packages import attempt_import
13
15
  from meerschaum.config import __doc__, __version__ as version, get_config
@@ -30,6 +32,12 @@ from meerschaum._internal.shell.ShellCompleter import ShellCompleter
30
32
  _clear_screen = get_config('shell', 'clear_screen', patch=True)
31
33
  from meerschaum.utils.misc import string_width, remove_ansi
32
34
  from meerschaum.jobs import get_executor_keys_from_context
35
+ from meerschaum.config.static import STATIC_CONFIG
36
+ from meerschaum._internal.arguments._parse_arguments import (
37
+ split_chained_sysargs,
38
+ parse_arguments,
39
+ parse_line,
40
+ )
33
41
 
34
42
  patch = True
35
43
  ### remove default cmd2 commands
@@ -63,6 +71,8 @@ reserved_completers = {
63
71
  ### To handle dynamic reloading, store shell attributes externally.
64
72
  ### This is because the shell object address gets lost upon reloads.
65
73
  shell_attrs = {}
74
+ AND_KEY: str = STATIC_CONFIG['system']['arguments']['and_key']
75
+ ESCAPED_AND_KEY: str = STATIC_CONFIG['system']['arguments']['escaped_and_key']
66
76
 
67
77
  def _insert_shell_actions(
68
78
  _shell: Optional['Shell'] = None,
@@ -111,7 +121,6 @@ def _completer_wrapper(
111
121
  if _check_keys is not None:
112
122
  return _check_keys
113
123
 
114
- from meerschaum._internal.arguments._parse_arguments import parse_line
115
124
  args = parse_line(line)
116
125
  if target.__name__ != 'default_action_completer':
117
126
  if len(args['action']) > 0:
@@ -149,7 +158,6 @@ def default_action_completer(
149
158
 
150
159
  def _check_complete_keys(line: str) -> Optional[List[str]]:
151
160
  from meerschaum._internal.arguments._parser import parser, get_arguments_triggers
152
- from meerschaum._internal.arguments._parse_arguments import parse_line
153
161
 
154
162
  ### TODO Add all triggers
155
163
  trigger_args = {
@@ -546,16 +554,68 @@ class Shell(cmd.Cmd):
546
554
  else:
547
555
  main_action_name = args['action'][0]
548
556
 
557
+ def _add_flag_to_sysargs(
558
+ chained_sysargs, key, value, flag, shell_key=None,
559
+ ):
560
+ shell_key = shell_key or key
561
+ shell_value = remove_ansi(shell_attrs.get(shell_key) or '')
562
+ if key == 'mrsm_instance':
563
+ default_value = get_config('meerschaum', 'instance')
564
+ elif key == 'repository':
565
+ default_value = get_config('meerschaum', 'default_repository')
566
+ elif key == 'executor_keys':
567
+ default_value = get_executor_keys_from_context()
568
+ else:
569
+ default_value = None
570
+
571
+ if shell_value == default_value:
572
+ return
573
+
574
+ for sysargs in chained_sysargs:
575
+ kwargs = parse_arguments(sysargs)
576
+ if key in kwargs:
577
+ continue
578
+ sysargs.extend([flag, value])
579
+
580
+ args['sysargs'] = list(
581
+ chain.from_iterable(
582
+ sub_sysargs + [AND_KEY]
583
+ for sub_sysargs in chained_sysargs
584
+ )
585
+ )[:-1]
586
+
587
+
549
588
  ### if no instance is provided, use current shell default,
550
589
  ### but not for the 'api' command (to avoid recursion)
551
- if 'mrsm_instance' not in args and main_action_name != 'api':
552
- args['mrsm_instance'] = str(shell_attrs['instance_keys'])
590
+ if main_action_name != 'api':
591
+ chained_sysargs = split_chained_sysargs(args['sysargs'])
592
+ chained_filtered_sysargs = split_chained_sysargs(args['filtered_sysargs'])
593
+ mrsm_instance = shell_attrs['instance_keys']
594
+ args['mrsm_instance'] = mrsm_instance
595
+ _add_flag_to_sysargs(
596
+ chained_sysargs, 'mrsm_instance', mrsm_instance, '-i', 'instance_keys',
597
+ )
598
+ _add_flag_to_sysargs(
599
+ chained_filtered_sysargs, 'mrsm_instance', mrsm_instance, '-i', 'instance_keys',
600
+ )
553
601
 
554
- if 'repository' not in args and main_action_name != 'api':
555
- args['repository'] = str(shell_attrs['repo_keys'])
602
+ repo_keys = str(shell_attrs['repo_keys'])
603
+ args['repository'] = repo_keys
604
+ _add_flag_to_sysargs(
605
+ chained_sysargs, 'repository', repo_keys, '-r', 'repo_keys',
606
+ )
607
+ _add_flag_to_sysargs(
608
+ chained_filtered_sysargs, 'repository', repo_keys, '-r', 'repo_keys',
609
+ )
556
610
 
557
- if 'executor_keys' not in args:
558
- args['executor_keys'] = remove_ansi(str(shell_attrs['executor_keys']))
611
+ executor_keys = remove_ansi(str(shell_attrs['executor_keys']))
612
+ args['executor_keys'] = remove_ansi(executor_keys)
613
+ _add_flag_to_sysargs(
614
+ chained_sysargs, 'executor_keys', executor_keys, '-e',
615
+ )
616
+ _add_flag_to_sysargs(
617
+ chained_filtered_sysargs, 'executor_keys', executor_keys, '-e',
618
+ )
559
619
 
560
620
  ### parse out empty strings
561
621
  if args['action'][0].strip("\"'") == '':
@@ -630,12 +690,12 @@ class Shell(cmd.Cmd):
630
690
  info(f"Debug mode is {'on' if shell_attrs['debug'] else 'off'}.")
631
691
 
632
692
  def do_instance(
633
- self,
634
- action: Optional[List[str]] = None,
635
- executor_keys=None,
636
- debug: bool = False,
637
- **kw: Any
638
- ) -> SuccessTuple:
693
+ self,
694
+ action: Optional[List[str]] = None,
695
+ executor_keys=None,
696
+ debug: bool = False,
697
+ **kw: Any
698
+ ) -> SuccessTuple:
639
699
  """
640
700
  Temporarily set a default Meerschaum instance for the duration of the shell.
641
701
  The default instance is loaded from the Meerschaum configuraton file
@@ -804,6 +864,7 @@ class Shell(cmd.Cmd):
804
864
  from meerschaum import get_connector
805
865
  from meerschaum.connectors.parse import parse_executor_keys
806
866
  from meerschaum.utils.warnings import warn, info
867
+ from meerschaum.jobs import get_executor_keys_from_context
807
868
 
808
869
  if action is None:
809
870
  action = []
@@ -814,6 +875,10 @@ class Shell(cmd.Cmd):
814
875
  executor_keys = ''
815
876
  if executor_keys == '':
816
877
  executor_keys = get_executor_keys_from_context()
878
+
879
+ if executor_keys == 'systemd' and get_executor_keys_from_context() != 'systemd':
880
+ warn(f"Cannot execute via `systemd`, falling back to `local`...", stack=False)
881
+ executor_keys = 'local'
817
882
 
818
883
  conn = parse_executor_keys(executor_keys, debug=debug)
819
884
 
@@ -987,7 +1052,7 @@ def input_with_sigint(_input, session, shell: Optional[Shell] = None):
987
1052
  )
988
1053
 
989
1054
  try:
990
- typ, label = shell_attrs['instance_keys'].split(':')
1055
+ typ, label = shell_attrs['instance_keys'].split(':', maxsplit=1)
991
1056
  connected = typ in connectors and label in connectors[typ]
992
1057
  except Exception as e:
993
1058
  connected = False
@@ -509,12 +509,18 @@ def _complete_delete_jobs(
509
509
  get_stopped_jobs,
510
510
  get_paused_jobs,
511
511
  get_running_jobs,
512
+ get_executor_keys_from_context,
512
513
  )
513
514
  from meerschaum.utils.misc import remove_ansi
514
515
 
515
- executor_keys = executor_keys or remove_ansi(shell_attrs.get('executor_keys', 'local'))
516
+ executor_keys = (
517
+ executor_keys
518
+ or remove_ansi(
519
+ shell_attrs.get('executor_keys', get_executor_keys_from_context())
520
+ )
521
+ )
516
522
 
517
- jobs = get_jobs(executor_keys)
523
+ jobs = get_jobs(executor_keys, include_hidden=False)
518
524
  if _get_job_method:
519
525
  method_keys = [_get_job_method] if isinstance(_get_job_method, str) else _get_job_method
520
526
  method_jobs = {}
@@ -540,11 +546,11 @@ def _complete_delete_jobs(
540
546
 
541
547
 
542
548
  def _delete_venvs(
543
- action: Optional[List[str]] = None,
544
- yes: bool = False,
545
- force: bool = False,
546
- **kwargs: Any
547
- ) -> SuccessTuple:
549
+ action: Optional[List[str]] = None,
550
+ yes: bool = False,
551
+ force: bool = False,
552
+ **kwargs: Any
553
+ ) -> SuccessTuple:
548
554
  """
549
555
  Remove virtual environments.
550
556
  Specify which venvs to remove, or remove everything at once.
@@ -82,6 +82,7 @@ def _start_api(action: Optional[List[str]] = None, **kw):
82
82
  from meerschaum.actions import actions
83
83
  return actions['api'](action=['start'], **kw)
84
84
 
85
+
85
86
  def _start_jobs(
86
87
  action: Optional[List[str]] = None,
87
88
  name: Optional[str] = None,
@@ -119,25 +120,20 @@ def _start_jobs(
119
120
  Start the job 'happy_seal' but via the `--name` flag.
120
121
  This only applies when no text follows the words 'start job'.
121
122
  """
122
- import textwrap
123
123
  from meerschaum.utils.warnings import warn, info
124
124
  from meerschaum.utils.daemon._names import get_new_daemon_name
125
125
  from meerschaum.jobs import (
126
126
  Job,
127
- get_jobs,
128
127
  get_filtered_jobs,
129
128
  get_stopped_jobs,
130
129
  get_running_jobs,
131
130
  get_paused_jobs,
132
- get_restart_jobs,
133
131
  _install_healthcheck_job,
134
132
  )
135
- from meerschaum._internal.arguments._parse_arguments import parse_arguments
136
133
  from meerschaum.actions import actions
137
134
  from meerschaum.utils.prompt import yes_no
138
135
  from meerschaum.utils.formatting import print_tuple
139
- from meerschaum.utils.formatting._jobs import pprint_job, pprint_jobs
140
- from meerschaum.utils.formatting._shell import clear_screen
136
+ from meerschaum.utils.formatting._jobs import pprint_jobs
141
137
  from meerschaum.utils.misc import items_str
142
138
 
143
139
  names = []
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.3.0rc1"
5
+ __version__ = "2.3.0rc2"
@@ -88,6 +88,8 @@ STATIC_CONFIG: Dict[str, Any] = {
88
88
  ),
89
89
  'underscore_standin': '<UNDERSCORE>', ### Temporary replacement for parsing.
90
90
  'failure_key': '_argparse_exception',
91
+ 'and_key': '+',
92
+ 'escaped_and_key': '++',
91
93
  },
92
94
  'urls': {
93
95
  'get-pip.py': 'https://bootstrap.pypa.io/get-pip.py',
@@ -120,7 +120,6 @@ def parse_repo_keys(keys: Optional[str] = None, **kw):
120
120
  def parse_executor_keys(keys: Optional[str] = None, **kw):
121
121
  """Parse the executor keys into an APIConnector or string."""
122
122
  from meerschaum.jobs import get_executor_keys_from_context
123
- from meerschaum.config import get_config
124
123
  if keys is None:
125
124
  keys = get_executor_keys_from_context()
126
125
 
@@ -91,6 +91,14 @@ class Job:
91
91
  if isinstance(sysargs, str):
92
92
  sysargs = shlex.split(sysargs)
93
93
 
94
+ and_key = STATIC_CONFIG['system']['arguments']['and_key']
95
+ escaped_and_key = STATIC_CONFIG['system']['arguments']['escaped_and_key']
96
+ if sysargs:
97
+ sysargs = [
98
+ (arg if arg != escaped_and_key else and_key)
99
+ for arg in sysargs
100
+ ]
101
+
94
102
  ### NOTE: 'local' and 'systemd' executors are being coalesced.
95
103
  if executor_keys is None:
96
104
  from meerschaum.jobs import get_executor_keys_from_context
@@ -831,7 +839,7 @@ class Job:
831
839
  """
832
840
  Return the job's Daemon label (joined sysargs).
833
841
  """
834
- return shlex.join(self.sysargs)
842
+ return shlex.join(self.sysargs).replace(' + ', '\n+ ')
835
843
 
836
844
  def __str__(self) -> str:
837
845
  sysargs = self.sysargs