meerschaum 3.0.0rc3__tar.gz → 3.0.0rc6__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 (296) hide show
  1. {meerschaum-3.0.0rc3/meerschaum.egg-info → meerschaum-3.0.0rc6}/PKG-INFO +3 -1
  2. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/arguments/_parser.py +5 -1
  3. meerschaum-3.0.0rc6/meerschaum/_internal/cli/__init__.py +6 -0
  4. meerschaum-3.0.0rc6/meerschaum/_internal/cli/daemons.py +103 -0
  5. meerschaum-3.0.0rc6/meerschaum/_internal/cli/entry.py +184 -0
  6. meerschaum-3.0.0rc6/meerschaum/_internal/cli/workers.py +406 -0
  7. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/docs/index.py +1 -2
  8. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/entry.py +43 -7
  9. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/Shell.py +59 -10
  10. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/static.py +3 -1
  11. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/__init__.py +2 -2
  12. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/attach.py +1 -0
  13. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/register.py +13 -7
  14. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/reload.py +11 -4
  15. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/restart.py +14 -0
  16. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/show.py +8 -3
  17. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/start.py +111 -4
  18. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/stop.py +35 -2
  19. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/sync.py +6 -1
  20. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/__init__.py +25 -6
  21. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/_events.py +5 -0
  22. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/_oauth2.py +47 -4
  23. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/dashboard.py +74 -97
  24. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/jobs.py +3 -2
  25. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/login.py +10 -1
  26. meerschaum-3.0.0rc6/meerschaum/api/dash/callbacks/pipes.py +235 -0
  27. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/register.py +9 -2
  28. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/tokens.py +2 -1
  29. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/components.py +6 -7
  30. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/keys.py +17 -1
  31. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/pipes.py +14 -4
  32. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pipes.py +114 -29
  33. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/tokens.py +1 -1
  34. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/models/_pipes.py +7 -1
  35. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_login.py +73 -5
  36. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_pipes.py +6 -4
  37. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/__init__.py +20 -0
  38. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_default.py +23 -0
  39. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_environment.py +40 -20
  40. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_paths.py +3 -0
  41. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_version.py +1 -1
  42. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/stack/__init__.py +3 -4
  43. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/_Connector.py +1 -2
  44. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/__init__.py +0 -1
  45. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_pipes.py +7 -1
  46. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_plugins.py +9 -1
  47. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_tokens.py +20 -3
  48. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_users.py +8 -1
  49. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_pipes.py +91 -77
  50. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_users.py +8 -1
  51. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/tables/__init__.py +20 -3
  52. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_ValkeyConnector.py +3 -3
  53. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_pipes.py +7 -5
  54. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/__init__.py +62 -72
  55. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_attributes.py +66 -90
  56. meerschaum-3.0.0rc6/meerschaum/core/Pipe/_cache.py +555 -0
  57. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_clear.py +0 -11
  58. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_data.py +0 -50
  59. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_deduplicate.py +0 -13
  60. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_delete.py +12 -21
  61. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_drop.py +11 -23
  62. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_dtypes.py +1 -1
  63. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_index.py +8 -14
  64. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_sync.py +12 -18
  65. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/User/_User.py +1 -2
  66. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/jobs/_Job.py +105 -28
  67. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/jobs/systemd.py +0 -2
  68. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/_get_pipes.py +30 -4
  69. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/Daemon.py +174 -32
  70. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/FileDescriptorInterceptor.py +0 -1
  71. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/RotatingFile.py +63 -36
  72. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/StdinFile.py +44 -13
  73. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/__init__.py +17 -3
  74. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/debug.py +34 -4
  75. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/dtypes/__init__.py +5 -1
  76. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/__init__.py +4 -1
  77. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/_jobs.py +1 -1
  78. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/_pipes.py +47 -46
  79. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/_pprint.py +1 -0
  80. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/_shell.py +12 -6
  81. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/misc.py +40 -38
  82. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/packages/_packages.py +1 -0
  83. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/pipes.py +39 -7
  84. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/process.py +1 -1
  85. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/prompt.py +13 -5
  86. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/sql.py +12 -2
  87. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/threading.py +42 -0
  88. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/venv/__init__.py +2 -0
  89. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/warnings.py +19 -13
  90. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6/meerschaum.egg-info}/PKG-INFO +3 -1
  91. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum.egg-info/SOURCES.txt +5 -0
  92. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum.egg-info/requires.txt +2 -0
  93. meerschaum-3.0.0rc3/meerschaum/api/dash/callbacks/pipes.py +0 -156
  94. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/LICENSE +0 -0
  95. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/MANIFEST.in +0 -0
  96. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/NOTICE +0 -0
  97. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/README.md +0 -0
  98. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/__init__.py +0 -0
  99. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/__main__.py +0 -0
  100. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/__init__.py +0 -0
  101. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/arguments/__init__.py +0 -0
  102. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
  103. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/docs/__init__.py +0 -0
  104. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
  105. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
  106. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/__init__.py +0 -0
  107. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/resources/__init__.py +0 -0
  108. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/updates.py +0 -0
  109. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/term/TermPageHandler.py +0 -0
  110. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/term/__init__.py +0 -0
  111. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/_internal/term/tools.py +0 -0
  112. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/api.py +0 -0
  113. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/bootstrap.py +0 -0
  114. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/clear.py +0 -0
  115. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/copy.py +0 -0
  116. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/deduplicate.py +0 -0
  117. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/delete.py +0 -0
  118. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/drop.py +0 -0
  119. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/edit.py +0 -0
  120. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/index.py +0 -0
  121. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/install.py +0 -0
  122. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/login.py +0 -0
  123. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/os.py +0 -0
  124. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/pause.py +0 -0
  125. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/python.py +0 -0
  126. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/setup.py +0 -0
  127. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/sh.py +0 -0
  128. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/sql.py +0 -0
  129. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/stack.py +0 -0
  130. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/tag.py +0 -0
  131. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/uninstall.py +0 -0
  132. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/upgrade.py +0 -0
  133. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/actions/verify.py +0 -0
  134. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/_chain.py +0 -0
  135. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/_chunks.py +0 -0
  136. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/_exceptions.py +0 -0
  137. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/_tokens.py +0 -0
  138. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/_websockets.py +0 -0
  139. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/__init__.py +0 -0
  140. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/__init__.py +0 -0
  141. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/ansi_up.js +0 -0
  142. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
  143. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/favicon.ico +0 -0
  144. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
  145. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
  146. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/__init__.py +0 -0
  147. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/custom.py +0 -0
  148. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/plugins.py +0 -0
  149. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/settings/__init__.py +0 -0
  150. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/settings/password_reset.py +0 -0
  151. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/connectors.py +0 -0
  152. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/graphs.py +0 -0
  153. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/jobs.py +0 -0
  154. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/__init__.py +0 -0
  155. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/dashboard.py +0 -0
  156. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/error.py +0 -0
  157. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/jobs.py +0 -0
  158. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/login.py +0 -0
  159. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/plugins.py +0 -0
  160. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/register.py +0 -0
  161. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/settings/__init__.py +0 -0
  162. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/settings/password_reset.py +0 -0
  163. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/tokens.py +0 -0
  164. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/plugins.py +0 -0
  165. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/sessions.py +0 -0
  166. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/sync.py +0 -0
  167. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/users.py +0 -0
  168. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/websockets.py +0 -0
  169. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/dash/webterm.py +0 -0
  170. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/models/__init__.py +0 -0
  171. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/models/_actions.py +0 -0
  172. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/models/_tokens.py +0 -0
  173. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/__init__.py +0 -0
  174. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/__init__.py +0 -0
  175. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/__init__.py +0 -0
  176. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
  177. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/dash.css +0 -0
  178. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
  179. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/styles.css +0 -0
  180. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/xterm.css +0 -0
  181. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/ico/__init__.py +0 -0
  182. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/ico/logo.ico +0 -0
  183. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/__init__.py +0 -0
  184. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/action_button.js +0 -0
  185. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/main.js +0 -0
  186. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/terminado.js +0 -0
  187. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/xterm.js +0 -0
  188. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/png/__init__.py +0 -0
  189. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/__init__.py +0 -0
  190. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/index.html +0 -0
  191. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/old_index.html +0 -0
  192. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/secret.html +0 -0
  193. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/termpage.html +0 -0
  194. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/__init__.py +0 -0
  195. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_actions.py +0 -0
  196. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_connectors.py +0 -0
  197. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_index.py +0 -0
  198. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_jobs.py +0 -0
  199. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_misc.py +0 -0
  200. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_plugins.py +0 -0
  201. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_tokens.py +0 -0
  202. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_users.py +0 -0
  203. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_version.py +0 -0
  204. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_webterm.py +0 -0
  205. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/api/tables/__init__.py +0 -0
  206. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_dash.py +0 -0
  207. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_edit.py +0 -0
  208. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_formatting.py +0 -0
  209. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_jobs.py +0 -0
  210. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_patch.py +0 -0
  211. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_preprocess.py +0 -0
  212. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_read_config.py +0 -0
  213. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_shell.py +0 -0
  214. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/_sync.py +0 -0
  215. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/paths.py +0 -0
  216. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/resources/__init__.py +0 -0
  217. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/stack/grafana/__init__.py +0 -0
  218. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
  219. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
  220. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/stack/resources/__init__.py +0 -0
  221. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/config/static.py +0 -0
  222. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_APIConnector.py +0 -0
  223. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/__init__.py +0 -0
  224. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_actions.py +0 -0
  225. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_fetch.py +0 -0
  226. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_jobs.py +0 -0
  227. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_login.py +0 -0
  228. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_misc.py +0 -0
  229. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_plugins.py +0 -0
  230. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_request.py +0 -0
  231. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_tokens.py +0 -0
  232. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_uri.py +0 -0
  233. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_users.py +0 -0
  234. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_InstanceConnector.py +0 -0
  235. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/__init__.py +0 -0
  236. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_pipes.py +0 -0
  237. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/parse.py +0 -0
  238. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
  239. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/plugin/__init__.py +0 -0
  240. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/poll.py +0 -0
  241. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_SQLConnector.py +0 -0
  242. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/__init__.py +0 -0
  243. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_cli.py +0 -0
  244. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_create_engine.py +0 -0
  245. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_fetch.py +0 -0
  246. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_instance.py +0 -0
  247. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_plugins.py +0 -0
  248. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_sql.py +0 -0
  249. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_uri.py +0 -0
  250. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/tables/types.py +0 -0
  251. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/tools.py +0 -0
  252. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/__init__.py +0 -0
  253. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_fetch.py +0 -0
  254. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_plugins.py +0 -0
  255. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_users.py +0 -0
  256. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_bootstrap.py +0 -0
  257. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_copy.py +0 -0
  258. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_edit.py +0 -0
  259. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_fetch.py +0 -0
  260. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_register.py +0 -0
  261. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_show.py +0 -0
  262. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_verify.py +0 -0
  263. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Plugin/_Plugin.py +0 -0
  264. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Plugin/__init__.py +0 -0
  265. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Token/_Token.py +0 -0
  266. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/Token/__init__.py +0 -0
  267. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/User/__init__.py +0 -0
  268. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/core/__init__.py +0 -0
  269. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/jobs/_Executor.py +0 -0
  270. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/jobs/__init__.py +0 -0
  271. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/models/__init__.py +0 -0
  272. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/models/pipes.py +0 -0
  273. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/models/tokens.py +0 -0
  274. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/models/users.py +0 -0
  275. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/plugins/__init__.py +0 -0
  276. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/plugins/bootstrap.py +0 -0
  277. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/__init__.py +0 -0
  278. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/_names.py +0 -0
  279. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/dataframe.py +0 -0
  280. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/dtypes/sql.py +0 -0
  281. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/interactive.py +0 -0
  282. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/networking.py +0 -0
  283. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/packages/__init__.py +0 -0
  284. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/packages/lazy_loader.py +0 -0
  285. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/pool.py +0 -0
  286. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/schedule.py +0 -0
  287. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/typing.py +0 -0
  288. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/venv/_Venv.py +0 -0
  289. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum/utils/yaml.py +0 -0
  290. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum.egg-info/dependency_links.txt +0 -0
  291. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum.egg-info/entry_points.txt +0 -0
  292. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum.egg-info/top_level.txt +0 -0
  293. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/meerschaum.egg-info/zip-safe +0 -0
  294. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/pyproject.toml +0 -0
  295. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/setup.cfg +0 -0
  296. {meerschaum-3.0.0rc3 → meerschaum-3.0.0rc6}/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.0rc6
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>
@@ -192,6 +192,7 @@ Requires-Dist: python-multipart>=0.0.20; extra == "api"
192
192
  Requires-Dist: httpx>=0.28.1; extra == "api"
193
193
  Requires-Dist: httpcore>=1.0.9; extra == "api"
194
194
  Requires-Dist: valkey>=6.1.0; extra == "api"
195
+ Requires-Dist: python-jose>=3.5.0; extra == "api"
195
196
  Requires-Dist: numpy>=2.3.1; extra == "api"
196
197
  Requires-Dist: pandas[parquet]>=2.3.1; extra == "api"
197
198
  Requires-Dist: pyarrow>=20.0.0; extra == "api"
@@ -337,6 +338,7 @@ Requires-Dist: python-multipart>=0.0.20; extra == "full"
337
338
  Requires-Dist: httpx>=0.28.1; extra == "full"
338
339
  Requires-Dist: httpcore>=1.0.9; extra == "full"
339
340
  Requires-Dist: valkey>=6.1.0; extra == "full"
341
+ Requires-Dist: python-jose>=3.5.0; extra == "full"
340
342
  Dynamic: license-file
341
343
  Dynamic: provides-extra
342
344
 
@@ -377,7 +377,7 @@ groups['sync'].add_argument(
377
377
  groups['sync'].add_argument(
378
378
  '--cache', action='store_true',
379
379
  help=(
380
- "When syncing or viewing a pipe's data, sync to a local database for later analysis."
380
+ "Sync pipes' metadata to disk."
381
381
  )
382
382
  )
383
383
 
@@ -508,3 +508,7 @@ groups['misc'].add_argument(
508
508
  + "Default behavior is to only allow recognized actions."
509
509
  )
510
510
  )
511
+ groups['misc'].add_argument(
512
+ '--no-daemon', action='store_true',
513
+ help="Do not use the Meerschaum CLI daemon to execute the action.",
514
+ )
@@ -0,0 +1,6 @@
1
+ #! /usr/bin/env python3
2
+ # vim:fenc=utf-8
3
+
4
+ """
5
+ Define internal utilities for interacting with the CLI daemons.
6
+ """
@@ -0,0 +1,103 @@
1
+ #! /usr/bin/env python3
2
+ # vim:fenc=utf-8
3
+
4
+ """
5
+ Define the CLI daemons utilities.
6
+ """
7
+
8
+ import os
9
+ import threading
10
+ import pathlib
11
+ from typing import Optional, List
12
+
13
+ import meerschaum as mrsm
14
+
15
+
16
+ def get_cli_daemon(ix: Optional[int] = None):
17
+ """
18
+ Get the CLI daemon.
19
+ """
20
+ from meerschaum._internal.cli.workers import ActionWorker
21
+ ix = ix if ix is not None else get_available_cli_daemon_ix()
22
+ return ActionWorker(ix)
23
+
24
+
25
+ def get_cli_lock_path(ix: int) -> pathlib.Path:
26
+ """
27
+ Return the path to a CLI daemon's lock file.
28
+ """
29
+ from meerschaum.config.paths import CLI_RESOURCES_PATH
30
+ return CLI_RESOURCES_PATH / f"ix-{ix}.lock"
31
+
32
+
33
+ def get_cli_session_id() -> str:
34
+ """
35
+ Return the session ID to use for the current process and thread.
36
+ """
37
+ return f"{os.getpid()}.{threading.current_thread().ident}"
38
+
39
+
40
+ def get_available_cli_daemon_ix() -> int:
41
+ """
42
+ Return the index for an available CLI daemon.
43
+ """
44
+ max_ix = mrsm.get_config('system', 'cli', 'max_daemons') - 1
45
+ ix = 0
46
+ while True:
47
+ lock_path = get_cli_lock_path(ix)
48
+ if not lock_path.exists():
49
+ return ix
50
+
51
+ ix += 1
52
+ if ix > max_ix:
53
+ raise EnvironmentError("Too many CLI daemons are running.")
54
+
55
+
56
+ def get_existing_cli_daemon_indices() -> List[int]:
57
+ """
58
+ Return a list of the existing CLI daemons.
59
+ """
60
+ from meerschaum.utils.daemon import get_daemon_ids
61
+ daemon_ids = [daemon_id for daemon_id in get_daemon_ids() if daemon_id.startswith('.cli.')]
62
+ indices = []
63
+
64
+ for daemon_id in daemon_ids:
65
+ try:
66
+ ix = int(daemon_id[len('.cli.'):])
67
+ indices.append(ix)
68
+ except Exception:
69
+ pass
70
+
71
+ return indices
72
+
73
+
74
+ def get_existing_cli_daemons() -> 'List[ActionWorker]':
75
+ """
76
+ Return a list of the existing CLI daemons.
77
+ """
78
+ from meerschaum._internal.cli.workers import ActionWorker
79
+ indices = get_existing_cli_daemon_indices()
80
+ return [
81
+ ActionWorker(ix)
82
+ for ix in indices
83
+ ]
84
+
85
+
86
+ def _get_cli_session_dir_path(session_id: str) -> pathlib.Path:
87
+ """
88
+ Return the path to the file handles for the CLI session.
89
+ """
90
+ from meerschaum.config.paths import CLI_RESOURCES_PATH
91
+ return CLI_RESOURCES_PATH / session_id
92
+
93
+
94
+ def _get_cli_stream_path(
95
+ session_id: str,
96
+ action_id: str,
97
+ stream: str = 'stdout',
98
+ ) -> pathlib.Path:
99
+ """
100
+ Return the file path for the stdout / stderr file stream.
101
+ """
102
+ session_dir_path = _get_cli_session_dir_path(session_id)
103
+ return session_dir_path / f'{action_id}.{stream}'
@@ -0,0 +1,184 @@
1
+ #! /usr/bin/env python3
2
+ # vim:fenc=utf-8
3
+
4
+ """
5
+ Define the CLI daemon entrypoint.
6
+ """
7
+
8
+ import os
9
+ import time
10
+ import uuid
11
+ import shlex
12
+ import shutil
13
+ import traceback
14
+ import signal
15
+ from typing import Optional, Dict, List, Any, Union
16
+
17
+ import meerschaum as mrsm
18
+
19
+
20
+ def entry_with_daemon(
21
+ sysargs: Optional[List[str]] = None,
22
+ _patch_args: Optional[Dict[str, Any]] = None,
23
+ _use_cli_daemon: bool = True,
24
+ _session_id: Optional[str] = None,
25
+ ) -> mrsm.SuccessTuple:
26
+ """
27
+ Parse arguments and launch a Meerschaum action.
28
+
29
+ Returns
30
+ -------
31
+ A `SuccessTuple` indicating success.
32
+ """
33
+ from meerschaum._internal.entry import entry_without_daemon
34
+ from meerschaum._internal.cli.workers import ActionWorker
35
+ from meerschaum._internal.cli.daemons import (
36
+ get_available_cli_daemon_ix,
37
+ get_cli_session_id,
38
+ )
39
+ daemon_is_ready = True
40
+
41
+ found_acceptable_prefix = False
42
+ found_unacceptable_prefix = False
43
+ allowed_prefixes = mrsm.get_config('system', 'cli', 'allowed_prefixes')
44
+ disallowed_prefixes = mrsm.get_config('system', 'cli', 'disallowed_prefixes')
45
+ refresh_seconds = mrsm.get_config('system', 'cli', 'refresh_seconds')
46
+ sysargs_str = sysargs if isinstance(sysargs, str) else shlex.join(sysargs or [])
47
+
48
+ for prefix in allowed_prefixes:
49
+ if sysargs_str.startswith(prefix) or prefix == '*':
50
+ found_acceptable_prefix = True
51
+ break
52
+
53
+ for prefix in disallowed_prefixes:
54
+ if sysargs_str.startswith(prefix) or prefix == '*':
55
+ found_unacceptable_prefix = True
56
+ break
57
+
58
+ if not found_acceptable_prefix or found_unacceptable_prefix:
59
+ daemon_is_ready = False
60
+
61
+ try:
62
+ daemon_ix = get_available_cli_daemon_ix() if daemon_is_ready else -1
63
+ except EnvironmentError as e:
64
+ from meerschaum.utils.warnings import warn
65
+ warn(e, stack=False)
66
+ daemon_ix = -1
67
+ daemon_is_ready = False
68
+
69
+ worker = ActionWorker(daemon_ix, refresh_seconds=refresh_seconds) if daemon_ix != -1 else None
70
+ if worker and worker.lock_path.exists():
71
+ daemon_is_ready = False
72
+
73
+ start_success, start_msg = (
74
+ worker.job.start()
75
+ if worker and daemon_is_ready
76
+ else (False, "Lock exists.")
77
+ )
78
+
79
+ if not start_success:
80
+ daemon_is_ready = False
81
+
82
+ if start_success and worker:
83
+ start = time.perf_counter()
84
+ while (time.perf_counter() - start) < 3:
85
+ if worker.is_ready():
86
+ break
87
+ time.sleep(refresh_seconds)
88
+
89
+ if not daemon_is_ready or worker is None:
90
+ return entry_without_daemon(sysargs, _patch_args=_patch_args)
91
+
92
+ session_id = _session_id or get_cli_session_id()
93
+ action_id = uuid.uuid4().hex
94
+
95
+ terminal_size = shutil.get_terminal_size()
96
+ env = {
97
+ **{
98
+ 'LINES': str(terminal_size.lines),
99
+ 'COLUMNS': str(terminal_size.columns),
100
+ },
101
+ **dict(os.environ),
102
+ }
103
+
104
+ worker.write_input_data({
105
+ 'session_id': session_id,
106
+ 'action_id': action_id,
107
+ 'sysargs': sysargs,
108
+ 'patch_args': _patch_args,
109
+ 'env': env,
110
+ })
111
+
112
+ accepted = False
113
+ exit_data = None
114
+ worker_data = None
115
+
116
+ while not accepted:
117
+ state = worker.read_output_data().get('state', None)
118
+ if state == 'accepted':
119
+ accepted = True
120
+ break
121
+
122
+ time.sleep(refresh_seconds)
123
+
124
+ try:
125
+ log = worker.job.daemon.rotating_log
126
+ worker.job.monitor_logs(
127
+ stop_on_exit=True,
128
+ callback_function=worker.monitor_callback,
129
+ _log=log,
130
+ _wait_if_stopped=False,
131
+ )
132
+ worker_data = worker.read_output_data()
133
+ except KeyboardInterrupt:
134
+ exit_data = {
135
+ 'session_id': session_id,
136
+ 'action_id': action_id,
137
+ 'signal': signal.SIGINT,
138
+ 'traceback': traceback.format_exc(),
139
+ 'success': True,
140
+ 'message': 'Exiting due to keyboard interrupt.',
141
+ }
142
+ except Exception as e:
143
+ exit_data = {
144
+ 'session_id': session_id,
145
+ 'action_id': action_id,
146
+ 'signal': signal.SIGINT,
147
+ 'traceback': traceback.format_exc(),
148
+ 'success': False,
149
+ 'message': f'Encountered exception: {e}',
150
+ }
151
+ except SystemExit:
152
+ exit_data = {
153
+ 'session_id': session_id,
154
+ 'action_id': action_id,
155
+ 'signal': signal.SIGTERM,
156
+ 'traceback': traceback.format_exc(),
157
+ 'success': True,
158
+ 'message': 'Exiting on SIGTERM.',
159
+ }
160
+ except BrokenPipeError:
161
+ return False, "Connection to daemon is broken."
162
+
163
+ if exit_data:
164
+ exit_success = bool(exit_data['success'])
165
+ exit_signal = exit_data['signal']
166
+ worker.send_signal(exit_signal)
167
+ try:
168
+ worker.job.monitor_logs(
169
+ stop_on_exit=True,
170
+ callback_function=worker.monitor_callback,
171
+ _wait_if_stopped=False,
172
+ _log=log,
173
+ )
174
+ except (KeyboardInterrupt, SystemExit):
175
+ worker.send_signal(signal.SIGTERM)
176
+ worker_data = worker.read_output_data()
177
+
178
+ if not exit_success:
179
+ print(exit_data['traceback'])
180
+
181
+ worker.write_input_data({'increment': True})
182
+ success = (worker_data or {}).get('success', False)
183
+ message = (worker_data or {}).get('message', "Failed to retrieve message from CLI worker.")
184
+ return success, message