meerschaum 2.2.2rc2__py3-none-any.whl → 2.2.2rc3__py3-none-any.whl

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 (29) hide show
  1. meerschaum/_internal/shell/Shell.py +9 -3
  2. meerschaum/_internal/term/__init__.py +2 -1
  3. meerschaum/actions/api.py +65 -66
  4. meerschaum/actions/python.py +34 -18
  5. meerschaum/actions/uninstall.py +5 -9
  6. meerschaum/actions/upgrade.py +9 -1
  7. meerschaum/api/dash/callbacks/__init__.py +4 -0
  8. meerschaum/api/dash/callbacks/custom.py +39 -0
  9. meerschaum/api/dash/callbacks/dashboard.py +39 -6
  10. meerschaum/api/dash/callbacks/login.py +3 -1
  11. meerschaum/api/dash/pipes.py +145 -97
  12. meerschaum/config/_paths.py +1 -0
  13. meerschaum/config/_version.py +1 -1
  14. meerschaum/connectors/__init__.py +1 -1
  15. meerschaum/core/Pipe/__init__.py +5 -0
  16. meerschaum/plugins/__init__.py +67 -9
  17. meerschaum/utils/daemon/Daemon.py +7 -2
  18. meerschaum/utils/packages/__init__.py +98 -20
  19. meerschaum/utils/packages/_packages.py +1 -1
  20. meerschaum/utils/process.py +12 -1
  21. meerschaum/utils/venv/__init__.py +25 -1
  22. {meerschaum-2.2.2rc2.dist-info → meerschaum-2.2.2rc3.dist-info}/METADATA +4 -4
  23. {meerschaum-2.2.2rc2.dist-info → meerschaum-2.2.2rc3.dist-info}/RECORD +29 -28
  24. {meerschaum-2.2.2rc2.dist-info → meerschaum-2.2.2rc3.dist-info}/WHEEL +1 -1
  25. {meerschaum-2.2.2rc2.dist-info → meerschaum-2.2.2rc3.dist-info}/LICENSE +0 -0
  26. {meerschaum-2.2.2rc2.dist-info → meerschaum-2.2.2rc3.dist-info}/NOTICE +0 -0
  27. {meerschaum-2.2.2rc2.dist-info → meerschaum-2.2.2rc3.dist-info}/entry_points.txt +0 -0
  28. {meerschaum-2.2.2rc2.dist-info → meerschaum-2.2.2rc3.dist-info}/top_level.txt +0 -0
  29. {meerschaum-2.2.2rc2.dist-info → meerschaum-2.2.2rc3.dist-info}/zip-safe +0 -0
@@ -47,7 +47,6 @@ def get_module_path(
47
47
  Get a module's path without importing.
48
48
  """
49
49
  import site
50
- import pathlib
51
50
  if debug:
52
51
  from meerschaum.utils.debug import dprint
53
52
  if not _try_install_name_on_fail:
@@ -60,7 +59,13 @@ def get_module_path(
60
59
  vtp = venv_target_path(venv, allow_nonexistent=True, debug=debug)
61
60
  if not vtp.exists():
62
61
  if debug:
63
- dprint(f"Venv '{venv}' does not exist, cannot import '{import_name}'.", color=False)
62
+ dprint(
63
+ (
64
+ "Venv '{venv}' does not exist, cannot import "
65
+ + f"'{import_name}'."
66
+ ),
67
+ color = False,
68
+ )
64
69
  return None
65
70
 
66
71
  venv_target_candidate_paths = [vtp]
@@ -702,12 +707,22 @@ def need_update(
702
707
  return False
703
708
 
704
709
 
705
- def get_pip(venv: Optional[str] = 'mrsm', debug: bool=False) -> bool:
710
+ def get_pip(
711
+ venv: Optional[str] = 'mrsm',
712
+ color: bool = True,
713
+ debug: bool = False,
714
+ ) -> bool:
706
715
  """
707
716
  Download and run the get-pip.py script.
708
717
 
709
718
  Parameters
710
719
  ----------
720
+ venv: Optional[str], default 'mrsm'
721
+ The virtual environment into which to install `pip`.
722
+
723
+ color: bool, default True
724
+ If `True`, force color output.
725
+
711
726
  debug: bool, default False
712
727
  Verbosity toggle.
713
728
 
@@ -730,7 +745,7 @@ def get_pip(venv: Optional[str] = 'mrsm', debug: bool=False) -> bool:
730
745
  if venv is not None:
731
746
  init_venv(venv=venv, debug=debug)
732
747
  cmd_list = [venv_executable(venv=venv), dest.as_posix()]
733
- return subprocess.call(cmd_list, env=_get_pip_os_env()) == 0
748
+ return subprocess.call(cmd_list, env=_get_pip_os_env(color=color)) == 0
734
749
 
735
750
 
736
751
  def pip_install(
@@ -743,6 +758,7 @@ def pip_install(
743
758
  check_pypi: bool = True,
744
759
  check_wheel: bool = True,
745
760
  _uninstall: bool = False,
761
+ _from_completely_uninstall: bool = False,
746
762
  _install_uv_pip: bool = True,
747
763
  color: bool = True,
748
764
  silent: bool = False,
@@ -843,7 +859,7 @@ def pip_install(
843
859
 
844
860
  import sys
845
861
  if not have_pip and not use_uv_pip:
846
- if not get_pip(venv=venv, debug=debug):
862
+ if not get_pip(venv=venv, color=color, debug=debug):
847
863
  import sys
848
864
  minor = sys.version_info.minor
849
865
  print(
@@ -891,7 +907,7 @@ def pip_install(
891
907
  ):
892
908
  warn(
893
909
  (
894
- "Failed to install `setuptools` and `wheel` for virtual "
910
+ "Failed to install `setuptools`, `wheel`, and `uv` for virtual "
895
911
  + f"environment '{venv}'."
896
912
  ),
897
913
  color = False,
@@ -916,7 +932,7 @@ def pip_install(
916
932
  if '--disable-pip-version-check' not in _args and not use_uv_pip:
917
933
  _args.append('--disable-pip-version-check')
918
934
 
919
- if '--target' not in _args and '-t' not in _args and not _uninstall:
935
+ if '--target' not in _args and '-t' not in _args and not (not use_uv_pip and _uninstall):
920
936
  if venv is not None:
921
937
  _args += ['--target', venv_target_path(venv, debug=debug)]
922
938
  elif (
@@ -927,8 +943,6 @@ def pip_install(
927
943
  and not use_uv_pip
928
944
  ):
929
945
  _args += ['--user']
930
- if '--break-system-packages' not in _args and not _uninstall:
931
- _args.append('--break-system-packages')
932
946
 
933
947
  if debug:
934
948
  if '-v' not in _args or '-vv' not in _args or '-vvv' not in _args:
@@ -948,10 +962,10 @@ def pip_install(
948
962
  if not silent:
949
963
  print(msg)
950
964
 
951
- if _uninstall:
965
+ if _uninstall and not _from_completely_uninstall and not use_uv_pip:
952
966
  for install_name in _packages:
953
967
  _install_no_version = get_install_no_version(install_name)
954
- if _install_no_version in ('pip', 'wheel'):
968
+ if _install_no_version in ('pip', 'wheel', 'uv'):
955
969
  continue
956
970
  if not completely_uninstall_package(
957
971
  _install_no_version,
@@ -961,16 +975,17 @@ def pip_install(
961
975
  f"Failed to clean up package '{_install_no_version}'.",
962
976
  )
963
977
 
978
+ ### NOTE: Only append the `--prerelease=allow` flag if we explicitly depend on a prerelease.
964
979
  if use_uv_pip:
965
980
  _args.insert(0, 'pip')
966
- if not _uninstall:
981
+ if not _uninstall and get_prerelease_dependencies(_packages):
967
982
  _args.append('--prerelease=allow')
968
983
 
969
984
  rc = run_python_package(
970
985
  ('pip' if not use_uv_pip else 'uv'),
971
986
  _args + _packages,
972
987
  venv = None,
973
- env = _get_pip_os_env(),
988
+ env = _get_pip_os_env(color=color),
974
989
  debug = debug,
975
990
  )
976
991
  if debug:
@@ -988,6 +1003,33 @@ def pip_install(
988
1003
  return success
989
1004
 
990
1005
 
1006
+ def get_prerelease_dependencies(_packages: Optional[List[str]] = None):
1007
+ """
1008
+ Return a list of explicitly prerelease dependencies from a list of packages.
1009
+ """
1010
+ if _packages is None:
1011
+ _packages = list(all_packages.keys())
1012
+ prelrease_strings = ['dev', 'rc', 'a']
1013
+ prerelease_packages = []
1014
+ for install_name in _packages:
1015
+ _install_no_version = get_install_no_version(install_name)
1016
+ import_name = _install_to_import_name(install_name)
1017
+ install_with_version = _import_to_install_name(import_name)
1018
+ version_only = (
1019
+ install_with_version.lower().replace(_install_no_version.lower(), '')
1020
+ .split(']')[-1]
1021
+ )
1022
+
1023
+ is_prerelease = False
1024
+ for prelrease_string in prelrease_strings:
1025
+ if prelrease_string in version_only:
1026
+ is_prerelease = True
1027
+
1028
+ if is_prerelease:
1029
+ prerelease_packages.append(install_name)
1030
+ return prerelease_packages
1031
+
1032
+
991
1033
  def completely_uninstall_package(
992
1034
  install_name: str,
993
1035
  venv: str = 'mrsm',
@@ -1014,7 +1056,7 @@ def completely_uninstall_package(
1014
1056
  continue
1015
1057
  installed_versions.append(file_name)
1016
1058
 
1017
- max_attempts = len(installed_versions) + 1
1059
+ max_attempts = len(installed_versions)
1018
1060
  while attempts < max_attempts:
1019
1061
  if not venv_contains_package(
1020
1062
  _install_to_import_name(_install_no_version),
@@ -1023,8 +1065,10 @@ def completely_uninstall_package(
1023
1065
  return True
1024
1066
  if not pip_uninstall(
1025
1067
  _install_no_version,
1026
- venv=venv,
1027
- silent=(not debug), debug=debug
1068
+ venv = venv,
1069
+ silent = (not debug),
1070
+ _from_completely_uninstall = True,
1071
+ debug = debug,
1028
1072
  ):
1029
1073
  return False
1030
1074
  attempts += 1
@@ -1149,9 +1193,10 @@ def attempt_import(
1149
1193
  check_update: bool = False,
1150
1194
  check_pypi: bool = False,
1151
1195
  check_is_installed: bool = True,
1196
+ allow_outside_venv: bool = True,
1152
1197
  color: bool = True,
1153
1198
  debug: bool = False
1154
- ) -> Union[Any, Tuple[Any]]:
1199
+ ) -> Any:
1155
1200
  """
1156
1201
  Raise a warning if packages are not installed; otherwise import and return modules.
1157
1202
  If `lazy` is `True`, return lazy-imported modules.
@@ -1194,6 +1239,15 @@ def attempt_import(
1194
1239
  check_is_installed: bool, default True
1195
1240
  If `True`, check if the package is contained in the virtual environment.
1196
1241
 
1242
+ allow_outside_venv: bool, default True
1243
+ If `True`, search outside of the specified virtual environment
1244
+ if the package cannot be found.
1245
+ Setting to `False` will reinstall the package into a virtual environment, even if it
1246
+ is installed outside.
1247
+
1248
+ color: bool, default True
1249
+ If `False`, do not print ANSI colors.
1250
+
1197
1251
  Returns
1198
1252
  -------
1199
1253
  The specified modules. If they're not available and `install` is `True`, it will first
@@ -1275,6 +1329,7 @@ def attempt_import(
1275
1329
  name,
1276
1330
  venv = venv,
1277
1331
  split = split,
1332
+ allow_outside_venv = allow_outside_venv,
1278
1333
  debug = debug,
1279
1334
  )
1280
1335
  _is_installed_first_check[name] = package_is_installed
@@ -1420,7 +1475,9 @@ def import_rich(
1420
1475
  'pygments', lazy=False,
1421
1476
  )
1422
1477
  rich = attempt_import(
1423
- 'rich', lazy=lazy, **kw)
1478
+ 'rich', lazy=lazy,
1479
+ **kw
1480
+ )
1424
1481
  return rich
1425
1482
 
1426
1483
 
@@ -1654,10 +1711,26 @@ def is_installed(
1654
1711
  import_name: str,
1655
1712
  venv: Optional[str] = 'mrsm',
1656
1713
  split: bool = True,
1714
+ allow_outside_venv: bool = True,
1657
1715
  debug: bool = False,
1658
1716
  ) -> bool:
1659
1717
  """
1660
1718
  Check whether a package is installed.
1719
+
1720
+ Parameters
1721
+ ----------
1722
+ import_name: str
1723
+ The import name of the module.
1724
+
1725
+ venv: Optional[str], default 'mrsm'
1726
+ The venv in which to search for the module.
1727
+
1728
+ split: bool, default True
1729
+ If `True`, split on periods to determine the root module name.
1730
+
1731
+ allow_outside_venv: bool, default True
1732
+ If `True`, search outside of the specified virtual environment
1733
+ if the package cannot be found.
1661
1734
  """
1662
1735
  if debug:
1663
1736
  from meerschaum.utils.debug import dprint
@@ -1668,7 +1741,11 @@ def is_installed(
1668
1741
  spec_path = pathlib.Path(
1669
1742
  get_module_path(root_name, venv=venv, debug=debug)
1670
1743
  or
1671
- importlib.util.find_spec(root_name).origin
1744
+ (
1745
+ importlib.util.find_spec(root_name).origin
1746
+ if venv is not None and allow_outside_venv
1747
+ else None
1748
+ )
1672
1749
  )
1673
1750
  except (ModuleNotFoundError, ValueError, AttributeError, TypeError) as e:
1674
1751
  spec_path = None
@@ -1762,7 +1839,7 @@ def _monkey_patch_get_distribution(_dist: str, _version: str) -> None:
1762
1839
  pkg_resources.get_distribution = _get_distribution
1763
1840
 
1764
1841
 
1765
- def _get_pip_os_env():
1842
+ def _get_pip_os_env(color: bool = True):
1766
1843
  """
1767
1844
  Return the environment variables context in which `pip` should be run.
1768
1845
  See PEP 668 for why we are overriding the environment.
@@ -1771,5 +1848,6 @@ def _get_pip_os_env():
1771
1848
  pip_os_env = os.environ.copy()
1772
1849
  pip_os_env.update({
1773
1850
  'PIP_BREAK_SYSTEM_PACKAGES': 'true',
1851
+ ('FORCE_COLOR' if color else 'NO_COLOR'): '1',
1774
1852
  })
1775
1853
  return pip_os_env
@@ -119,7 +119,7 @@ packages: Dict[str, Dict[str, str]] = {
119
119
  },
120
120
  }
121
121
  packages['sql'] = {
122
- 'numpy' : 'numpy>=1.18.5',
122
+ 'numpy' : 'numpy<2.0.0',
123
123
  'pandas' : 'pandas[parquet]>=2.0.1',
124
124
  'pyarrow' : 'pyarrow>=16.1.0',
125
125
  'dask' : 'dask[dataframe]>=2024.5.1',
@@ -9,10 +9,16 @@ See `meerschaum.utils.pool` for multiprocessing and
9
9
  """
10
10
 
11
11
  from __future__ import annotations
12
- import os, signal, subprocess, sys, platform
12
+ import os, signal, subprocess, sys, platform, traceback
13
13
  from meerschaum.utils.typing import Union, Optional, Any, Callable, Dict, Tuple
14
14
  from meerschaum.config.static import STATIC_CONFIG
15
15
 
16
+ _child_processes = []
17
+ def signal_handler(sig, frame):
18
+ for child in _child_processes:
19
+ child.send_signal(sig)
20
+ child.wait()
21
+
16
22
  def run_process(
17
23
  *args,
18
24
  foreground: bool = False,
@@ -73,6 +79,7 @@ def run_process(
73
79
  sys.stdout.write(line.decode('utf-8'))
74
80
  sys.stdout.flush()
75
81
 
82
+
76
83
  if capture_output or line_callback is not None:
77
84
  kw['stdout'] = subprocess.PIPE
78
85
  kw['stderr'] = subprocess.STDOUT
@@ -123,6 +130,7 @@ def run_process(
123
130
 
124
131
  try:
125
132
  child = subprocess.Popen(*args, **kw)
133
+ _child_processes.append(child)
126
134
 
127
135
  # we can't set the process group id from the parent since the child
128
136
  # will already have exec'd. and we can't SIGSTOP it before exec,
@@ -147,6 +155,9 @@ def run_process(
147
155
  store_proc_dict[store_proc_key] = child
148
156
  _ret = poll_process(child, line_callback) if line_callback is not None else child.wait()
149
157
  ret = _ret if not as_proc else child
158
+ except KeyboardInterrupt:
159
+ child.send_signal(signal.SIGINT)
160
+ ret = child.wait() if not as_proc else child
150
161
  finally:
151
162
  if foreground:
152
163
  # we have to mask SIGTTOU because tcsetpgrp
@@ -15,7 +15,7 @@ __all__ = sorted([
15
15
  'activate_venv', 'deactivate_venv', 'init_venv',
16
16
  'inside_venv', 'is_venv_active', 'venv_exec',
17
17
  'venv_executable', 'venv_exists', 'venv_target_path',
18
- 'Venv', 'get_venvs', 'verify_venv',
18
+ 'Venv', 'get_venvs', 'verify_venv', 'get_module_venv',
19
19
  ])
20
20
  __pdoc__ = {'Venv': True}
21
21
 
@@ -709,4 +709,28 @@ def get_venvs() -> List[str]:
709
709
  return venvs
710
710
 
711
711
 
712
+ def get_module_venv(module) -> Union[str, None]:
713
+ """
714
+ Return the virtual environment where an imported module is installed.
715
+
716
+ Parameters
717
+ ----------
718
+ module: ModuleType
719
+ The imported module to inspect.
720
+
721
+ Returns
722
+ -------
723
+ The name of a venv or `None`.
724
+ """
725
+ import pathlib
726
+ from meerschaum.config.paths import VIRTENV_RESOURCES_PATH
727
+ module_path = pathlib.Path(module.__file__).resolve()
728
+ try:
729
+ rel_path = module_path.relative_to(VIRTENV_RESOURCES_PATH)
730
+ except ValueError:
731
+ return None
732
+
733
+ return rel_path.as_posix().split('/', maxsplit=1)[0]
734
+
735
+
712
736
  from meerschaum.utils.venv._Venv import Venv
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.2.2rc2
3
+ Version: 2.2.2rc3
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -40,7 +40,7 @@ Requires-Dist: fastapi >=0.111.0 ; extra == 'api'
40
40
  Requires-Dist: fastapi-login >=1.7.2 ; extra == 'api'
41
41
  Requires-Dist: python-multipart >=0.0.9 ; extra == 'api'
42
42
  Requires-Dist: httpx >=0.24.1 ; extra == 'api'
43
- Requires-Dist: numpy >=1.18.5 ; extra == 'api'
43
+ Requires-Dist: numpy <2.0.0 ; extra == 'api'
44
44
  Requires-Dist: pandas[parquet] >=2.0.1 ; extra == 'api'
45
45
  Requires-Dist: pyarrow >=16.1.0 ; extra == 'api'
46
46
  Requires-Dist: dask[dataframe] >=2024.5.1 ; extra == 'api'
@@ -225,7 +225,7 @@ Requires-Dist: duckdb-engine >=0.13.0 ; extra == 'full'
225
225
  Requires-Dist: toga >=0.3.0-dev29 ; extra == 'full'
226
226
  Requires-Dist: pywebview >=3.6.3 ; extra == 'full'
227
227
  Requires-Dist: pycparser >=2.21.0 ; extra == 'full'
228
- Requires-Dist: numpy >=1.18.5 ; extra == 'full'
228
+ Requires-Dist: numpy <2.0.0 ; extra == 'full'
229
229
  Requires-Dist: pandas[parquet] >=2.0.1 ; extra == 'full'
230
230
  Requires-Dist: pyarrow >=16.1.0 ; extra == 'full'
231
231
  Requires-Dist: dask[dataframe] >=2024.5.1 ; extra == 'full'
@@ -259,7 +259,7 @@ Provides-Extra: minimal
259
259
  Provides-Extra: required
260
260
  Provides-Extra: setup
261
261
  Provides-Extra: sql
262
- Requires-Dist: numpy >=1.18.5 ; extra == 'sql'
262
+ Requires-Dist: numpy <2.0.0 ; extra == 'sql'
263
263
  Requires-Dist: pandas[parquet] >=2.0.1 ; extra == 'sql'
264
264
  Requires-Dist: pyarrow >=16.1.0 ; extra == 'sql'
265
265
  Requires-Dist: dask[dataframe] >=2024.5.1 ; extra == 'sql'
@@ -12,16 +12,16 @@ meerschaum/_internal/gui/app/__init__.py,sha256=rKUa8hHk6Fai-PDF61tQcpT1myxKcfmv
12
12
  meerschaum/_internal/gui/app/_windows.py,sha256=-VHdjTzA3V596fVqnbmTxemONSp_80-sTNJ0CTB8FwU,2632
13
13
  meerschaum/_internal/gui/app/actions.py,sha256=rx37qXf3uoa7Ou0n1cISqNFZNL0nr4wO7vSUmWO8f2E,935
14
14
  meerschaum/_internal/gui/app/pipes.py,sha256=4nAQ0rrHb_2bNgDF0Ru2YlbPaCDDzAl5beOGU4Af-4A,1596
15
- meerschaum/_internal/shell/Shell.py,sha256=NqRowEvTUd-7uuamD_X6mt2Nw3yfuDW7z_g5sfay0Og,33194
15
+ meerschaum/_internal/shell/Shell.py,sha256=aWWUWD5i0T7qopEFqIf76AiTwLYy41DC7qFjIuiOnoM,33276
16
16
  meerschaum/_internal/shell/ShellCompleter.py,sha256=bbG-mExNXO4pltWBOXdbMp8P2wLgy8_BgipIr5aGp5s,3114
17
17
  meerschaum/_internal/shell/ValidAutoSuggest.py,sha256=bARjOWMidz0dvMelLUe6yRPto5l3gcEHYHqFDjoh22I,1280
18
18
  meerschaum/_internal/shell/__init__.py,sha256=vXQoQPEVlYiUYai1b5AwQAlTnja6A2cSABnqXhzlS7I,281
19
19
  meerschaum/_internal/shell/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  meerschaum/_internal/term/TermPageHandler.py,sha256=Rt5S47Pr_3HLJc8xIXpZUczYE_Dw2qT8qwf1jZFtUHQ,520
21
- meerschaum/_internal/term/__init__.py,sha256=QZQerwLmqE6SS1MHH8HbZkoUunLhhcmZDmPf52y2dhM,1583
21
+ meerschaum/_internal/term/__init__.py,sha256=c4Je3376Tj7Me2qldCxg_Xs2mGN-Mu1YAMIaAG6vK6w,1642
22
22
  meerschaum/_internal/term/tools.py,sha256=dXVAimKD-Yv2fg2WOTr0YGBY7XDKjQqw-RizcS65YVI,727
23
23
  meerschaum/actions/__init__.py,sha256=7CNoKEqkqqafqMcChspJX9cR9OdgEWk9ggj0000Jl98,11360
24
- meerschaum/actions/api.py,sha256=pBVTGq9iI7rRspPPkilJthIxi6JDt6LsVXu2NXNHN_Y,14262
24
+ meerschaum/actions/api.py,sha256=7OTGfcu7CmOqplYJBdk3vCIFMPE_8QkEGRS_B-Ow9V0,14031
25
25
  meerschaum/actions/bootstrap.py,sha256=JnIyJ4odw6cA4e0Cw7J8THkLavMcj68nRyGsQDAT8nc,13396
26
26
  meerschaum/actions/clear.py,sha256=OoFZE0bK5m8s3GLNZcixuVT0DMj1izXVxGCATcmUGbI,4851
27
27
  meerschaum/actions/copy.py,sha256=8g3ANXfVdvuyaoXcZjgTg3BxHTOhHGrzVDOOsTBrpSU,6213
@@ -33,7 +33,7 @@ meerschaum/actions/install.py,sha256=akzzgsvy5yqUFuUqzSMG4eBKARY2iSnL3n_BiaNcM58
33
33
  meerschaum/actions/login.py,sha256=fNgsgkrFCn9wBQJY50SQhz2PwsN_TvEYYHnXK3JG4ig,4206
34
34
  meerschaum/actions/os.py,sha256=dtoppoBhLzW3rLNF0SFovEfNxA4WJWt_9WrOGlS5KbA,2251
35
35
  meerschaum/actions/pause.py,sha256=kDK0UMm90TuohFEG5Gugl3PEbuqGua-ghidqvgYShoc,3909
36
- meerschaum/actions/python.py,sha256=pdrgBCGdoYGFwVoyo71Q59hLS1vwzPHAW71U3JdroYo,2831
36
+ meerschaum/actions/python.py,sha256=ELGeOI6CZXHtweVN-x1jENYdGipj1Nd4_oPAKQX5nvc,3680
37
37
  meerschaum/actions/register.py,sha256=l_21LWZCzKwJVex_xAXECC5WVW1VEuIX9HSp7CuyCwA,11326
38
38
  meerschaum/actions/reload.py,sha256=gMXeFBGVfyQ7uhKhYf6bLaDMD0fLPcA9BrLBSiuvWIc,508
39
39
  meerschaum/actions/setup.py,sha256=KkAGWcgwzl_L6A19fTmTX1KtBjW2FwD8QenLjPy0mQQ,3205
@@ -45,8 +45,8 @@ meerschaum/actions/start.py,sha256=9Ej3Hk7qXfbrBaQq17KirTII_4Pa-BWSdrkutMnLA3k,1
45
45
  meerschaum/actions/stop.py,sha256=KTBadAmJ6SbReqlltkwfqZW6EryB4kZXupl0ZyInI0Q,4311
46
46
  meerschaum/actions/sync.py,sha256=10uPREu3HBVgtzakVxhCegQOz_mistABJlsNNCMgywY,17518
47
47
  meerschaum/actions/tag.py,sha256=SJf5qFW0ccLXjqlTdkK_0MCcrCMdg6xhYrhKdco0hdA,3053
48
- meerschaum/actions/uninstall.py,sha256=2fUd5ZK45VGGCI8V4NLmSnavdKjOv7cGM22x2WlTStw,6068
49
- meerschaum/actions/upgrade.py,sha256=w0f7QmJcOMU6RuwvLNCQBJgFV0iQe9jDrH1nZZEmvRk,6301
48
+ meerschaum/actions/uninstall.py,sha256=jKS4LpNJt1DQ_Z6684lD5I7P8zcTAyp5ikJRoJ5Puhc,6056
49
+ meerschaum/actions/upgrade.py,sha256=eOixvIZh99AAHjLO-ULHmovq056747EyCB8twZMJMCI,6657
50
50
  meerschaum/actions/verify.py,sha256=tY5slGpHiWiE0v9TDnjbmxSKn86zBnu9WBpixUgKNQU,4885
51
51
  meerschaum/api/__init__.py,sha256=oOYwNnkXM2s-h52EYnN2NGPfrlaQh6D4-zmHa7uPLG0,7450
52
52
  meerschaum/api/_chain.py,sha256=h8-WXUGXX6AqzdALfsBC5uv0FkAcLdHJXCGzqzuq89k,875
@@ -60,7 +60,7 @@ meerschaum/api/dash/connectors.py,sha256=nJxBOFldtCMJLYjUSVYZwX5BO-LNjTNHgoEaXe-
60
60
  meerschaum/api/dash/graphs.py,sha256=wJUDWzcLN8-C3xko6rj0F2v7Rt8YDkSXoVkkXJjYGIk,2046
61
61
  meerschaum/api/dash/jobs.py,sha256=htqnrtAGCOgn2-THezMGYM8n1E-M-sM5A5qNmOGfHzg,7529
62
62
  meerschaum/api/dash/keys.py,sha256=hzEVeN60SAfVTVSO5lajGaykxRIKGhj9Ph00HRJnNoE,12598
63
- meerschaum/api/dash/pipes.py,sha256=yGlLesL32XiHqt2n28876s49BlGEov2X18ZZhZJRw-M,19233
63
+ meerschaum/api/dash/pipes.py,sha256=RVVYIJJy4G01cXou9OT8Gr5ZsygQ_GUqJDDhU1akhi8,20615
64
64
  meerschaum/api/dash/plugins.py,sha256=JrLLw2r1Ar7asBgbMbSuiuz8dB9bME41ChynYN2KO-Y,3662
65
65
  meerschaum/api/dash/sync.py,sha256=9lt7IRdG-fe9gf_ZO_viPiGlerX7ic6r_VFocv3I51A,504
66
66
  meerschaum/api/dash/users.py,sha256=xfKwezl_yM4-gmCFSk4VRXR8teIEouw03c6oGVhOzns,2362
@@ -72,10 +72,11 @@ meerschaum/api/dash/assets/banner_1920x320.png,sha256=n2cNTSVEsGxO9XZg2keb85J3UO
72
72
  meerschaum/api/dash/assets/favicon.ico,sha256=nDEekVxwS60wEDno1nbw5GF3TJOcDV26SETOHJEZKkY,9662
73
73
  meerschaum/api/dash/assets/logo_48x48.png,sha256=hTR5BHUHEN4yP2xiqAcDciuigoII9T3-80R-dzsxVmw,10218
74
74
  meerschaum/api/dash/assets/logo_500x500.png,sha256=9EUtf6wQcEZTXHKfQ2kjNXod6Rn_4DTB_BkTgxggq00,67702
75
- meerschaum/api/dash/callbacks/__init__.py,sha256=tAcK0ZX5qAN9mD5f7AYv0IBsGI6vI5r6wswPXfGgJfM,325
76
- meerschaum/api/dash/callbacks/dashboard.py,sha256=M3VJoRoI89jjPLSQejwp5v56-nkzs-g30r6rRvwIkCQ,32301
75
+ meerschaum/api/dash/callbacks/__init__.py,sha256=CKOkt7PIHbYxX9aDab2xPDuufIAQjSR5MVX-hU8Zi2w,450
76
+ meerschaum/api/dash/callbacks/custom.py,sha256=hm6fb0f-bpS_--qlV_9ScaAN_-dnSw60FwyomWBQHfY,1166
77
+ meerschaum/api/dash/callbacks/dashboard.py,sha256=8Rjxuw8uGww6oRfwRUC_mjm6i7aD0dVW0CeY2a7r7Yo,33101
77
78
  meerschaum/api/dash/callbacks/jobs.py,sha256=OEYxJRlmnxqbsvHb5jBJJCsRvVCsMNusm9AClCT9Pm0,7689
78
- meerschaum/api/dash/callbacks/login.py,sha256=dfl0EOkEUcF7a-u8fq0WGNtwV63714ds30yWfOM2rqE,2613
79
+ meerschaum/api/dash/callbacks/login.py,sha256=7WHZPsegy1qf3rrm5rucLYTufi93WrAy921HXQP14lU,2630
79
80
  meerschaum/api/dash/callbacks/plugins.py,sha256=7CrwwbBI2N3DR4Yb1bKmrtJ3cAQ3dVv1l6E_AtZ6Wng,2777
80
81
  meerschaum/api/dash/callbacks/register.py,sha256=9AgTcl--TPt6oETKzirQCkH9Azlm3XrU9U6XJM2b8Lk,3600
81
82
  meerschaum/api/dash/pages/__init__.py,sha256=1g3KAVYklZ5L8bpW-LfG5jBXRebnUeA_wmNsuIMRZEE,273
@@ -130,12 +131,12 @@ meerschaum/config/_environment.py,sha256=Vv4DLDfc2vKLbCLsMvkQDj77K4kEvHKEBmUBo-w
130
131
  meerschaum/config/_formatting.py,sha256=RT_oU0OSfUkzeqbY5jvEJwuove_t9sP4MyUb1Px250U,6635
131
132
  meerschaum/config/_jobs.py,sha256=2bEikO48qVSguFS3lrbWz6uiKt_0b3oSRWhwyz8RRDM,1279
132
133
  meerschaum/config/_patch.py,sha256=21N30q1ANmWMDQ-2RUjpMx7KafWfPQ3lKx9rrMqg1s4,1526
133
- meerschaum/config/_paths.py,sha256=xS7zim8Dr7LIJQBTzDH8IOhTZ4AHMvc5a1np8SGX4Rg,8185
134
+ meerschaum/config/_paths.py,sha256=CWhB17T00NeyyKW5T0fjmetd5AqOGYIN5ySbFg3dAMI,8265
134
135
  meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6wLs,1220
135
136
  meerschaum/config/_read_config.py,sha256=WFZKIXZMDe_ca0ES7ivgM_mnwShvFxLdoeisT_X5-h0,14720
136
137
  meerschaum/config/_shell.py,sha256=s74cmJl8NrhM_Y1cB_P41_JDUYXV0g4WXnKFZWMtnrY,3551
137
138
  meerschaum/config/_sync.py,sha256=oK2ZujO2T1he08BXCFyiniBUevNGWSQKXLcS_jRv_7Y,4155
138
- meerschaum/config/_version.py,sha256=EInJbGE14rCfVET_lXzEeEKw-tGc7n8tgXJiPluDNic,74
139
+ meerschaum/config/_version.py,sha256=gRIyQLaHRaMJPteLYj_KAyg_LA76Yok9g8RD3sOSaRw,74
139
140
  meerschaum/config/paths.py,sha256=Z7vaOunaEJbVFXiSSz4IthhNOQDI-dhtpi5TpSyrcXg,206
140
141
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
142
  meerschaum/config/stack/__init__.py,sha256=c_WdTSejVdj8lqSE_pK5MhIBkHoftiZWDuEuB9dmk2I,9007
@@ -145,7 +146,7 @@ meerschaum/config/stack/mosquitto/resources/__init__.py,sha256=47DEQpj8HBSa-_TIm
145
146
  meerschaum/config/stack/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
147
  meerschaum/config/static/__init__.py,sha256=d3bkER5FJwsvrL8TM5V8Vmy0Bi7Fq7H8U-4jjfpV4Og,4474
147
148
  meerschaum/connectors/Connector.py,sha256=cJKinmk7eWZwCBvtX4H9r66macTZOY1qjxR7JUEmDmg,6381
148
- meerschaum/connectors/__init__.py,sha256=zXumYuKTWOyu3U6J1zvMQS30HImYLE8ssBdJs-I134M,12106
149
+ meerschaum/connectors/__init__.py,sha256=WmnYotqRnz_YVQMkf2TkizdqZxWKYbCrnIc1_Dr3Wb0,12129
149
150
  meerschaum/connectors/parse.py,sha256=gidA2jvOLTvEeL5hM9JjcUwkMRBadUhd4IfA5Jy1tgg,4044
150
151
  meerschaum/connectors/poll.py,sha256=gIY9TvFBqMvMNQvR0O2No7koLLz2PjfExBr_Dsosgpg,7363
151
152
  meerschaum/connectors/api/APIConnector.py,sha256=pj-RncLhDUEBK7R4tByH6nrxZWU8zxGVOS2Wyik36zs,4355
@@ -176,7 +177,7 @@ meerschaum/connectors/sql/tools.py,sha256=jz8huOaRCwGlYdtGfAqAh7SoK8uydYBrasKQba
176
177
  meerschaum/connectors/sql/tables/__init__.py,sha256=e2dALTtThqbrq0soMNQ9QwgccyfTAjOrFkEClstLp3A,9001
177
178
  meerschaum/connectors/sql/tables/types.py,sha256=Jc_MTHIBM-KHpQt__Lckp39CeOo7tGOiAk5faDx-znY,1573
178
179
  meerschaum/core/__init__.py,sha256=tjASW10n9uLV6bYhcwP4rggh-ESXSJzgxpSBbVsuISs,251
179
- meerschaum/core/Pipe/__init__.py,sha256=1QOHqyUX2uJnfihVoGQV30BLm7JZZX2qjbsYIpCNFGI,16230
180
+ meerschaum/core/Pipe/__init__.py,sha256=5VxC5qvEuT-1eo5t4Sw5oycZCK40oxAFkHJq436ieFY,16486
180
181
  meerschaum/core/Pipe/_attributes.py,sha256=XbSHfDsomaNymzf7-__UhbHqu6mlTTx20xprsw_L04I,13202
181
182
  meerschaum/core/Pipe/_bootstrap.py,sha256=sTbHUX8V0Kfn6vEErXzsVslSjQNfQ5MxXxxuRYslr4w,7613
182
183
  meerschaum/core/Pipe/_clear.py,sha256=hQVPztHiadzLB0c4_yFg6EETnf9MtFdJDCpO41Giuco,2261
@@ -195,7 +196,7 @@ meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_u
195
196
  meerschaum/core/User/_User.py,sha256=CApB7Y0QJL6S9QOCCfrG4SbPuPXJ9AsAYQ5pASMP_Aw,6527
196
197
  meerschaum/core/User/__init__.py,sha256=lJ7beIZTG9sO4dAi3367fFBl17dXYEWHKi7HoaPlDyk,193
197
198
  meerschaum/plugins/_Plugin.py,sha256=LpplVPviSskKqf_igl4yIsD72H2C9vaFPQgU7-93ytg,34039
198
- meerschaum/plugins/__init__.py,sha256=g-KFejGEqcfBukqqF13Vsj8TdjGo99nrv_Z6CB8-mCg,21866
199
+ meerschaum/plugins/__init__.py,sha256=RUnkBTvusySyp4rvVRbtqoV2lKCdKeu0uxExB5Fg7KM,23503
199
200
  meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
200
201
  meerschaum/utils/_get_pipes.py,sha256=dlPckpYYyM0IwRZ2VL0u9DiEeYhr5Ho9gkzvWxzNVwI,11460
201
202
  meerschaum/utils/dataframe.py,sha256=vxZ72ME7IWuadtktgjFZF5bc9fXW_0TuynjFlJljlLU,31955
@@ -204,7 +205,7 @@ meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mi
204
205
  meerschaum/utils/misc.py,sha256=H26hLtCP8QHwXoHlvkxjWu6cPTwudDbbsbRkGw6ultg,43296
205
206
  meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
206
207
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
207
- meerschaum/utils/process.py,sha256=BFT9ntuTSlIXTLFGGSnrjgUlJqCLzbOHfIf6iCcuf9A,7191
208
+ meerschaum/utils/process.py,sha256=UyiNszYXdnjF6WN8Tt0NchWjkCV10MbOXEFn_TAhXeg,7510
208
209
  meerschaum/utils/prompt.py,sha256=0mBFbgi_l9rCou9UnC_6qKTHkqyl1Z_jSRzfmc0xRXM,16490
209
210
  meerschaum/utils/schedule.py,sha256=btAeSDaoFH62-7wTO0U7NK9P9QHV46PtY3DJ8DN_mCY,10860
210
211
  meerschaum/utils/sql.py,sha256=4sCNEpgUd6uFz6ySs4nnUMVaOT0YAvPM1ZlQYJTSF-0,46656
@@ -212,7 +213,7 @@ meerschaum/utils/threading.py,sha256=3N8JXPAnwqJiSjuQcbbJg3Rv9-CCUMJpeQRfKFR7MaA
212
213
  meerschaum/utils/typing.py,sha256=L05wOXfWdn_nJ0KnZVr-2zdMYcqjdyOW_7InT3xe6-s,2807
213
214
  meerschaum/utils/warnings.py,sha256=0b5O2DBbhEAGnu6RAB1hlHSVmwL_hcR3EiMkExXmBJ0,6535
214
215
  meerschaum/utils/yaml.py,sha256=vbCrFjdapKsZ9wRRaI9Ih8dVUwZ-KHpSzfGhRcpDBgQ,3162
215
- meerschaum/utils/daemon/Daemon.py,sha256=iZzlPMF237sidfQJ3iNrhGJpV6onvEo1_9qtv9pE1j4,34595
216
+ meerschaum/utils/daemon/Daemon.py,sha256=rd9L9BgB0vwnPuhAbgLI-KkiEhFIPJqTQZ4PJ66lTf4,34686
216
217
  meerschaum/utils/daemon/FileDescriptorInterceptor.py,sha256=1cn5nQYLImL-BHXlLoxN_TadgN7XmGRLl1b7xecYMPc,4544
217
218
  meerschaum/utils/daemon/RotatingFile.py,sha256=LuaHPs-c4GaMc3VkMjvL6WJ5r7wmMUOm9ZLyk4OHAlg,23658
218
219
  meerschaum/utils/daemon/__init__.py,sha256=I_ki51yml4vsh9OoH7BWTaz9SnATD8qM0i0fN3aUMn0,8375
@@ -224,16 +225,16 @@ meerschaum/utils/formatting/_jobs.py,sha256=s1lVcdMkzNj5Bqw-GsUhcguUFtahi5nQ-kg1
224
225
  meerschaum/utils/formatting/_pipes.py,sha256=wy0iWJFsFl3X2VloaiA_gp9Yx9w6tD3FQZvAQAqef4A,19492
225
226
  meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
226
227
  meerschaum/utils/formatting/_shell.py,sha256=ox75O7VHDAiwzSvdMSJZhXLadvAqYJVeihU6WeZ2Ogc,3677
227
- meerschaum/utils/packages/__init__.py,sha256=TTNgCWgIpdyG21Pk86dDne7eTG02_0nERxopLBD1tHo,59811
228
- meerschaum/utils/packages/_packages.py,sha256=kWoo1KWvpQgR3rY_rpHzvGIh14BBFH92Erw5UtW7yX0,7918
228
+ meerschaum/utils/packages/__init__.py,sha256=CcZmjGqaBnUZUBEaZH4lsa3z_9y4JRhMKNK1D-wJX6U,62505
229
+ meerschaum/utils/packages/_packages.py,sha256=7iIPrXj7vQPR3NH34LNHqkZzWGHo4jHFA4OtQt-jQuc,7916
229
230
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
230
231
  meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
231
- meerschaum/utils/venv/__init__.py,sha256=iVBBncvP_1FHaxpRo4BGDdTc6AXvP3sO_NXUuwdJWOU,23557
232
- meerschaum-2.2.2rc2.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
233
- meerschaum-2.2.2rc2.dist-info/METADATA,sha256=Fuc1OkYDzgjosH8VDHUmwZdpJsYK8aMApbiLipzUAx0,23988
234
- meerschaum-2.2.2rc2.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
235
- meerschaum-2.2.2rc2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
236
- meerschaum-2.2.2rc2.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
237
- meerschaum-2.2.2rc2.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
238
- meerschaum-2.2.2rc2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
239
- meerschaum-2.2.2rc2.dist-info/RECORD,,
232
+ meerschaum/utils/venv/__init__.py,sha256=4vFAu85lQ5GYEVhc6e_KhFmrks4t_Ma6ysmtraccYbs,24187
233
+ meerschaum-2.2.2rc3.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
234
+ meerschaum-2.2.2rc3.dist-info/METADATA,sha256=9pxxdc0zU-JR59POu0OC2fzBOVhFeuFMh7wp-LiWfnA,23982
235
+ meerschaum-2.2.2rc3.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
236
+ meerschaum-2.2.2rc3.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
237
+ meerschaum-2.2.2rc3.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
238
+ meerschaum-2.2.2rc3.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
239
+ meerschaum-2.2.2rc3.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
240
+ meerschaum-2.2.2rc3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (70.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5