meerschaum 2.4.0rc1__tar.gz → 2.4.1__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 (275) hide show
  1. {meerschaum-2.4.0rc1/meerschaum.egg-info → meerschaum-2.4.1}/PKG-INFO +5 -1
  2. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/callbacks/dashboard.py +7 -0
  3. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/callbacks/pipes.py +19 -5
  4. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/pipes.py +17 -2
  5. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_version.py +1 -1
  6. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_pipes.py +8 -5
  7. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_data.py +17 -8
  8. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_sync.py +0 -2
  9. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/jobs/__init__.py +2 -1
  10. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/packages/_packages.py +1 -0
  11. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/schedule.py +1 -0
  12. {meerschaum-2.4.0rc1 → meerschaum-2.4.1/meerschaum.egg-info}/PKG-INFO +5 -1
  13. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum.egg-info/SOURCES.txt +1 -0
  14. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum.egg-info/requires.txt +4 -0
  15. meerschaum-2.4.1/tests/test_pipe_data.py +89 -0
  16. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/tests/test_pipes_dtypes.py +0 -1
  17. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/LICENSE +0 -0
  18. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/NOTICE +0 -0
  19. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/README.md +0 -0
  20. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/__init__.py +0 -0
  21. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/__main__.py +0 -0
  22. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/__init__.py +0 -0
  23. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/arguments/__init__.py +0 -0
  24. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
  25. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/arguments/_parser.py +0 -0
  26. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/docs/__init__.py +0 -0
  27. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/docs/index.py +0 -0
  28. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/entry.py +0 -0
  29. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/gui/__init__.py +0 -0
  30. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/gui/app/__init__.py +0 -0
  31. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/gui/app/_windows.py +0 -0
  32. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/gui/app/actions.py +0 -0
  33. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/gui/app/pipes.py +0 -0
  34. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/shell/Shell.py +0 -0
  35. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
  36. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
  37. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/shell/__init__.py +0 -0
  38. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/shell/resources/__init__.py +0 -0
  39. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/shell/updates.py +0 -0
  40. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/term/TermPageHandler.py +0 -0
  41. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/term/__init__.py +0 -0
  42. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/_internal/term/tools.py +0 -0
  43. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/__init__.py +0 -0
  44. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/api.py +0 -0
  45. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/attach.py +0 -0
  46. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/bootstrap.py +0 -0
  47. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/clear.py +0 -0
  48. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/copy.py +0 -0
  49. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/deduplicate.py +0 -0
  50. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/delete.py +0 -0
  51. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/drop.py +0 -0
  52. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/edit.py +0 -0
  53. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/install.py +0 -0
  54. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/login.py +0 -0
  55. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/os.py +0 -0
  56. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/pause.py +0 -0
  57. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/python.py +0 -0
  58. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/register.py +0 -0
  59. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/reload.py +0 -0
  60. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/restart.py +0 -0
  61. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/setup.py +0 -0
  62. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/sh.py +0 -0
  63. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/show.py +0 -0
  64. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/sql.py +0 -0
  65. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/stack.py +0 -0
  66. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/start.py +0 -0
  67. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/stop.py +0 -0
  68. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/sync.py +0 -0
  69. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/tag.py +0 -0
  70. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/uninstall.py +0 -0
  71. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/upgrade.py +0 -0
  72. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/actions/verify.py +0 -0
  73. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/__init__.py +0 -0
  74. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/_chain.py +0 -0
  75. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/_events.py +0 -0
  76. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/_oauth2.py +0 -0
  77. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/_websockets.py +0 -0
  78. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/__init__.py +0 -0
  79. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/assets/__init__.py +0 -0
  80. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/assets/ansi_up.js +0 -0
  81. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
  82. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/assets/favicon.ico +0 -0
  83. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
  84. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
  85. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/callbacks/__init__.py +0 -0
  86. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/callbacks/custom.py +0 -0
  87. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/callbacks/jobs.py +0 -0
  88. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/callbacks/login.py +0 -0
  89. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/callbacks/plugins.py +0 -0
  90. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/callbacks/register.py +0 -0
  91. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/components.py +0 -0
  92. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/connectors.py +0 -0
  93. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/graphs.py +0 -0
  94. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/jobs.py +0 -0
  95. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/keys.py +0 -0
  96. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/pages/__init__.py +0 -0
  97. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/pages/dashboard.py +0 -0
  98. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/pages/error.py +0 -0
  99. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/pages/login.py +0 -0
  100. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/pages/pipes.py +0 -0
  101. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/pages/plugins.py +0 -0
  102. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/pages/register.py +0 -0
  103. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/plugins.py +0 -0
  104. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/sessions.py +0 -0
  105. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/sync.py +0 -0
  106. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/users.py +0 -0
  107. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/websockets.py +0 -0
  108. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/dash/webterm.py +0 -0
  109. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/models/__init__.py +0 -0
  110. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/models/_interfaces.py +0 -0
  111. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/models/_locations.py +0 -0
  112. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/models/_metrics.py +0 -0
  113. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/models/_pipes.py +0 -0
  114. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/__init__.py +0 -0
  115. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/__init__.py +0 -0
  116. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/css/__init__.py +0 -0
  117. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
  118. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/css/dash.css +0 -0
  119. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
  120. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/css/styles.css +0 -0
  121. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/css/xterm.css +0 -0
  122. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/ico/__init__.py +0 -0
  123. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/ico/logo.ico +0 -0
  124. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/js/__init__.py +0 -0
  125. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/js/action_button.js +0 -0
  126. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/js/main.js +0 -0
  127. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/js/terminado.js +0 -0
  128. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/js/xterm.js +0 -0
  129. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/static/png/__init__.py +0 -0
  130. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/templates/__init__.py +0 -0
  131. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/templates/index.html +0 -0
  132. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/templates/old_index.html +0 -0
  133. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/templates/secret.html +0 -0
  134. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/resources/templates/termpage.html +0 -0
  135. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/__init__.py +0 -0
  136. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_actions.py +0 -0
  137. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_connectors.py +0 -0
  138. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_index.py +0 -0
  139. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_jobs.py +0 -0
  140. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_login.py +0 -0
  141. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_misc.py +0 -0
  142. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_pipes.py +0 -0
  143. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_plugins.py +0 -0
  144. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_users.py +0 -0
  145. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_version.py +0 -0
  146. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/routes/_webterm.py +0 -0
  147. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/api/tables/__init__.py +0 -0
  148. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/__init__.py +0 -0
  149. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_dash.py +0 -0
  150. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_default.py +0 -0
  151. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_edit.py +0 -0
  152. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_environment.py +0 -0
  153. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_formatting.py +0 -0
  154. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_jobs.py +0 -0
  155. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_patch.py +0 -0
  156. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_paths.py +0 -0
  157. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_preprocess.py +0 -0
  158. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_read_config.py +0 -0
  159. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_shell.py +0 -0
  160. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/_sync.py +0 -0
  161. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/paths.py +0 -0
  162. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/resources/__init__.py +0 -0
  163. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/stack/__init__.py +0 -0
  164. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/stack/grafana/__init__.py +0 -0
  165. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
  166. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
  167. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/stack/resources/__init__.py +0 -0
  168. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/config/static/__init__.py +0 -0
  169. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/_Connector.py +0 -0
  170. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/__init__.py +0 -0
  171. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_APIConnector.py +0 -0
  172. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/__init__.py +0 -0
  173. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_actions.py +0 -0
  174. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_fetch.py +0 -0
  175. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_jobs.py +0 -0
  176. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_login.py +0 -0
  177. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_misc.py +0 -0
  178. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_pipes.py +0 -0
  179. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_plugins.py +0 -0
  180. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_request.py +0 -0
  181. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_uri.py +0 -0
  182. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/api/_users.py +0 -0
  183. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/parse.py +0 -0
  184. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
  185. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/plugin/__init__.py +0 -0
  186. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/poll.py +0 -0
  187. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_SQLConnector.py +0 -0
  188. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/__init__.py +0 -0
  189. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_cli.py +0 -0
  190. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_create_engine.py +0 -0
  191. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_fetch.py +0 -0
  192. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_instance.py +0 -0
  193. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_plugins.py +0 -0
  194. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_sql.py +0 -0
  195. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_uri.py +0 -0
  196. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/_users.py +0 -0
  197. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/tables/__init__.py +0 -0
  198. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/tables/types.py +0 -0
  199. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/sql/tools.py +0 -0
  200. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/valkey/_ValkeyConnector.py +0 -0
  201. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/valkey/__init__.py +0 -0
  202. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/valkey/_fetch.py +0 -0
  203. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/valkey/_pipes.py +0 -0
  204. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/valkey/_plugins.py +0 -0
  205. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/connectors/valkey/_users.py +0 -0
  206. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/__init__.py +0 -0
  207. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_attributes.py +0 -0
  208. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_bootstrap.py +0 -0
  209. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_clear.py +0 -0
  210. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_copy.py +0 -0
  211. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_deduplicate.py +0 -0
  212. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_delete.py +0 -0
  213. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_drop.py +0 -0
  214. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_dtypes.py +0 -0
  215. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_edit.py +0 -0
  216. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_fetch.py +0 -0
  217. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_register.py +0 -0
  218. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_show.py +0 -0
  219. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Pipe/_verify.py +0 -0
  220. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/Plugin/__init__.py +0 -0
  221. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/User/_User.py +0 -0
  222. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/User/__init__.py +0 -0
  223. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/core/__init__.py +0 -0
  224. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/jobs/_Executor.py +0 -0
  225. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/jobs/_Job.py +0 -0
  226. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/jobs/systemd.py +0 -0
  227. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/plugins/_Plugin.py +0 -0
  228. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/plugins/__init__.py +0 -0
  229. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/plugins/bootstrap.py +0 -0
  230. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/__init__.py +0 -0
  231. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/_get_pipes.py +0 -0
  232. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/daemon/Daemon.py +0 -0
  233. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/daemon/FileDescriptorInterceptor.py +0 -0
  234. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/daemon/RotatingFile.py +0 -0
  235. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/daemon/StdinFile.py +0 -0
  236. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/daemon/__init__.py +0 -0
  237. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/daemon/_names.py +0 -0
  238. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/dataframe.py +0 -0
  239. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/debug.py +0 -0
  240. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/dtypes/__init__.py +0 -0
  241. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/dtypes/sql.py +0 -0
  242. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/formatting/__init__.py +0 -0
  243. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/formatting/_jobs.py +0 -0
  244. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/formatting/_pipes.py +0 -0
  245. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/formatting/_pprint.py +0 -0
  246. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/formatting/_shell.py +0 -0
  247. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/interactive.py +0 -0
  248. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/misc.py +0 -0
  249. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/networking.py +0 -0
  250. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/packages/__init__.py +0 -0
  251. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/packages/lazy_loader.py +0 -0
  252. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/pool.py +0 -0
  253. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/process.py +0 -0
  254. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/prompt.py +0 -0
  255. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/sql.py +0 -0
  256. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/threading.py +0 -0
  257. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/typing.py +0 -0
  258. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/venv/_Venv.py +0 -0
  259. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/venv/__init__.py +0 -0
  260. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/warnings.py +0 -0
  261. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum/utils/yaml.py +0 -0
  262. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum.egg-info/dependency_links.txt +0 -0
  263. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum.egg-info/entry_points.txt +0 -0
  264. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum.egg-info/top_level.txt +0 -0
  265. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/meerschaum.egg-info/zip-safe +0 -0
  266. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/setup.cfg +0 -0
  267. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/setup.py +0 -0
  268. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/tests/test_actions.py +0 -0
  269. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/tests/test_arguments.py +0 -0
  270. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/tests/test_deduplicate.py +0 -0
  271. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/tests/test_jobs.py +0 -0
  272. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/tests/test_sql.py +0 -0
  273. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/tests/test_sync.py +0 -0
  274. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/tests/test_users.py +0 -0
  275. {meerschaum-2.4.0rc1 → meerschaum-2.4.1}/tests/test_verify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.4.0rc1
3
+ Version: 2.4.1
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -61,6 +61,7 @@ Requires-Dist: prompt-toolkit>=3.0.39; extra == "core"
61
61
  Requires-Dist: more-itertools>=8.7.0; extra == "core"
62
62
  Requires-Dist: fasteners>=0.19.0; extra == "core"
63
63
  Requires-Dist: virtualenv>=20.1.0; extra == "core"
64
+ Requires-Dist: attrs<24.2.0; extra == "core"
64
65
  Requires-Dist: APScheduler>=4.0.0a5; extra == "core"
65
66
  Requires-Dist: uv>=0.2.11; extra == "core"
66
67
  Provides-Extra: jobs
@@ -156,6 +157,7 @@ Requires-Dist: prompt-toolkit>=3.0.39; extra == "sql"
156
157
  Requires-Dist: more-itertools>=8.7.0; extra == "sql"
157
158
  Requires-Dist: fasteners>=0.19.0; extra == "sql"
158
159
  Requires-Dist: virtualenv>=20.1.0; extra == "sql"
160
+ Requires-Dist: attrs<24.2.0; extra == "sql"
159
161
  Requires-Dist: APScheduler>=4.0.0a5; extra == "sql"
160
162
  Requires-Dist: uv>=0.2.11; extra == "sql"
161
163
  Provides-Extra: dash
@@ -212,6 +214,7 @@ Requires-Dist: prompt-toolkit>=3.0.39; extra == "api"
212
214
  Requires-Dist: more-itertools>=8.7.0; extra == "api"
213
215
  Requires-Dist: fasteners>=0.19.0; extra == "api"
214
216
  Requires-Dist: virtualenv>=20.1.0; extra == "api"
217
+ Requires-Dist: attrs<24.2.0; extra == "api"
215
218
  Requires-Dist: APScheduler>=4.0.0a5; extra == "api"
216
219
  Requires-Dist: uv>=0.2.11; extra == "api"
217
220
  Requires-Dist: pprintpp>=0.4.0; extra == "api"
@@ -261,6 +264,7 @@ Requires-Dist: prompt-toolkit>=3.0.39; extra == "full"
261
264
  Requires-Dist: more-itertools>=8.7.0; extra == "full"
262
265
  Requires-Dist: fasteners>=0.19.0; extra == "full"
263
266
  Requires-Dist: virtualenv>=20.1.0; extra == "full"
267
+ Requires-Dist: attrs<24.2.0; extra == "full"
264
268
  Requires-Dist: APScheduler>=4.0.0a5; extra == "full"
265
269
  Requires-Dist: uv>=0.2.11; extra == "full"
266
270
  Requires-Dist: dill>=0.3.3; extra == "full"
@@ -214,6 +214,13 @@ def update_content(*args):
214
214
  trigger = ctx.triggered[0]['prop_id'].split('.')[0] if not trigger else trigger
215
215
 
216
216
  session_data = args[-1]
217
+ mrsm_location_href = session_data.get('mrsm-location.href', None)
218
+ if (
219
+ initial_load
220
+ and mrsm_location_href
221
+ and not mrsm_location_href.rstrip('/').endswith('/dash')
222
+ ):
223
+ raise PreventUpdate
217
224
 
218
225
  ### NOTE: functions MUST return a list of content and a list of alerts
219
226
  triggers = {
@@ -5,7 +5,9 @@
5
5
  Define callbacks for the `/dash/pipes/` page.
6
6
  """
7
7
 
8
- from dash.dependencies import Input, Output
8
+ from urllib.parse import parse_qs
9
+
10
+ from dash.dependencies import Input, Output, State
9
11
  from dash import no_update
10
12
 
11
13
  import meerschaum as mrsm
@@ -13,17 +15,28 @@ from meerschaum.api.dash import dash_app
13
15
  from meerschaum.api.dash.pipes import build_pipe_card
14
16
  from meerschaum.api import CHECK_UPDATE
15
17
  from meerschaum.utils.packages import import_html, import_dcc
18
+ from meerschaum.api.dash.sessions import is_session_authenticated
19
+ from meerschaum.utils.typing import Optional, Dict, Any
16
20
  html, dcc = import_html(check_update=CHECK_UPDATE), import_dcc(check_update=CHECK_UPDATE)
17
21
 
18
22
 
19
23
  @dash_app.callback(
20
24
  Output('pipe-output-div', 'children'),
21
25
  Input('pipes-location', 'pathname'),
26
+ State('pipes-location', 'search'),
27
+ State('session-store', 'data'),
22
28
  )
23
- def render_page_from_url(pathname):
29
+ def render_page_from_url(
30
+ pathname: str,
31
+ pipe_search: str,
32
+ session_data: Optional[Dict[str, Any]],
33
+ ):
24
34
  if not str(pathname).startswith('/dash/pipes'):
25
35
  return no_update
26
36
 
37
+ session_id = (session_data or {}).get('session-id', None)
38
+ authenticated = is_session_authenticated(str(session_id))
39
+
27
40
  keys = pathname.replace('/dash/pipes', '').lstrip('/').rstrip('/').split('/')
28
41
  if len(keys) not in (2, 3):
29
42
  return no_update
@@ -31,11 +44,12 @@ def render_page_from_url(pathname):
31
44
  ck = keys[0]
32
45
  mk = keys[1]
33
46
  lk = keys[2] if len(keys) == 3 else None
47
+ query_params = parse_qs(pipe_search.lstrip('?')) if pipe_search else {}
48
+ instance = query_params.get('instance', [None])[0]
34
49
 
35
- pipe = mrsm.Pipe(ck, mk, lk)
36
- ### TODO Check if logged in
50
+ pipe = mrsm.Pipe(ck, mk, lk, instance=instance)
37
51
  return [
38
52
  html.Br(),
39
- build_pipe_card(pipe, authenticated=False),
53
+ build_pipe_card(pipe, authenticated=authenticated, include_manage=False),
40
54
  html.Br(),
41
55
  ]
@@ -10,6 +10,8 @@ from __future__ import annotations
10
10
  import json
11
11
  import shlex
12
12
  from textwrap import dedent
13
+ from urllib.parse import urlencode
14
+
13
15
  from dash.dependencies import Input, Output, State
14
16
  from meerschaum.utils.typing import List, Optional, Dict, Any, Tuple, Union
15
17
  from meerschaum.utils.misc import string_to_dict
@@ -30,6 +32,7 @@ html, dcc = import_html(check_update=CHECK_UPDATE), import_dcc(check_update=CHEC
30
32
  humanfriendly = attempt_import('humanfriendly', check_update=CHECK_UPDATE)
31
33
  pd = import_pandas()
32
34
 
35
+
33
36
  def pipe_from_ctx(ctx, trigger_property: str = 'n_clicks') -> Union[mrsm.Pipe, None]:
34
37
  """
35
38
  Return a `meerschaum.Pipe` object from a dynamic object with an
@@ -105,6 +108,7 @@ def pipes_from_state(
105
108
  def build_pipe_card(
106
109
  pipe: mrsm.Pipe,
107
110
  authenticated: bool = False,
111
+ include_manage: bool = True,
108
112
  _build_children_num: int = 10,
109
113
  ) -> 'dbc.Card':
110
114
  """
@@ -118,6 +122,9 @@ def build_pipe_card(
118
122
  authenticated: bool, default False
119
123
  If `True`, allow editing functionality to the card.
120
124
 
125
+ include_manage: bool, default True
126
+ If `True` and `authenticated` is `True`, include the "Manage" dropdown.
127
+
121
128
  Returns
122
129
  -------
123
130
  A dash bootstrap components Card representation of the pipe.
@@ -184,7 +191,7 @@ def build_pipe_card(
184
191
  size='sm',
185
192
  color='secondary',
186
193
  )
187
- ) if authenticated else [],
194
+ ) if authenticated and include_manage else [],
188
195
  width=2,
189
196
  ),
190
197
  dbc.Col(width=6),
@@ -217,8 +224,16 @@ def build_pipe_card(
217
224
 
218
225
  ]
219
226
 
227
+ query_params = {}
228
+ default_instance = get_config('meerschaum', 'instance')
229
+ if pipe.instance_keys != default_instance:
230
+ query_params['instance'] = pipe.instance_keys
220
231
  pipe_url = (
221
- f"/dash/pipes/{pipe.connector_keys}/{pipe.metric_key}/{pipe.location_key}"
232
+ f"/dash/pipes/"
233
+ + f"{pipe.connector_keys}/"
234
+ + f"{pipe.metric_key}/"
235
+ + (f"{pipe.location_key}" if pipe.location_key is not None else '')
236
+ + (f"?{urlencode(query_params)}" if query_params else "")
222
237
  )
223
238
 
224
239
  card_header_children = dbc.Row(
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.4.0rc1"
5
+ __version__ = "2.4.1"
@@ -909,7 +909,7 @@ def get_pipe_data_query(
909
909
 
910
910
  cols_names = [sql_item_name(col, self.flavor, None) for col in select_columns]
911
911
  select_cols_str = (
912
- 'SELECT\n'
912
+ 'SELECT\n '
913
913
  + ',\n '.join(
914
914
  [
915
915
  (
@@ -953,14 +953,14 @@ def get_pipe_data_query(
953
953
  warn(
954
954
  f"No datetime could be determined for {pipe}."
955
955
  + "\n Ignoring begin and end...",
956
- stack = False,
956
+ stack=False,
957
957
  )
958
958
  begin, end = None, None
959
959
  else:
960
960
  warn(
961
961
  f"A datetime wasn't specified for {pipe}.\n"
962
962
  + f" Using column \"{_dt}\" for datetime bounds...",
963
- stack = False,
963
+ stack=False,
964
964
  )
965
965
 
966
966
  is_dt_bound = False
@@ -1014,9 +1014,12 @@ def get_pipe_data_query(
1014
1014
 
1015
1015
  if isinstance(limit, int):
1016
1016
  if self.flavor == 'mssql':
1017
- query = f'SELECT TOP {limit} ' + query[len("SELECT *"):]
1017
+ query = f'SELECT TOP {limit}\n' + query[len("SELECT "):]
1018
1018
  elif self.flavor == 'oracle':
1019
- query = f"SELECT * FROM (\n {query}\n)\nWHERE ROWNUM = 1"
1019
+ query = (
1020
+ f"SELECT * FROM (\n {query}\n)\n"
1021
+ + f"WHERE ROWNUM IN ({', '.join([str(i) for i in range(1, limit+1)])})"
1022
+ )
1020
1023
  else:
1021
1024
  query += f"\nLIMIT {limit}"
1022
1025
 
@@ -106,7 +106,7 @@ def get_data(
106
106
  from meerschaum.connectors import get_connector_plugin
107
107
  from meerschaum.utils.misc import iterate_chunks, items_str
108
108
  from meerschaum.utils.dtypes import to_pandas_dtype
109
- from meerschaum.utils.dataframe import add_missing_cols_to_df
109
+ from meerschaum.utils.dataframe import add_missing_cols_to_df, df_is_chunk_generator
110
110
  from meerschaum.utils.packages import attempt_import
111
111
  dd = attempt_import('dask.dataframe') if as_dask else None
112
112
  dask = attempt_import('dask') if as_dask else None
@@ -122,20 +122,29 @@ def get_data(
122
122
  as_iterator = as_iterator or as_chunks
123
123
 
124
124
  def _sort_df(_df):
125
+ if df_is_chunk_generator(_df):
126
+ return _df
125
127
  dt_col = self.columns.get('datetime', None)
126
128
  indices = [] if dt_col not in _df.columns else [dt_col]
127
129
  non_dt_cols = [
128
130
  col
129
- for col_ix, col in self.columns.values()
131
+ for col_ix, col in self.columns.items()
130
132
  if col_ix != 'datetime' and col in _df.columns
131
133
  ]
132
134
  indices.extend(non_dt_cols)
133
- _df.sort_values(
134
- by=indices,
135
- inplace=True,
136
- ascending=(str(order).lower() == 'asc')
137
- )
138
- _df.reset_index(drop=True, inplace=True)
135
+ if 'dask' not in _df.__module__:
136
+ _df.sort_values(
137
+ by=indices,
138
+ inplace=True,
139
+ ascending=(str(order).lower() == 'asc'),
140
+ )
141
+ _df.reset_index(drop=True, inplace=True)
142
+ else:
143
+ _df = _df.sort_values(
144
+ by=indices,
145
+ ascending=(str(order).lower() == 'asc'),
146
+ )
147
+ _df = _df.reset_index(drop=True)
139
148
  if limit is not None and len(_df) > limit:
140
149
  return _df.head(limit)
141
150
  return _df
@@ -26,8 +26,6 @@ from meerschaum.utils.typing import (
26
26
  SuccessTuple,
27
27
  Dict,
28
28
  List,
29
- Iterable,
30
- Generator,
31
29
  )
32
30
  from meerschaum.utils.warnings import warn, error
33
31
 
@@ -11,11 +11,12 @@ import pathlib
11
11
  import meerschaum as mrsm
12
12
  from meerschaum.utils.typing import Dict, Optional, List, SuccessTuple
13
13
 
14
- from meerschaum.jobs._Job import Job
14
+ from meerschaum.jobs._Job import Job, StopMonitoringLogs
15
15
  from meerschaum.jobs._Executor import Executor
16
16
 
17
17
  __all__ = (
18
18
  'Job',
19
+ 'StopMonitoringLogs',
19
20
  'systemd',
20
21
  'get_jobs',
21
22
  'get_filtered_jobs',
@@ -49,6 +49,7 @@ packages: Dict[str, Dict[str, str]] = {
49
49
  'more_itertools' : 'more-itertools>=8.7.0',
50
50
  'fasteners' : 'fasteners>=0.19.0',
51
51
  'virtualenv' : 'virtualenv>=20.1.0',
52
+ 'attrs' : 'attrs<24.2.0',
52
53
  'apscheduler' : 'APScheduler>=4.0.0a5',
53
54
  'uv' : 'uv>=0.2.11',
54
55
  },
@@ -101,6 +101,7 @@ def schedule_function(
101
101
  kw['debug'] = debug
102
102
  kw = filter_keywords(function, **kw)
103
103
 
104
+ _ = mrsm.attempt_import('attrs', lazy=False)
104
105
  apscheduler = mrsm.attempt_import('apscheduler', lazy=False)
105
106
  now = round_time(datetime.now(timezone.utc), timedelta(minutes=1))
106
107
  trigger = parse_schedule(schedule, now=now)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.4.0rc1
3
+ Version: 2.4.1
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -61,6 +61,7 @@ Requires-Dist: prompt-toolkit>=3.0.39; extra == "core"
61
61
  Requires-Dist: more-itertools>=8.7.0; extra == "core"
62
62
  Requires-Dist: fasteners>=0.19.0; extra == "core"
63
63
  Requires-Dist: virtualenv>=20.1.0; extra == "core"
64
+ Requires-Dist: attrs<24.2.0; extra == "core"
64
65
  Requires-Dist: APScheduler>=4.0.0a5; extra == "core"
65
66
  Requires-Dist: uv>=0.2.11; extra == "core"
66
67
  Provides-Extra: jobs
@@ -156,6 +157,7 @@ Requires-Dist: prompt-toolkit>=3.0.39; extra == "sql"
156
157
  Requires-Dist: more-itertools>=8.7.0; extra == "sql"
157
158
  Requires-Dist: fasteners>=0.19.0; extra == "sql"
158
159
  Requires-Dist: virtualenv>=20.1.0; extra == "sql"
160
+ Requires-Dist: attrs<24.2.0; extra == "sql"
159
161
  Requires-Dist: APScheduler>=4.0.0a5; extra == "sql"
160
162
  Requires-Dist: uv>=0.2.11; extra == "sql"
161
163
  Provides-Extra: dash
@@ -212,6 +214,7 @@ Requires-Dist: prompt-toolkit>=3.0.39; extra == "api"
212
214
  Requires-Dist: more-itertools>=8.7.0; extra == "api"
213
215
  Requires-Dist: fasteners>=0.19.0; extra == "api"
214
216
  Requires-Dist: virtualenv>=20.1.0; extra == "api"
217
+ Requires-Dist: attrs<24.2.0; extra == "api"
215
218
  Requires-Dist: APScheduler>=4.0.0a5; extra == "api"
216
219
  Requires-Dist: uv>=0.2.11; extra == "api"
217
220
  Requires-Dist: pprintpp>=0.4.0; extra == "api"
@@ -261,6 +264,7 @@ Requires-Dist: prompt-toolkit>=3.0.39; extra == "full"
261
264
  Requires-Dist: more-itertools>=8.7.0; extra == "full"
262
265
  Requires-Dist: fasteners>=0.19.0; extra == "full"
263
266
  Requires-Dist: virtualenv>=20.1.0; extra == "full"
267
+ Requires-Dist: attrs<24.2.0; extra == "full"
264
268
  Requires-Dist: APScheduler>=4.0.0a5; extra == "full"
265
269
  Requires-Dist: uv>=0.2.11; extra == "full"
266
270
  Requires-Dist: dill>=0.3.3; extra == "full"
@@ -265,6 +265,7 @@ tests/test_actions.py
265
265
  tests/test_arguments.py
266
266
  tests/test_deduplicate.py
267
267
  tests/test_jobs.py
268
+ tests/test_pipe_data.py
268
269
  tests/test_pipes_dtypes.py
269
270
  tests/test_sql.py
270
271
  tests/test_sync.py
@@ -44,6 +44,7 @@ prompt-toolkit>=3.0.39
44
44
  more-itertools>=8.7.0
45
45
  fasteners>=0.19.0
46
46
  virtualenv>=20.1.0
47
+ attrs<24.2.0
47
48
  APScheduler>=4.0.0a5
48
49
  uv>=0.2.11
49
50
  pprintpp>=0.4.0
@@ -97,6 +98,7 @@ prompt-toolkit>=3.0.39
97
98
  more-itertools>=8.7.0
98
99
  fasteners>=0.19.0
99
100
  virtualenv>=20.1.0
101
+ attrs<24.2.0
100
102
  APScheduler>=4.0.0a5
101
103
  uv>=0.2.11
102
104
 
@@ -188,6 +190,7 @@ prompt-toolkit>=3.0.39
188
190
  more-itertools>=8.7.0
189
191
  fasteners>=0.19.0
190
192
  virtualenv>=20.1.0
193
+ attrs<24.2.0
191
194
  APScheduler>=4.0.0a5
192
195
  uv>=0.2.11
193
196
  dill>=0.3.3
@@ -285,6 +288,7 @@ prompt-toolkit>=3.0.39
285
288
  more-itertools>=8.7.0
286
289
  fasteners>=0.19.0
287
290
  virtualenv>=20.1.0
291
+ attrs<24.2.0
288
292
  APScheduler>=4.0.0a5
289
293
  uv>=0.2.11
290
294
 
@@ -0,0 +1,89 @@
1
+ #! /usr/bin/env python3
2
+ # vim:fenc=utf-8
3
+
4
+ """
5
+ Tests for reading data from a pipe.
6
+ """
7
+
8
+ import pytest
9
+ from meerschaum import Pipe
10
+
11
+ from tests.connectors import conns, get_flavors
12
+ from tests import debug
13
+
14
+
15
+ @pytest.mark.parametrize("flavor", get_flavors())
16
+ def test_get_backtrack_data_limit(flavor: str):
17
+ """
18
+ Test reading backtrack data
19
+ """
20
+ conn = conns[flavor]
21
+ pipe = Pipe('test', 'get_backtrack_data_limit', 'foo', instance=conn)
22
+ _ = pipe.delete()
23
+ pipe = Pipe(
24
+ 'test', 'get_backtrack_data_limit', 'foo',
25
+ columns={'datetime': 'id'},
26
+ dtypes={'id': 'int'},
27
+ instance=conn,
28
+ )
29
+ success, msg = pipe.sync(
30
+ [
31
+ {'id': 1, 'color': 'red'},
32
+ {'id': 2, 'color': 'green'},
33
+ {'id': 3, 'color': 'blue'},
34
+ ],
35
+ check_existing=False,
36
+ debug=debug,
37
+ )
38
+ assert success, msg
39
+
40
+ limit = 1
41
+ df = pipe.get_backtrack_data(
42
+ limit=limit,
43
+ debug=debug,
44
+ )
45
+ assert df['id'][0] == 3
46
+ assert len(df) == limit
47
+
48
+
49
+ @pytest.mark.parametrize("flavor", get_flavors())
50
+ def test_get_data_order(flavor: str):
51
+ """
52
+ Test reading backtrack data
53
+ """
54
+ conn = conns[flavor]
55
+ pipe = Pipe('test', 'get_data_order', 'foo', instance=conn)
56
+ _ = pipe.delete()
57
+ pipe = Pipe(
58
+ 'test', 'get_data_order', 'foo',
59
+ columns={'datetime': 'id'},
60
+ dtypes={'id': 'int'},
61
+ instance=conn,
62
+ )
63
+ success, msg = pipe.sync(
64
+ [
65
+ {'id': 1, 'color': 'red'},
66
+ {'id': 2, 'color': 'green'},
67
+ {'id': 3, 'color': 'blue'},
68
+ ],
69
+ check_existing=False,
70
+ debug=debug,
71
+ )
72
+ assert success, msg
73
+
74
+ limit = 2
75
+ df = pipe.get_data(
76
+ limit=limit,
77
+ order='asc',
78
+ debug=debug,
79
+ )
80
+ assert len(df) == limit
81
+ assert df['id'][0] == 1
82
+
83
+ df = pipe.get_data(
84
+ limit=limit,
85
+ order='desc',
86
+ debug=debug,
87
+ )
88
+ assert len(df) == limit
89
+ assert df['id'][0] == 3
@@ -10,7 +10,6 @@ from tests.connectors import conns, get_flavors
10
10
  from tests.test_users import test_register_user
11
11
  import meerschaum as mrsm
12
12
  from meerschaum import Pipe
13
- from meerschaum.actions import actions
14
13
  from meerschaum.utils.dtypes import are_dtypes_equal
15
14
  from meerschaum.utils.sql import sql_item_name
16
15
 
File without changes
File without changes
File without changes