meerschaum 3.0.0rc1__tar.gz → 3.0.0rc3__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 (305) hide show
  1. meerschaum-3.0.0rc3/MANIFEST.in +2 -0
  2. meerschaum-3.0.0rc3/NOTICE +2 -0
  3. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/PKG-INFO +5 -17
  4. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/arguments/_parser.py +2 -1
  5. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/docs/index.py +49 -2
  6. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/shell/Shell.py +5 -4
  7. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/static.py +8 -24
  8. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/bootstrap.py +1 -1
  9. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/edit.py +6 -3
  10. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/start.py +1 -1
  11. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/verify.py +5 -8
  12. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/__init__.py +2 -1
  13. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/__init__.py +0 -2
  14. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/callbacks/__init__.py +1 -0
  15. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/callbacks/dashboard.py +20 -19
  16. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/callbacks/jobs.py +11 -5
  17. meerschaum-3.0.0rc3/meerschaum/api/dash/callbacks/pipes.py +156 -0
  18. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/callbacks/settings/__init__.py +0 -1
  19. {meerschaum-3.0.0rc1/meerschaum/api/dash/callbacks/settings → meerschaum-3.0.0rc3/meerschaum/api/dash/callbacks}/tokens.py +1 -1
  20. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/jobs.py +1 -1
  21. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pages/__init__.py +2 -1
  22. meerschaum-3.0.0rc1/meerschaum/api/dash/pages/job.py → meerschaum-3.0.0rc3/meerschaum/api/dash/pages/jobs.py +10 -7
  23. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pages/pipes.py +4 -3
  24. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pages/settings/__init__.py +0 -1
  25. {meerschaum-3.0.0rc1/meerschaum/api/dash/pages/settings → meerschaum-3.0.0rc3/meerschaum/api/dash/pages}/tokens.py +6 -8
  26. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pipes.py +131 -0
  27. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/tokens.py +28 -31
  28. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_pipes.py +47 -37
  29. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_default.py +13 -2
  30. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_paths.py +1 -0
  31. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_version.py +1 -1
  32. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/stack/__init__.py +9 -8
  33. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_pipes.py +2 -18
  34. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_tokens.py +2 -2
  35. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/instance/_tokens.py +10 -6
  36. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_SQLConnector.py +14 -0
  37. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_create_engine.py +3 -14
  38. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_pipes.py +175 -185
  39. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_sql.py +38 -20
  40. meerschaum-3.0.0rc3/meerschaum/connectors/sql/tables/__init__.py +374 -0
  41. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/valkey/_pipes.py +44 -16
  42. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/__init__.py +28 -5
  43. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_attributes.py +273 -46
  44. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_data.py +55 -17
  45. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_dtypes.py +19 -4
  46. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_edit.py +2 -0
  47. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_fetch.py +1 -1
  48. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_sync.py +90 -160
  49. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_verify.py +3 -3
  50. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Token/_Token.py +4 -5
  51. meerschaum-3.0.0rc3/meerschaum/plugins/bootstrap.py +839 -0
  52. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/_get_pipes.py +1 -1
  53. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/dataframe.py +385 -68
  54. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/debug.py +15 -15
  55. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/dtypes/__init__.py +387 -22
  56. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/dtypes/sql.py +327 -31
  57. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/misc.py +9 -68
  58. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/packages/__init__.py +7 -21
  59. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/packages/_packages.py +7 -2
  60. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/schedule.py +1 -1
  61. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/sql.py +8 -8
  62. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum.egg-info/PKG-INFO +5 -17
  63. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum.egg-info/SOURCES.txt +8 -14
  64. meerschaum-3.0.0rc3/pyproject.toml +60 -0
  65. meerschaum-3.0.0rc3/setup.cfg +21 -0
  66. meerschaum-3.0.0rc3/setup.py +31 -0
  67. meerschaum-3.0.0rc1/meerschaum/api/dash/callbacks/pipes.py +0 -55
  68. meerschaum-3.0.0rc1/meerschaum/connectors/sql/tables/__init__.py +0 -259
  69. meerschaum-3.0.0rc1/meerschaum/plugins/bootstrap.py +0 -334
  70. meerschaum-3.0.0rc1/setup.cfg +0 -4
  71. meerschaum-3.0.0rc1/setup.py +0 -83
  72. meerschaum-3.0.0rc1/tests/test_actions.py +0 -7
  73. meerschaum-3.0.0rc1/tests/test_arguments.py +0 -112
  74. meerschaum-3.0.0rc1/tests/test_deduplicate.py +0 -100
  75. meerschaum-3.0.0rc1/tests/test_jobs.py +0 -34
  76. meerschaum-3.0.0rc1/tests/test_pipe_data.py +0 -89
  77. meerschaum-3.0.0rc1/tests/test_pipes_dtypes.py +0 -1197
  78. meerschaum-3.0.0rc1/tests/test_sql.py +0 -114
  79. meerschaum-3.0.0rc1/tests/test_sync.py +0 -1348
  80. meerschaum-3.0.0rc1/tests/test_users.py +0 -20
  81. meerschaum-3.0.0rc1/tests/test_verify.py +0 -127
  82. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/LICENSE +0 -0
  83. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/README.md +0 -0
  84. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/__init__.py +0 -0
  85. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/__main__.py +0 -0
  86. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/__init__.py +0 -0
  87. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/arguments/__init__.py +0 -0
  88. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
  89. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/docs/__init__.py +0 -0
  90. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/entry.py +0 -0
  91. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
  92. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
  93. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/shell/__init__.py +0 -0
  94. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/shell/resources/__init__.py +0 -0
  95. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/shell/updates.py +0 -0
  96. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/term/TermPageHandler.py +0 -0
  97. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/term/__init__.py +0 -0
  98. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/_internal/term/tools.py +0 -0
  99. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/__init__.py +0 -0
  100. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/api.py +0 -0
  101. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/attach.py +0 -0
  102. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/clear.py +0 -0
  103. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/copy.py +0 -0
  104. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/deduplicate.py +0 -0
  105. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/delete.py +0 -0
  106. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/drop.py +0 -0
  107. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/index.py +0 -0
  108. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/install.py +0 -0
  109. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/login.py +0 -0
  110. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/os.py +0 -0
  111. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/pause.py +0 -0
  112. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/python.py +0 -0
  113. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/register.py +0 -0
  114. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/reload.py +0 -0
  115. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/restart.py +0 -0
  116. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/setup.py +0 -0
  117. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/sh.py +0 -0
  118. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/show.py +0 -0
  119. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/sql.py +0 -0
  120. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/stack.py +0 -0
  121. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/stop.py +0 -0
  122. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/sync.py +0 -0
  123. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/tag.py +0 -0
  124. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/uninstall.py +0 -0
  125. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/actions/upgrade.py +0 -0
  126. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/_chain.py +0 -0
  127. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/_chunks.py +0 -0
  128. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/_events.py +0 -0
  129. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/_exceptions.py +0 -0
  130. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/_oauth2.py +0 -0
  131. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/_tokens.py +0 -0
  132. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/_websockets.py +0 -0
  133. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/assets/__init__.py +0 -0
  134. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/assets/ansi_up.js +0 -0
  135. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
  136. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/assets/favicon.ico +0 -0
  137. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
  138. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
  139. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/callbacks/custom.py +0 -0
  140. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/callbacks/login.py +0 -0
  141. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/callbacks/plugins.py +0 -0
  142. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/callbacks/register.py +0 -0
  143. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/callbacks/settings/password_reset.py +0 -0
  144. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/components.py +0 -0
  145. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/connectors.py +0 -0
  146. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/graphs.py +0 -0
  147. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/keys.py +0 -0
  148. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pages/dashboard.py +0 -0
  149. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pages/error.py +0 -0
  150. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pages/login.py +0 -0
  151. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pages/plugins.py +0 -0
  152. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pages/register.py +0 -0
  153. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/pages/settings/password_reset.py +0 -0
  154. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/plugins.py +0 -0
  155. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/sessions.py +0 -0
  156. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/sync.py +0 -0
  157. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/users.py +0 -0
  158. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/websockets.py +0 -0
  159. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/dash/webterm.py +0 -0
  160. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/models/__init__.py +0 -0
  161. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/models/_actions.py +0 -0
  162. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/models/_pipes.py +0 -0
  163. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/models/_tokens.py +0 -0
  164. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/__init__.py +0 -0
  165. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/__init__.py +0 -0
  166. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/css/__init__.py +0 -0
  167. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
  168. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/css/dash.css +0 -0
  169. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
  170. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/css/styles.css +0 -0
  171. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/css/xterm.css +0 -0
  172. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/ico/__init__.py +0 -0
  173. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/ico/logo.ico +0 -0
  174. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/js/__init__.py +0 -0
  175. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/js/action_button.js +0 -0
  176. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/js/main.js +0 -0
  177. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/js/terminado.js +0 -0
  178. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/js/xterm.js +0 -0
  179. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/static/png/__init__.py +0 -0
  180. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/templates/__init__.py +0 -0
  181. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/templates/index.html +0 -0
  182. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/templates/old_index.html +0 -0
  183. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/templates/secret.html +0 -0
  184. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/resources/templates/termpage.html +0 -0
  185. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/__init__.py +0 -0
  186. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_actions.py +0 -0
  187. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_connectors.py +0 -0
  188. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_index.py +0 -0
  189. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_jobs.py +0 -0
  190. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_login.py +0 -0
  191. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_misc.py +0 -0
  192. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_plugins.py +0 -0
  193. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_tokens.py +0 -0
  194. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_users.py +0 -0
  195. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_version.py +0 -0
  196. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/routes/_webterm.py +0 -0
  197. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/api/tables/__init__.py +0 -0
  198. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/__init__.py +0 -0
  199. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_dash.py +0 -0
  200. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_edit.py +0 -0
  201. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_environment.py +0 -0
  202. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_formatting.py +0 -0
  203. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_jobs.py +0 -0
  204. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_patch.py +0 -0
  205. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_preprocess.py +0 -0
  206. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_read_config.py +0 -0
  207. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_shell.py +0 -0
  208. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/_sync.py +0 -0
  209. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/paths.py +0 -0
  210. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/resources/__init__.py +0 -0
  211. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/stack/grafana/__init__.py +0 -0
  212. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
  213. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
  214. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/stack/resources/__init__.py +0 -0
  215. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/config/static.py +0 -0
  216. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/_Connector.py +0 -0
  217. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/__init__.py +0 -0
  218. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_APIConnector.py +0 -0
  219. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/__init__.py +0 -0
  220. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_actions.py +0 -0
  221. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_fetch.py +0 -0
  222. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_jobs.py +0 -0
  223. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_login.py +0 -0
  224. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_misc.py +0 -0
  225. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_plugins.py +0 -0
  226. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_request.py +0 -0
  227. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_uri.py +0 -0
  228. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/api/_users.py +0 -0
  229. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/instance/_InstanceConnector.py +0 -0
  230. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/instance/__init__.py +0 -0
  231. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/instance/_pipes.py +0 -0
  232. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/instance/_plugins.py +0 -0
  233. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/instance/_users.py +0 -0
  234. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/parse.py +0 -0
  235. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
  236. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/plugin/__init__.py +0 -0
  237. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/poll.py +0 -0
  238. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/__init__.py +0 -0
  239. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_cli.py +0 -0
  240. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_fetch.py +0 -0
  241. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_instance.py +0 -0
  242. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_plugins.py +0 -0
  243. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_uri.py +0 -0
  244. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/_users.py +0 -0
  245. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/tables/types.py +0 -0
  246. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/sql/tools.py +0 -0
  247. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/valkey/_ValkeyConnector.py +0 -0
  248. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/valkey/__init__.py +0 -0
  249. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/valkey/_fetch.py +0 -0
  250. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/valkey/_plugins.py +0 -0
  251. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/connectors/valkey/_users.py +0 -0
  252. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_bootstrap.py +0 -0
  253. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_clear.py +0 -0
  254. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_copy.py +0 -0
  255. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_deduplicate.py +0 -0
  256. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_delete.py +0 -0
  257. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_drop.py +0 -0
  258. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_index.py +0 -0
  259. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_register.py +0 -0
  260. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Pipe/_show.py +0 -0
  261. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Plugin/_Plugin.py +0 -0
  262. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Plugin/__init__.py +0 -0
  263. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/Token/__init__.py +0 -0
  264. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/User/_User.py +0 -0
  265. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/User/__init__.py +0 -0
  266. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/core/__init__.py +0 -0
  267. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/jobs/_Executor.py +0 -0
  268. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/jobs/_Job.py +0 -0
  269. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/jobs/__init__.py +0 -0
  270. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/jobs/systemd.py +0 -0
  271. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/models/__init__.py +0 -0
  272. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/models/pipes.py +0 -0
  273. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/models/tokens.py +0 -0
  274. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/models/users.py +0 -0
  275. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/plugins/__init__.py +0 -0
  276. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/__init__.py +0 -0
  277. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/daemon/Daemon.py +0 -0
  278. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/daemon/FileDescriptorInterceptor.py +0 -0
  279. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/daemon/RotatingFile.py +0 -0
  280. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/daemon/StdinFile.py +0 -0
  281. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/daemon/__init__.py +0 -0
  282. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/daemon/_names.py +0 -0
  283. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/formatting/__init__.py +0 -0
  284. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/formatting/_jobs.py +0 -0
  285. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/formatting/_pipes.py +0 -0
  286. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/formatting/_pprint.py +0 -0
  287. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/formatting/_shell.py +0 -0
  288. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/interactive.py +0 -0
  289. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/networking.py +0 -0
  290. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/packages/lazy_loader.py +0 -0
  291. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/pipes.py +0 -0
  292. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/pool.py +0 -0
  293. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/process.py +0 -0
  294. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/prompt.py +0 -0
  295. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/threading.py +0 -0
  296. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/typing.py +0 -0
  297. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/venv/_Venv.py +0 -0
  298. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/venv/__init__.py +0 -0
  299. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/warnings.py +0 -0
  300. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum/utils/yaml.py +0 -0
  301. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum.egg-info/dependency_links.txt +0 -0
  302. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum.egg-info/entry_points.txt +0 -0
  303. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum.egg-info/requires.txt +0 -0
  304. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum.egg-info/top_level.txt +0 -0
  305. {meerschaum-3.0.0rc1 → meerschaum-3.0.0rc3}/meerschaum.egg-info/zip-safe +0 -0
@@ -0,0 +1,2 @@
1
+ prune tests
2
+ prune docs
@@ -0,0 +1,2 @@
1
+ Consult the text file 'ACKNOWLEDGEMENTS.md' for licensing information regarding dynamically linked dependencies.
2
+
@@ -1,12 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meerschaum
3
- Version: 3.0.0rc1
3
+ Version: 3.0.0rc3
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
- Home-page: https://meerschaum.io
6
- Author: Bennett Meares
7
- Author-email: bennett.meares@gmail.com
8
- Maintainer-email: bennett.meares@gmail.com
9
- License: Apache Software License 2.0
5
+ Author-email: Bennett Meares <bennett.meares@gmail.com>
6
+ Maintainer-email: Bennett Meares <bennett.meares@gmail.com>
7
+ License-Expression: Apache-2.0
10
8
  Project-URL: Documentation, https://docs.meerschaum.io
11
9
  Project-URL: Changelog, https://meerschaum.io/news/changelog
12
10
  Project-URL: GitHub, https://github.com/bmeares/Meerschaum
@@ -29,6 +27,7 @@ Classifier: Natural Language :: English
29
27
  Requires-Python: >=3.8
30
28
  Description-Content-Type: text/markdown
31
29
  License-File: LICENSE
30
+ License-File: NOTICE
32
31
  Provides-Extra: required
33
32
  Provides-Extra: minimal
34
33
  Provides-Extra: formatting
@@ -338,19 +337,8 @@ Requires-Dist: python-multipart>=0.0.20; extra == "full"
338
337
  Requires-Dist: httpx>=0.28.1; extra == "full"
339
338
  Requires-Dist: httpcore>=1.0.9; extra == "full"
340
339
  Requires-Dist: valkey>=6.1.0; extra == "full"
341
- Dynamic: author
342
- Dynamic: author-email
343
- Dynamic: classifier
344
- Dynamic: description
345
- Dynamic: description-content-type
346
- Dynamic: home-page
347
- Dynamic: license
348
340
  Dynamic: license-file
349
- Dynamic: maintainer-email
350
- Dynamic: project-url
351
341
  Dynamic: provides-extra
352
- Dynamic: requires-python
353
- Dynamic: summary
354
342
 
355
343
  <img src="https://meerschaum.io/assets/banner_1920x320.png" alt="Meerschaum banner" style="width: 100%"/>
356
344
 
@@ -40,7 +40,8 @@ class ArgumentParser(argparse.ArgumentParser):
40
40
 
41
41
  def parse_datetime(dt_str: str) -> Union[datetime, int, str]:
42
42
  """Parse a string into a datetime."""
43
- from meerschaum.utils.misc import is_int, round_time
43
+ from meerschaum.utils.dtypes import round_time
44
+ from meerschaum.utils.misc import is_int
44
45
  if is_int(dt_str):
45
46
  return int(dt_str)
46
47
 
@@ -98,7 +98,7 @@ Decorate your connector classes with `meerschaum.make_connector()` to designate
98
98
  from datetime import datetime, timezone
99
99
  from random import randint
100
100
  import meerschaum as mrsm
101
- from meerschaum.utils.misc import round_time
101
+ from meerschaum.utils.dtypes import round_time
102
102
 
103
103
  @mrsm.make_connector
104
104
  class FooConnector(mrsm.Connector):
@@ -535,14 +535,25 @@ def init_dash(dash_app):
535
535
  <p></p>
536
536
  <ul>
537
537
  <li><code>meerschaum.utils.dataframe.add_missing_cols_to_df()</code></li>
538
+ <li><code>meerschaum.utils.dataframe.chunksize_to_npartitions()</code></li>
539
+ <li><code>meerschaum.utils.dataframe.df_from_literal()</code></li>
538
540
  <li><code>meerschaum.utils.dataframe.df_is_chunk_generator()</code></li>
539
541
  <li><code>meerschaum.utils.dataframe.enforce_dtypes()</code></li>
540
542
  <li><code>meerschaum.utils.dataframe.filter_unseen_df()</code></li>
543
+ <li><code>meerschaum.utils.dataframe.get_bool_cols()</code></li>
544
+ <li><code>meerschaum.utils.dataframe.get_bytes_cols()</code></li>
541
545
  <li><code>meerschaum.utils.dataframe.get_datetime_bound_from_df()</code></li>
546
+ <li><code>meerschaum.utils.dataframe.get_datetime_cols()</code></li>
547
+ <li><code>meerschaum.utils.dataframe.get_datetime_cols_types()</code></li>
542
548
  <li><code>meerschaum.utils.dataframe.get_first_valid_dask_partition()</code></li>
549
+ <li><code>meerschaum.utils.dataframe.get_geometry_cols()</code></li>
550
+ <li><code>meerschaum.utils.dataframe.get_geometry_cols_types()</code></li>
543
551
  <li><code>meerschaum.utils.dataframe.get_json_cols()</code></li>
544
552
  <li><code>meerschaum.utils.dataframe.get_numeric_cols()</code></li>
553
+ <li><code>meerschaum.utils.dataframe.get_special_cols()</code></li>
545
554
  <li><code>meerschaum.utils.dataframe.get_unhashable_cols()</code></li>
555
+ <li><code>meerschaum.utils.dataframe.get_unique_index_values()</code></li>
556
+ <li><code>meerschaum.utils.dataframe.get_uuid_cols()</code></li>
546
557
  <li><code>meerschaum.utils.dataframe.parse_df_datetimes()</code></li>
547
558
  <li><code>meerschaum.utils.dataframe.query_df()</code></li>
548
559
  <li><code>meerschaum.utils.dataframe.to_json()</code></li>
@@ -559,14 +570,51 @@ def init_dash(dash_app):
559
570
  <p></p>
560
571
  <ul>
561
572
  <li><code>meerschaum.utils.dtypes.are_dtypes_equal()</code></li>
573
+ <li><code>meerschaum.utils.dtypes.attempt_cast_to_bytes()</code></li>
574
+ <li><code>meerschaum.utils.dtypes.attempt_cast_to_geometry()</code></li>
562
575
  <li><code>meerschaum.utils.dtypes.attempt_cast_to_numeric()</code></li>
576
+ <li><code>meerschaum.utils.dtypes.attempt_cast_to_uuid()</code></li>
577
+ <li><code>meerschaum.utils.dtypes.coerce_timezone()</code></li>
578
+ <li><code>meerschaum.utils.dtypes.deserialize_base64()</code></li>
579
+ <li><code>meerschaum.utils.dtypes.deserialize_bytes_string()</code></li>
580
+ <li><code>meerschaum.utils.dtypes.deserialize_geometry()</code></li>
581
+ <li><code>meerschaum.utils.dtypes.dtype_is_special()</code></li>
582
+ <li><code>meerschaum.utils.dtypes.encode_bytes_for_bytea()</code></li>
583
+ <li><code>meerschaum.utils.dtypes.geometry_is_wkt()</code></li>
584
+ <li><code>meerschaum.utils.dtypes.get_current_timestamp()</code></li>
585
+ <li><code>meerschaum.utils.dtypes.get_geometry_type_srid()</code></li>
563
586
  <li><code>meerschaum.utils.dtypes.is_dtype_numeric()</code></li>
587
+ <li><code>meerschaum.utils.dtypes.json_serialize_value()</code></li>
564
588
  <li><code>meerschaum.utils.dtypes.none_if_null()</code></li>
589
+ <li><code>meerschaum.utils.dtypes.project_geometry()</code></li>
565
590
  <li><code>meerschaum.utils.dtypes.quantize_decimal()</code></li>
591
+ <li><code>meerschaum.utils.dtypes.serialize_bytes()</code></li>
592
+ <li><code>meerschaum.utils.dtypes.serialize_datetime()</code></li>
593
+ <li><code>meerschaum.utils.dtypes.serialize_date()</code></li>
594
+ <li><code>meerschaum.utils.dtypes.serialize_decimal()</code></li>
595
+ <li><code>meerschaum.utils.dtypes.serialize_geometry()</code></li>
596
+ <li><code>meerschaum.utils.dtypes.to_datetime()</code></li>
566
597
  <li><code>meerschaum.utils.dtypes.to_pandas_dtype()</code></li>
567
598
  <li><code>meerschaum.utils.dtypes.value_is_null()</code></li>
599
+ <li><code>meerschaum.utils.dtypes.get_current_timestamp()</code></li>
600
+ <li><code>meerschaum.utils.dtypes.dtype_is_special()</code></li>
601
+ <li><code>meerschaum.utils.dtypes.get_next_precision_unit()</code></li>
602
+ <li><code>meerschaum.utils.dtypes.round_time()</code></li>
603
+ </ul>
604
+ </details>
605
+ </ul>
606
+
607
+ <ul>
608
+ <details>
609
+ <summary>
610
+ <code>meerschaum.utils.dtypes.sql</code><br>
611
+ Work with SQL data types.<br>
612
+ </summary>
613
+ <p></p>
614
+ <ul>
568
615
  <li><code>meerschaum.utils.dtypes.sql.get_pd_type_from_db_type()</code></li>
569
616
  <li><code>meerschaum.utils.dtypes.sql.get_db_type_from_pd_type()</code></li>
617
+ <li><code>meerschaum.utils.dtypes.sql.get_numeric_precision_scale()</code></li>
570
618
  </ul>
571
619
  </details>
572
620
  </ul>
@@ -605,7 +653,6 @@ def init_dash(dash_app):
605
653
  <p></p>
606
654
  <ul>
607
655
  <li><code>meerschaum.utils.misc.items_str()</code></li>
608
- <li><code>meerschaum.utils.misc.round_time()</code></li>
609
656
  <li><code>meerschaum.utils.misc.is_int()</code></li>
610
657
  <li><code>meerschaum.utils.misc.interval_str()</code></li>
611
658
  <li><code>meerschaum.utils.misc.filter_keywords()</code></li>
@@ -781,10 +781,11 @@ class Shell(cmd.Cmd):
781
781
  instance_keys += ':main'
782
782
 
783
783
  conn_attrs = parse_instance_keys(instance_keys, construct=False, debug=debug)
784
- if conn_attrs is None or not conn_attrs:
785
- conn_keys = str(get_connector(debug=debug))
786
- else:
787
- conn_keys = instance_keys
784
+ conn_keys = (
785
+ str(get_connector(debug=debug))
786
+ if conn_attrs is None
787
+ else instance_keys
788
+ )
788
789
 
789
790
  shell_attrs['instance_keys'] = conn_keys
790
791
 
@@ -14,8 +14,8 @@ __all__ = ('STATIC_CONFIG',)
14
14
 
15
15
  _default_create_engine_args = {
16
16
  # 'method': 'multi',
17
- 'pool_size': 5,
18
- 'max_overflow': 10,
17
+ 'pool_size': (os.cpu_count() or 5),
18
+ 'max_overflow': (os.cpu_count() or 10),
19
19
  'pool_recycle': 3600,
20
20
  'connect_args': {},
21
21
  }
@@ -287,6 +287,11 @@ STATIC_CONFIG: Dict[str, Any] = {
287
287
  'connectors': {
288
288
  'default_label': 'main',
289
289
  },
290
+ 'dtypes': {
291
+ 'datetime': {
292
+ 'default_precision_unit': 'microsecond',
293
+ },
294
+ },
290
295
  'stack': {
291
296
  'dollar_standin': '<DOLLAR>', ### Temporary replacement for docker-compose.yaml.
292
297
  },
@@ -313,8 +318,6 @@ STATIC_CONFIG: Dict[str, Any] = {
313
318
  'dtypes': {
314
319
  'min_ratio_columns_changed_for_full_astype': 0.5,
315
320
  },
316
- 'exists_timeout_seconds': 5.0,
317
- 'static_schema_cache_seconds': 60.0,
318
321
  'max_bound_time_days': 36525,
319
322
  },
320
323
  'jobs': {
@@ -349,24 +352,5 @@ STATIC_CONFIG: Dict[str, Any] = {
349
352
  'users:delete': "Delete the associated user account (or other users for admins).",
350
353
  },
351
354
  },
352
- 'setup': {
353
- 'name': 'meerschaum',
354
- 'formal_name': 'Meerschaum',
355
- 'app_id': 'io.meerschaum',
356
- 'description': 'Sync Time-Series Pipes with Meerschaum',
357
- 'url': 'https://meerschaum.io',
358
- 'project_urls': {
359
- 'Documentation': 'https://docs.meerschaum.io',
360
- 'Changelog': 'https://meerschaum.io/news/changelog',
361
- 'GitHub': 'https://github.com/bmeares/Meerschaum',
362
- 'Homepage': 'https://meerschaum.io',
363
- 'Donate': 'https://github.com/sponsors/bmeares',
364
- 'Discord': 'https://discord.gg/8U8qMUjvcc',
365
- },
366
- 'author': 'Bennett Meares',
367
- 'author_email': 'bennett.meares@gmail.com',
368
- 'maintainer_email': 'bennett.meares@gmail.com',
369
- 'license': 'Apache Software License 2.0',
370
- 'license_files': ('LICENSE',),
371
- },
355
+
372
356
  }
@@ -429,7 +429,7 @@ def _bootstrap_plugins(
429
429
  action = [prompt("Enter the name of your new plugin:")]
430
430
 
431
431
  for plugin_name in action:
432
- bootstrap_success, bootstrap_msg = bootstrap_plugin(plugin_name)
432
+ bootstrap_success, bootstrap_msg = bootstrap_plugin(plugin_name, debug=debug)
433
433
  if not bootstrap_success:
434
434
  return bootstrap_success, bootstrap_msg
435
435
 
@@ -552,7 +552,12 @@ def _edit_tokens(
552
552
  dateutil_parser = mrsm.attempt_import('dateutil.parser')
553
553
 
554
554
  if not action:
555
- return False, "Provide token labels or IDs for the tokens to edit."
555
+ return (
556
+ False, (
557
+ "Provide token labels or IDs for the tokens to edit\n"
558
+ " (run `show tokens` to see registered tokens)."
559
+ )
560
+ )
556
561
 
557
562
  conn = parse_instance_keys(mrsm_instance)
558
563
 
@@ -628,8 +633,6 @@ def _edit_tokens(
628
633
 
629
634
  return True, msg
630
635
 
631
-
632
-
633
636
 
634
637
  ### NOTE: This must be the final statement of the module.
635
638
  ### Any subactions added below these lines will not
@@ -676,7 +676,7 @@ def _start_pipeline(
676
676
 
677
677
  try:
678
678
  run_loop()
679
- except KeyboardInterrupt:
679
+ except (KeyboardInterrupt, SystemExit):
680
680
  warn("Cancelled pipeline.", stack=False)
681
681
  if proc is not None:
682
682
  _stop_process(proc)
@@ -57,8 +57,11 @@ def _verify_packages(
57
57
  Verify the versions of packages.
58
58
  """
59
59
  from meerschaum.utils.packages import (
60
- attempt_import, all_packages, is_installed, venv_contains_package,
61
- _monkey_patch_get_distribution, manually_import_module,
60
+ attempt_import,
61
+ all_packages,
62
+ is_installed,
63
+ venv_contains_package,
64
+ manually_import_module,
62
65
  )
63
66
 
64
67
  venv_packages, base_packages, miss_packages = [], [], []
@@ -78,12 +81,6 @@ def _verify_packages(
78
81
  )
79
82
  _where_list.append(import_name)
80
83
 
81
- if 'flask_compress' in venv_packages or 'dash' in venv_packages:
82
- flask_compress = attempt_import('flask_compress', lazy=False, debug=debug)
83
- _monkey_patch_get_distribution('flask-compress', flask_compress.__version__)
84
- if 'flask_compress' in venv_packages:
85
- venv_packages.remove('flask_compress')
86
-
87
84
  for import_name in base_packages:
88
85
  manually_import_module(import_name, debug=debug, venv=None)
89
86
  for import_name in venv_packages:
@@ -217,8 +217,9 @@ def get_pipe(
217
217
  status_code=403,
218
218
  detail="Unable to serve any pipes with connector keys `mrsm` over the API.",
219
219
  )
220
+
220
221
  pipe = mrsm.Pipe(connector_keys, metric_key, location_key, mrsm_instance=instance_keys)
221
- if is_pipe_registered(pipe, pipes(instance_keys)):
222
+ if is_pipe_registered(pipe, pipes(instance_keys, refresh=False)):
222
223
  return pipes(instance_keys, refresh=refresh)[connector_keys][metric_key][location_key]
223
224
  return pipe
224
225
 
@@ -12,10 +12,8 @@ from meerschaum.utils.packages import (
12
12
  attempt_import,
13
13
  import_dcc,
14
14
  import_html,
15
- _monkey_patch_get_distribution,
16
15
  )
17
16
  flask_compress = attempt_import('flask_compress', lazy=False)
18
- _monkey_patch_get_distribution('flask-compress', flask_compress.__version__)
19
17
  dash = attempt_import('dash', lazy=False)
20
18
 
21
19
  from meerschaum.utils.typing import List, Optional
@@ -10,6 +10,7 @@ from meerschaum.api import debug as _debug
10
10
  import meerschaum.api.dash.callbacks.dashboard
11
11
  import meerschaum.api.dash.callbacks.login
12
12
  import meerschaum.api.dash.callbacks.plugins
13
+ import meerschaum.api.dash.callbacks.tokens
13
14
  import meerschaum.api.dash.callbacks.jobs
14
15
  import meerschaum.api.dash.callbacks.register
15
16
  import meerschaum.api.dash.callbacks.pipes
@@ -72,8 +72,6 @@ keys_state = (
72
72
  State({'type': 'input-flags-dropdown', 'index': ALL}, 'value'),
73
73
  State({'type': 'input-flags-dropdown-text', 'index': ALL}, 'value'),
74
74
  State('instance-select', 'value'),
75
- State('content-div-right', 'children'),
76
- State('success-alert-div', 'children'),
77
75
  State('session-store', 'data'),
78
76
  )
79
77
 
@@ -103,15 +101,20 @@ omit_actions = {
103
101
  _paths = {
104
102
  'login' : pages.login.layout,
105
103
  '' : pages.dashboard.layout,
104
+ 'pipes' : pages.pipes.layout,
106
105
  'plugins' : pages.plugins.layout,
106
+ 'tokens' : pages.tokens.layout,
107
107
  'register': pages.register.layout,
108
108
  'pipes' : pages.pipes.layout,
109
- 'job' : pages.job.layout,
109
+ 'jobs' : pages.jobs.layout,
110
110
  }
111
- _required_login = {''}
111
+ _required_login = {'', 'tokens', 'jobs', 'pipes'}
112
112
  _pages = {
113
113
  'Web Console': '/dash/',
114
+ 'Pipes': '/dash/pipes',
114
115
  'Plugins': '/dash/plugins',
116
+ 'Tokens': '/dash/tokens',
117
+ 'Jobs': '/dash/jobs',
115
118
  }
116
119
 
117
120
 
@@ -495,16 +498,12 @@ def update_flags(input_flags_dropdown_values, n_clicks, input_flags_texts):
495
498
 
496
499
  @dash_app.callback(
497
500
  Output('connector-keys-dropdown', 'options'),
498
- Output('connector-keys-list', 'children'),
499
501
  Output('connector-keys-dropdown', 'value'),
500
502
  Output('metric-keys-dropdown', 'options'),
501
- Output('metric-keys-list', 'children'),
502
503
  Output('metric-keys-dropdown', 'value'),
503
504
  Output('location-keys-dropdown', 'options'),
504
- Output('location-keys-list', 'children'),
505
505
  Output('location-keys-dropdown', 'value'),
506
506
  Output('tags-dropdown', 'options'),
507
- Output('tags-list', 'children'),
508
507
  Output('tags-dropdown', 'value'),
509
508
  Output('instance-select', 'value'),
510
509
  Output('instance-alert-div', 'children'),
@@ -664,22 +663,14 @@ def update_keys_options(
664
663
  for _tag in _tags_options
665
664
  ]
666
665
  ]
667
- _connectors_datalist = [html.Option(value=o['value']) for o in _connectors_options]
668
- _metrics_datalist = [html.Option(value=o['value']) for o in _metrics_options]
669
- _locations_datalist = [html.Option(value=o['value']) for o in _locations_options]
670
- _tags_datalist = [html.Option(value=o['value']) for o in _tags_options]
671
666
  return (
672
667
  _connectors_options,
673
- _connectors_datalist,
674
668
  connector_keys,
675
669
  _metrics_options,
676
- _metrics_datalist,
677
670
  metric_keys,
678
671
  _locations_options,
679
- _locations_datalist,
680
672
  location_keys,
681
673
  _tags_options,
682
- _tags_datalist,
683
674
  tags,
684
675
  (instance_keys if update_instance_keys else dash.no_update),
685
676
  instance_alerts,
@@ -856,6 +847,7 @@ dash_app.clientside_callback(
856
847
  @dash_app.callback(
857
848
  Output("download-dataframe-csv", "data"),
858
849
  Input({'type': 'pipe-download-csv-button', 'index': ALL}, 'n_clicks'),
850
+ prevent_initial_call=True,
859
851
  )
860
852
  def download_pipe_csv(n_clicks):
861
853
  """
@@ -885,6 +877,7 @@ def download_pipe_csv(n_clicks):
885
877
  Output({'type': 'pipe-accordion', 'index': MATCH}, 'children'),
886
878
  Input({'type': 'pipe-accordion', 'index': MATCH}, 'active_item'),
887
879
  State('session-store', 'data'),
880
+ prevent_initial_call=True,
888
881
  )
889
882
  def update_pipe_accordion(item, session_store_data):
890
883
  """
@@ -908,7 +901,8 @@ def update_pipe_accordion(item, session_store_data):
908
901
  @dash_app.callback(
909
902
  Output({'type': 'update-parameters-success-div', 'index': MATCH}, 'children'),
910
903
  Input({'type': 'update-parameters-button', 'index': MATCH}, 'n_clicks'),
911
- State({'type': 'parameters-editor', 'index': MATCH}, 'value')
904
+ State({'type': 'parameters-editor', 'index': MATCH}, 'value'),
905
+ prevent_initial_call=True,
912
906
  )
913
907
  def update_pipe_parameters_click(n_clicks, parameters_editor_text):
914
908
  if not n_clicks:
@@ -942,6 +936,7 @@ def update_pipe_parameters_click(n_clicks, parameters_editor_text):
942
936
  Output({'type': 'update-sql-success-div', 'index': MATCH}, 'children'),
943
937
  Input({'type': 'update-sql-button', 'index': MATCH}, 'n_clicks'),
944
938
  State({'type': 'sql-editor', 'index': MATCH}, 'value'),
939
+ prevent_initial_call=True,
945
940
  )
946
941
  def update_pipe_sql_click(n_clicks, sql_editor_text):
947
942
  if not n_clicks:
@@ -968,7 +963,8 @@ def update_pipe_sql_click(n_clicks, sql_editor_text):
968
963
  @dash_app.callback(
969
964
  Output({'type': 'sync-success-div', 'index': MATCH}, 'children'),
970
965
  Input({'type': 'update-sync-button', 'index': MATCH}, 'n_clicks'),
971
- State({'type': 'sync-editor', 'index': MATCH}, 'value')
966
+ State({'type': 'sync-editor', 'index': MATCH}, 'value'),
967
+ prevent_initial_call=True,
972
968
  )
973
969
  def sync_documents_click(n_clicks, sync_editor_text):
974
970
  if not n_clicks:
@@ -1014,6 +1010,7 @@ def sync_documents_click(n_clicks, sync_editor_text):
1014
1010
  State({'type': 'limit-input', 'index': MATCH}, 'value'),
1015
1011
  State({'type': 'query-data-begin-input', 'index': MATCH}, 'value'),
1016
1012
  State({'type': 'query-data-end-input', 'index': MATCH}, 'value'),
1013
+ prevent_initial_call=True,
1017
1014
  )
1018
1015
  def query_data_click(n_clicks, query_editor_text, limit_value, begin, end):
1019
1016
  triggered = dash.callback_context.triggered
@@ -1024,7 +1021,7 @@ def query_data_click(n_clicks, query_editor_text, limit_value, begin, end):
1024
1021
  raise PreventUpdate
1025
1022
 
1026
1023
  try:
1027
- params_query = json.loads(query_editor_text)
1024
+ params_query = string_to_dict(query_editor_text)
1028
1025
  except Exception as e:
1029
1026
  return alert_from_success_tuple((False, f"Invalid query:\n{e}"))
1030
1027
 
@@ -1130,6 +1127,7 @@ def toggle_navbar_collapse(n_clicks: Optional[int], is_open: bool) -> bool:
1130
1127
  Output('session-store', 'data'),
1131
1128
  Input("sign-out-button", "n_clicks"),
1132
1129
  State('session-store', 'data'),
1130
+ prevent_initial_call=True,
1133
1131
  )
1134
1132
  def sign_out_button_click(
1135
1133
  n_clicks: Optional[int],
@@ -1150,6 +1148,7 @@ def sign_out_button_click(
1150
1148
  Output({'type': 'parameters-editor', 'index': MATCH}, 'value'),
1151
1149
  Input({'type': 'parameters-as-yaml-button', 'index': MATCH}, 'n_clicks'),
1152
1150
  Input({'type': 'parameters-as-json-button', 'index': MATCH}, 'n_clicks'),
1151
+ prevent_initial_call=True,
1153
1152
  )
1154
1153
  def parameters_as_yaml_or_json_click(
1155
1154
  yaml_n_clicks: Optional[int],
@@ -1178,6 +1177,7 @@ def parameters_as_yaml_or_json_click(
1178
1177
  Output({'type': 'sync-editor', 'index': MATCH}, 'value'),
1179
1178
  Input({'type': 'sync-as-json-button', 'index': MATCH}, 'n_clicks'),
1180
1179
  Input({'type': 'sync-as-lines-button', 'index': MATCH}, 'n_clicks'),
1180
+ prevent_initial_call=True,
1181
1181
  )
1182
1182
  def sync_as_json_or_lines_click(
1183
1183
  json_n_clicks: Optional[int],
@@ -1206,6 +1206,7 @@ def sync_as_json_or_lines_click(
1206
1206
  Output('pages-offcanvas', 'children'),
1207
1207
  Input('logo-img', 'n_clicks'),
1208
1208
  State('pages-offcanvas', 'is_open'),
1209
+ prevent_initial_call=True,
1209
1210
  )
1210
1211
  def toggle_pages_offcanvas(n_clicks: Optional[int], is_open: bool):
1211
1212
  """
@@ -13,12 +13,13 @@ import time
13
13
  import traceback
14
14
  from datetime import datetime, timezone
15
15
 
16
+ from meerschaum.jobs import get_jobs
16
17
  from meerschaum.utils.typing import Optional, Dict, Any
17
18
  from meerschaum.api import CHECK_UPDATE
18
19
  from meerschaum.api.dash import dash_app
19
20
  from meerschaum.api.dash.sessions import get_username_from_session
20
21
  from meerschaum.utils.packages import attempt_import, import_dcc, import_html
21
- from meerschaum.api.dash.components import alert_from_success_tuple
22
+ from meerschaum.api.dash.components import alert_from_success_tuple, build_cards_grid
22
23
  from meerschaum.api.dash.jobs import (
23
24
  build_job_card,
24
25
  build_manage_job_buttons_div_children,
@@ -251,17 +252,22 @@ def render_job_page_from_url(
251
252
  session_data: Optional[Dict[str, Any]],
252
253
  ):
253
254
  """
254
- Load the `/job/{name}` page.
255
+ Load the `/dash/jobs/{name}` page.
255
256
  """
256
- if not str(pathname).startswith('/dash/job'):
257
+ if not str(pathname).startswith('/dash/jobs'):
257
258
  return no_update
258
259
 
259
260
  session_id = (session_data or {}).get('session-id', None)
260
261
  authenticated = is_session_authenticated(str(session_id))
261
262
 
262
- job_name = pathname.replace('/dash/job', '').lstrip('/').rstrip('/')
263
+ job_name = pathname.replace('/dash/jobs', '').lstrip('/').rstrip('/')
263
264
  if not job_name:
264
- return no_update
265
+ jobs = get_jobs(executor_keys='local', combine_local_and_systemd=True)
266
+ cards = [
267
+ build_job_card(job, authenticated=authenticated, include_follow=False)
268
+ for job in jobs.values()
269
+ ]
270
+ return [html.Br(), build_cards_grid(cards, 3), html.Br()]
265
271
 
266
272
  job = _get_job(job_name)
267
273
  if not job.exists():