meerschaum 3.0.0rc7__py3-none-any.whl → 3.0.1__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/cli/workers.py +2 -1
- meerschaum/_internal/entry.py +2 -0
- meerschaum/_internal/shell/Shell.py +2 -5
- meerschaum/_internal/static.py +1 -0
- meerschaum/_internal/term/__init__.py +5 -12
- meerschaum/actions/api.py +11 -5
- meerschaum/actions/start.py +30 -2
- meerschaum/api/dash/callbacks/custom.py +2 -1
- meerschaum/api/dash/callbacks/dashboard.py +11 -22
- meerschaum/config/_default.py +3 -1
- meerschaum/config/_read_config.py +14 -4
- meerschaum/config/_version.py +1 -1
- meerschaum/config/environment.py +26 -2
- meerschaum/connectors/sql/_create_engine.py +2 -2
- meerschaum/connectors/sql/_pipes.py +3 -6
- meerschaum/jobs/_Job.py +16 -6
- meerschaum/plugins/__init__.py +2 -0
- meerschaum/utils/daemon/Daemon.py +2 -1
- meerschaum/utils/formatting/_shell.py +18 -4
- meerschaum/utils/misc.py +4 -0
- meerschaum/utils/packages/__init__.py +3 -1
- meerschaum/utils/packages/_packages.py +1 -1
- meerschaum/utils/prompt.py +4 -2
- {meerschaum-3.0.0rc7.dist-info → meerschaum-3.0.1.dist-info}/METADATA +4 -4
- {meerschaum-3.0.0rc7.dist-info → meerschaum-3.0.1.dist-info}/RECORD +31 -31
- {meerschaum-3.0.0rc7.dist-info → meerschaum-3.0.1.dist-info}/WHEEL +0 -0
- {meerschaum-3.0.0rc7.dist-info → meerschaum-3.0.1.dist-info}/entry_points.txt +0 -0
- {meerschaum-3.0.0rc7.dist-info → meerschaum-3.0.1.dist-info}/licenses/LICENSE +0 -0
- {meerschaum-3.0.0rc7.dist-info → meerschaum-3.0.1.dist-info}/licenses/NOTICE +0 -0
- {meerschaum-3.0.0rc7.dist-info → meerschaum-3.0.1.dist-info}/top_level.txt +0 -0
- {meerschaum-3.0.0rc7.dist-info → meerschaum-3.0.1.dist-info}/zip-safe +0 -0
@@ -90,7 +90,7 @@ class ActionWorker:
|
|
90
90
|
"""
|
91
91
|
Return the job associated with this worker.
|
92
92
|
"""
|
93
|
-
from meerschaum.config.paths import CLI_LOGS_RESOURCES_PATH
|
93
|
+
from meerschaum.config.paths import CLI_LOGS_RESOURCES_PATH, PACKAGE_ROOT_PATH
|
94
94
|
log_path = CLI_LOGS_RESOURCES_PATH / f'cli.{self.ix}.worker.log'
|
95
95
|
|
96
96
|
return Job(
|
@@ -108,6 +108,7 @@ class ActionWorker:
|
|
108
108
|
'redirect_streams': True,
|
109
109
|
'lines_to_show': 0,
|
110
110
|
},
|
111
|
+
'cwd': PACKAGE_ROOT_PATH.parent.as_posix(),
|
111
112
|
},
|
112
113
|
)
|
113
114
|
|
meerschaum/_internal/entry.py
CHANGED
@@ -62,6 +62,7 @@ def entry(
|
|
62
62
|
A `SuccessTuple` indicating success.
|
63
63
|
"""
|
64
64
|
start = time.perf_counter()
|
65
|
+
from meerschaum.config.environment import get_daemon_env_vars
|
65
66
|
sysargs_list = shlex.split(sysargs) if isinstance(sysargs, str) else sysargs
|
66
67
|
if (
|
67
68
|
not _use_cli_daemon
|
@@ -69,6 +70,7 @@ def entry(
|
|
69
70
|
or '--no-daemon' in sysargs_list
|
70
71
|
or '--daemon' in sysargs_list
|
71
72
|
or '-d' in sysargs_list
|
73
|
+
or get_daemon_env_vars()
|
72
74
|
or not mrsm.get_config('system', 'experimental', 'cli_daemon')
|
73
75
|
):
|
74
76
|
success, msg = entry_without_daemon(sysargs, _patch_args=_patch_args)
|
@@ -37,6 +37,7 @@ from meerschaum.utils.misc import string_width, remove_ansi
|
|
37
37
|
from meerschaum.utils.warnings import warn
|
38
38
|
from meerschaum.jobs import get_executor_keys_from_context
|
39
39
|
from meerschaum._internal.static import STATIC_CONFIG
|
40
|
+
from meerschaum.utils.formatting._shell import clear_screen, flush_stdout
|
40
41
|
from meerschaum._internal.arguments._parse_arguments import (
|
41
42
|
split_chained_sysargs,
|
42
43
|
split_pipeline_sysargs,
|
@@ -534,8 +535,7 @@ class Shell(cmd.Cmd):
|
|
534
535
|
)
|
535
536
|
)
|
536
537
|
shell_attrs['prompt'] = self.prompt
|
537
|
-
|
538
|
-
print("", end="", flush=True)
|
538
|
+
flush_stdout()
|
539
539
|
|
540
540
|
|
541
541
|
def precmd(self, line: str):
|
@@ -568,7 +568,6 @@ class Shell(cmd.Cmd):
|
|
568
568
|
|
569
569
|
### if the user specifies, clear the screen before executing any commands
|
570
570
|
if _clear_screen:
|
571
|
-
from meerschaum.utils.formatting._shell import clear_screen
|
572
571
|
clear_screen(debug=shell_attrs['debug'])
|
573
572
|
|
574
573
|
### return blank commands (spaces break argparse)
|
@@ -1104,7 +1103,6 @@ class Shell(cmd.Cmd):
|
|
1104
1103
|
|
1105
1104
|
### if the user specifies, clear the screen before initializing the shell
|
1106
1105
|
if _clear_screen:
|
1107
|
-
from meerschaum.utils.formatting._shell import clear_screen
|
1108
1106
|
clear_screen(debug=shell_attrs['debug'])
|
1109
1107
|
|
1110
1108
|
### if sysargs are provided, skip printing the intro and execute instead
|
@@ -1258,7 +1256,6 @@ def input_with_sigint(_input, session, shell: Optional[Shell] = None):
|
|
1258
1256
|
### NOTE: would it be better to do nothing instead?
|
1259
1257
|
if len(parsed.strip()) == 0:
|
1260
1258
|
if _clear_screen:
|
1261
|
-
from meerschaum.utils.formatting._shell import clear_screen
|
1262
1259
|
clear_screen()
|
1263
1260
|
except KeyboardInterrupt:
|
1264
1261
|
print("^C")
|
meerschaum/_internal/static.py
CHANGED
@@ -325,6 +325,7 @@ STATIC_CONFIG: Dict[str, Any] = {
|
|
325
325
|
'check_restart_seconds': 1.0,
|
326
326
|
'stop_token': '<------- MRSM_STOP_TOKEN ------->',
|
327
327
|
'clear_token': '<------- MRSM_CLEAR_TOKEN ------->',
|
328
|
+
'flush_token': '<------- MRSM_FLUSH_TOKEN ------->\n',
|
328
329
|
},
|
329
330
|
'tokens': {
|
330
331
|
'minimum_length': 24,
|
@@ -40,23 +40,16 @@ def get_webterm_app_and_manager(
|
|
40
40
|
-------
|
41
41
|
A tuple of the Tornado web application and term manager.
|
42
42
|
"""
|
43
|
-
from meerschaum.config.environment import get_env_vars
|
44
|
-
from meerschaum._internal.static import STATIC_CONFIG
|
43
|
+
from meerschaum.config.environment import get_env_vars, get_daemon_env_vars
|
45
44
|
if env_path is None:
|
46
45
|
from meerschaum.config.paths import WEBTERM_INTERNAL_RESOURCES_PATH
|
47
46
|
env_path = WEBTERM_INTERNAL_RESOURCES_PATH / (str(port) + '.json')
|
48
47
|
|
49
|
-
|
48
|
+
daemon_env_vars = get_daemon_env_vars()
|
50
49
|
env_dict = {
|
51
|
-
env_var:
|
52
|
-
for env_var in
|
53
|
-
if env_var not in
|
54
|
-
STATIC_CONFIG['environment']['systemd_log_path'],
|
55
|
-
STATIC_CONFIG['environment']['systemd_result_path'],
|
56
|
-
STATIC_CONFIG['environment']['systemd_delete_job'],
|
57
|
-
STATIC_CONFIG['environment']['systemd_stdin_path'],
|
58
|
-
STATIC_CONFIG['environment']['daemon_id'],
|
59
|
-
)
|
50
|
+
env_var: env_val
|
51
|
+
for env_var, env_val in get_env_vars().items()
|
52
|
+
if env_var not in daemon_env_vars
|
60
53
|
}
|
61
54
|
with open(env_path, 'w+', encoding='utf-8') as f:
|
62
55
|
json.dump(env_dict, f)
|
meerschaum/actions/api.py
CHANGED
@@ -173,7 +173,7 @@ def _api_start(
|
|
173
173
|
ROOT_DIR_PATH,
|
174
174
|
)
|
175
175
|
from meerschaum.config._patch import apply_patch_to_config
|
176
|
-
from meerschaum.config.environment import get_env_vars
|
176
|
+
from meerschaum.config.environment import get_env_vars, get_daemon_env_vars
|
177
177
|
from meerschaum._internal.static import STATIC_CONFIG, SERVER_ID
|
178
178
|
from meerschaum.connectors.parse import parse_instance_keys
|
179
179
|
from meerschaum.utils.pool import get_pool
|
@@ -335,11 +335,17 @@ def _api_start(
|
|
335
335
|
)
|
336
336
|
),
|
337
337
|
'HOSTNAME': os.environ.get('HOSTNAME', 'api'),
|
338
|
+
'XDG_RUNTIME_DIR': os.environ.get('XDG_RUNTIME_DIR', ''),
|
339
|
+
'DBUS_SESSION_BUS_ADDRESS': os.environ.get('DBUS_SESSION_BUS_ADDRESS', ''),
|
338
340
|
})
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
341
|
+
|
342
|
+
daemon_env_vars = get_daemon_env_vars()
|
343
|
+
env_vars = {
|
344
|
+
env_var: env_val
|
345
|
+
for env_var, env_val in get_env_vars().items()
|
346
|
+
if env_var not in daemon_env_vars and env_var not in env_dict
|
347
|
+
}
|
348
|
+
env_dict.update(env_vars)
|
343
349
|
|
344
350
|
env_dict[MRSM_CONFIG] = apply_patch_to_config(
|
345
351
|
env_dict.get(MRSM_CONFIG, {}),
|
meerschaum/actions/start.py
CHANGED
@@ -94,6 +94,7 @@ def _start_jobs(
|
|
94
94
|
sysargs: Optional[List[str]] = None,
|
95
95
|
executor_keys: Optional[str] = None,
|
96
96
|
rm: bool = False,
|
97
|
+
line: Optional[str] = None,
|
97
98
|
debug: bool = False,
|
98
99
|
**kw
|
99
100
|
) -> SuccessTuple:
|
@@ -125,6 +126,7 @@ def _start_jobs(
|
|
125
126
|
- `start job --name happy_seal`
|
126
127
|
Start the job 'happy_seal' but via the `--name` flag.
|
127
128
|
"""
|
129
|
+
import shlex
|
128
130
|
from meerschaum.utils.warnings import warn, info
|
129
131
|
from meerschaum.utils.daemon._names import get_new_daemon_name
|
130
132
|
from meerschaum.jobs import (
|
@@ -215,7 +217,29 @@ def _start_jobs(
|
|
215
217
|
|
216
218
|
def _run_new_job(name: Optional[str] = None):
|
217
219
|
name = name or get_new_daemon_name()
|
218
|
-
|
220
|
+
if len(sysargs or []) >= 2 and sysargs[0] == 'start' and sysargs[1].startswith('job'):
|
221
|
+
return (False, "Create a new job with `-d` / `--daemon`."), name
|
222
|
+
|
223
|
+
job_sysargs = (
|
224
|
+
shlex.join([a for a in sysargs if a not in ('-d', '--daemon')])
|
225
|
+
if not line
|
226
|
+
else line
|
227
|
+
)
|
228
|
+
job = Job(name, job_sysargs, executor_keys=executor_keys, delete_after_completion=rm)
|
229
|
+
|
230
|
+
if not job.exists():
|
231
|
+
try:
|
232
|
+
confirm = yes_no(
|
233
|
+
f"Create new job '{name}'?\n {job_sysargs}\n",
|
234
|
+
default='y',
|
235
|
+
yes=kw.get('yes', False),
|
236
|
+
noask=kw.get('noask', False),
|
237
|
+
)
|
238
|
+
except Exception:
|
239
|
+
confirm = True
|
240
|
+
if not confirm:
|
241
|
+
return (False, "Nothing changed."), name
|
242
|
+
|
219
243
|
return job.start(debug=debug), name
|
220
244
|
|
221
245
|
def _run_existing_job(name: str):
|
@@ -288,6 +312,7 @@ def _start_jobs(
|
|
288
312
|
if new_job
|
289
313
|
else _run_existing_job(_name)
|
290
314
|
)
|
315
|
+
|
291
316
|
if not kw.get('nopretty', False):
|
292
317
|
print_tuple(success_tuple)
|
293
318
|
|
@@ -303,7 +328,10 @@ def _start_jobs(
|
|
303
328
|
+ ("Failed to start job" + ("s" if len(_failures) != 1 else '')
|
304
329
|
+ f" {items_str(_failures)}." if _failures else '')
|
305
330
|
)
|
306
|
-
|
331
|
+
if not msg:
|
332
|
+
msg = "Nothing changed."
|
333
|
+
else:
|
334
|
+
_install_healthcheck_job()
|
307
335
|
return len(_failures) == 0, msg
|
308
336
|
|
309
337
|
|
@@ -7,7 +7,6 @@ Import custom callbacks created by plugins.
|
|
7
7
|
"""
|
8
8
|
|
9
9
|
import traceback
|
10
|
-
from typing import Any, Dict
|
11
10
|
|
12
11
|
from meerschaum.api.dash import dash_app
|
13
12
|
from meerschaum.plugins import _dash_plugins, _plugin_endpoints_to_pages
|
@@ -47,6 +46,8 @@ def add_plugin_pages(debug: bool = False):
|
|
47
46
|
else:
|
48
47
|
page_layout = [pages_navbar, page_layout]
|
49
48
|
_pages[_page_dict['page_key']] = _endpoint
|
49
|
+
if not _endpoint.lstrip('/').startswith('dash'):
|
50
|
+
_endpoint = '/dash/' + _endpoint.lstrip('/')
|
50
51
|
_paths[_endpoint] = page_layout
|
51
52
|
if _page_dict['login_required']:
|
52
53
|
_required_login.add(_endpoint)
|
@@ -99,16 +99,15 @@ omit_actions = {
|
|
99
99
|
|
100
100
|
### Map endpoints to page layouts.
|
101
101
|
_paths = {
|
102
|
-
'login' : pages.login.layout,
|
103
|
-
''
|
104
|
-
'
|
105
|
-
'
|
106
|
-
'
|
107
|
-
'
|
108
|
-
'
|
109
|
-
'jobs' : pages.jobs.layout,
|
102
|
+
'/dash/login' : pages.login.layout,
|
103
|
+
'/dash' : pages.dashboard.layout,
|
104
|
+
'/dash/plugins' : pages.plugins.layout,
|
105
|
+
'/dash/tokens' : pages.tokens.layout,
|
106
|
+
'/dash/register': pages.register.layout,
|
107
|
+
'/dash/pipes' : pages.pipes.layout,
|
108
|
+
'/dash/jobs' : pages.jobs.layout,
|
110
109
|
}
|
111
|
-
_required_login = {'', 'tokens', 'jobs', 'pipes'}
|
110
|
+
_required_login = {'', '/dash', '/dash/', '/dash/tokens', '/dash/jobs', '/dash/pipes'}
|
112
111
|
_pages = {
|
113
112
|
'Web Console': '/dash/',
|
114
113
|
'Pipes': '/dash/pipes',
|
@@ -145,7 +144,6 @@ def update_page_layout_div(
|
|
145
144
|
-------
|
146
145
|
A tuple of the page layout and new session store data.
|
147
146
|
"""
|
148
|
-
dash_endpoint = endpoints['dash']
|
149
147
|
try:
|
150
148
|
session_id = session_store_data.get('session-id', None)
|
151
149
|
except AttributeError:
|
@@ -162,18 +160,9 @@ def update_page_layout_div(
|
|
162
160
|
else:
|
163
161
|
session_store_to_return = dash.no_update
|
164
162
|
|
165
|
-
base_path = (
|
166
|
-
pathname.rstrip('/') + '/'
|
167
|
-
).replace(
|
168
|
-
(dash_endpoint + '/'),
|
169
|
-
''
|
170
|
-
).rstrip('/').split('/')[0]
|
171
|
-
|
163
|
+
base_path = '/'.join(pathname.split('/')[:2])
|
172
164
|
complete_path = (
|
173
165
|
pathname.rstrip('/') + '/'
|
174
|
-
).replace(
|
175
|
-
dash_endpoint + '/',
|
176
|
-
''
|
177
166
|
).rstrip('/')
|
178
167
|
|
179
168
|
if complete_path in _paths:
|
@@ -181,14 +170,14 @@ def update_page_layout_div(
|
|
181
170
|
elif base_path in _paths:
|
182
171
|
path_str = base_path
|
183
172
|
else:
|
184
|
-
path_str = ''
|
173
|
+
path_str = '/dash'
|
185
174
|
|
186
175
|
path = (
|
187
176
|
path_str
|
188
177
|
if no_auth or path_str not in _required_login else (
|
189
178
|
path_str
|
190
179
|
if is_session_active(session_id)
|
191
|
-
else 'login'
|
180
|
+
else '/dash/login'
|
192
181
|
)
|
193
182
|
)
|
194
183
|
layout = _paths.get(path, pages.error.layout)
|
meerschaum/config/_default.py
CHANGED
@@ -129,12 +129,14 @@ default_system_config = {
|
|
129
129
|
'edit',
|
130
130
|
'start daemon',
|
131
131
|
'start job',
|
132
|
+
'stop job',
|
133
|
+
'delete job',
|
132
134
|
'stop daemon',
|
133
135
|
'show daemon',
|
134
136
|
'restart daemon',
|
135
137
|
'reload',
|
136
138
|
'start worker',
|
137
|
-
'
|
139
|
+
'show log',
|
138
140
|
'python',
|
139
141
|
'login',
|
140
142
|
'executor',
|
@@ -421,14 +421,24 @@ def revert_symlinks_config(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
421
421
|
-------
|
422
422
|
A configuration dictionary with `_symlinks` re-applied.
|
423
423
|
"""
|
424
|
-
|
424
|
+
import copy
|
425
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
426
|
+
|
425
427
|
symlinks_key = STATIC_CONFIG['config']['symlinks_key']
|
426
428
|
if symlinks_key not in config:
|
427
429
|
return config
|
428
430
|
|
429
|
-
|
430
|
-
|
431
|
-
|
431
|
+
reverted_config = copy.deepcopy(config)
|
432
|
+
symlinks_config = reverted_config.pop(symlinks_key)
|
433
|
+
|
434
|
+
def deep_patch(target_dict, patch_dict):
|
435
|
+
for key, value in patch_dict.items():
|
436
|
+
if isinstance(value, dict) and key in target_dict and isinstance(target_dict[key], dict):
|
437
|
+
deep_patch(target_dict[key], value)
|
438
|
+
else:
|
439
|
+
target_dict[key] = value
|
440
|
+
|
441
|
+
deep_patch(reverted_config, symlinks_config)
|
432
442
|
return reverted_config
|
433
443
|
|
434
444
|
|
meerschaum/config/_version.py
CHANGED
meerschaum/config/environment.py
CHANGED
@@ -162,13 +162,37 @@ def apply_connector_uri(env_var: str, env: Optional[Dict[str, Any]] = None) -> N
|
|
162
162
|
)
|
163
163
|
|
164
164
|
|
165
|
-
def get_env_vars(env: Optional[Dict[str, Any]] = None) ->
|
165
|
+
def get_env_vars(env: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
|
166
166
|
"""
|
167
167
|
Return all environment variables which begin with `'MRSM_'`.
|
168
168
|
"""
|
169
169
|
prefix = STATIC_CONFIG['environment']['prefix']
|
170
170
|
env = env if env is not None else os.environ
|
171
|
-
return
|
171
|
+
return {
|
172
|
+
env_var: env_val
|
173
|
+
for env_var, env_val in env.items()
|
174
|
+
if env_var.startswith(prefix)
|
175
|
+
}
|
176
|
+
|
177
|
+
|
178
|
+
def get_daemon_env_vars(env: Optional[Dict[str, Any]] = None) -> Dict[str, str]:
|
179
|
+
"""
|
180
|
+
Return the daemon-specific environment vars in the current environment.
|
181
|
+
"""
|
182
|
+
env = env if env is not None else os.environ
|
183
|
+
|
184
|
+
daemon_env_var_names = (
|
185
|
+
STATIC_CONFIG['environment']['systemd_log_path'],
|
186
|
+
STATIC_CONFIG['environment']['systemd_result_path'],
|
187
|
+
STATIC_CONFIG['environment']['systemd_delete_job'],
|
188
|
+
STATIC_CONFIG['environment']['systemd_stdin_path'],
|
189
|
+
STATIC_CONFIG['environment']['daemon_id'],
|
190
|
+
)
|
191
|
+
return {
|
192
|
+
env_var: env.get(env_var, '')
|
193
|
+
for env_var in daemon_env_var_names
|
194
|
+
if env_var in env
|
195
|
+
}
|
172
196
|
|
173
197
|
|
174
198
|
@contextlib.contextmanager
|
@@ -23,9 +23,9 @@ install_flavor_drivers = {
|
|
23
23
|
'mysql': ['pymysql'],
|
24
24
|
'mariadb': ['pymysql'],
|
25
25
|
'timescaledb': ['psycopg'],
|
26
|
-
'timescaledb-ha': ['psycopg', '
|
26
|
+
'timescaledb-ha': ['psycopg', 'geoalchemy2'],
|
27
27
|
'postgresql': ['psycopg'],
|
28
|
-
'postgis': ['psycopg', '
|
28
|
+
'postgis': ['psycopg', 'geoalchemy2'],
|
29
29
|
'citus': ['psycopg'],
|
30
30
|
'cockroachdb': ['psycopg', 'sqlalchemy_cockroachdb', 'sqlalchemy_cockroachdb.psycopg'],
|
31
31
|
'mssql': ['pyodbc'],
|
@@ -280,22 +280,19 @@ def fetch_pipes_keys(
|
|
280
280
|
|
281
281
|
ors, nands = [], []
|
282
282
|
if self.flavor in json_flavors:
|
283
|
+
tags_jsonb = pipes_tbl.c['parameters'].cast(JSONB).op('->')('tags').cast(JSONB)
|
283
284
|
for _in_tags, _ex_tags in in_ex_tag_groups:
|
284
285
|
if _in_tags:
|
285
286
|
ors.append(
|
286
287
|
sqlalchemy.and_(
|
287
|
-
|
288
|
-
JSONB
|
289
|
-
).contains(_in_tags)
|
288
|
+
tags_jsonb.contains(_in_tags)
|
290
289
|
)
|
291
290
|
)
|
292
291
|
for xt in _ex_tags:
|
293
292
|
nands.append(
|
294
293
|
sqlalchemy.not_(
|
295
294
|
sqlalchemy.and_(
|
296
|
-
|
297
|
-
JSONB
|
298
|
-
).contains([xt])
|
295
|
+
tags_jsonb.contains([xt])
|
299
296
|
)
|
300
297
|
)
|
301
298
|
)
|
meerschaum/jobs/_Job.py
CHANGED
@@ -25,7 +25,7 @@ from meerschaum.utils.warnings import warn
|
|
25
25
|
from meerschaum.config.paths import LOGS_RESOURCES_PATH
|
26
26
|
from meerschaum.config import get_config
|
27
27
|
from meerschaum._internal.static import STATIC_CONFIG
|
28
|
-
from meerschaum.utils.formatting._shell import clear_screen
|
28
|
+
from meerschaum.utils.formatting._shell import clear_screen, flush_stdout
|
29
29
|
|
30
30
|
if TYPE_CHECKING:
|
31
31
|
from meerschaum.jobs._Executor import Executor
|
@@ -42,6 +42,8 @@ RESTART_FLAGS: List[str] = [
|
|
42
42
|
]
|
43
43
|
STOP_TOKEN: str = STATIC_CONFIG['jobs']['stop_token']
|
44
44
|
CLEAR_TOKEN: str = STATIC_CONFIG['jobs']['clear_token']
|
45
|
+
FLUSH_TOKEN: str = STATIC_CONFIG['jobs']['flush_token']
|
46
|
+
|
45
47
|
|
46
48
|
class StopMonitoringLogs(Exception):
|
47
49
|
"""
|
@@ -50,8 +52,8 @@ class StopMonitoringLogs(Exception):
|
|
50
52
|
|
51
53
|
|
52
54
|
def _default_stdout_callback(line: str):
|
53
|
-
if line == '\n':
|
54
|
-
|
55
|
+
if line == '\n' or line.startswith(FLUSH_TOKEN):
|
56
|
+
flush_stdout()
|
55
57
|
return
|
56
58
|
|
57
59
|
if CLEAR_TOKEN in line:
|
@@ -63,6 +65,7 @@ def _default_stdout_callback(line: str):
|
|
63
65
|
|
64
66
|
print(line, end='', flush=True)
|
65
67
|
|
68
|
+
|
66
69
|
class Job:
|
67
70
|
"""
|
68
71
|
Manage a `meerschaum.utils.daemon.Daemon`, locally or remotely via the API.
|
@@ -638,16 +641,23 @@ class Job:
|
|
638
641
|
if stop_event is not None and stop_event.is_set():
|
639
642
|
return
|
640
643
|
|
641
|
-
|
644
|
+
line_stripped_extra = strip_timestamp_from_line(line.strip())
|
645
|
+
line_stripped = strip_timestamp_from_line(line)
|
646
|
+
|
647
|
+
if line_stripped_extra == STOP_TOKEN:
|
642
648
|
events['stop_token'].set()
|
643
649
|
return
|
644
650
|
|
645
|
-
if
|
651
|
+
if line_stripped_extra == CLEAR_TOKEN:
|
646
652
|
clear_screen(debug=debug)
|
647
653
|
continue
|
648
654
|
|
655
|
+
if line_stripped_extra == FLUSH_TOKEN.strip():
|
656
|
+
line_stripped = ''
|
657
|
+
line = ''
|
658
|
+
|
649
659
|
if strip_timestamps:
|
650
|
-
line =
|
660
|
+
line = line_stripped
|
651
661
|
|
652
662
|
try:
|
653
663
|
if asyncio.iscoroutinefunction(callback_function):
|
meerschaum/plugins/__init__.py
CHANGED
@@ -299,6 +299,7 @@ class Daemon:
|
|
299
299
|
)
|
300
300
|
|
301
301
|
capture_stdin = logs_cf.get('stdin', True)
|
302
|
+
cwd = self.properties.get('cwd', os.getcwd())
|
302
303
|
|
303
304
|
### NOTE: The SIGINT handler has been removed so that child processes may handle
|
304
305
|
### KeyboardInterrupts themselves.
|
@@ -308,7 +309,7 @@ class Daemon:
|
|
308
309
|
stdout=self.rotating_log,
|
309
310
|
stderr=self.rotating_log,
|
310
311
|
stdin=(self.stdin_file if capture_stdin else None),
|
311
|
-
working_directory=
|
312
|
+
working_directory=cwd,
|
312
313
|
detach_process=True,
|
313
314
|
files_preserve=list(self.rotating_log.subfile_objects.values()),
|
314
315
|
signal_map={
|
@@ -9,6 +9,9 @@ Formatting functions for the interactive shell
|
|
9
9
|
from meerschaum.utils.threading import Lock
|
10
10
|
_locks = {'_tried_clear_command': Lock()}
|
11
11
|
|
12
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
13
|
+
FLUSH_TOKEN: str = STATIC_CONFIG['jobs']['flush_token']
|
14
|
+
|
12
15
|
|
13
16
|
def make_header(message: str, ruler: str = '─', left_pad: int = 2) -> str:
|
14
17
|
"""Format a message string with a ruler.
|
@@ -62,13 +65,14 @@ def clear_screen(debug: bool = False) -> bool:
|
|
62
65
|
if running_in_daemon():
|
63
66
|
if debug:
|
64
67
|
dprint("Skip printing clear token.")
|
65
|
-
|
68
|
+
flush_stdout()
|
66
69
|
return True
|
70
|
+
|
67
71
|
print(clear_token, flush=True)
|
68
72
|
return True
|
69
73
|
|
70
74
|
|
71
|
-
|
75
|
+
flush_stdout()
|
72
76
|
if debug:
|
73
77
|
dprint("Skipping screen clear.")
|
74
78
|
return True
|
@@ -76,11 +80,11 @@ def clear_screen(debug: bool = False) -> bool:
|
|
76
80
|
if ANSI and platform.system() != 'Windows':
|
77
81
|
if get_console() is not None:
|
78
82
|
get_console().clear()
|
79
|
-
|
83
|
+
flush_stdout()
|
80
84
|
return True
|
81
85
|
|
82
86
|
print(clear_string + reset_string, end="")
|
83
|
-
|
87
|
+
flush_stdout()
|
84
88
|
return True
|
85
89
|
|
86
90
|
### ANSI support is disabled, try system level instead
|
@@ -99,6 +103,16 @@ def clear_screen(debug: bool = False) -> bool:
|
|
99
103
|
return rc == 0
|
100
104
|
|
101
105
|
|
106
|
+
def flush_stdout():
|
107
|
+
"""
|
108
|
+
Flush stdout, including printing the flush token for daemons.
|
109
|
+
"""
|
110
|
+
from meerschaum.utils.daemon import running_in_daemon
|
111
|
+
print('', end='', flush=True)
|
112
|
+
if running_in_daemon():
|
113
|
+
print(FLUSH_TOKEN, end='', flush=True)
|
114
|
+
|
115
|
+
|
102
116
|
def flush_with_newlines(debug: bool = False) -> None:
|
103
117
|
"""Print newlines such that the entire terminal is cleared and new text will show up at the bottom."""
|
104
118
|
import sys
|
meerschaum/utils/misc.py
CHANGED
@@ -1236,6 +1236,8 @@ def is_systemd_available() -> bool:
|
|
1236
1236
|
stdout=subprocess.DEVNULL,
|
1237
1237
|
stderr=subprocess.STDOUT,
|
1238
1238
|
) == 0
|
1239
|
+
except FileNotFoundError:
|
1240
|
+
has_systemctl = False
|
1239
1241
|
except Exception:
|
1240
1242
|
import traceback
|
1241
1243
|
traceback.print_exc()
|
@@ -1254,6 +1256,8 @@ def is_tmux_available() -> bool:
|
|
1254
1256
|
stdout=subprocess.DEVNULL,
|
1255
1257
|
stderr=subprocess.STDOUT
|
1256
1258
|
) == 0
|
1259
|
+
except FileNotFoundError:
|
1260
|
+
has_tmux = False
|
1257
1261
|
except Exception:
|
1258
1262
|
has_tmux = False
|
1259
1263
|
return has_tmux
|
@@ -652,7 +652,9 @@ def need_update(
|
|
652
652
|
if required_version:
|
653
653
|
semver_path = get_module_path('semver', debug=debug)
|
654
654
|
if semver_path is None:
|
655
|
-
|
655
|
+
no_venv_semver_path = get_module_path('semver', venv=None, debug=debug)
|
656
|
+
if no_venv_semver_path is None:
|
657
|
+
pip_install(_import_to_install_name('semver'), debug=debug)
|
656
658
|
semver = attempt_import('semver', check_update=False, lazy=False, debug=debug)
|
657
659
|
if check_pypi:
|
658
660
|
### Check PyPI for updates
|
@@ -146,7 +146,7 @@ packages['sql'] = {
|
|
146
146
|
'pytz' : 'pytz',
|
147
147
|
'joblib' : 'joblib>=1.5.1',
|
148
148
|
'sqlalchemy' : 'SQLAlchemy>=2.0.41',
|
149
|
-
'
|
149
|
+
'geoalchemy2' : 'GeoAlchemy2>=0.18.0',
|
150
150
|
'databases' : 'databases>=0.9.0',
|
151
151
|
'aiosqlite' : 'aiosqlite>=0.21.0',
|
152
152
|
'asyncpg' : 'asyncpg>=0.30.0',
|
meerschaum/utils/prompt.py
CHANGED
@@ -74,6 +74,7 @@ def prompt(
|
|
74
74
|
from meerschaum.config import get_config
|
75
75
|
from meerschaum.utils.misc import filter_keywords, remove_ansi
|
76
76
|
from meerschaum.utils.daemon import running_in_daemon, get_current_daemon
|
77
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
77
78
|
|
78
79
|
original_kwargs = {
|
79
80
|
'question': question,
|
@@ -140,7 +141,7 @@ def prompt(
|
|
140
141
|
else:
|
141
142
|
import json
|
142
143
|
daemon = get_current_daemon()
|
143
|
-
print('', end='', flush=True)
|
144
|
+
print(STATIC_CONFIG['jobs']['flush_token'], end='', flush=True)
|
144
145
|
wrote_file = False
|
145
146
|
try:
|
146
147
|
with open(daemon.prompt_kwargs_file_path, 'w+', encoding='utf-8') as f:
|
@@ -151,6 +152,7 @@ def prompt(
|
|
151
152
|
|
152
153
|
if not silent and not wrote_file:
|
153
154
|
print(question, end='', flush=True)
|
155
|
+
print(STATIC_CONFIG['jobs']['flush_token'], end='', flush=True)
|
154
156
|
printed_question = True
|
155
157
|
|
156
158
|
try:
|
@@ -159,7 +161,7 @@ def prompt(
|
|
159
161
|
answer = ''
|
160
162
|
|
161
163
|
if noask and not silent and not printed_question:
|
162
|
-
print(question
|
164
|
+
print(question)
|
163
165
|
|
164
166
|
if answer == '' and default is not None:
|
165
167
|
return default_answer
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: meerschaum
|
3
|
-
Version: 3.0.
|
3
|
+
Version: 3.0.1
|
4
4
|
Summary: Sync Time-Series Pipes with Meerschaum
|
5
5
|
Author-email: Bennett Meares <bennett.meares@gmail.com>
|
6
6
|
Maintainer-email: Bennett Meares <bennett.meares@gmail.com>
|
@@ -134,7 +134,7 @@ Requires-Dist: partd>=1.4.2; extra == "sql"
|
|
134
134
|
Requires-Dist: pytz; extra == "sql"
|
135
135
|
Requires-Dist: joblib>=1.5.1; extra == "sql"
|
136
136
|
Requires-Dist: SQLAlchemy>=2.0.41; extra == "sql"
|
137
|
-
Requires-Dist: GeoAlchemy2>=0.
|
137
|
+
Requires-Dist: GeoAlchemy2>=0.18.0; extra == "sql"
|
138
138
|
Requires-Dist: databases>=0.9.0; extra == "sql"
|
139
139
|
Requires-Dist: aiosqlite>=0.21.0; extra == "sql"
|
140
140
|
Requires-Dist: asyncpg>=0.30.0; extra == "sql"
|
@@ -201,7 +201,7 @@ Requires-Dist: partd>=1.4.2; extra == "api"
|
|
201
201
|
Requires-Dist: pytz; extra == "api"
|
202
202
|
Requires-Dist: joblib>=1.5.1; extra == "api"
|
203
203
|
Requires-Dist: SQLAlchemy>=2.0.41; extra == "api"
|
204
|
-
Requires-Dist: GeoAlchemy2>=0.
|
204
|
+
Requires-Dist: GeoAlchemy2>=0.18.0; extra == "api"
|
205
205
|
Requires-Dist: databases>=0.9.0; extra == "api"
|
206
206
|
Requires-Dist: aiosqlite>=0.21.0; extra == "api"
|
207
207
|
Requires-Dist: asyncpg>=0.30.0; extra == "api"
|
@@ -316,7 +316,7 @@ Requires-Dist: partd>=1.4.2; extra == "full"
|
|
316
316
|
Requires-Dist: pytz; extra == "full"
|
317
317
|
Requires-Dist: joblib>=1.5.1; extra == "full"
|
318
318
|
Requires-Dist: SQLAlchemy>=2.0.41; extra == "full"
|
319
|
-
Requires-Dist: GeoAlchemy2>=0.
|
319
|
+
Requires-Dist: GeoAlchemy2>=0.18.0; extra == "full"
|
320
320
|
Requires-Dist: databases>=0.9.0; extra == "full"
|
321
321
|
Requires-Dist: aiosqlite>=0.21.0; extra == "full"
|
322
322
|
Requires-Dist: asyncpg>=0.30.0; extra == "full"
|
@@ -1,28 +1,28 @@
|
|
1
1
|
meerschaum/__init__.py,sha256=4gb50vOezjYiFHw6oHZfV7enCvCnUqTdZycWyD8BSzE,1766
|
2
2
|
meerschaum/__main__.py,sha256=r5UjYxH1WA6dGG9YGBPul5xOdgF3Iwl0X4dWDtXU-30,2646
|
3
3
|
meerschaum/_internal/__init__.py,sha256=5Z41PIj8BbJ2bZJykk7EE4ulyEKKZLCHGVgaTZLfkmY,223
|
4
|
-
meerschaum/_internal/entry.py,sha256=
|
5
|
-
meerschaum/_internal/static.py,sha256=
|
4
|
+
meerschaum/_internal/entry.py,sha256=dNk_3KYHx8NgvkVvl5OqAX4MwqYVqfg0GbsGHBiC5Ng,13889
|
5
|
+
meerschaum/_internal/static.py,sha256=TSSDB6fXObS9MNBCtZiRPYtFzsbwmyvWrwaNlV1nwTg,12225
|
6
6
|
meerschaum/_internal/arguments/__init__.py,sha256=_nSKKVLXNsJeSv-buxEZsx8_c0BAbkhRyE4nT6Bv6q0,541
|
7
7
|
meerschaum/_internal/arguments/_parse_arguments.py,sha256=B7eXnz2fGrDb_lWy2wagWVaIlPAGLJdDEtd39pv87fA,16442
|
8
8
|
meerschaum/_internal/arguments/_parser.py,sha256=v4dlR5ElJFmKGiw35UGCiDI1XiH8-ma8PJwoV3O--c4,18082
|
9
9
|
meerschaum/_internal/cli/__init__.py,sha256=ZZ_N_24WUg7fA6opMtSkS3OdtA6zgAe1rLMnS4-W1Zs,114
|
10
10
|
meerschaum/_internal/cli/daemons.py,sha256=-qx5y9YSyGzeDrBIRjuSaeHgmSNmSqrRiyOjXduNaBc,2586
|
11
11
|
meerschaum/_internal/cli/entry.py,sha256=gxXX4hma_2xH0TSXacamFbOhbOYI0vGqV0QKqIQalBo,6786
|
12
|
-
meerschaum/_internal/cli/workers.py,sha256
|
12
|
+
meerschaum/_internal/cli/workers.py,sha256=_HQCxa54_VPfw34BE754UfidoSzievN8eQlixSqrbNI,12920
|
13
13
|
meerschaum/_internal/docs/__init__.py,sha256=ZQYHWo6n0kfLLkyG36YXqTYvv2Pc7it5HZHMylT6cBA,126
|
14
14
|
meerschaum/_internal/docs/index.py,sha256=_ghUsrgjc2eo2c-CwvqY4gT2rgyXVONuT0oScyWkIz8,27401
|
15
|
-
meerschaum/_internal/shell/Shell.py,sha256
|
15
|
+
meerschaum/_internal/shell/Shell.py,sha256=-iF7EYZQcNS3GNvaUgo-T8tuIeQKUjlMoZeBI6GclI0,44491
|
16
16
|
meerschaum/_internal/shell/ShellCompleter.py,sha256=Ex6mPv83RUNdC3ufRJCcaoOmQ8q8z6tCHDVzXQmWIpY,3293
|
17
17
|
meerschaum/_internal/shell/ValidAutoSuggest.py,sha256=bARjOWMidz0dvMelLUe6yRPto5l3gcEHYHqFDjoh22I,1280
|
18
18
|
meerschaum/_internal/shell/__init__.py,sha256=yxJhe-zNcsD2D8iTL7d30k5nfrV_tcRKjQxFXvyR7gY,316
|
19
19
|
meerschaum/_internal/shell/updates.py,sha256=FmKu1NsIE7AI1zq8zNeKneZzORv6BeURQeX0lRR81Ag,5040
|
20
20
|
meerschaum/_internal/shell/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
21
|
meerschaum/_internal/term/TermPageHandler.py,sha256=ENrjgNyBOq5hu9tVzCBizLL4UCiMQ8eTUbDEzhoePXc,2374
|
22
|
-
meerschaum/_internal/term/__init__.py,sha256=
|
22
|
+
meerschaum/_internal/term/__init__.py,sha256=cu3N4_40JpmLRo8uaYg_KIzPerNzxJt3ozLKKxd7HzM,3076
|
23
23
|
meerschaum/_internal/term/tools.py,sha256=8ocptBrvynEJ6iGbvcAzkq4TudaUJmAJ8c19NwrQkCA,2298
|
24
24
|
meerschaum/actions/__init__.py,sha256=tR8Id90GMKF5L9QQwWtONtt7MZWCUbZ3NkE6J4ENeGM,11730
|
25
|
-
meerschaum/actions/api.py,sha256=
|
25
|
+
meerschaum/actions/api.py,sha256=7mQSSXkYIqetjOAiAGYHOjpzJSx4MN99ts6JwHlrNTc,14638
|
26
26
|
meerschaum/actions/attach.py,sha256=Vy41f8alMp3P-lXzyQkHqyDSDamtYGe2THWjFFrAdf4,3107
|
27
27
|
meerschaum/actions/bootstrap.py,sha256=z2O5sJSssZ1eUzGx6_lG599uGwGsNPnMxzYNXeBh0Fc,18076
|
28
28
|
meerschaum/actions/clear.py,sha256=v_xHn7-Pu7iwFNJ07q9eJt2hqPV7OwNZHUYa9dvixs4,4976
|
@@ -45,7 +45,7 @@ meerschaum/actions/sh.py,sha256=hSkGNTVqP5dNjhJ64zy3V3VCFPTKnDlH3PxdKdxtkGQ,1990
|
|
45
45
|
meerschaum/actions/show.py,sha256=e46izzV4ZQlIF0hajSpkdZa7lobuoco2xoP2NdhmLDc,33415
|
46
46
|
meerschaum/actions/sql.py,sha256=PhbBMBq20LL8Yh3q-yqGMe7f8ffmyjbD8q_G8Q0WxZc,4527
|
47
47
|
meerschaum/actions/stack.py,sha256=ZwrCTGJ0x3jjZkRieWcvqasQHYCqNtB1HYvTX-r3Z3g,5996
|
48
|
-
meerschaum/actions/start.py,sha256
|
48
|
+
meerschaum/actions/start.py,sha256=--J6P6lwSgpCs_YtMJCSafasLzMGzMvK1G-H0LIGSDg,26373
|
49
49
|
meerschaum/actions/stop.py,sha256=GN1t7SpRzLpMKWyJmRkKdOEVov0TMaknJ3gKjAUZQkE,5756
|
50
50
|
meerschaum/actions/sync.py,sha256=jB3w_t4_Uj788jDJ4FGPCHS5EqU08b5gPcReAlGan74,17818
|
51
51
|
meerschaum/actions/tag.py,sha256=JhWSq7X4wPrgt9tTft6qWOfs5nv-djGnqze4UQ8DPVA,3053
|
@@ -81,8 +81,8 @@ meerschaum/api/dash/assets/favicon.ico,sha256=nDEekVxwS60wEDno1nbw5GF3TJOcDV26SE
|
|
81
81
|
meerschaum/api/dash/assets/logo_48x48.png,sha256=hTR5BHUHEN4yP2xiqAcDciuigoII9T3-80R-dzsxVmw,10218
|
82
82
|
meerschaum/api/dash/assets/logo_500x500.png,sha256=9EUtf6wQcEZTXHKfQ2kjNXod6Rn_4DTB_BkTgxggq00,67702
|
83
83
|
meerschaum/api/dash/callbacks/__init__.py,sha256=flHWiTSjrdgVNLgFutSnaqYogVUgnqRFWy3K0-n0wFo,651
|
84
|
-
meerschaum/api/dash/callbacks/custom.py,sha256=
|
85
|
-
meerschaum/api/dash/callbacks/dashboard.py,sha256=
|
84
|
+
meerschaum/api/dash/callbacks/custom.py,sha256=e9wU2gZ8hutYNe7T4mKjJPFwpR32-dcbEXWyOOJKCEk,1884
|
85
|
+
meerschaum/api/dash/callbacks/dashboard.py,sha256=BSL5GKopDx45b-BaL4NdsOvY-e169TzGJzvG1HgsUCg,38735
|
86
86
|
meerschaum/api/dash/callbacks/jobs.py,sha256=mwYYjxZxHte1g4uCtv6T8nGXR2-JPoWrAgZZdBlvDyQ,8817
|
87
87
|
meerschaum/api/dash/callbacks/login.py,sha256=Eygp71kdWRO_fFrkuUN3hIT-nG9HKYOgebf8ACeuyPs,3175
|
88
88
|
meerschaum/api/dash/callbacks/pipes.py,sha256=mK9d2A789fsMkT8BF6FIrxWpzPDzfa9VgAgeTZv05G8,7801
|
@@ -144,18 +144,18 @@ meerschaum/api/routes/_webterm.py,sha256=TviHMz0_pLnby7dZW76y3mt-40Cq3VGFItSVcBi
|
|
144
144
|
meerschaum/api/tables/__init__.py,sha256=e2aNC0CdlWICTUMx1i9RauF8Pm426J0RZJbsJWv4SWo,482
|
145
145
|
meerschaum/config/__init__.py,sha256=IZLzkI7jBycfmHSR6R_WG3eBe0Uv53c-CI_QqNf4lnw,12966
|
146
146
|
meerschaum/config/_dash.py,sha256=BJHl4xMrQB-YHUEU7ldEW8q_nOPoIRSOqLrfGElc6Dw,187
|
147
|
-
meerschaum/config/_default.py,sha256=
|
147
|
+
meerschaum/config/_default.py,sha256=HdwExsy1X3B37aq7AnXImits8vA3qLkG1Xi70TlM5Tk,8076
|
148
148
|
meerschaum/config/_edit.py,sha256=WCdt7BSspPytH-NiPS1kpCZxXDDG7VbOu0H1AnMtwlw,9177
|
149
149
|
meerschaum/config/_formatting.py,sha256=SXUU0QFAlO_eIZjyodXQGSrjg-mVkL2qXuQwxqqdJps,6746
|
150
150
|
meerschaum/config/_jobs.py,sha256=gS_4mMGdmVP7WB4V5Sz8kYP0HmhWcMY2jSWGR7jX6cw,1279
|
151
151
|
meerschaum/config/_patch.py,sha256=qCv1LqZSDUI8mbaxcoKfmR-XI4Dmtz3Kzgsv1XFDhUo,1569
|
152
152
|
meerschaum/config/_paths.py,sha256=QAJrcBQ05RJFZmPufezr_Grb1Wwr9y69pKFude0DJoE,13450
|
153
153
|
meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6wLs,1220
|
154
|
-
meerschaum/config/_read_config.py,sha256=
|
154
|
+
meerschaum/config/_read_config.py,sha256=IsTVrk8xQXf0nxIjb_ASyecgjkktVqjDt_wJvVGP98Y,16266
|
155
155
|
meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
|
156
156
|
meerschaum/config/_sync.py,sha256=nN5bLCHU8sFDdlPi7pQXuRVFcX457rZjOiALTvqRS_E,4332
|
157
|
-
meerschaum/config/_version.py,sha256=
|
158
|
-
meerschaum/config/environment.py,sha256=
|
157
|
+
meerschaum/config/_version.py,sha256=GuCnsG09o5kT64ABqDd5ExeZsoe_yQEqta0q2cAVEVc,71
|
158
|
+
meerschaum/config/environment.py,sha256=hTyjPLrGp3R4sytg_Jqv4TnCVI1WdmbX2YoRBCWSNt8,8277
|
159
159
|
meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
|
160
160
|
meerschaum/config/static.py,sha256=92fSGxoHFDOK9GEsN8NVbAEh9W7-eZ1BS6thyEqcjeI,359
|
161
161
|
meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -192,10 +192,10 @@ meerschaum/connectors/plugin/__init__.py,sha256=pwF7TGY4WNz2_HaVdmK4rPQ9ZwTOEuPH
|
|
192
192
|
meerschaum/connectors/sql/_SQLConnector.py,sha256=dLv0pdgPkPBMklY_EqXvC8zaxGa8VZ8dtCdSZ5cxQSg,12911
|
193
193
|
meerschaum/connectors/sql/__init__.py,sha256=3cqYiDkVasn7zWdtOTAZbT4bo95AuvGOmDD2TkaAxtw,205
|
194
194
|
meerschaum/connectors/sql/_cli.py,sha256=D4c_S-xTmhLRxl2dMhNSF0bMb1fDrMwWP2SVRBmUiUE,5210
|
195
|
-
meerschaum/connectors/sql/_create_engine.py,sha256=
|
195
|
+
meerschaum/connectors/sql/_create_engine.py,sha256=M_uP6HlMIJvwKn_K-GXPBO9oVlGA2ULrWTR3fuEDfPY,7678
|
196
196
|
meerschaum/connectors/sql/_fetch.py,sha256=eJIqVAc4qI0xrbkZedO85sfB1-Hd3_Jkk12D6-OuzRU,12208
|
197
197
|
meerschaum/connectors/sql/_instance.py,sha256=xCc8M0xWMzF5Tu_1uWIFivAoHey5N1ccFhN_Z7u04zk,6304
|
198
|
-
meerschaum/connectors/sql/_pipes.py,sha256=
|
198
|
+
meerschaum/connectors/sql/_pipes.py,sha256=QdvLrq_r5MUHcGQB0B21Lm9UyxGYCvs0C1S9wfymg9U,130242
|
199
199
|
meerschaum/connectors/sql/_plugins.py,sha256=SubR5HUJaetoUCv83YNEMwhv4wTTBCMcxSOEUgyMML4,8747
|
200
200
|
meerschaum/connectors/sql/_sql.py,sha256=7x54ED3WYNASBBb50JKX37-d-LLQsp2fqR59S7qK6HQ,44490
|
201
201
|
meerschaum/connectors/sql/_uri.py,sha256=BFzu5pjlbL3kxLH13vHWlpKGYTPfg8wuA2j58O9NsCM,3440
|
@@ -235,33 +235,33 @@ meerschaum/core/Token/__init__.py,sha256=QYgyoCVkt7bru3CynDKP3wy41BY1NVyAta8smUR
|
|
235
235
|
meerschaum/core/User/_User.py,sha256=Usvql5K7fYm-F6ZCcUQ5gJOCU9fye5DANNyhOetjotI,7631
|
236
236
|
meerschaum/core/User/__init__.py,sha256=XNKm09yoXNjTs6xo8pBmIYe0ME8NLuux9a6L3QSmhb4,1008
|
237
237
|
meerschaum/jobs/_Executor.py,sha256=ILEhIo9Y2SPDIlIBhtYGFWi3kyK1oo7_BaYyJYGnez4,4101
|
238
|
-
meerschaum/jobs/_Job.py,sha256=
|
238
|
+
meerschaum/jobs/_Job.py,sha256=R3yEmsek81aEdIDDJPUxolfM9H0cgBtElH986FpzP7g,35785
|
239
239
|
meerschaum/jobs/__init__.py,sha256=39QFUMdjTuqKxXut5AJUUr24DWddo2oxYf2-nZdWSso,12889
|
240
240
|
meerschaum/jobs/systemd.py,sha256=pFBHXakxvCKne5-_wx-JQlOMRc6gCUyRH8g0_HPGprA,24788
|
241
241
|
meerschaum/models/__init__.py,sha256=9OCElgSTRzgqAIpi_FSUzTAVJtUwOIi71BGFsqkn6PU,814
|
242
242
|
meerschaum/models/pipes.py,sha256=vGSGm5UuyfwfPDqM9iq-PjFeiGrWYW52bJAKNZ4pcHs,7839
|
243
243
|
meerschaum/models/tokens.py,sha256=57cFisjhx47EFbJLfsp8iHX8-qZiRY8ztFWahylWOJQ,1067
|
244
244
|
meerschaum/models/users.py,sha256=E1ambl2g6f2tdnLkwAquyqjvflrb2AMiVhI9nXXHYR0,683
|
245
|
-
meerschaum/plugins/__init__.py,sha256=
|
245
|
+
meerschaum/plugins/__init__.py,sha256=qKWqbmk4Wi4Dhmrpw-r9wIOnaMfeQ7wvog1--GsQGBE,34956
|
246
246
|
meerschaum/plugins/bootstrap.py,sha256=sSvdh2g78AYwTTNMTdHw62Nj2v95pmbd77HFznuErUE,27728
|
247
247
|
meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
|
248
248
|
meerschaum/utils/_get_pipes.py,sha256=TbV77VjQ9qqCLOy06-hlnfQI_hS6PTcXkbO7aQ2csdM,13275
|
249
249
|
meerschaum/utils/dataframe.py,sha256=JDf8Gus9ZrCKdOrcHcefsPxudbKinuadD9rH9LocLEg,67612
|
250
250
|
meerschaum/utils/debug.py,sha256=zBYxcLJ5Ymzz1J5BVv7DXAZ7CWd6vYN9uFFdWKmny9U,4334
|
251
251
|
meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mikI,3196
|
252
|
-
meerschaum/utils/misc.py,sha256=
|
252
|
+
meerschaum/utils/misc.py,sha256=792Ejz6FYrCoqTiyeWnC4n8t3-wcGXfJv5InSQIKGlM,50451
|
253
253
|
meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
|
254
254
|
meerschaum/utils/pipes.py,sha256=ZJzUBd93a33aKOtQN6Jc1rDfdEaKPJB4-0hOcipG5RQ,6284
|
255
255
|
meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
|
256
256
|
meerschaum/utils/process.py,sha256=Y7yk7b-OEADd28E40ffvIGLS3shi4-e604YWX5aFUDo,8214
|
257
|
-
meerschaum/utils/prompt.py,sha256=
|
257
|
+
meerschaum/utils/prompt.py,sha256=NmbSRJyrapH7UKMV1Ry_LIjj2POVTpNCLS2QeIogge0,19740
|
258
258
|
meerschaum/utils/schedule.py,sha256=TMUjQ57UFStfZfQk7GdQItDHrH888O178vum1ID_Drk,11454
|
259
259
|
meerschaum/utils/sql.py,sha256=qTD3IHGT1NEL2wXN0A0icKY8xSjax3ox0V7kZ3aRM8k,86250
|
260
260
|
meerschaum/utils/threading.py,sha256=FV6mtQecZNmXJgirMcElX_6S0UXVaQHqhC4vzfqarbs,4022
|
261
261
|
meerschaum/utils/typing.py,sha256=LEoM4LbAbGIArBAecdRrtiMfrP8ctm9idjqCGJszVi4,2772
|
262
262
|
meerschaum/utils/warnings.py,sha256=voneQTz4OHFaL5JJ0Hu1lZS_8DrhJJfomPIvnFGq6pQ,6521
|
263
263
|
meerschaum/utils/yaml.py,sha256=PoC1du0pn2hLwTHwL-zuOf_EBWZSbCGOz-P-AZ4BWN0,3901
|
264
|
-
meerschaum/utils/daemon/Daemon.py,sha256=
|
264
|
+
meerschaum/utils/daemon/Daemon.py,sha256=UJ7QxR0P8oj9n91lUZp-msBR6MyLn1LmoGdY6_Wi4H4,50395
|
265
265
|
meerschaum/utils/daemon/FileDescriptorInterceptor.py,sha256=I2Y_1eKCoaKCg8JxH7w9F6JiwOaswJz9IhGAT3maqBY,5200
|
266
266
|
meerschaum/utils/daemon/RotatingFile.py,sha256=8KlA0llydMBoeBRpYyyy7BZSjcaS6ubDI3VGwitfrpg,25096
|
267
267
|
meerschaum/utils/daemon/StdinFile.py,sha256=jzJTqo36-XPVjzPCctvY_nHbhAUjLk7wN1Eq6gvvP3E,4771
|
@@ -273,17 +273,17 @@ meerschaum/utils/formatting/__init__.py,sha256=gP-vHE6iqyqdrTHXVjKc5ML5lUz2MFwaJ
|
|
273
273
|
meerschaum/utils/formatting/_jobs.py,sha256=c2Kp51vRJkDs2OeYLiePjSJCYhWj5az4b8uGodhG2a0,6637
|
274
274
|
meerschaum/utils/formatting/_pipes.py,sha256=CbCgUQadFR7i9gKogTPQ7vCgFguy9BW_hIT_aIwPhCw,19565
|
275
275
|
meerschaum/utils/formatting/_pprint.py,sha256=DCwopIQUu2xsCETsmbfSYVupG6Uz95gyZ63pa_nDMPo,3097
|
276
|
-
meerschaum/utils/formatting/_shell.py,sha256=
|
277
|
-
meerschaum/utils/packages/__init__.py,sha256=
|
278
|
-
meerschaum/utils/packages/_packages.py,sha256=
|
276
|
+
meerschaum/utils/formatting/_shell.py,sha256=e1SPZIUGRF6TkiKn4tULPGCE6ZbaxFdOTqosJA5rWX4,4378
|
277
|
+
meerschaum/utils/packages/__init__.py,sha256=qr_PDnKhL_X0tC8dCUJ8wE5-X3k9EmkPkTUjMXIChGU,63791
|
278
|
+
meerschaum/utils/packages/_packages.py,sha256=KWVfxsm-6ZdffpskIjHPki6wSQvf0LK9MWZgllS3dMo,9432
|
279
279
|
meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
|
280
280
|
meerschaum/utils/venv/_Venv.py,sha256=dF-FqP7Boq-g-anj2Ps-UkTOL2qJtxY3bdz0HWF2zT8,3726
|
281
281
|
meerschaum/utils/venv/__init__.py,sha256=_mabNYZwj5_XQCsdo8sED4HY-1q5s-3em6Bml7bc4BE,27301
|
282
|
-
meerschaum-3.0.
|
283
|
-
meerschaum-3.0.
|
284
|
-
meerschaum-3.0.
|
285
|
-
meerschaum-3.0.
|
286
|
-
meerschaum-3.0.
|
287
|
-
meerschaum-3.0.
|
288
|
-
meerschaum-3.0.
|
289
|
-
meerschaum-3.0.
|
282
|
+
meerschaum-3.0.1.dist-info/licenses/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
|
283
|
+
meerschaum-3.0.1.dist-info/licenses/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
|
284
|
+
meerschaum-3.0.1.dist-info/METADATA,sha256=gSbablebJKlk5CU0LEaXIWsygmSZpr0_-aSwmRiWKyQ,25325
|
285
|
+
meerschaum-3.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
286
|
+
meerschaum-3.0.1.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
|
287
|
+
meerschaum-3.0.1.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
|
288
|
+
meerschaum-3.0.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
289
|
+
meerschaum-3.0.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|