meerschaum 2.2.1__py3-none-any.whl → 2.2.2rc2__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.
- meerschaum/_internal/shell/Shell.py +31 -13
- meerschaum/_internal/term/__init__.py +1 -1
- meerschaum/_internal/term/tools.py +1 -1
- meerschaum/actions/api.py +46 -11
- meerschaum/actions/python.py +31 -15
- meerschaum/actions/start.py +2 -4
- meerschaum/actions/upgrade.py +1 -1
- meerschaum/api/__init__.py +1 -0
- meerschaum/api/dash/components.py +5 -2
- meerschaum/config/_default.py +1 -0
- meerschaum/config/_paths.py +11 -12
- meerschaum/config/_version.py +1 -1
- meerschaum/config/paths.py +10 -0
- meerschaum/config/static/__init__.py +1 -1
- meerschaum/core/Pipe/_sync.py +2 -3
- meerschaum/utils/packages/__init__.py +114 -38
- meerschaum/utils/packages/_packages.py +1 -0
- meerschaum/utils/process.py +0 -1
- meerschaum/utils/schedule.py +1 -1
- meerschaum/utils/venv/__init__.py +21 -10
- {meerschaum-2.2.1.dist-info → meerschaum-2.2.2rc2.dist-info}/METADATA +5 -1
- {meerschaum-2.2.1.dist-info → meerschaum-2.2.2rc2.dist-info}/RECORD +28 -27
- {meerschaum-2.2.1.dist-info → meerschaum-2.2.2rc2.dist-info}/LICENSE +0 -0
- {meerschaum-2.2.1.dist-info → meerschaum-2.2.2rc2.dist-info}/NOTICE +0 -0
- {meerschaum-2.2.1.dist-info → meerschaum-2.2.2rc2.dist-info}/WHEEL +0 -0
- {meerschaum-2.2.1.dist-info → meerschaum-2.2.2rc2.dist-info}/entry_points.txt +0 -0
- {meerschaum-2.2.1.dist-info → meerschaum-2.2.2rc2.dist-info}/top_level.txt +0 -0
- {meerschaum-2.2.1.dist-info → meerschaum-2.2.2rc2.dist-info}/zip-safe +0 -0
@@ -203,6 +203,29 @@ def _check_complete_keys(line: str) -> Optional[List[str]]:
|
|
203
203
|
return None
|
204
204
|
|
205
205
|
|
206
|
+
def get_shell_intro(with_color: bool = True) -> str:
|
207
|
+
"""
|
208
|
+
Return the introduction message string.
|
209
|
+
"""
|
210
|
+
from meerschaum.utils.formatting import CHARSET, ANSI, colored
|
211
|
+
intro = get_config('shell', CHARSET, 'intro', patch=patch)
|
212
|
+
intro += '\n' + ''.join(
|
213
|
+
[' '
|
214
|
+
for i in range(
|
215
|
+
string_width(intro) - len('v' + version)
|
216
|
+
)
|
217
|
+
]
|
218
|
+
) + 'v' + version
|
219
|
+
|
220
|
+
if not with_color or not ANSI:
|
221
|
+
return intro
|
222
|
+
|
223
|
+
return colored(
|
224
|
+
intro,
|
225
|
+
**get_config('shell', 'ansi', 'intro', 'rich')
|
226
|
+
)
|
227
|
+
|
228
|
+
|
206
229
|
class Shell(cmd.Cmd):
|
207
230
|
def __init__(
|
208
231
|
self,
|
@@ -277,25 +300,20 @@ class Shell(cmd.Cmd):
|
|
277
300
|
except Exception as e:
|
278
301
|
pass
|
279
302
|
|
280
|
-
|
281
303
|
def load_config(self, instance: Optional[str] = None):
|
282
304
|
"""
|
283
305
|
Set attributes from the shell configuration.
|
284
306
|
"""
|
285
307
|
from meerschaum.utils.misc import remove_ansi
|
286
|
-
from meerschaum.utils.formatting import CHARSET, ANSI,
|
308
|
+
from meerschaum.utils.formatting import CHARSET, ANSI, colored
|
287
309
|
|
288
310
|
if shell_attrs.get('intro', None) != '':
|
289
|
-
self.intro =
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
]
|
296
|
-
) + 'v' + version
|
297
|
-
else:
|
298
|
-
self.intro = ""
|
311
|
+
self.intro = (
|
312
|
+
get_shell_intro(with_color=False)
|
313
|
+
if shell_attrs.get('intro', None) != ''
|
314
|
+
else ""
|
315
|
+
)
|
316
|
+
|
299
317
|
shell_attrs['intro'] = self.intro
|
300
318
|
shell_attrs['_prompt'] = get_config('shell', CHARSET, 'prompt', patch=patch)
|
301
319
|
self.prompt = shell_attrs['_prompt']
|
@@ -822,7 +840,7 @@ def input_with_sigint(_input, session, shell: Optional[Shell] = None):
|
|
822
840
|
"""
|
823
841
|
Replace built-in `input()` with prompt_toolkit.prompt.
|
824
842
|
"""
|
825
|
-
from meerschaum.utils.formatting import CHARSET, ANSI,
|
843
|
+
from meerschaum.utils.formatting import CHARSET, ANSI, colored
|
826
844
|
from meerschaum.connectors import is_connected, connectors
|
827
845
|
from meerschaum.utils.misc import remove_ansi
|
828
846
|
from meerschaum.config import get_config
|
@@ -16,7 +16,7 @@ from meerschaum._internal.term.TermPageHandler import TermPageHandler
|
|
16
16
|
from meerschaum.config._paths import API_TEMPLATES_PATH, API_STATIC_PATH
|
17
17
|
|
18
18
|
tornado, tornado_ioloop, terminado = attempt_import(
|
19
|
-
'tornado', 'tornado.ioloop', 'terminado', lazy=False,
|
19
|
+
'tornado', 'tornado.ioloop', 'terminado', lazy=False,
|
20
20
|
)
|
21
21
|
|
22
22
|
def get_webterm_app_and_manager() -> Tuple[
|
@@ -17,7 +17,7 @@ def is_webterm_running(host: str, port: int, protocol: str = 'http') -> int:
|
|
17
17
|
requests = attempt_import('requests')
|
18
18
|
url = f'{protocol}://{host}:{port}'
|
19
19
|
try:
|
20
|
-
r = requests.get(url)
|
20
|
+
r = requests.get(url, timeout=3)
|
21
21
|
except Exception as e:
|
22
22
|
return False
|
23
23
|
if not r:
|
meerschaum/actions/api.py
CHANGED
@@ -169,7 +169,7 @@ def _api_start(
|
|
169
169
|
### `check_update` must be False, because otherwise Uvicorn's hidden imports will break things.
|
170
170
|
dotenv = attempt_import('dotenv', lazy=False)
|
171
171
|
uvicorn, gunicorn = attempt_import(
|
172
|
-
'uvicorn', 'gunicorn',
|
172
|
+
'uvicorn', 'gunicorn', lazy=False, check_update=False,
|
173
173
|
)
|
174
174
|
|
175
175
|
uvicorn_config_path = API_UVICORN_RESOURCES_PATH / SERVER_ID / 'config.json'
|
@@ -306,15 +306,50 @@ def _api_start(
|
|
306
306
|
|
307
307
|
def _run_uvicorn():
|
308
308
|
try:
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
309
|
+
uvicorn_flags = [
|
310
|
+
'--host', host,
|
311
|
+
'--port', str(port),
|
312
|
+
(
|
313
|
+
'--proxy-headers'
|
314
|
+
if uvicorn_config.get('proxy_headers')
|
315
|
+
else '--no-proxy-headers'
|
316
|
+
),
|
317
|
+
(
|
318
|
+
'--use-colors'
|
319
|
+
if uvicorn_config.get('use_colors')
|
320
|
+
else '--no-use-colors'
|
321
|
+
),
|
322
|
+
'--env-file', uvicorn_config['env_file'],
|
323
|
+
]
|
324
|
+
if uvicorn_reload := uvicorn_config.get('reload'):
|
325
|
+
uvicorn_flags.append('--reload')
|
326
|
+
if (
|
327
|
+
uvicorn_reload
|
328
|
+
and (reload_dirs := uvicorn_config.get('reload_dirs'))
|
329
|
+
):
|
330
|
+
if not isinstance(reload_dirs, list):
|
331
|
+
reload_dirs = [reload_dirs]
|
332
|
+
for reload_dir in reload_dirs:
|
333
|
+
uvicorn_flags += ['--reload-dir', reload_dir]
|
334
|
+
if (
|
335
|
+
uvicorn_reload
|
336
|
+
and (reload_excludes := uvicorn_config.get('reload_excludes'))
|
337
|
+
):
|
338
|
+
if not isinstance(reload_excludes, list):
|
339
|
+
reload_excludes = [reload_excludes]
|
340
|
+
for reload_exclude in reload_excludes:
|
341
|
+
uvicorn_flags += ['--reload-exclude', reload_exclude]
|
342
|
+
if (uvicorn_workers := uvicorn_config.get('workers')) is not None:
|
343
|
+
uvicorn_flags += ['--workers', str(uvicorn_workers)]
|
344
|
+
|
345
|
+
uvicorn_args = uvicorn_flags + ['meerschaum.api:app']
|
346
|
+
proc = run_python_package(
|
347
|
+
'uvicorn',
|
348
|
+
uvicorn_args,
|
349
|
+
venv = 'mrsm',
|
350
|
+
as_proc = True,
|
351
|
+
foreground = True,
|
352
|
+
debug = debug,
|
318
353
|
)
|
319
354
|
except KeyboardInterrupt:
|
320
355
|
pass
|
@@ -350,7 +385,7 @@ def _api_start(
|
|
350
385
|
)
|
351
386
|
for k, v in env_dict.items()
|
352
387
|
},
|
353
|
-
venv =
|
388
|
+
venv = 'mrsm',
|
354
389
|
debug = debug,
|
355
390
|
)
|
356
391
|
except KeyboardInterrupt:
|
meerschaum/actions/python.py
CHANGED
@@ -10,36 +10,37 @@ from meerschaum.utils.typing import SuccessTuple, Any, List, Optional
|
|
10
10
|
|
11
11
|
def python(
|
12
12
|
action: Optional[List[str]] = None,
|
13
|
+
venv: Optional[str] = 'mrsm',
|
14
|
+
sub_args: Optional[List[str]] = None,
|
13
15
|
debug: bool = False,
|
14
16
|
**kw: Any
|
15
17
|
) -> SuccessTuple:
|
16
18
|
"""
|
17
|
-
Launch a Python interpreter with Meerschaum imported.
|
18
|
-
|
19
|
+
Launch a virtual environment's Python interpreter with Meerschaum imported.
|
20
|
+
You may pass flags to the Python binary by surrounding each flag with `[]`.
|
19
21
|
|
20
22
|
Usage:
|
21
23
|
`python {commands}`
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
Hello, World!
|
28
|
-
|
29
|
-
>>> import meerschaum as mrsm
|
30
|
-
>>> print('Hello, World!')
|
31
|
-
>>> pipes = mrsm.get_pipes()
|
32
|
-
```
|
25
|
+
Examples:
|
26
|
+
mrsm python
|
27
|
+
mrsm python --venv noaa
|
28
|
+
mrsm python [-i] [-c 'print("hi")']
|
33
29
|
"""
|
34
|
-
import sys, subprocess
|
30
|
+
import sys, subprocess, os
|
35
31
|
from meerschaum.utils.debug import dprint
|
36
32
|
from meerschaum.utils.warnings import warn, error
|
37
33
|
from meerschaum.utils.process import run_process
|
34
|
+
from meerschaum.utils.venv import venv_executable
|
38
35
|
from meerschaum.config import __version__ as _version
|
36
|
+
from meerschaum.config.paths import VIRTENV_RESOURCES_PATH
|
39
37
|
|
40
38
|
if action is None:
|
41
39
|
action = []
|
42
40
|
|
41
|
+
if venv == 'None':
|
42
|
+
venv = None
|
43
|
+
|
43
44
|
joined_actions = ['import meerschaum as mrsm']
|
44
45
|
line = ""
|
45
46
|
for i, a in enumerate(action):
|
@@ -51,7 +52,6 @@ def python(
|
|
51
52
|
line = ""
|
52
53
|
|
53
54
|
### ensure meerschaum is imported
|
54
|
-
# joined_actions = ['import meerschaum as mrsm;'] + joined_actions
|
55
55
|
if debug:
|
56
56
|
dprint(joined_actions)
|
57
57
|
|
@@ -75,8 +75,24 @@ def python(
|
|
75
75
|
|
76
76
|
if debug:
|
77
77
|
dprint(f"command:\n{command}")
|
78
|
+
|
79
|
+
env_dict = os.environ.copy()
|
80
|
+
venv_path = (VIRTENV_RESOURCES_PATH / venv) if venv is not None else None
|
81
|
+
if venv_path is not None:
|
82
|
+
env_dict.update({'VIRTUAL_ENV': venv_path.as_posix()})
|
83
|
+
|
84
|
+
args_to_run = (
|
85
|
+
[venv_executable(venv), '-i', '-c', command]
|
86
|
+
if not sub_args
|
87
|
+
else [venv_executable(venv)] + sub_args
|
88
|
+
)
|
89
|
+
|
78
90
|
try:
|
79
|
-
return_code = run_process(
|
91
|
+
return_code = run_process(
|
92
|
+
args_to_run,
|
93
|
+
foreground = True,
|
94
|
+
env = env_dict,
|
95
|
+
)
|
80
96
|
except KeyboardInterrupt:
|
81
97
|
return_code = 1
|
82
98
|
return return_code == 0, (
|
meerschaum/actions/start.py
CHANGED
@@ -333,8 +333,7 @@ def _start_gui(
|
|
333
333
|
from meerschaum.connectors.parse import parse_instance_keys
|
334
334
|
from meerschaum._internal.term.tools import is_webterm_running
|
335
335
|
import platform
|
336
|
-
webview = attempt_import('webview')
|
337
|
-
requests = attempt_import('requests')
|
336
|
+
webview, requests = attempt_import('webview', 'requests')
|
338
337
|
import json
|
339
338
|
import time
|
340
339
|
|
@@ -365,7 +364,7 @@ def _start_gui(
|
|
365
364
|
base_url = 'http://' + api_kw['host'] + ':' + str(api_kw['port'])
|
366
365
|
|
367
366
|
process = venv_exec(
|
368
|
-
start_tornado_code, as_proc=True,
|
367
|
+
start_tornado_code, as_proc=True, debug=debug, capture_output=(not debug)
|
369
368
|
)
|
370
369
|
timeout = 10
|
371
370
|
start = time.perf_counter()
|
@@ -446,7 +445,6 @@ def _start_webterm(
|
|
446
445
|
+ " Include `-f` to start another server on a new port\n"
|
447
446
|
+ " or specify a different port with `-p`."
|
448
447
|
)
|
449
|
-
|
450
448
|
if not nopretty:
|
451
449
|
info(f"Starting the webterm at http://{host}:{port} ...\n Press CTRL+C to quit.")
|
452
450
|
tornado_app.listen(port, host)
|
meerschaum/actions/upgrade.py
CHANGED
meerschaum/api/__init__.py
CHANGED
@@ -12,7 +12,7 @@ from meerschaum.utils.packages import attempt_import, import_dcc, import_html
|
|
12
12
|
from meerschaum.utils.typing import SuccessTuple, List
|
13
13
|
from meerschaum.config.static import STATIC_CONFIG
|
14
14
|
from meerschaum.utils.misc import remove_ansi
|
15
|
-
from meerschaum.
|
15
|
+
from meerschaum._internal.shell.Shell import get_shell_intro
|
16
16
|
from meerschaum.api import endpoints, CHECK_UPDATE
|
17
17
|
from meerschaum.connectors import instance_types
|
18
18
|
from meerschaum.utils.misc import get_connector_labels
|
@@ -69,7 +69,10 @@ bottom_buttons_content = dbc.Card(
|
|
69
69
|
])
|
70
70
|
)
|
71
71
|
)
|
72
|
-
console_div = html.Div(
|
72
|
+
console_div = html.Div(
|
73
|
+
id = 'console-div',
|
74
|
+
children = [html.Pre(get_shell_intro(), id='console-pre')],
|
75
|
+
)
|
73
76
|
|
74
77
|
location = dcc.Location(id='location', refresh=False)
|
75
78
|
|
meerschaum/config/_default.py
CHANGED
meerschaum/config/_paths.py
CHANGED
@@ -82,24 +82,24 @@ for _plugin_path in _plugins_paths_to_remove:
|
|
82
82
|
|
83
83
|
ENVIRONMENT_VENVS_DIR = STATIC_CONFIG['environment']['venvs']
|
84
84
|
if ENVIRONMENT_VENVS_DIR in os.environ:
|
85
|
-
|
86
|
-
if not
|
85
|
+
_VENVS_DIR_PATH = Path(os.environ[ENVIRONMENT_VENVS_DIR]).resolve()
|
86
|
+
if not _VENVS_DIR_PATH.exists():
|
87
87
|
try:
|
88
|
-
|
88
|
+
_VENVS_DIR_PATH.mkdir(parents=True, exist_ok=True)
|
89
89
|
except Exception as e:
|
90
90
|
print(
|
91
91
|
f"Invalid path set for environment variable '{ENVIRONMENT_VENVS_DIR}':\n"
|
92
|
-
+ f"{
|
92
|
+
+ f"{_VENVS_DIR_PATH}"
|
93
93
|
)
|
94
|
-
|
95
|
-
print(f"Will use the following path for venvs instead:\n{
|
94
|
+
_VENVS_DIR_PATH = (_ROOT_DIR_PATH / 'venvs').resolve()
|
95
|
+
print(f"Will use the following path for venvs instead:\n{_VENVS_DIR_PATH}")
|
96
96
|
else:
|
97
|
-
|
97
|
+
_VENVS_DIR_PATH = _ROOT_DIR_PATH / 'venvs'
|
98
98
|
|
99
99
|
paths = {
|
100
|
-
'PACKAGE_ROOT_PATH' :
|
101
|
-
'ROOT_DIR_PATH' :
|
102
|
-
'VIRTENV_RESOURCES_PATH' :
|
100
|
+
'PACKAGE_ROOT_PATH' : Path(__file__).parent.parent.resolve().as_posix(),
|
101
|
+
'ROOT_DIR_PATH' : _ROOT_DIR_PATH.as_posix(),
|
102
|
+
'VIRTENV_RESOURCES_PATH' : _VENVS_DIR_PATH.as_posix(),
|
103
103
|
'CONFIG_DIR_PATH' : ('{ROOT_DIR_PATH}', 'config'),
|
104
104
|
'DEFAULT_CONFIG_DIR_PATH' : ('{ROOT_DIR_PATH}', 'default_config'),
|
105
105
|
'PATCH_DIR_PATH' : ('{ROOT_DIR_PATH}', 'patch_config'),
|
@@ -186,7 +186,6 @@ def __getattr__(name: str) -> Path:
|
|
186
186
|
if name.endswith('RESOURCES_PATH') or name == 'CONFIG_DIR_PATH':
|
187
187
|
path.mkdir(parents=True, exist_ok=True)
|
188
188
|
elif 'FILENAME' in name:
|
189
|
-
path =
|
189
|
+
path = path.as_posix()
|
190
190
|
|
191
191
|
return path
|
192
|
-
|
meerschaum/config/_version.py
CHANGED
@@ -110,7 +110,7 @@ STATIC_CONFIG: Dict[str, Any] = {
|
|
110
110
|
'pbkdf2_sha256',
|
111
111
|
],
|
112
112
|
'default': 'pbkdf2_sha256',
|
113
|
-
'pbkdf2_sha256__default_rounds':
|
113
|
+
'pbkdf2_sha256__default_rounds': 1_000_000,
|
114
114
|
},
|
115
115
|
'min_username_length': 1,
|
116
116
|
'max_username_length': 26,
|
meerschaum/core/Pipe/_sync.py
CHANGED
@@ -215,9 +215,8 @@ def sync(
|
|
215
215
|
|
216
216
|
### Activate and invoke `sync(pipe)` for plugin connectors with `sync` methods.
|
217
217
|
try:
|
218
|
-
if p.connector
|
219
|
-
|
220
|
-
with Venv(connector_plugin, debug=debug):
|
218
|
+
if getattr(p.connector, 'sync', None) is not None:
|
219
|
+
with Venv(get_connector_plugin(p.connector), debug=debug):
|
221
220
|
return_tuple = p.connector.sync(p, debug=debug, **kw)
|
222
221
|
p._exists = None
|
223
222
|
if not isinstance(return_tuple, tuple):
|
@@ -46,6 +46,8 @@ def get_module_path(
|
|
46
46
|
"""
|
47
47
|
Get a module's path without importing.
|
48
48
|
"""
|
49
|
+
import site
|
50
|
+
import pathlib
|
49
51
|
if debug:
|
50
52
|
from meerschaum.utils.debug import dprint
|
51
53
|
if not _try_install_name_on_fail:
|
@@ -54,33 +56,52 @@ def get_module_path(
|
|
54
56
|
import_name_lower = install_name_lower
|
55
57
|
else:
|
56
58
|
import_name_lower = import_name.lower().replace('-', '_')
|
59
|
+
|
57
60
|
vtp = venv_target_path(venv, allow_nonexistent=True, debug=debug)
|
58
61
|
if not vtp.exists():
|
59
62
|
if debug:
|
60
63
|
dprint(f"Venv '{venv}' does not exist, cannot import '{import_name}'.", color=False)
|
61
64
|
return None
|
65
|
+
|
66
|
+
venv_target_candidate_paths = [vtp]
|
67
|
+
if venv is None:
|
68
|
+
site_user_packages_dirs = [pathlib.Path(site.getusersitepackages())]
|
69
|
+
site_packages_dirs = [pathlib.Path(path) for path in site.getsitepackages()]
|
70
|
+
|
71
|
+
paths_to_add = [
|
72
|
+
path
|
73
|
+
for path in site_user_packages_dirs + site_packages_dirs
|
74
|
+
if path not in venv_target_candidate_paths
|
75
|
+
]
|
76
|
+
venv_target_candidate_paths += paths_to_add
|
77
|
+
|
62
78
|
candidates = []
|
63
|
-
for
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
if file_name.endswith('dist_info'):
|
79
|
+
for venv_target_candidate in venv_target_candidate_paths:
|
80
|
+
try:
|
81
|
+
file_names = os.listdir(venv_target_candidate)
|
82
|
+
except FileNotFoundError:
|
68
83
|
continue
|
69
|
-
|
84
|
+
for file_name in file_names:
|
85
|
+
file_name_lower = file_name.lower().replace('-', '_')
|
86
|
+
if not file_name_lower.startswith(import_name_lower):
|
87
|
+
continue
|
88
|
+
if file_name.endswith('dist_info'):
|
89
|
+
continue
|
90
|
+
file_path = venv_target_candidate / file_name
|
70
91
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
92
|
+
### Most likely: Is a directory with __init__.py
|
93
|
+
if file_name_lower == import_name_lower and file_path.is_dir():
|
94
|
+
init_path = file_path / '__init__.py'
|
95
|
+
if init_path.exists():
|
96
|
+
candidates.append(init_path)
|
76
97
|
|
77
|
-
|
78
|
-
|
79
|
-
|
98
|
+
### May be a standalone .py file.
|
99
|
+
elif file_name_lower == import_name_lower + '.py':
|
100
|
+
candidates.append(file_path)
|
80
101
|
|
81
|
-
|
82
|
-
|
83
|
-
|
102
|
+
### Compiled wheels (e.g. pyodbc)
|
103
|
+
elif file_name_lower.startswith(import_name_lower + '.'):
|
104
|
+
candidates.append(file_path)
|
84
105
|
|
85
106
|
if len(candidates) == 1:
|
86
107
|
return candidates[0]
|
@@ -466,12 +487,13 @@ def _get_package_metadata(import_name: str, venv: Optional[str]) -> Dict[str, st
|
|
466
487
|
import re
|
467
488
|
from meerschaum.config._paths import VIRTENV_RESOURCES_PATH
|
468
489
|
install_name = _import_to_install_name(import_name)
|
469
|
-
_args = ['show', install_name]
|
490
|
+
_args = ['pip', 'show', install_name]
|
470
491
|
if venv is not None:
|
471
492
|
cache_dir_path = VIRTENV_RESOURCES_PATH / venv / 'cache'
|
472
|
-
_args += ['--cache-dir',
|
493
|
+
_args += ['--cache-dir', cache_dir_path.as_posix()]
|
494
|
+
|
473
495
|
proc = run_python_package(
|
474
|
-
'
|
496
|
+
'uv', _args,
|
475
497
|
capture_output=True, as_proc=True, venv=venv, universal_newlines=True,
|
476
498
|
)
|
477
499
|
outs, errs = proc.communicate()
|
@@ -721,6 +743,7 @@ def pip_install(
|
|
721
743
|
check_pypi: bool = True,
|
722
744
|
check_wheel: bool = True,
|
723
745
|
_uninstall: bool = False,
|
746
|
+
_install_uv_pip: bool = True,
|
724
747
|
color: bool = True,
|
725
748
|
silent: bool = False,
|
726
749
|
debug: bool = False,
|
@@ -776,6 +799,7 @@ def pip_install(
|
|
776
799
|
|
777
800
|
"""
|
778
801
|
from meerschaum.config._paths import VIRTENV_RESOURCES_PATH
|
802
|
+
from meerschaum.config import get_config
|
779
803
|
from meerschaum.utils.warnings import warn
|
780
804
|
if args is None:
|
781
805
|
args = ['--upgrade'] if not _uninstall else []
|
@@ -787,9 +811,38 @@ def pip_install(
|
|
787
811
|
have_wheel = venv_contains_package('wheel', venv=venv, debug=debug)
|
788
812
|
|
789
813
|
_args = list(args)
|
790
|
-
have_pip = venv_contains_package('pip', venv=
|
814
|
+
have_pip = venv_contains_package('pip', venv=None, debug=debug)
|
815
|
+
try:
|
816
|
+
import pip
|
817
|
+
have_pip = True
|
818
|
+
except ImportError:
|
819
|
+
have_pip = False
|
820
|
+
try:
|
821
|
+
import uv
|
822
|
+
uv_bin = uv.find_uv_bin()
|
823
|
+
have_uv_pip = True
|
824
|
+
except (ImportError, FileNotFoundError):
|
825
|
+
uv_bin = None
|
826
|
+
have_uv_pip = False
|
827
|
+
if have_pip and not have_uv_pip and _install_uv_pip:
|
828
|
+
if not pip_install(
|
829
|
+
'uv',
|
830
|
+
venv = None,
|
831
|
+
debug = debug,
|
832
|
+
_install_uv_pip = False,
|
833
|
+
check_update = False,
|
834
|
+
check_pypi = False,
|
835
|
+
check_wheel = False,
|
836
|
+
):
|
837
|
+
warn(
|
838
|
+
f"Failed to install `uv` for virtual environment '{venv}'.",
|
839
|
+
color = False,
|
840
|
+
)
|
841
|
+
|
842
|
+
use_uv_pip = venv_contains_package('uv', venv=None, debug=debug) and uv_bin is not None
|
843
|
+
|
791
844
|
import sys
|
792
|
-
if not have_pip:
|
845
|
+
if not have_pip and not use_uv_pip:
|
793
846
|
if not get_pip(venv=venv, debug=debug):
|
794
847
|
import sys
|
795
848
|
minor = sys.version_info.minor
|
@@ -806,13 +859,18 @@ def pip_install(
|
|
806
859
|
|
807
860
|
with Venv(venv, debug=debug):
|
808
861
|
if venv is not None:
|
809
|
-
if
|
862
|
+
if (
|
863
|
+
'--ignore-installed' not in args
|
864
|
+
and '-I' not in _args
|
865
|
+
and not _uninstall
|
866
|
+
and not use_uv_pip
|
867
|
+
):
|
810
868
|
_args += ['--ignore-installed']
|
811
869
|
if '--cache-dir' not in args and not _uninstall:
|
812
870
|
cache_dir_path = VIRTENV_RESOURCES_PATH / venv / 'cache'
|
813
871
|
_args += ['--cache-dir', str(cache_dir_path)]
|
814
872
|
|
815
|
-
if 'pip' not in ' '.join(_args):
|
873
|
+
if 'pip' not in ' '.join(_args) and not use_uv_pip:
|
816
874
|
if check_update and not _uninstall:
|
817
875
|
pip = attempt_import('pip', venv=venv, install=False, debug=debug, lazy=False)
|
818
876
|
if need_update(pip, check_pypi=check_pypi, debug=debug):
|
@@ -820,13 +878,16 @@ def pip_install(
|
|
820
878
|
|
821
879
|
_args = (['install'] if not _uninstall else ['uninstall']) + _args
|
822
880
|
|
823
|
-
if check_wheel and not _uninstall:
|
881
|
+
if check_wheel and not _uninstall and not use_uv_pip:
|
824
882
|
if not have_wheel:
|
825
883
|
if not pip_install(
|
826
|
-
'setuptools', 'wheel',
|
884
|
+
'setuptools', 'wheel', 'uv',
|
827
885
|
venv = venv,
|
828
|
-
check_update = False,
|
829
|
-
|
886
|
+
check_update = False,
|
887
|
+
check_pypi = False,
|
888
|
+
check_wheel = False,
|
889
|
+
debug = debug,
|
890
|
+
_install_uv_pip = False,
|
830
891
|
):
|
831
892
|
warn(
|
832
893
|
(
|
@@ -838,21 +899,21 @@ def pip_install(
|
|
838
899
|
|
839
900
|
if requirements_file_path is not None:
|
840
901
|
_args.append('-r')
|
841
|
-
_args.append(
|
902
|
+
_args.append(pathlib.Path(requirements_file_path).resolve().as_posix())
|
842
903
|
|
843
904
|
if not ANSI and '--no-color' not in _args:
|
844
905
|
_args.append('--no-color')
|
845
906
|
|
846
|
-
if '--no-input' not in _args:
|
907
|
+
if '--no-input' not in _args and not use_uv_pip:
|
847
908
|
_args.append('--no-input')
|
848
909
|
|
849
|
-
if _uninstall and '-y' not in _args:
|
910
|
+
if _uninstall and '-y' not in _args and not use_uv_pip:
|
850
911
|
_args.append('-y')
|
851
912
|
|
852
|
-
if '--no-warn-conflicts' not in _args and not _uninstall:
|
913
|
+
if '--no-warn-conflicts' not in _args and not _uninstall and not use_uv_pip:
|
853
914
|
_args.append('--no-warn-conflicts')
|
854
915
|
|
855
|
-
if '--disable-pip-version-check' not in _args:
|
916
|
+
if '--disable-pip-version-check' not in _args and not use_uv_pip:
|
856
917
|
_args.append('--disable-pip-version-check')
|
857
918
|
|
858
919
|
if '--target' not in _args and '-t' not in _args and not _uninstall:
|
@@ -863,12 +924,16 @@ def pip_install(
|
|
863
924
|
and '-t' not in _args
|
864
925
|
and not inside_venv()
|
865
926
|
and not _uninstall
|
927
|
+
and not use_uv_pip
|
866
928
|
):
|
867
929
|
_args += ['--user']
|
930
|
+
if '--break-system-packages' not in _args and not _uninstall:
|
931
|
+
_args.append('--break-system-packages')
|
868
932
|
|
869
933
|
if debug:
|
870
934
|
if '-v' not in _args or '-vv' not in _args or '-vvv' not in _args:
|
871
|
-
|
935
|
+
if use_uv_pip:
|
936
|
+
_args.append('--verbose')
|
872
937
|
else:
|
873
938
|
if '-q' not in _args or '-qq' not in _args or '-qqq' not in _args:
|
874
939
|
pass
|
@@ -883,7 +948,7 @@ def pip_install(
|
|
883
948
|
if not silent:
|
884
949
|
print(msg)
|
885
950
|
|
886
|
-
if
|
951
|
+
if _uninstall:
|
887
952
|
for install_name in _packages:
|
888
953
|
_install_no_version = get_install_no_version(install_name)
|
889
954
|
if _install_no_version in ('pip', 'wheel'):
|
@@ -896,10 +961,15 @@ def pip_install(
|
|
896
961
|
f"Failed to clean up package '{_install_no_version}'.",
|
897
962
|
)
|
898
963
|
|
964
|
+
if use_uv_pip:
|
965
|
+
_args.insert(0, 'pip')
|
966
|
+
if not _uninstall:
|
967
|
+
_args.append('--prerelease=allow')
|
968
|
+
|
899
969
|
rc = run_python_package(
|
900
|
-
'pip',
|
970
|
+
('pip' if not use_uv_pip else 'uv'),
|
901
971
|
_args + _packages,
|
902
|
-
venv =
|
972
|
+
venv = None,
|
903
973
|
env = _get_pip_os_env(),
|
904
974
|
debug = debug,
|
905
975
|
)
|
@@ -1031,6 +1101,10 @@ def run_python_package(
|
|
1031
1101
|
if cwd is not None:
|
1032
1102
|
os.chdir(cwd)
|
1033
1103
|
executable = venv_executable(venv=venv)
|
1104
|
+
venv_path = (VIRTENV_RESOURCES_PATH / venv) if venv is not None else None
|
1105
|
+
env_dict = kw.get('env', os.environ).copy()
|
1106
|
+
if venv_path is not None:
|
1107
|
+
env_dict.update({'VIRTUAL_ENV': venv_path.as_posix()})
|
1034
1108
|
command = [executable, '-m', str(package_name)] + [str(a) for a in args]
|
1035
1109
|
import traceback
|
1036
1110
|
if debug:
|
@@ -1055,7 +1129,7 @@ def run_python_package(
|
|
1055
1129
|
command,
|
1056
1130
|
stdout = stdout,
|
1057
1131
|
stderr = stderr,
|
1058
|
-
env =
|
1132
|
+
env = env_dict,
|
1059
1133
|
)
|
1060
1134
|
to_return = proc if as_proc else proc.wait()
|
1061
1135
|
except KeyboardInterrupt:
|
@@ -1623,6 +1697,8 @@ def venv_contains_package(
|
|
1623
1697
|
"""
|
1624
1698
|
Search the contents of a virtual environment for a package.
|
1625
1699
|
"""
|
1700
|
+
import site
|
1701
|
+
import pathlib
|
1626
1702
|
root_name = import_name.split('.')[0] if split else import_name
|
1627
1703
|
return get_module_path(root_name, venv=venv, debug=debug) is not None
|
1628
1704
|
|
meerschaum/utils/process.py
CHANGED
@@ -147,7 +147,6 @@ def run_process(
|
|
147
147
|
store_proc_dict[store_proc_key] = child
|
148
148
|
_ret = poll_process(child, line_callback) if line_callback is not None else child.wait()
|
149
149
|
ret = _ret if not as_proc else child
|
150
|
-
|
151
150
|
finally:
|
152
151
|
if foreground:
|
153
152
|
# we have to mask SIGTTOU because tcsetpgrp
|
meerschaum/utils/schedule.py
CHANGED
@@ -8,7 +8,7 @@ Schedule processes and threads.
|
|
8
8
|
|
9
9
|
from __future__ import annotations
|
10
10
|
import sys
|
11
|
-
from datetime import datetime, timezone, timedelta
|
11
|
+
from datetime import datetime, timezone, timedelta
|
12
12
|
import meerschaum as mrsm
|
13
13
|
from meerschaum.utils.typing import Callable, Any, Optional, List, Dict
|
14
14
|
|
@@ -79,7 +79,7 @@ def activate_venv(
|
|
79
79
|
else:
|
80
80
|
threads_active_venvs[thread_id][venv] += 1
|
81
81
|
|
82
|
-
target =
|
82
|
+
target = venv_target_path(venv, debug=debug).as_posix()
|
83
83
|
if venv in active_venvs_order:
|
84
84
|
sys.path.remove(target)
|
85
85
|
try:
|
@@ -171,7 +171,7 @@ def deactivate_venv(
|
|
171
171
|
if sys.path is None:
|
172
172
|
return False
|
173
173
|
|
174
|
-
target =
|
174
|
+
target = venv_target_path(venv, allow_nonexistent=force, debug=debug).as_posix()
|
175
175
|
with LOCKS['sys.path']:
|
176
176
|
if target in sys.path:
|
177
177
|
sys.path.remove(target)
|
@@ -361,6 +361,8 @@ def init_venv(
|
|
361
361
|
verified_venvs.add(venv)
|
362
362
|
return True
|
363
363
|
|
364
|
+
import io
|
365
|
+
from contextlib import redirect_stdout, redirect_stderr
|
364
366
|
import sys, platform, os, pathlib, shutil
|
365
367
|
from meerschaum.config.static import STATIC_CONFIG
|
366
368
|
from meerschaum.config._paths import VIRTENV_RESOURCES_PATH
|
@@ -381,25 +383,34 @@ def init_venv(
|
|
381
383
|
verified_venvs.add(venv)
|
382
384
|
return True
|
383
385
|
|
384
|
-
from meerschaum.utils.packages import run_python_package, attempt_import
|
386
|
+
from meerschaum.utils.packages import run_python_package, attempt_import, _get_pip_os_env
|
385
387
|
global tried_virtualenv
|
386
388
|
try:
|
387
389
|
import venv as _venv
|
390
|
+
uv = attempt_import('uv', venv=None, debug=debug)
|
388
391
|
virtualenv = None
|
389
392
|
except ImportError:
|
390
393
|
_venv = None
|
394
|
+
uv = None
|
391
395
|
virtualenv = None
|
392
|
-
|
393
396
|
|
394
397
|
_venv_success = False
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
+
|
399
|
+
if uv is not None:
|
400
|
+
_venv_success = run_python_package(
|
401
|
+
'uv',
|
402
|
+
['venv', venv_path.as_posix(), '-q'],
|
403
|
+
venv = None,
|
404
|
+
env = _get_pip_os_env(),
|
405
|
+
debug = debug,
|
406
|
+
) == 0
|
407
|
+
|
408
|
+
if _venv is not None and not _venv_success:
|
398
409
|
f = io.StringIO()
|
399
410
|
with redirect_stdout(f):
|
400
411
|
_venv_success = run_python_package(
|
401
412
|
'venv',
|
402
|
-
[
|
413
|
+
[venv_path.as_posix()] + (
|
403
414
|
['--symlinks'] if platform.system() != 'Windows' else []
|
404
415
|
),
|
405
416
|
venv=None, debug=debug
|
@@ -438,7 +449,7 @@ def init_venv(
|
|
438
449
|
except Exception as e:
|
439
450
|
import traceback
|
440
451
|
traceback.print_exc()
|
441
|
-
virtualenv.cli_run([
|
452
|
+
virtualenv.cli_run([venv_path.as_posix()])
|
442
453
|
if dist_packages_path.exists():
|
443
454
|
vtp.mkdir(exist_ok=True, parents=True)
|
444
455
|
for file_path in dist_packages_path.glob('*'):
|
@@ -614,7 +625,7 @@ def venv_target_path(
|
|
614
625
|
return site_path
|
615
626
|
|
616
627
|
### Allow for dist-level paths (running as root).
|
617
|
-
for possible_dist in
|
628
|
+
for possible_dist in site.getsitepackages():
|
618
629
|
dist_path = pathlib.Path(possible_dist)
|
619
630
|
if not dist_path.exists():
|
620
631
|
continue
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: meerschaum
|
3
|
-
Version: 2.2.
|
3
|
+
Version: 2.2.2rc2
|
4
4
|
Summary: Sync Time-Series Pipes with Meerschaum
|
5
5
|
Home-page: https://meerschaum.io
|
6
6
|
Author: Bennett Meares
|
@@ -79,6 +79,7 @@ Requires-Dist: watchfiles >=0.21.0 ; extra == 'api'
|
|
79
79
|
Requires-Dist: dill >=0.3.3 ; extra == 'api'
|
80
80
|
Requires-Dist: virtualenv >=20.1.0 ; extra == 'api'
|
81
81
|
Requires-Dist: APScheduler >=4.0.0a5 ; extra == 'api'
|
82
|
+
Requires-Dist: uv >=0.2.11 ; extra == 'api'
|
82
83
|
Requires-Dist: pprintpp >=0.4.0 ; extra == 'api'
|
83
84
|
Requires-Dist: asciitree >=0.3.3 ; extra == 'api'
|
84
85
|
Requires-Dist: typing-extensions >=4.7.1 ; extra == 'api'
|
@@ -127,6 +128,7 @@ Requires-Dist: watchfiles >=0.21.0 ; extra == 'core'
|
|
127
128
|
Requires-Dist: dill >=0.3.3 ; extra == 'core'
|
128
129
|
Requires-Dist: virtualenv >=20.1.0 ; extra == 'core'
|
129
130
|
Requires-Dist: APScheduler >=4.0.0a5 ; extra == 'core'
|
131
|
+
Requires-Dist: uv >=0.2.11 ; extra == 'core'
|
130
132
|
Provides-Extra: dash
|
131
133
|
Requires-Dist: Flask-Compress >=1.10.1 ; extra == 'dash'
|
132
134
|
Requires-Dist: dash >=2.6.2 ; extra == 'dash'
|
@@ -212,6 +214,7 @@ Requires-Dist: watchfiles >=0.21.0 ; extra == 'full'
|
|
212
214
|
Requires-Dist: dill >=0.3.3 ; extra == 'full'
|
213
215
|
Requires-Dist: virtualenv >=20.1.0 ; extra == 'full'
|
214
216
|
Requires-Dist: APScheduler >=4.0.0a5 ; extra == 'full'
|
217
|
+
Requires-Dist: uv >=0.2.11 ; extra == 'full'
|
215
218
|
Requires-Dist: cryptography >=38.0.1 ; extra == 'full'
|
216
219
|
Requires-Dist: psycopg[binary] >=3.1.18 ; extra == 'full'
|
217
220
|
Requires-Dist: PyMySQL >=0.9.0 ; extra == 'full'
|
@@ -295,6 +298,7 @@ Requires-Dist: watchfiles >=0.21.0 ; extra == 'sql'
|
|
295
298
|
Requires-Dist: dill >=0.3.3 ; extra == 'sql'
|
296
299
|
Requires-Dist: virtualenv >=20.1.0 ; extra == 'sql'
|
297
300
|
Requires-Dist: APScheduler >=4.0.0a5 ; extra == 'sql'
|
301
|
+
Requires-Dist: uv >=0.2.11 ; extra == 'sql'
|
298
302
|
Provides-Extra: stack
|
299
303
|
Requires-Dist: docker-compose >=1.29.2 ; extra == 'stack'
|
300
304
|
|
@@ -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=
|
15
|
+
meerschaum/_internal/shell/Shell.py,sha256=NqRowEvTUd-7uuamD_X6mt2Nw3yfuDW7z_g5sfay0Og,33194
|
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=
|
22
|
-
meerschaum/_internal/term/tools.py,sha256=
|
21
|
+
meerschaum/_internal/term/__init__.py,sha256=QZQerwLmqE6SS1MHH8HbZkoUunLhhcmZDmPf52y2dhM,1583
|
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=
|
24
|
+
meerschaum/actions/api.py,sha256=pBVTGq9iI7rRspPPkilJthIxi6JDt6LsVXu2NXNHN_Y,14262
|
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=
|
36
|
+
meerschaum/actions/python.py,sha256=pdrgBCGdoYGFwVoyo71Q59hLS1vwzPHAW71U3JdroYo,2831
|
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
|
@@ -41,21 +41,21 @@ meerschaum/actions/sh.py,sha256=fLfTJaacKu4sjLTRqEzzYlT2WbbdZBEczsKb6F-qAek,2026
|
|
41
41
|
meerschaum/actions/show.py,sha256=p92UahbFeKOThGooO8Ul5Z6s6_Ll54FCxXsMAFnhuT0,29024
|
42
42
|
meerschaum/actions/sql.py,sha256=wYofwk1vGO96U2ncigGEfMtYMZeprz2FR1PRRZhkAPI,4311
|
43
43
|
meerschaum/actions/stack.py,sha256=WMRMebyYwZGNlbnj6Ja09qvCSDNteFJOTa8_joHlnVo,5886
|
44
|
-
meerschaum/actions/start.py,sha256=
|
44
|
+
meerschaum/actions/start.py,sha256=9Ej3Hk7qXfbrBaQq17KirTII_4Pa-BWSdrkutMnLA3k,18352
|
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
48
|
meerschaum/actions/uninstall.py,sha256=2fUd5ZK45VGGCI8V4NLmSnavdKjOv7cGM22x2WlTStw,6068
|
49
|
-
meerschaum/actions/upgrade.py,sha256=
|
49
|
+
meerschaum/actions/upgrade.py,sha256=w0f7QmJcOMU6RuwvLNCQBJgFV0iQe9jDrH1nZZEmvRk,6301
|
50
50
|
meerschaum/actions/verify.py,sha256=tY5slGpHiWiE0v9TDnjbmxSKn86zBnu9WBpixUgKNQU,4885
|
51
|
-
meerschaum/api/__init__.py,sha256=
|
51
|
+
meerschaum/api/__init__.py,sha256=oOYwNnkXM2s-h52EYnN2NGPfrlaQh6D4-zmHa7uPLG0,7450
|
52
52
|
meerschaum/api/_chain.py,sha256=h8-WXUGXX6AqzdALfsBC5uv0FkAcLdHJXCGzqzuq89k,875
|
53
53
|
meerschaum/api/_events.py,sha256=NrjiabEr7rmHMfxnX07DOGzr9sPiEbRkFqPjuA_8Zx8,1603
|
54
54
|
meerschaum/api/_oauth2.py,sha256=He8JnFDhfCq25Wlz1Jh3TcGz83VOttrJk6RgzJKbFLw,1056
|
55
55
|
meerschaum/api/_websockets.py,sha256=OmrSDGx3xGlfP5XXeLEyYW6-Y3iRUcB-xSqL3RWsjqQ,1609
|
56
56
|
meerschaum/api/dash/__init__.py,sha256=yr4zR7uFPlLFc_lDpwa2rCM1h9ZWGiu5-2XhHcM-5f8,2252
|
57
57
|
meerschaum/api/dash/actions.py,sha256=eUClPPdNVNSCtyq8Ecr1saasxj5VBgd1gcXejvQxXEc,9418
|
58
|
-
meerschaum/api/dash/components.py,sha256=
|
58
|
+
meerschaum/api/dash/components.py,sha256=oGX7HFzNCi37iMww747iL3bbB52ZTt9tFa2iLohffg4,6399
|
59
59
|
meerschaum/api/dash/connectors.py,sha256=nJxBOFldtCMJLYjUSVYZwX5BO-LNjTNHgoEaXe-0XMo,843
|
60
60
|
meerschaum/api/dash/graphs.py,sha256=wJUDWzcLN8-C3xko6rj0F2v7Rt8YDkSXoVkkXJjYGIk,2046
|
61
61
|
meerschaum/api/dash/jobs.py,sha256=htqnrtAGCOgn2-THezMGYM8n1E-M-sM5A5qNmOGfHzg,7529
|
@@ -124,25 +124,26 @@ meerschaum/api/routes/_webterm.py,sha256=7eilgDXckpEc2LyeNmJS5YO6HxlyMkwPnAMWd7e
|
|
124
124
|
meerschaum/api/tables/__init__.py,sha256=e2aNC0CdlWICTUMx1i9RauF8Pm426J0RZJbsJWv4SWo,482
|
125
125
|
meerschaum/config/__init__.py,sha256=01hZ4Z8jGs4LbcIwNTeVzSvHD-Y0nAgiewRgngVUYb4,11517
|
126
126
|
meerschaum/config/_dash.py,sha256=BJHl4xMrQB-YHUEU7ldEW8q_nOPoIRSOqLrfGElc6Dw,187
|
127
|
-
meerschaum/config/_default.py,sha256=
|
127
|
+
meerschaum/config/_default.py,sha256=J6AWxxXM4mntCdkM6bKIpyQznZ5NuMICmTaurF11J9Q,5275
|
128
128
|
meerschaum/config/_edit.py,sha256=CE8gumBiOtnZZdTATCLAZgUnhL04yJdReaNCrv1yuJc,8218
|
129
129
|
meerschaum/config/_environment.py,sha256=Vv4DLDfc2vKLbCLsMvkQDj77K4kEvHKEBmUBo-wCrgo,4419
|
130
130
|
meerschaum/config/_formatting.py,sha256=RT_oU0OSfUkzeqbY5jvEJwuove_t9sP4MyUb1Px250U,6635
|
131
131
|
meerschaum/config/_jobs.py,sha256=2bEikO48qVSguFS3lrbWz6uiKt_0b3oSRWhwyz8RRDM,1279
|
132
132
|
meerschaum/config/_patch.py,sha256=21N30q1ANmWMDQ-2RUjpMx7KafWfPQ3lKx9rrMqg1s4,1526
|
133
|
-
meerschaum/config/_paths.py,sha256=
|
133
|
+
meerschaum/config/_paths.py,sha256=xS7zim8Dr7LIJQBTzDH8IOhTZ4AHMvc5a1np8SGX4Rg,8185
|
134
134
|
meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6wLs,1220
|
135
135
|
meerschaum/config/_read_config.py,sha256=WFZKIXZMDe_ca0ES7ivgM_mnwShvFxLdoeisT_X5-h0,14720
|
136
136
|
meerschaum/config/_shell.py,sha256=s74cmJl8NrhM_Y1cB_P41_JDUYXV0g4WXnKFZWMtnrY,3551
|
137
137
|
meerschaum/config/_sync.py,sha256=oK2ZujO2T1he08BXCFyiniBUevNGWSQKXLcS_jRv_7Y,4155
|
138
|
-
meerschaum/config/_version.py,sha256=
|
138
|
+
meerschaum/config/_version.py,sha256=EInJbGE14rCfVET_lXzEeEKw-tGc7n8tgXJiPluDNic,74
|
139
|
+
meerschaum/config/paths.py,sha256=Z7vaOunaEJbVFXiSSz4IthhNOQDI-dhtpi5TpSyrcXg,206
|
139
140
|
meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
140
141
|
meerschaum/config/stack/__init__.py,sha256=c_WdTSejVdj8lqSE_pK5MhIBkHoftiZWDuEuB9dmk2I,9007
|
141
142
|
meerschaum/config/stack/grafana/__init__.py,sha256=LNXQw2FvHKrD68RDhqDmi2wJjAHaKw9IWx8rNuyWEPo,2010
|
142
143
|
meerschaum/config/stack/mosquitto/__init__.py,sha256=-OwOjq8KiBoSH_pmgCAAF3Dp3CRD4KgAEdimZSadROs,186
|
143
144
|
meerschaum/config/stack/mosquitto/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
144
145
|
meerschaum/config/stack/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
145
|
-
meerschaum/config/static/__init__.py,sha256=
|
146
|
+
meerschaum/config/static/__init__.py,sha256=d3bkER5FJwsvrL8TM5V8Vmy0Bi7Fq7H8U-4jjfpV4Og,4474
|
146
147
|
meerschaum/connectors/Connector.py,sha256=cJKinmk7eWZwCBvtX4H9r66macTZOY1qjxR7JUEmDmg,6381
|
147
148
|
meerschaum/connectors/__init__.py,sha256=zXumYuKTWOyu3U6J1zvMQS30HImYLE8ssBdJs-I134M,12106
|
148
149
|
meerschaum/connectors/parse.py,sha256=gidA2jvOLTvEeL5hM9JjcUwkMRBadUhd4IfA5Jy1tgg,4044
|
@@ -188,7 +189,7 @@ meerschaum/core/Pipe/_edit.py,sha256=ZH2A0ZOpZKsVDnQxKzmXspNQKTEFUhkkZDjwOkmWtaY
|
|
188
189
|
meerschaum/core/Pipe/_fetch.py,sha256=zV3DzD7kfx08O6zda0I-9cX91m0Z_wO_on1ozHaqWnk,5234
|
189
190
|
meerschaum/core/Pipe/_register.py,sha256=Sd5xaAW8H7uLTIoommcKb-6kHPRuHJLWNSbPnt2UbvA,2240
|
190
191
|
meerschaum/core/Pipe/_show.py,sha256=nG50y8eBT9TVuKkRgAKtNDNIxysJvMNxfu__lkL1F9k,1352
|
191
|
-
meerschaum/core/Pipe/_sync.py,sha256=
|
192
|
+
meerschaum/core/Pipe/_sync.py,sha256=g_cQ4e4fd6_8qzjOjSH4hhO5vy2y0ZF8InOP9Lolzj8,27975
|
192
193
|
meerschaum/core/Pipe/_verify.py,sha256=KSnthUzImRLjt9fxyBaLvArqDuOLRpKBfk0tnseJClc,14262
|
193
194
|
meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_uSJJDc,137
|
194
195
|
meerschaum/core/User/_User.py,sha256=CApB7Y0QJL6S9QOCCfrG4SbPuPXJ9AsAYQ5pASMP_Aw,6527
|
@@ -203,9 +204,9 @@ meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mi
|
|
203
204
|
meerschaum/utils/misc.py,sha256=H26hLtCP8QHwXoHlvkxjWu6cPTwudDbbsbRkGw6ultg,43296
|
204
205
|
meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
|
205
206
|
meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
|
206
|
-
meerschaum/utils/process.py,sha256=
|
207
|
+
meerschaum/utils/process.py,sha256=BFT9ntuTSlIXTLFGGSnrjgUlJqCLzbOHfIf6iCcuf9A,7191
|
207
208
|
meerschaum/utils/prompt.py,sha256=0mBFbgi_l9rCou9UnC_6qKTHkqyl1Z_jSRzfmc0xRXM,16490
|
208
|
-
meerschaum/utils/schedule.py,sha256=
|
209
|
+
meerschaum/utils/schedule.py,sha256=btAeSDaoFH62-7wTO0U7NK9P9QHV46PtY3DJ8DN_mCY,10860
|
209
210
|
meerschaum/utils/sql.py,sha256=4sCNEpgUd6uFz6ySs4nnUMVaOT0YAvPM1ZlQYJTSF-0,46656
|
210
211
|
meerschaum/utils/threading.py,sha256=3N8JXPAnwqJiSjuQcbbJg3Rv9-CCUMJpeQRfKFR7MaA,2489
|
211
212
|
meerschaum/utils/typing.py,sha256=L05wOXfWdn_nJ0KnZVr-2zdMYcqjdyOW_7InT3xe6-s,2807
|
@@ -223,16 +224,16 @@ meerschaum/utils/formatting/_jobs.py,sha256=s1lVcdMkzNj5Bqw-GsUhcguUFtahi5nQ-kg1
|
|
223
224
|
meerschaum/utils/formatting/_pipes.py,sha256=wy0iWJFsFl3X2VloaiA_gp9Yx9w6tD3FQZvAQAqef4A,19492
|
224
225
|
meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
|
225
226
|
meerschaum/utils/formatting/_shell.py,sha256=ox75O7VHDAiwzSvdMSJZhXLadvAqYJVeihU6WeZ2Ogc,3677
|
226
|
-
meerschaum/utils/packages/__init__.py,sha256=
|
227
|
-
meerschaum/utils/packages/_packages.py,sha256=
|
227
|
+
meerschaum/utils/packages/__init__.py,sha256=TTNgCWgIpdyG21Pk86dDne7eTG02_0nERxopLBD1tHo,59811
|
228
|
+
meerschaum/utils/packages/_packages.py,sha256=kWoo1KWvpQgR3rY_rpHzvGIh14BBFH92Erw5UtW7yX0,7918
|
228
229
|
meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
|
229
230
|
meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
|
230
|
-
meerschaum/utils/venv/__init__.py,sha256=
|
231
|
-
meerschaum-2.2.
|
232
|
-
meerschaum-2.2.
|
233
|
-
meerschaum-2.2.
|
234
|
-
meerschaum-2.2.
|
235
|
-
meerschaum-2.2.
|
236
|
-
meerschaum-2.2.
|
237
|
-
meerschaum-2.2.
|
238
|
-
meerschaum-2.2.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|