meerschaum 2.1.4__tar.gz → 2.1.6__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 (249) hide show
  1. meerschaum-2.1.6/PKG-INFO +499 -0
  2. {meerschaum-2.1.4 → meerschaum-2.1.6}/README.md +1 -1
  3. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/__main__.py +1 -1
  4. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/arguments/_parser.py +5 -4
  5. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/docs/index.py +2 -2
  6. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/term/TermPageHandler.py +2 -2
  7. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/register.py +5 -1
  8. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/show.py +12 -1
  9. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/sync.py +49 -21
  10. meerschaum-2.1.6/meerschaum/actions/tag.py +101 -0
  11. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/__init__.py +1 -1
  12. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/callbacks/dashboard.py +1 -1
  13. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_login.py +4 -3
  14. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_formatting.py +1 -1
  15. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_version.py +1 -1
  16. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/APIConnector.py +6 -2
  17. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/_pipes.py +43 -30
  18. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/tables/__init__.py +0 -16
  19. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/__init__.py +1 -2
  20. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_data.py +5 -4
  21. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/__init__.py +3 -1
  22. meerschaum-2.1.4/meerschaum/utils/get_pipes.py → meerschaum-2.1.6/meerschaum/utils/_get_pipes.py +5 -16
  23. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/daemon/Daemon.py +4 -2
  24. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/dataframe.py +3 -3
  25. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/interactive.py +2 -16
  26. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/misc.py +27 -28
  27. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/packages/__init__.py +7 -1
  28. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/packages/_packages.py +0 -1
  29. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/pool.py +14 -17
  30. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/sql.py +41 -19
  31. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/typing.py +11 -0
  32. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/venv/__init__.py +2 -1
  33. meerschaum-2.1.6/meerschaum.egg-info/PKG-INFO +499 -0
  34. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum.egg-info/SOURCES.txt +9 -2
  35. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum.egg-info/requires.txt +0 -1
  36. meerschaum-2.1.6/tests/test_deduplicate.py +104 -0
  37. meerschaum-2.1.6/tests/test_pipes_dtypes.py +503 -0
  38. meerschaum-2.1.6/tests/test_sql.py +114 -0
  39. meerschaum-2.1.6/tests/test_sync.py +722 -0
  40. meerschaum-2.1.6/tests/test_users.py +24 -0
  41. meerschaum-2.1.6/tests/test_verify.py +95 -0
  42. meerschaum-2.1.4/PKG-INFO +0 -248
  43. meerschaum-2.1.4/meerschaum.egg-info/PKG-INFO +0 -248
  44. {meerschaum-2.1.4 → meerschaum-2.1.6}/LICENSE +0 -0
  45. {meerschaum-2.1.4 → meerschaum-2.1.6}/NOTICE +0 -0
  46. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/__init__.py +0 -0
  47. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/__init__.py +0 -0
  48. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/arguments/__init__.py +0 -0
  49. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
  50. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/docs/__init__.py +0 -0
  51. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/entry.py +0 -0
  52. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/gui/__init__.py +0 -0
  53. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/gui/app/__init__.py +0 -0
  54. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/gui/app/_windows.py +0 -0
  55. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/gui/app/actions.py +0 -0
  56. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/gui/app/pipes.py +0 -0
  57. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/shell/Shell.py +0 -0
  58. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
  59. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
  60. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/shell/__init__.py +0 -0
  61. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/shell/resources/__init__.py +0 -0
  62. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/term/__init__.py +0 -0
  63. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/_internal/term/tools.py +0 -0
  64. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/__init__.py +0 -0
  65. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/api.py +0 -0
  66. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/bootstrap.py +0 -0
  67. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/clear.py +0 -0
  68. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/copy.py +0 -0
  69. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/deduplicate.py +0 -0
  70. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/delete.py +0 -0
  71. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/drop.py +0 -0
  72. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/edit.py +0 -0
  73. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/install.py +0 -0
  74. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/login.py +0 -0
  75. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/os.py +0 -0
  76. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/pause.py +0 -0
  77. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/python.py +0 -0
  78. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/reload.py +0 -0
  79. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/setup.py +0 -0
  80. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/sh.py +0 -0
  81. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/sql.py +0 -0
  82. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/stack.py +0 -0
  83. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/start.py +0 -0
  84. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/stop.py +0 -0
  85. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/uninstall.py +0 -0
  86. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/upgrade.py +0 -0
  87. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/actions/verify.py +0 -0
  88. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/_chain.py +0 -0
  89. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/_events.py +0 -0
  90. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/_oauth2.py +0 -0
  91. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/_websockets.py +0 -0
  92. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/__init__.py +0 -0
  93. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/actions.py +0 -0
  94. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/assets/__init__.py +0 -0
  95. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/assets/ansi_up.js +0 -0
  96. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
  97. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/assets/favicon.ico +0 -0
  98. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
  99. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
  100. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/callbacks/__init__.py +0 -0
  101. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/callbacks/jobs.py +0 -0
  102. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/callbacks/login.py +0 -0
  103. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/callbacks/plugins.py +0 -0
  104. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/callbacks/register.py +0 -0
  105. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/components.py +0 -0
  106. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/connectors.py +0 -0
  107. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/graphs.py +0 -0
  108. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/jobs.py +0 -0
  109. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/keys.py +0 -0
  110. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/pages/__init__.py +0 -0
  111. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/pages/dashboard.py +0 -0
  112. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/pages/error.py +0 -0
  113. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/pages/login.py +0 -0
  114. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/pages/plugins.py +0 -0
  115. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/pages/register.py +0 -0
  116. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/pipes.py +0 -0
  117. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/plugins.py +0 -0
  118. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/sync.py +0 -0
  119. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/users.py +0 -0
  120. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/websockets.py +0 -0
  121. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/dash/webterm.py +0 -0
  122. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/models/__init__.py +0 -0
  123. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/models/_interfaces.py +0 -0
  124. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/models/_locations.py +0 -0
  125. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/models/_metrics.py +0 -0
  126. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/models/_pipes.py +0 -0
  127. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/__init__.py +0 -0
  128. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/__init__.py +0 -0
  129. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/css/__init__.py +0 -0
  130. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
  131. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/css/dash.css +0 -0
  132. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
  133. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/css/styles.css +0 -0
  134. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/css/xterm.css +0 -0
  135. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/ico/__init__.py +0 -0
  136. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/ico/logo.ico +0 -0
  137. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/js/__init__.py +0 -0
  138. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/js/action_button.js +0 -0
  139. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/js/main.js +0 -0
  140. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/js/terminado.js +0 -0
  141. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/js/xterm.js +0 -0
  142. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/static/png/__init__.py +0 -0
  143. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/templates/__init__.py +0 -0
  144. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/templates/index.html +0 -0
  145. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/templates/old_index.html +0 -0
  146. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/templates/secret.html +0 -0
  147. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/resources/templates/termpage.html +0 -0
  148. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/__init__.py +0 -0
  149. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_actions.py +0 -0
  150. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_connectors.py +0 -0
  151. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_index.py +0 -0
  152. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_misc.py +0 -0
  153. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_pipes.py +0 -0
  154. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_plugins.py +0 -0
  155. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_users.py +0 -0
  156. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_version.py +0 -0
  157. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/routes/_webterm.py +0 -0
  158. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/api/tables/__init__.py +0 -0
  159. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/__init__.py +0 -0
  160. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_default.py +0 -0
  161. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_edit.py +0 -0
  162. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_environment.py +0 -0
  163. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_jobs.py +0 -0
  164. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_patch.py +0 -0
  165. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_paths.py +0 -0
  166. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_preprocess.py +0 -0
  167. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_read_config.py +0 -0
  168. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_shell.py +0 -0
  169. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/_sync.py +0 -0
  170. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/resources/__init__.py +0 -0
  171. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/stack/__init__.py +0 -0
  172. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/stack/grafana/__init__.py +0 -0
  173. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
  174. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
  175. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/stack/resources/__init__.py +0 -0
  176. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/config/static/__init__.py +0 -0
  177. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/Connector.py +0 -0
  178. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/__init__.py +0 -0
  179. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/__init__.py +0 -0
  180. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/_actions.py +0 -0
  181. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/_fetch.py +0 -0
  182. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/_login.py +0 -0
  183. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/_misc.py +0 -0
  184. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/_pipes.py +0 -0
  185. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/_plugins.py +0 -0
  186. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/_request.py +0 -0
  187. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/_uri.py +0 -0
  188. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/api/_users.py +0 -0
  189. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/parse.py +0 -0
  190. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
  191. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/plugin/__init__.py +0 -0
  192. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/poll.py +0 -0
  193. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/SQLConnector.py +0 -0
  194. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/__init__.py +0 -0
  195. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/_cli.py +0 -0
  196. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/_create_engine.py +0 -0
  197. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/_fetch.py +0 -0
  198. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/_instance.py +0 -0
  199. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/_plugins.py +0 -0
  200. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/_sql.py +0 -0
  201. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/_uri.py +0 -0
  202. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/_users.py +0 -0
  203. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/tables/types.py +0 -0
  204. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/connectors/sql/tools.py +0 -0
  205. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_attributes.py +0 -0
  206. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_bootstrap.py +0 -0
  207. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_clear.py +0 -0
  208. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_deduplicate.py +0 -0
  209. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_delete.py +0 -0
  210. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_drop.py +0 -0
  211. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_dtypes.py +0 -0
  212. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_edit.py +0 -0
  213. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_fetch.py +0 -0
  214. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_register.py +0 -0
  215. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_show.py +0 -0
  216. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_sync.py +0 -0
  217. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Pipe/_verify.py +0 -0
  218. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/Plugin/__init__.py +0 -0
  219. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/User/_User.py +0 -0
  220. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/User/__init__.py +0 -0
  221. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/core/__init__.py +0 -0
  222. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/plugins/_Plugin.py +0 -0
  223. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/plugins/__init__.py +0 -0
  224. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/daemon/RotatingFile.py +0 -0
  225. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/daemon/__init__.py +0 -0
  226. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/daemon/_names.py +0 -0
  227. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/debug.py +0 -0
  228. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/dtypes/__init__.py +0 -0
  229. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/dtypes/sql.py +0 -0
  230. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/formatting/__init__.py +0 -0
  231. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/formatting/_jobs.py +0 -0
  232. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/formatting/_pipes.py +0 -0
  233. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/formatting/_pprint.py +0 -0
  234. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/formatting/_shell.py +0 -0
  235. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/networking.py +0 -0
  236. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/packages/lazy_loader.py +0 -0
  237. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/process.py +0 -0
  238. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/prompt.py +0 -0
  239. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/schedule.py +0 -0
  240. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/threading.py +0 -0
  241. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/venv/_Venv.py +0 -0
  242. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/warnings.py +0 -0
  243. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum/utils/yaml.py +0 -0
  244. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum.egg-info/dependency_links.txt +0 -0
  245. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum.egg-info/entry_points.txt +0 -0
  246. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum.egg-info/top_level.txt +0 -0
  247. {meerschaum-2.1.4 → meerschaum-2.1.6}/meerschaum.egg-info/zip-safe +0 -0
  248. {meerschaum-2.1.4 → meerschaum-2.1.6}/setup.cfg +0 -0
  249. {meerschaum-2.1.4 → meerschaum-2.1.6}/setup.py +0 -0
@@ -0,0 +1,499 @@
1
+ Metadata-Version: 2.1
2
+ Name: meerschaum
3
+ Version: 2.1.6
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
10
+ Project-URL: Documentation, https://docs.meerschaum.io
11
+ Project-URL: Changelog, https://meerschaum.io/news/changelog
12
+ Project-URL: GitHub, https://github.com/bmeares/Meerschaum
13
+ Project-URL: Homepage, https://meerschaum.io
14
+ Project-URL: Donate, https://github.com/sponsors/bmeares
15
+ Project-URL: Discord, https://discord.gg/8U8qMUjvcc
16
+ Classifier: Development Status :: 5 - Production/Stable
17
+ Classifier: Intended Audience :: System Administrators
18
+ Classifier: License :: OSI Approved :: Apache Software License
19
+ Classifier: Operating System :: POSIX :: Linux
20
+ Classifier: Operating System :: Microsoft :: Windows
21
+ Classifier: Operating System :: MacOS
22
+ Classifier: Programming Language :: SQL
23
+ Classifier: Programming Language :: Python :: 3.8
24
+ Classifier: Programming Language :: Python :: 3.9
25
+ Classifier: Programming Language :: Python :: 3.10
26
+ Classifier: Programming Language :: Python :: 3.11
27
+ Classifier: Programming Language :: Python :: 3.12
28
+ Classifier: Topic :: Database
29
+ Classifier: Natural Language :: English
30
+ Requires-Python: >=3.8
31
+ Description-Content-Type: text/markdown
32
+ License-File: LICENSE
33
+ License-File: NOTICE
34
+ Provides-Extra: required
35
+ Provides-Extra: minimal
36
+ Provides-Extra: formatting
37
+ Requires-Dist: pprintpp>=0.4.0; extra == "formatting"
38
+ Requires-Dist: asciitree>=0.3.3; extra == "formatting"
39
+ Requires-Dist: typing-extensions>=4.7.1; extra == "formatting"
40
+ Requires-Dist: pygments>=2.7.2; extra == "formatting"
41
+ Requires-Dist: colorama>=0.4.3; extra == "formatting"
42
+ Requires-Dist: rich>=13.4.2; extra == "formatting"
43
+ Requires-Dist: more-termcolor>=1.1.3; extra == "formatting"
44
+ Requires-Dist: humanfriendly>=10.0.0; extra == "formatting"
45
+ Provides-Extra: required
46
+ Requires-Dist: wheel>=0.34.2; extra == "required"
47
+ Requires-Dist: setuptools>=63.3.0; extra == "required"
48
+ Requires-Dist: PyYAML>=5.3.1; extra == "required"
49
+ Requires-Dist: pip>=22.0.4; extra == "required"
50
+ Requires-Dist: update-checker>=0.18.0; extra == "required"
51
+ Requires-Dist: semver>=3.0.0; extra == "required"
52
+ Requires-Dist: pathspec>=0.9.0; extra == "required"
53
+ Requires-Dist: python-dateutil>=2.7.5; extra == "required"
54
+ Requires-Dist: requests>=2.23.0; extra == "required"
55
+ Requires-Dist: binaryornot>=0.4.4; extra == "required"
56
+ Requires-Dist: pyvim>=3.0.2; extra == "required"
57
+ Requires-Dist: aiofiles>=0.6.0; extra == "required"
58
+ Requires-Dist: packaging>=21.3.0; extra == "required"
59
+ Requires-Dist: prompt-toolkit>=3.0.39; extra == "required"
60
+ Requires-Dist: more-itertools>=8.7.0; extra == "required"
61
+ Requires-Dist: python-daemon>=0.2.3; extra == "required"
62
+ Requires-Dist: fasteners>=0.18.0; extra == "required"
63
+ Requires-Dist: psutil>=5.8.0; extra == "required"
64
+ Requires-Dist: watchgod>=0.7.0; extra == "required"
65
+ Requires-Dist: dill>=0.3.3; extra == "required"
66
+ Requires-Dist: virtualenv>=20.1.0; extra == "required"
67
+ Requires-Dist: rocketry>=2.5.1; extra == "required"
68
+ Provides-Extra: drivers
69
+ Requires-Dist: cryptography>=38.0.1; extra == "drivers"
70
+ Requires-Dist: psycopg2-binary>=2.8.6; extra == "drivers"
71
+ Requires-Dist: PyMySQL>=0.9.0; extra == "drivers"
72
+ Requires-Dist: aiomysql>=0.0.21; extra == "drivers"
73
+ Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "drivers"
74
+ Requires-Dist: duckdb>=0.9.0; extra == "drivers"
75
+ Requires-Dist: duckdb-engine>=0.9.2; extra == "drivers"
76
+ Provides-Extra: drivers
77
+ Requires-Dist: pyodbc>=4.0.30; extra == "drivers"
78
+ Requires-Dist: cx_Oracle>=8.3.0; extra == "drivers"
79
+ Provides-Extra: cli
80
+ Requires-Dist: pgcli>=3.1.0; extra == "cli"
81
+ Requires-Dist: mycli>=1.23.2; extra == "cli"
82
+ Requires-Dist: litecli>=1.5.0; extra == "cli"
83
+ Requires-Dist: mssql-cli>=1.0.0; extra == "cli"
84
+ Requires-Dist: gadwall>=0.2.0; extra == "cli"
85
+ Provides-Extra: stack
86
+ Requires-Dist: docker-compose>=1.27.4; extra == "stack"
87
+ Provides-Extra: build
88
+ Requires-Dist: cx_Freeze>=6.5.1; extra == "build"
89
+ Requires-Dist: pyinstaller>=5.0.0-dev0; extra == "build"
90
+ Provides-Extra: dev-tools
91
+ Requires-Dist: twine>=3.2.0; extra == "dev-tools"
92
+ Requires-Dist: tuna>=0.5.3; extra == "dev-tools"
93
+ Requires-Dist: snakeviz>=2.1.0; extra == "dev-tools"
94
+ Requires-Dist: mypy>=0.812.0; extra == "dev-tools"
95
+ Requires-Dist: pytest>=6.2.2; extra == "dev-tools"
96
+ Requires-Dist: pytest-xdist>=3.2.1; extra == "dev-tools"
97
+ Requires-Dist: heartrate>=0.2.1; extra == "dev-tools"
98
+ Provides-Extra: setup
99
+ Provides-Extra: docs
100
+ Requires-Dist: mkdocs>=1.1.2; extra == "docs"
101
+ Requires-Dist: mkdocs-material>=6.2.5; extra == "docs"
102
+ Requires-Dist: mkdocs-material-extensions>=1.0.3; extra == "docs"
103
+ Requires-Dist: mkdocs-autolinks-plugin>=0.2.0; extra == "docs"
104
+ Requires-Dist: mkdocs-awesome-pages-plugin>=2.5.0; extra == "docs"
105
+ Requires-Dist: mkdocs-section-index>=0.3.3; extra == "docs"
106
+ Requires-Dist: mkdocs-linkcheck>=1.0.6; extra == "docs"
107
+ Requires-Dist: mkdocs-redirects>=1.0.4; extra == "docs"
108
+ Requires-Dist: jinja2==3.0.3; extra == "docs"
109
+ Provides-Extra: gui
110
+ Requires-Dist: toga>=0.3.0-dev29; extra == "gui"
111
+ Requires-Dist: pywebview>=3.6.3; extra == "gui"
112
+ Requires-Dist: pycparser>=2.21.0; extra == "gui"
113
+ Provides-Extra: extras
114
+ Requires-Dist: cmd2>=1.4.0; extra == "extras"
115
+ Requires-Dist: ruamel.yaml>=0.16.12; extra == "extras"
116
+ Requires-Dist: modin[ray]>=0.8.3; extra == "extras"
117
+ Requires-Dist: nanoid>=2.0.0; extra == "extras"
118
+ Requires-Dist: importlib-metadata>=4.12.0; extra == "extras"
119
+ Provides-Extra: sql
120
+ Requires-Dist: numpy>=1.18.5; extra == "sql"
121
+ Requires-Dist: pandas[parquet]>=2.0.1; extra == "sql"
122
+ Requires-Dist: pyarrow>=7.0.0; extra == "sql"
123
+ Requires-Dist: dask>=2023.5.0; extra == "sql"
124
+ Requires-Dist: pytz; extra == "sql"
125
+ Requires-Dist: joblib>=0.17.0; extra == "sql"
126
+ Requires-Dist: SQLAlchemy>=2.0.5; extra == "sql"
127
+ Requires-Dist: databases>=0.4.0; extra == "sql"
128
+ Requires-Dist: aiosqlite>=0.16.0; extra == "sql"
129
+ Requires-Dist: asyncpg>=0.21.0; extra == "sql"
130
+ Requires-Dist: cryptography>=38.0.1; extra == "sql"
131
+ Requires-Dist: psycopg2-binary>=2.8.6; extra == "sql"
132
+ Requires-Dist: PyMySQL>=0.9.0; extra == "sql"
133
+ Requires-Dist: aiomysql>=0.0.21; extra == "sql"
134
+ Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "sql"
135
+ Requires-Dist: duckdb>=0.9.0; extra == "sql"
136
+ Requires-Dist: duckdb-engine>=0.9.2; extra == "sql"
137
+ Requires-Dist: wheel>=0.34.2; extra == "sql"
138
+ Requires-Dist: setuptools>=63.3.0; extra == "sql"
139
+ Requires-Dist: PyYAML>=5.3.1; extra == "sql"
140
+ Requires-Dist: pip>=22.0.4; extra == "sql"
141
+ Requires-Dist: update-checker>=0.18.0; extra == "sql"
142
+ Requires-Dist: semver>=3.0.0; extra == "sql"
143
+ Requires-Dist: pathspec>=0.9.0; extra == "sql"
144
+ Requires-Dist: python-dateutil>=2.7.5; extra == "sql"
145
+ Requires-Dist: requests>=2.23.0; extra == "sql"
146
+ Requires-Dist: binaryornot>=0.4.4; extra == "sql"
147
+ Requires-Dist: pyvim>=3.0.2; extra == "sql"
148
+ Requires-Dist: aiofiles>=0.6.0; extra == "sql"
149
+ Requires-Dist: packaging>=21.3.0; extra == "sql"
150
+ Requires-Dist: prompt-toolkit>=3.0.39; extra == "sql"
151
+ Requires-Dist: more-itertools>=8.7.0; extra == "sql"
152
+ Requires-Dist: python-daemon>=0.2.3; extra == "sql"
153
+ Requires-Dist: fasteners>=0.18.0; extra == "sql"
154
+ Requires-Dist: psutil>=5.8.0; extra == "sql"
155
+ Requires-Dist: watchgod>=0.7.0; extra == "sql"
156
+ Requires-Dist: dill>=0.3.3; extra == "sql"
157
+ Requires-Dist: virtualenv>=20.1.0; extra == "sql"
158
+ Requires-Dist: rocketry>=2.5.1; extra == "sql"
159
+ Provides-Extra: dash
160
+ Requires-Dist: Flask-Compress>=1.10.1; extra == "dash"
161
+ Requires-Dist: dash>=2.6.2; extra == "dash"
162
+ Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "dash"
163
+ Requires-Dist: dash-ace>=0.2.1; extra == "dash"
164
+ Requires-Dist: dash-extensions>=1.0.4; extra == "dash"
165
+ Requires-Dist: dash-daq>=0.5.0; extra == "dash"
166
+ Requires-Dist: terminado>=0.12.1; extra == "dash"
167
+ Requires-Dist: tornado>=6.1.0; extra == "dash"
168
+ Provides-Extra: api
169
+ Requires-Dist: uvicorn[standard]>=0.22.0; extra == "api"
170
+ Requires-Dist: gunicorn>=20.1.0; extra == "api"
171
+ Requires-Dist: python-dotenv>=0.20.0; extra == "api"
172
+ Requires-Dist: websockets>=11.0.3; extra == "api"
173
+ Requires-Dist: fastapi>=0.100.0; extra == "api"
174
+ Requires-Dist: passlib>=1.7.4; extra == "api"
175
+ Requires-Dist: fastapi-login>=1.7.2; extra == "api"
176
+ Requires-Dist: python-multipart>=0.0.5; extra == "api"
177
+ Requires-Dist: pydantic<2.0.0; extra == "api"
178
+ Requires-Dist: httpx>=0.24.1; extra == "api"
179
+ Requires-Dist: numpy>=1.18.5; extra == "api"
180
+ Requires-Dist: pandas[parquet]>=2.0.1; extra == "api"
181
+ Requires-Dist: pyarrow>=7.0.0; extra == "api"
182
+ Requires-Dist: dask>=2023.5.0; extra == "api"
183
+ Requires-Dist: pytz; extra == "api"
184
+ Requires-Dist: joblib>=0.17.0; extra == "api"
185
+ Requires-Dist: SQLAlchemy>=2.0.5; extra == "api"
186
+ Requires-Dist: databases>=0.4.0; extra == "api"
187
+ Requires-Dist: aiosqlite>=0.16.0; extra == "api"
188
+ Requires-Dist: asyncpg>=0.21.0; extra == "api"
189
+ Requires-Dist: cryptography>=38.0.1; extra == "api"
190
+ Requires-Dist: psycopg2-binary>=2.8.6; extra == "api"
191
+ Requires-Dist: PyMySQL>=0.9.0; extra == "api"
192
+ Requires-Dist: aiomysql>=0.0.21; extra == "api"
193
+ Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "api"
194
+ Requires-Dist: duckdb>=0.9.0; extra == "api"
195
+ Requires-Dist: duckdb-engine>=0.9.2; extra == "api"
196
+ Requires-Dist: wheel>=0.34.2; extra == "api"
197
+ Requires-Dist: setuptools>=63.3.0; extra == "api"
198
+ Requires-Dist: PyYAML>=5.3.1; extra == "api"
199
+ Requires-Dist: pip>=22.0.4; extra == "api"
200
+ Requires-Dist: update-checker>=0.18.0; extra == "api"
201
+ Requires-Dist: semver>=3.0.0; extra == "api"
202
+ Requires-Dist: pathspec>=0.9.0; extra == "api"
203
+ Requires-Dist: python-dateutil>=2.7.5; extra == "api"
204
+ Requires-Dist: requests>=2.23.0; extra == "api"
205
+ Requires-Dist: binaryornot>=0.4.4; extra == "api"
206
+ Requires-Dist: pyvim>=3.0.2; extra == "api"
207
+ Requires-Dist: aiofiles>=0.6.0; extra == "api"
208
+ Requires-Dist: packaging>=21.3.0; extra == "api"
209
+ Requires-Dist: prompt-toolkit>=3.0.39; extra == "api"
210
+ Requires-Dist: more-itertools>=8.7.0; extra == "api"
211
+ Requires-Dist: python-daemon>=0.2.3; extra == "api"
212
+ Requires-Dist: fasteners>=0.18.0; extra == "api"
213
+ Requires-Dist: psutil>=5.8.0; extra == "api"
214
+ Requires-Dist: watchgod>=0.7.0; extra == "api"
215
+ Requires-Dist: dill>=0.3.3; extra == "api"
216
+ Requires-Dist: virtualenv>=20.1.0; extra == "api"
217
+ Requires-Dist: rocketry>=2.5.1; extra == "api"
218
+ Requires-Dist: pprintpp>=0.4.0; extra == "api"
219
+ Requires-Dist: asciitree>=0.3.3; extra == "api"
220
+ Requires-Dist: typing-extensions>=4.7.1; extra == "api"
221
+ Requires-Dist: pygments>=2.7.2; extra == "api"
222
+ Requires-Dist: colorama>=0.4.3; extra == "api"
223
+ Requires-Dist: rich>=13.4.2; extra == "api"
224
+ Requires-Dist: more-termcolor>=1.1.3; extra == "api"
225
+ Requires-Dist: humanfriendly>=10.0.0; extra == "api"
226
+ Requires-Dist: Flask-Compress>=1.10.1; extra == "api"
227
+ Requires-Dist: dash>=2.6.2; extra == "api"
228
+ Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "api"
229
+ Requires-Dist: dash-ace>=0.2.1; extra == "api"
230
+ Requires-Dist: dash-extensions>=1.0.4; extra == "api"
231
+ Requires-Dist: dash-daq>=0.5.0; extra == "api"
232
+ Requires-Dist: terminado>=0.12.1; extra == "api"
233
+ Requires-Dist: tornado>=6.1.0; extra == "api"
234
+ Provides-Extra: full
235
+ Requires-Dist: pprintpp>=0.4.0; extra == "full"
236
+ Requires-Dist: asciitree>=0.3.3; extra == "full"
237
+ Requires-Dist: typing-extensions>=4.7.1; extra == "full"
238
+ Requires-Dist: pygments>=2.7.2; extra == "full"
239
+ Requires-Dist: colorama>=0.4.3; extra == "full"
240
+ Requires-Dist: rich>=13.4.2; extra == "full"
241
+ Requires-Dist: more-termcolor>=1.1.3; extra == "full"
242
+ Requires-Dist: humanfriendly>=10.0.0; extra == "full"
243
+ Requires-Dist: wheel>=0.34.2; extra == "full"
244
+ Requires-Dist: setuptools>=63.3.0; extra == "full"
245
+ Requires-Dist: PyYAML>=5.3.1; extra == "full"
246
+ Requires-Dist: pip>=22.0.4; extra == "full"
247
+ Requires-Dist: update-checker>=0.18.0; extra == "full"
248
+ Requires-Dist: semver>=3.0.0; extra == "full"
249
+ Requires-Dist: pathspec>=0.9.0; extra == "full"
250
+ Requires-Dist: python-dateutil>=2.7.5; extra == "full"
251
+ Requires-Dist: requests>=2.23.0; extra == "full"
252
+ Requires-Dist: binaryornot>=0.4.4; extra == "full"
253
+ Requires-Dist: pyvim>=3.0.2; extra == "full"
254
+ Requires-Dist: aiofiles>=0.6.0; extra == "full"
255
+ Requires-Dist: packaging>=21.3.0; extra == "full"
256
+ Requires-Dist: prompt-toolkit>=3.0.39; extra == "full"
257
+ Requires-Dist: more-itertools>=8.7.0; extra == "full"
258
+ Requires-Dist: python-daemon>=0.2.3; extra == "full"
259
+ Requires-Dist: fasteners>=0.18.0; extra == "full"
260
+ Requires-Dist: psutil>=5.8.0; extra == "full"
261
+ Requires-Dist: watchgod>=0.7.0; extra == "full"
262
+ Requires-Dist: dill>=0.3.3; extra == "full"
263
+ Requires-Dist: virtualenv>=20.1.0; extra == "full"
264
+ Requires-Dist: rocketry>=2.5.1; extra == "full"
265
+ Requires-Dist: cryptography>=38.0.1; extra == "full"
266
+ Requires-Dist: psycopg2-binary>=2.8.6; extra == "full"
267
+ Requires-Dist: PyMySQL>=0.9.0; extra == "full"
268
+ Requires-Dist: aiomysql>=0.0.21; extra == "full"
269
+ Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "full"
270
+ Requires-Dist: duckdb>=0.9.0; extra == "full"
271
+ Requires-Dist: duckdb-engine>=0.9.2; extra == "full"
272
+ Requires-Dist: toga>=0.3.0-dev29; extra == "full"
273
+ Requires-Dist: pywebview>=3.6.3; extra == "full"
274
+ Requires-Dist: pycparser>=2.21.0; extra == "full"
275
+ Requires-Dist: numpy>=1.18.5; extra == "full"
276
+ Requires-Dist: pandas[parquet]>=2.0.1; extra == "full"
277
+ Requires-Dist: pyarrow>=7.0.0; extra == "full"
278
+ Requires-Dist: dask>=2023.5.0; extra == "full"
279
+ Requires-Dist: pytz; extra == "full"
280
+ Requires-Dist: joblib>=0.17.0; extra == "full"
281
+ Requires-Dist: SQLAlchemy>=2.0.5; extra == "full"
282
+ Requires-Dist: databases>=0.4.0; extra == "full"
283
+ Requires-Dist: aiosqlite>=0.16.0; extra == "full"
284
+ Requires-Dist: asyncpg>=0.21.0; extra == "full"
285
+ Requires-Dist: Flask-Compress>=1.10.1; extra == "full"
286
+ Requires-Dist: dash>=2.6.2; extra == "full"
287
+ Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "full"
288
+ Requires-Dist: dash-ace>=0.2.1; extra == "full"
289
+ Requires-Dist: dash-extensions>=1.0.4; extra == "full"
290
+ Requires-Dist: dash-daq>=0.5.0; extra == "full"
291
+ Requires-Dist: terminado>=0.12.1; extra == "full"
292
+ Requires-Dist: tornado>=6.1.0; extra == "full"
293
+ Requires-Dist: uvicorn[standard]>=0.22.0; extra == "full"
294
+ Requires-Dist: gunicorn>=20.1.0; extra == "full"
295
+ Requires-Dist: python-dotenv>=0.20.0; extra == "full"
296
+ Requires-Dist: websockets>=11.0.3; extra == "full"
297
+ Requires-Dist: fastapi>=0.100.0; extra == "full"
298
+ Requires-Dist: passlib>=1.7.4; extra == "full"
299
+ Requires-Dist: fastapi-login>=1.7.2; extra == "full"
300
+ Requires-Dist: python-multipart>=0.0.5; extra == "full"
301
+ Requires-Dist: pydantic<2.0.0; extra == "full"
302
+ Requires-Dist: httpx>=0.24.1; extra == "full"
303
+
304
+ <img src="https://meerschaum.io/assets/banner_1920x320.png" alt="Meerschaum banner" style="width: 100%"/>
305
+
306
+ | PyPI | GitHub | Info | Stats |
307
+ |---|---|---|---|
308
+ | ![PyPI]( https://img.shields.io/pypi/v/meerschaum?color=%2300cc66&label=Version ) | ![GitHub Repo stars](https://img.shields.io/github/stars/bmeares/Meerschaum?style=social) | ![License](https://img.shields.io/github/license/bmeares/Meerschaum?label=License) | ![Number of plugins]( https://img.shields.io/badge/dynamic/json?color=3098c1&label=Public%20Plugins&query=num_plugins&url=https%3A%2F%2Fapi.mrsm.io%2Finfo ) |
309
+ | ![PyPI - Python Version]( https://img.shields.io/pypi/pyversions/meerschaum?label=Python&logo=python&logoColor=%23ffffff ) | ![GitHub Sponsors](https://img.shields.io/github/sponsors/bmeares?color=eadf15&label=Sponsors) | [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/meerschaum)](https://artifacthub.io/packages/search?repo=meerschaum) | ![Number of registered users]( https://img.shields.io/badge/dynamic/json?color=3098c1&label=Registered%20Users&query=num_users&url=https%3A%2F%2Fapi.mrsm.io%2Finfo ) |
310
+
311
+ <p align="center">
312
+ <img src="https://meerschaum.io/files/images/demo.gif" alt="Meerschaum demo" height="450px">
313
+ </p>
314
+
315
+ ## What is Meerschaum?
316
+ Meerschaum is a tool for quickly synchronizing time-series data streams called **pipes**. With Meerschaum, you can have a data visualization stack running in minutes.
317
+
318
+ <p align="center">
319
+ <img src="https://meerschaum.io/assets/screenshots/weather_pipes.png"/>
320
+ </p>
321
+
322
+ ## Why Meerschaum?
323
+
324
+ Two words: *incremental updates*. Fetch the data you need, and Meerschaum will handle the rest.
325
+
326
+ If you've worked with time-series data, you know the headaches that come with ETL.
327
+ Data engineering often gets in analysts' way, and when work needs to get done, every minute spent on pipelining is time taken away from real analysis.
328
+
329
+ Rather than copy / pasting your ETL scripts, simply build pipes with Meerschaum! [Meerschaum gives you the tools to design your data streams how you like](https://towardsdatascience.com/easy-time-series-etl-for-data-scientists-with-meerschaum-5aade339b398) ― and don't worry — you can always incorporate Meerschaum into your existing systems!
330
+
331
+ ### Want to Learn More?
332
+
333
+ You can find a wealth of information at [meerschaum.io](https://meerschaum.io)!
334
+
335
+ Additionally, below are several articles published about Meerschaum:
336
+
337
+ - Interview featured in [*Console 100 - The Open Source Newsletter*](https://console.substack.com/p/console-100)
338
+ - [*A Data Scientist's Guide to Fetching COVID-19 Data in 2022*](https://towardsdatascience.com/a-data-scientists-guide-to-fetching-covid-19-data-in-2022-d952b4697) (Towards Data Science)
339
+ - [*Time-Series ETL with Meerschaum*](https://towardsdatascience.com/easy-time-series-etl-for-data-scientists-with-meerschaum-5aade339b398) (Towards Data Science)
340
+ - [*How I automatically extract my M1 Finance transactions*](https://bmeares.medium.com/how-i-automatically-extract-my-m1-finance-transactions-b43cef857bc7)
341
+
342
+ ## Installation
343
+
344
+ For a more thorough setup guide, visit the [Getting Started](https://meerschaum.io/get-started/) page at [meerschaum.io](https://meerschaum.io).
345
+
346
+ ### TL;DR
347
+
348
+ ```bash
349
+ pip install -U --user meerschaum
350
+ mrsm stack up -d db grafana
351
+ mrsm bootstrap pipes
352
+ ```
353
+
354
+ ## Usage
355
+
356
+ Please visit [meerschaum.io](https://meerschaum.io) for setup, usage, and troubleshooting information. You can find technical documentation at [docs.meerschaum.io](https://docs.meerschaum.io), and here is a complete list of the [Meerschaum actions](https://meerschaum.io/reference/actions/).
357
+
358
+ ### CLI
359
+ ```bash
360
+ ### Install the NOAA weather plugin.
361
+ mrsm install plugin noaa
362
+
363
+ ### Register a new pipe to the built-in SQLite DB.
364
+ ### You can instead run `bootstrap pipe` for a wizard.
365
+ ### Enter 'KATL' for Atlanta when prompted.
366
+ mrsm register pipe -c plugin:noaa -m weather -l atl -i sql:local
367
+
368
+ ### Pull data and create the table "plugin_noaa_weather_atl".
369
+ mrsm sync pipes -l atl -i sql:local
370
+ ```
371
+
372
+ ### Python API
373
+
374
+ ```python
375
+ import meerschaum as mrsm
376
+ pipe = mrsm.Pipe(
377
+ 'foo', 'bar', ### Connector and metric labels.
378
+ target = 'MyTableName!', ### Table name. Defaults to 'foo_bar'.
379
+ instance = 'sql:local', ### Built-in SQLite DB. Defaults to 'sql:main'.
380
+ columns = {
381
+ 'datetime': 'dt', ### Column for the datetime index.
382
+ 'id' : 'id', ### Column for the ID index (optional).
383
+ },
384
+ )
385
+ ### Pass a DataFrame to create the table and indices.
386
+ pipe.sync([{'dt': '2022-07-01', 'id': 1, 'val': 10}])
387
+
388
+ ### Duplicate rows are ignored.
389
+ pipe.sync([{'dt': '2022-07-01', 'id': 1, 'val': 10}])
390
+ assert len(pipe.get_data()) == 1
391
+
392
+ ### Rows with existing keys (datetime and/or id) are updated.
393
+ pipe.sync([{'dt': '2022-07-01', 'id': 1, 'val': 100}])
394
+ assert len(pipe.get_data()) == 1
395
+
396
+ ### Translates to this query for SQLite:
397
+ ###
398
+ ### SELECT *
399
+ ### FROM "MyTableName!"
400
+ ### WHERE "dt" >= datetime('2022-01-01', '0 minute')
401
+ ### AND "dt" < datetime('2023-01-01', '0 minute')
402
+ ### AND "id" IN ('1')
403
+ df = pipe.get_data(
404
+ begin = '2022-01-01',
405
+ end = '2023-01-01',
406
+ params = {'id': [1]},
407
+ )
408
+
409
+ ### Shape of the DataFrame:
410
+ ### dt id val
411
+ ### 0 2022-07-01 1 100
412
+
413
+ ### Drop the table and remove the pipe's metadata.
414
+ pipe.delete()
415
+ ```
416
+
417
+ ### Simple Plugin
418
+
419
+ ```python
420
+ # ~/.config/plugins/example.py
421
+
422
+ __version__ = '1.0.0'
423
+ required = ['requests']
424
+
425
+ def register(pipe, **kw):
426
+ return {
427
+ 'columns': {
428
+ 'datetime': 'dt',
429
+ 'id' : 'id',
430
+ },
431
+ }
432
+
433
+ def fetch(pipe, **kw):
434
+ import requests, datetime, random
435
+ response = requests.get('http://date.jsontest.com/')
436
+
437
+ ### The fetched JSON has the following shape:
438
+ ### {
439
+ ### "date": "07-01-2022",
440
+ ### "milliseconds_since_epoch": 1656718801566,
441
+ ### "time": "11:40:01 PM"
442
+ ### }
443
+ data = response.json()
444
+ timestamp = datetime.datetime.fromtimestamp(
445
+ int(str(data['milliseconds_since_epoch'])[:-3])
446
+ )
447
+
448
+ ### You may also return a Pandas DataFrame.
449
+ return [{
450
+ "dt" : timestamp,
451
+ "id" : random.randint(1, 4),
452
+ "value": random.uniform(1, 100),
453
+ }]
454
+ ```
455
+
456
+ ## Features
457
+
458
+ - 📊 **Built for Data Scientists and Analysts**
459
+ - Integrate with Pandas, Grafana and other popular [data analysis tools](https://meerschaum.io/reference/data-analysis-tools/).
460
+ - Persist your dataframes and always get the latest data.
461
+ - ⚡️ **Production-Ready, Batteries Included**
462
+ - [Synchronization engine](https://meerschaum.io/reference/pipes/syncing/) concurrently updates many time-series data streams.
463
+ - One-click deploy a [TimescaleDB and Grafana stack](https://meerschaum.io/reference/stack/) for prototyping.
464
+ - Serve data to your entire organization through the power of `uvicorn`, `gunicorn`, and `FastAPI`.
465
+ - 🔌 **Easily Expandable**
466
+ - Ingest any data source with a simple [plugin](https://meerschaum.io/reference/plugins/writing-plugins/). Just return a DataFrame, and Meerschaum handles the rest.
467
+ - [Add any function as a command](https://meerschaum.io/reference/plugins/types-of-plugins/#action-plugins) to the Meerschaum system.
468
+ - Include Meerschaum in your projects with its [easy-to-use Python API](https://docs.meerschaum.io).
469
+ - ✨ **Tailored for Your Experience**
470
+ - Rich CLI makes managing your data streams surprisingly enjoyable!
471
+ - Web dashboard for those who prefer a more graphical experience.
472
+ - Manage your database connections with [Meerschaum connectors](https://meerschaum.io/reference/connectors/).
473
+ - Utility commands with sensible syntax let you control many pipes with grace.
474
+ - 💼 **Portable from the Start**
475
+ - The environment variable `$MRSM_ROOT_DIR` lets you emulate multiple installations and group together your [instances](https://meerschaum.io/reference/connectors/#instances-and-repositories).
476
+ - No dependencies required; anything needed will be installed into a virtual environment.
477
+ - [Specify required packages for your plugins](https://meerschaum.io/reference/plugins/writing-plugins/), and users will get those packages in a virtual environment.
478
+
479
+ ## Support Meerschaum's Development
480
+
481
+ For consulting services and to support Meerschaum's development, please considering sponsoring me on [GitHub sponsors](https://github.com/sponsors/bmeares).
482
+
483
+ Additionally, you can always [buy me a coffee☕](https://www.buymeacoffee.com/bmeares)!
484
+
485
+ ### License
486
+
487
+ Copyright 2021 Bennett Meares
488
+
489
+ Licensed under the Apache License, Version 2.0 (the "License");
490
+ you may not use this file except in compliance with the License.
491
+ You may obtain a copy of the License at
492
+
493
+ http://www.apache.org/licenses/LICENSE-2.0
494
+
495
+ Unless required by applicable law or agreed to in writing, software
496
+ distributed under the License is distributed on an "AS IS" BASIS,
497
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
498
+ See the License for the specific language governing permissions and
499
+ limitations under the License.
@@ -3,7 +3,7 @@
3
3
  | PyPI | GitHub | Info | Stats |
4
4
  |---|---|---|---|
5
5
  | ![PyPI]( https://img.shields.io/pypi/v/meerschaum?color=%2300cc66&label=Version ) | ![GitHub Repo stars](https://img.shields.io/github/stars/bmeares/Meerschaum?style=social) | ![License](https://img.shields.io/github/license/bmeares/Meerschaum?label=License) | ![Number of plugins]( https://img.shields.io/badge/dynamic/json?color=3098c1&label=Public%20Plugins&query=num_plugins&url=https%3A%2F%2Fapi.mrsm.io%2Finfo ) |
6
- | ![PyPI - Python Version]( https://img.shields.io/pypi/pyversions/meerschaum?label=Python&logo=python&logoColor=%23ffffff ) | ![GitHub Sponsors](https://img.shields.io/github/sponsors/bmeares?color=eadf15&label=Sponsors) | [![meerschaum Tutorials](https://badges.openbase.com/python/tutorials/meerschaum.svg?token=2Yi8Oav9UZYWocO1ncwnIOnpUN5dTnUMWai7lAKTB+k=)](https://openbase.com/python/meerschaum?utm_source=embedded&amp;utm_medium=badge&amp;utm_campaign=rate-badge) | ![Number of registered users]( https://img.shields.io/badge/dynamic/json?color=3098c1&label=Registered%20Users&query=num_users&url=https%3A%2F%2Fapi.mrsm.io%2Finfo ) |
6
+ | ![PyPI - Python Version]( https://img.shields.io/pypi/pyversions/meerschaum?label=Python&logo=python&logoColor=%23ffffff ) | ![GitHub Sponsors](https://img.shields.io/github/sponsors/bmeares?color=eadf15&label=Sponsors) | [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/meerschaum)](https://artifacthub.io/packages/search?repo=meerschaum) | ![Number of registered users]( https://img.shields.io/badge/dynamic/json?color=3098c1&label=Registered%20Users&query=num_users&url=https%3A%2F%2Fapi.mrsm.io%2Finfo ) |
7
7
 
8
8
  <p align="center">
9
9
  <img src="https://meerschaum.io/files/images/demo.gif" alt="Meerschaum demo" height="450px">
@@ -76,7 +76,7 @@ def _close_pools():
76
76
  """Close multiprocessing pools before exiting."""
77
77
  ### Final step: close global pools.
78
78
  from meerschaum.utils.pool import get_pools
79
- for class_name, pool in get_pools().items():
79
+ for pool in get_pools().values():
80
80
  try:
81
81
  pool.close()
82
82
  pool.terminate()
@@ -8,7 +8,9 @@ This module creates the argparse Parser.
8
8
 
9
9
  from __future__ import annotations
10
10
  import sys
11
- import argparse, json
11
+ import argparse
12
+ import json
13
+ from datetime import datetime, timedelta, timezone
12
14
  from meerschaum.utils.typing import Union, Dict, List, Any, Tuple, Callable
13
15
  from meerschaum.utils.misc import string_to_dict
14
16
  from meerschaum.utils.warnings import error
@@ -35,19 +37,18 @@ class ArgumentParser(argparse.ArgumentParser):
35
37
  return result
36
38
 
37
39
 
38
- def parse_datetime(dt_str: str) -> datetime.datetime:
40
+ def parse_datetime(dt_str: str) -> datetime:
39
41
  """Parse a string into a datetime."""
40
42
  from meerschaum.utils.misc import is_int
41
43
  if is_int(dt_str):
42
44
  return int(dt_str)
43
45
 
44
46
  from meerschaum.utils.packages import attempt_import
45
- import datetime
46
47
  dateutil_parser = attempt_import('dateutil.parser')
47
48
 
48
49
  try:
49
50
  if dt_str.lower() == 'now':
50
- dt = datetime.datetime.utcnow()
51
+ dt = datetime.now(timezone.utc).replace(tzinfo=None)
51
52
  else:
52
53
  dt = dateutil_parser.parse(dt_str)
53
54
  except Exception as e:
@@ -11,14 +11,14 @@
11
11
  | ![PyPI - Python Version]( https://img.shields.io/pypi/pyversions/meerschaum?label=Python&logo=python&logoColor=%23ffffff ) | ![GitHub Sponsors](https://img.shields.io/github/sponsors/bmeares?color=eadf15&label=Sponsors) | [![meerschaum Tutorials](https://badges.openbase.com/python/tutorials/meerschaum.svg?token=2Yi8Oav9UZYWocO1ncwnIOnpUN5dTnUMWai7lAKTB+k=)](https://openbase.com/python/meerschaum?utm_source=embedded&amp;utm_medium=badge&amp;utm_campaign=rate-badge) | ![Number of registered users]( https://img.shields.io/badge/dynamic/json?color=3098c1&label=Registered%20Users&query=num_users&url=https%3A%2F%2Fapi.mrsm.io%2Finfo ) |
12
12
 
13
13
  <p align="center">
14
- <img src="https://meerschaum.io/files/images/demo.gif" alt="Meerschaum demo" height="450px">
14
+ <img src="https://meerschaum.io/files/images/demo.gif" alt="Meerschaum demo" style="width: 100%;">
15
15
  </p>
16
16
 
17
17
  ## What is Meerschaum?
18
18
  Meerschaum is a tool for quickly synchronizing time-series data streams called **pipes**. With Meerschaum, you can have a data visualization stack running in minutes.
19
19
 
20
20
  <p align="center">
21
- <img src="https://meerschaum.io/assets/screenshots/weather_pipes.png"/>
21
+ <img src="https://meerschaum.io/assets/screenshots/weather_pipes.png" style="width: 100%;"/>
22
22
  </p>
23
23
 
24
24
  ## Why Meerschaum?
@@ -8,9 +8,9 @@ Define the terminal page handler class.
8
8
 
9
9
  from __future__ import annotations
10
10
  from meerschaum.utils.packages import attempt_import
11
- tornado = attempt_import('tornado', lazy=False)
11
+ tornado_web = attempt_import('tornado.web', lazy=False)
12
12
 
13
- class TermPageHandler(tornado.web.RequestHandler):
13
+ class TermPageHandler(tornado_web.RequestHandler):
14
14
  def get(self):
15
15
  from meerschaum.api import endpoints
16
16
  return self.render(
@@ -7,7 +7,7 @@ Register new Pipes. Requires the API to be running.
7
7
  """
8
8
 
9
9
  from __future__ import annotations
10
- from meerschaum.utils.typing import SuccessTuple, Any, List, Optional
10
+ from meerschaum.utils.typing import SuccessTuple, Any, List, Optional, Dict
11
11
 
12
12
  def register(
13
13
  action: Optional[List[str]] = None,
@@ -55,6 +55,7 @@ def _register_pipes(
55
55
  metric_keys: Optional[List[str]] = None,
56
56
  location_keys: Optional[List[str]] = None,
57
57
  params: Optional[Dict[str, Any]] = None,
58
+ tags: Optional[List[str]] = None,
58
59
  debug: bool = False,
59
60
  **kw: Any
60
61
  ) -> SuccessTuple:
@@ -79,6 +80,8 @@ def _register_pipes(
79
80
  location_keys = []
80
81
  if params is None:
81
82
  params = {}
83
+ if tags:
84
+ params['tags'] = tags
82
85
 
83
86
  if (
84
87
  len(connector_keys) == 0 or
@@ -96,6 +99,7 @@ def _register_pipes(
96
99
  metric_keys = metric_keys,
97
100
  location_keys = location_keys,
98
101
  params = params,
102
+ tags = tags,
99
103
  as_list = True,
100
104
  method = 'explicit',
101
105
  debug = debug,
@@ -738,6 +738,7 @@ def _show_environment(
738
738
 
739
739
 
740
740
  def _show_tags(
741
+ action: Optional[List[str]] = None,
741
742
  tags: Optional[List[str]] = None,
742
743
  workers: Optional[int] = None,
743
744
  nopretty: bool = False,
@@ -757,7 +758,12 @@ def _show_tags(
757
758
  )
758
759
  panel = rich_panel.Panel.fit('Tags')
759
760
  tree = rich_tree.Tree(panel)
760
- pipes = mrsm.get_pipes(as_list=True, **kwargs)
761
+ action = action or []
762
+ tags = action + (tags or [])
763
+ pipes = mrsm.get_pipes(as_list=True, tags=tags, **kwargs)
764
+ if not pipes:
765
+ return False, f"No pipes were found with the given tags."
766
+
761
767
  pool = get_pool(workers=workers)
762
768
  tag_prefix = get_config('formatting', 'pipes', 'unicode', 'icons', 'tag') if UNICODE else ''
763
769
  tag_style = get_config('formatting', 'pipes', 'ansi', 'styles', 'tags') if ANSI else None
@@ -769,6 +775,8 @@ def _show_tags(
769
775
 
770
776
  for pipe, tags in pipes_tags.items():
771
777
  for tag in tags:
778
+ if action and tag not in action:
779
+ continue
772
780
  tags_pipes[tag].append(pipe)
773
781
 
774
782
  columns = []
@@ -790,6 +798,9 @@ def _show_tags(
790
798
  tag_panel = rich_panel.Panel(tag_group, title=tag_text, title_align='left')
791
799
  columns.append(tag_panel)
792
800
 
801
+ if len(columns) == 0:
802
+ return False, "No pipes have been tagged."
803
+
793
804
  if not nopretty:
794
805
  mrsm.pprint(
795
806
  rich_columns.Columns(