meerschaum 2.1.3.dev2__py3-none-any.whl → 2.1.3.dev3__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/entry.py +3 -0
- meerschaum/_internal/shell/Shell.py +106 -78
- meerschaum/_internal/shell/ShellCompleter.py +8 -4
- meerschaum/actions/reload.py +2 -5
- meerschaum/actions/show.py +47 -11
- meerschaum/config/_edit.py +10 -34
- meerschaum/config/_formatting.py +4 -0
- meerschaum/config/_version.py +1 -1
- meerschaum/config/static/__init__.py +2 -0
- meerschaum/plugins/_Plugin.py +6 -8
- meerschaum/utils/packages/__init__.py +43 -4
- meerschaum/utils/venv/__init__.py +17 -1
- {meerschaum-2.1.3.dev2.dist-info → meerschaum-2.1.3.dev3.dist-info}/METADATA +1 -1
- {meerschaum-2.1.3.dev2.dist-info → meerschaum-2.1.3.dev3.dist-info}/RECORD +20 -20
- {meerschaum-2.1.3.dev2.dist-info → meerschaum-2.1.3.dev3.dist-info}/LICENSE +0 -0
- {meerschaum-2.1.3.dev2.dist-info → meerschaum-2.1.3.dev3.dist-info}/NOTICE +0 -0
- {meerschaum-2.1.3.dev2.dist-info → meerschaum-2.1.3.dev3.dist-info}/WHEEL +0 -0
- {meerschaum-2.1.3.dev2.dist-info → meerschaum-2.1.3.dev3.dist-info}/entry_points.txt +0 -0
- {meerschaum-2.1.3.dev2.dist-info → meerschaum-2.1.3.dev3.dist-info}/top_level.txt +0 -0
- {meerschaum-2.1.3.dev2.dist-info → meerschaum-2.1.3.dev3.dist-info}/zip-safe +0 -0
meerschaum/_internal/entry.py
CHANGED
@@ -118,6 +118,7 @@ def entry_with_args(
|
|
118
118
|
return result
|
119
119
|
|
120
120
|
|
121
|
+
_shells = []
|
121
122
|
_shell = None
|
122
123
|
def get_shell(
|
123
124
|
sysargs: Optional[List[str]] = None,
|
@@ -141,4 +142,6 @@ def get_shell(
|
|
141
142
|
_shell = shell_pkg.Shell(actions, sysargs=sysargs)
|
142
143
|
elif reload:
|
143
144
|
_shell.__init__()
|
145
|
+
|
146
|
+
_shells.append(_shell)
|
144
147
|
return _shell
|
@@ -64,6 +64,10 @@ reserved_completers = {
|
|
64
64
|
'instance', 'repo'
|
65
65
|
}
|
66
66
|
|
67
|
+
### To handle dynamic reloading, store shell attributes externally.
|
68
|
+
### This is because the shell object address gets lost upon reloads.
|
69
|
+
shell_attrs = {}
|
70
|
+
|
67
71
|
def _insert_shell_actions(
|
68
72
|
_shell: Optional['Shell'] = None,
|
69
73
|
actions: Optional[Dict[str, Callable[[Any], SuccessTuple]]] = None,
|
@@ -229,7 +233,7 @@ class Shell(cmd.Cmd):
|
|
229
233
|
pass
|
230
234
|
|
231
235
|
from meerschaum.config._paths import SHELL_HISTORY_PATH
|
232
|
-
|
236
|
+
shell_attrs['session'] = prompt_toolkit_shortcuts.PromptSession(
|
233
237
|
history = prompt_toolkit_history.FileHistory(str(SHELL_HISTORY_PATH)),
|
234
238
|
auto_suggest = ValidAutoSuggest(),
|
235
239
|
completer = ShellCompleter(),
|
@@ -260,15 +264,15 @@ class Shell(cmd.Cmd):
|
|
260
264
|
pass
|
261
265
|
|
262
266
|
### NOTE: custom actions must be added to the self._actions dictionary
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
267
|
+
shell_attrs['_actions'] = actions
|
268
|
+
shell_attrs['_sysargs'] = sysargs
|
269
|
+
shell_attrs['_actions']['instance'] = self.do_instance
|
270
|
+
shell_attrs['_actions']['repo'] = self.do_repo
|
271
|
+
shell_attrs['_actions']['debug'] = self.do_debug
|
272
|
+
shell_attrs['_update_bottom_toolbar'] = True
|
273
|
+
shell_attrs['_old_bottom_toolbar'] = ''
|
274
|
+
shell_attrs['debug'] = False
|
275
|
+
shell_attrs['_reload'] = True
|
272
276
|
self.load_config()
|
273
277
|
self.hidden_commands = []
|
274
278
|
### update hidden commands list (cmd2 only)
|
@@ -286,7 +290,7 @@ class Shell(cmd.Cmd):
|
|
286
290
|
from meerschaum.utils.misc import remove_ansi
|
287
291
|
from meerschaum.utils.formatting import CHARSET, ANSI, UNICODE, colored
|
288
292
|
|
289
|
-
if
|
293
|
+
if shell_attrs.get('intro', None) != '':
|
290
294
|
self.intro = get_config('shell', CHARSET, 'intro', patch=patch)
|
291
295
|
self.intro += '\n' + ''.join(
|
292
296
|
[' '
|
@@ -297,25 +301,30 @@ class Shell(cmd.Cmd):
|
|
297
301
|
) + 'v' + version
|
298
302
|
else:
|
299
303
|
self.intro = ""
|
300
|
-
|
301
|
-
|
302
|
-
self.
|
303
|
-
|
304
|
-
self.
|
305
|
-
|
304
|
+
shell_attrs['intro'] = self.intro
|
305
|
+
shell_attrs['_prompt'] = get_config('shell', CHARSET, 'prompt', patch=patch)
|
306
|
+
self.prompt = shell_attrs['_prompt']
|
307
|
+
shell_attrs['ruler'] = get_config('shell', CHARSET, 'ruler', patch=patch)
|
308
|
+
self.ruler = shell_attrs['ruler']
|
309
|
+
shell_attrs['close_message'] = get_config('shell', CHARSET, 'close_message', patch=patch)
|
310
|
+
self.close_message = shell_attrs['close_message']
|
311
|
+
shell_attrs['doc_header'] = get_config('shell', CHARSET, 'doc_header', patch=patch)
|
312
|
+
self.doc_header = shell_attrs['doc_header']
|
313
|
+
shell_attrs['undoc_header'] = get_config('shell', CHARSET, 'undoc_header', patch=patch)
|
314
|
+
self.undoc_header = shell_attrs['undoc_header']
|
306
315
|
|
307
316
|
if instance is None and self.__dict__.get('instance_keys', None) is None:
|
308
317
|
### create default instance and repository connectors
|
309
|
-
|
310
|
-
###
|
311
|
-
|
318
|
+
shell_attrs['instance_keys'] = remove_ansi(get_config('meerschaum', 'instance', patch=patch))
|
319
|
+
### instance is a stylized version of instance_keys
|
320
|
+
shell_attrs['instance'] = str(shell_attrs['instance_keys'])
|
312
321
|
else:
|
313
|
-
|
314
|
-
|
315
|
-
if
|
316
|
-
|
322
|
+
shell_attrs['instance'] = instance
|
323
|
+
shell_attrs['instance_keys'] = remove_ansi(str(instance))
|
324
|
+
if shell_attrs.get('repo_keys', None) is None:
|
325
|
+
shell_attrs['repo_keys'] = get_config('meerschaum', 'default_repository', patch=patch)
|
317
326
|
### this will be updated later in update_prompt ONLY IF {username} is in the prompt
|
318
|
-
|
327
|
+
shell_attrs['username'] = ''
|
319
328
|
|
320
329
|
if ANSI:
|
321
330
|
def apply_colors(attr, key):
|
@@ -325,48 +334,54 @@ class Shell(cmd.Cmd):
|
|
325
334
|
)
|
326
335
|
|
327
336
|
for attr_key in get_config('shell', 'ansi'):
|
328
|
-
if attr_key not in
|
337
|
+
if attr_key not in shell_attrs:
|
329
338
|
continue
|
330
|
-
|
339
|
+
shell_attrs[attr_key] = apply_colors(shell_attrs[attr_key], attr_key)
|
340
|
+
self.__dict__[attr_key] = shell_attrs[attr_key]
|
331
341
|
|
332
342
|
### refresh actions
|
333
343
|
_insert_shell_actions(_shell=self, keep_self=True)
|
334
344
|
|
335
345
|
### replace {instance} in prompt with stylized instance string
|
336
346
|
self.update_prompt()
|
337
|
-
self._dict_backup = {k:v for k, v in self.__dict__.copy().items() if k != '_dict_backup'}
|
338
347
|
|
339
348
|
def insert_actions(self):
|
340
349
|
from meerschaum.actions import actions
|
341
350
|
|
342
351
|
def update_prompt(self, instance: Optional[str] = None, username: Optional[str] = None):
|
343
352
|
from meerschaum.utils.formatting import ANSI, colored
|
344
|
-
|
345
|
-
|
353
|
+
from meerschaum._internal.entry import _shell, get_shell
|
354
|
+
|
355
|
+
cmd.__builtins__['input'] = input_with_sigint(
|
356
|
+
_old_input,
|
357
|
+
shell_attrs['session'],
|
358
|
+
shell = self,
|
359
|
+
)
|
360
|
+
prompt = shell_attrs['_prompt']
|
346
361
|
mask = prompt
|
347
|
-
|
362
|
+
shell_attrs['_update_bottom_toolbar'] = True
|
348
363
|
|
349
|
-
if '{instance}' in
|
364
|
+
if '{instance}' in shell_attrs['_prompt']:
|
350
365
|
if instance is None:
|
351
|
-
instance =
|
352
|
-
|
366
|
+
instance = shell_attrs['instance_keys']
|
367
|
+
shell_attrs['instance'] = instance
|
353
368
|
if ANSI:
|
354
|
-
|
355
|
-
|
369
|
+
shell_attrs['instance'] = colored(
|
370
|
+
shell_attrs['instance'], **get_config(
|
356
371
|
'shell', 'ansi', 'instance', 'rich'
|
357
372
|
)
|
358
373
|
)
|
359
|
-
prompt = prompt.replace('{instance}',
|
374
|
+
prompt = prompt.replace('{instance}', shell_attrs['instance'])
|
360
375
|
mask = mask.replace('{instance}', ''.join(['\0' for c in '{instance}']))
|
361
376
|
|
362
|
-
if '{username}' in
|
377
|
+
if '{username}' in shell_attrs['_prompt']:
|
363
378
|
if username is None:
|
364
379
|
from meerschaum.utils.misc import remove_ansi
|
365
380
|
from meerschaum.connectors.parse import parse_instance_keys
|
366
381
|
from meerschaum.connectors.sql import SQLConnector
|
367
382
|
try:
|
368
383
|
conn_attrs = parse_instance_keys(
|
369
|
-
remove_ansi(
|
384
|
+
remove_ansi(shell_attrs['instance_keys']), construct=False
|
370
385
|
)
|
371
386
|
if 'username' not in conn_attrs:
|
372
387
|
if 'uri' in conn_attrs:
|
@@ -379,14 +394,14 @@ class Shell(cmd.Cmd):
|
|
379
394
|
username = str(e)
|
380
395
|
if username is None:
|
381
396
|
username = '(no username)'
|
382
|
-
|
397
|
+
shell_attrs['username'] = (
|
383
398
|
username if not ANSI else
|
384
399
|
colored(username, **get_config('shell', 'ansi', 'username', 'rich'))
|
385
400
|
)
|
386
|
-
prompt = prompt.replace('{username}',
|
401
|
+
prompt = prompt.replace('{username}', shell_attrs['username'])
|
387
402
|
mask = mask.replace('{username}', ''.join(['\0' for c in '{username}']))
|
388
403
|
|
389
|
-
remainder_prompt = list(
|
404
|
+
remainder_prompt = list(shell_attrs['_prompt'])
|
390
405
|
for i, c in enumerate(mask):
|
391
406
|
if c != '\0':
|
392
407
|
_c = c
|
@@ -394,10 +409,11 @@ class Shell(cmd.Cmd):
|
|
394
409
|
_c = colored(_c, **get_config('shell', 'ansi', 'prompt', 'rich'))
|
395
410
|
remainder_prompt[i] = _c
|
396
411
|
self.prompt = ''.join(remainder_prompt).replace(
|
397
|
-
'{username}',
|
412
|
+
'{username}', shell_attrs['username']
|
398
413
|
).replace(
|
399
|
-
'{instance}',
|
414
|
+
'{instance}', shell_attrs['instance']
|
400
415
|
)
|
416
|
+
shell_attrs['prompt'] = self.prompt
|
401
417
|
### flush stdout
|
402
418
|
print("", end="", flush=True)
|
403
419
|
|
@@ -412,6 +428,9 @@ class Shell(cmd.Cmd):
|
|
412
428
|
### Preserve the working directory.
|
413
429
|
old_cwd = os.getcwd()
|
414
430
|
|
431
|
+
from meerschaum._internal.entry import _shell, get_shell
|
432
|
+
self = get_shell(sysargs=shell_attrs['_sysargs'], debug=shell_attrs.get('debug', False))
|
433
|
+
|
415
434
|
### make a backup of line for later
|
416
435
|
original_line = deepcopy(line)
|
417
436
|
|
@@ -427,7 +446,7 @@ class Shell(cmd.Cmd):
|
|
427
446
|
### if the user specifies, clear the screen before executing any commands
|
428
447
|
if _clear_screen:
|
429
448
|
from meerschaum.utils.formatting._shell import clear_screen
|
430
|
-
clear_screen(debug=
|
449
|
+
clear_screen(debug=shell_attrs['debug'])
|
431
450
|
|
432
451
|
### return blank commands (spaces break argparse)
|
433
452
|
if original_line is None or len(str(line).strip()) == 0:
|
@@ -456,11 +475,10 @@ class Shell(cmd.Cmd):
|
|
456
475
|
args['shell'] = True
|
457
476
|
args['line'] = line
|
458
477
|
|
459
|
-
|
460
478
|
### if debug is not set on the command line,
|
461
479
|
### default to shell setting
|
462
480
|
if not args.get('debug', False):
|
463
|
-
args['debug'] =
|
481
|
+
args['debug'] = shell_attrs['debug']
|
464
482
|
|
465
483
|
### Make sure an action was provided.
|
466
484
|
if not args.get('action', None):
|
@@ -479,17 +497,19 @@ class Shell(cmd.Cmd):
|
|
479
497
|
from meerschaum.actions import get_main_action_name
|
480
498
|
main_action_name = get_main_action_name(args['action'])
|
481
499
|
if main_action_name is None:
|
482
|
-
if not hasattr(self, 'do_'+args['action'][0]):
|
500
|
+
if not hasattr(self, 'do_' + args['action'][0]):
|
483
501
|
args['action'].insert(0, 'sh')
|
484
502
|
main_action_name = 'sh'
|
503
|
+
else:
|
504
|
+
main_action_name = args['action'][0]
|
485
505
|
|
486
506
|
### if no instance is provided, use current shell default,
|
487
507
|
### but not for the 'api' command (to avoid recursion)
|
488
508
|
if 'mrsm_instance' not in args and main_action_name != 'api':
|
489
|
-
args['mrsm_instance'] = str(
|
509
|
+
args['mrsm_instance'] = str(shell_attrs['instance_keys'])
|
490
510
|
|
491
511
|
if 'repository' not in args and main_action_name != 'api':
|
492
|
-
args['repository'] = str(
|
512
|
+
args['repository'] = str(shell_attrs['repo_keys'])
|
493
513
|
|
494
514
|
### parse out empty strings
|
495
515
|
if args['action'][0].strip("\"'") == '':
|
@@ -501,21 +521,25 @@ class Shell(cmd.Cmd):
|
|
501
521
|
args['action'] = ['start', 'jobs'] + args['action']
|
502
522
|
main_action_name = 'start'
|
503
523
|
|
504
|
-
positional_only = (main_action_name not in
|
524
|
+
positional_only = (main_action_name not in shell_attrs['_actions'])
|
505
525
|
if positional_only:
|
506
526
|
return original_line
|
507
527
|
|
508
528
|
from meerschaum._internal.entry import entry_with_args
|
509
529
|
|
510
530
|
try:
|
511
|
-
success_tuple = entry_with_args(_actions=
|
531
|
+
success_tuple = entry_with_args(_actions=shell_attrs['_actions'], **args)
|
532
|
+
# success_tuple = entry_with_args(**args)
|
512
533
|
except Exception as e:
|
513
534
|
success_tuple = False, str(e)
|
514
535
|
|
515
536
|
from meerschaum.utils.formatting import print_tuple
|
516
537
|
if isinstance(success_tuple, tuple):
|
517
538
|
print_tuple(
|
518
|
-
success_tuple,
|
539
|
+
success_tuple,
|
540
|
+
skip_common = (not shell_attrs['debug']),
|
541
|
+
upper_padding = 1,
|
542
|
+
lower_padding = 0,
|
519
543
|
)
|
520
544
|
|
521
545
|
### Restore the old working directory.
|
@@ -525,9 +549,9 @@ class Shell(cmd.Cmd):
|
|
525
549
|
return ""
|
526
550
|
|
527
551
|
def postcmd(self, stop : bool = False, line : str = ""):
|
528
|
-
_reload =
|
552
|
+
_reload = shell_attrs['_reload']
|
529
553
|
if _reload:
|
530
|
-
self.load_config(
|
554
|
+
self.load_config(shell_attrs['instance'])
|
531
555
|
if stop:
|
532
556
|
return True
|
533
557
|
|
@@ -555,15 +579,15 @@ class Shell(cmd.Cmd):
|
|
555
579
|
except (IndexError, AttributeError):
|
556
580
|
state = ''
|
557
581
|
if state == '':
|
558
|
-
|
582
|
+
shell_attrs['debug'] = not shell_attrs['debug']
|
559
583
|
elif state.lower() in on_commands:
|
560
|
-
|
584
|
+
shell_attrs['debug'] = True
|
561
585
|
elif state.lower() in off_commands:
|
562
|
-
|
586
|
+
shell_attrs['debug'] = False
|
563
587
|
else:
|
564
588
|
info(f"Unknown state '{state}'. Ignoring...")
|
565
589
|
|
566
|
-
info(f"Debug mode is {'on' if
|
590
|
+
info(f"Debug mode is {'on' if shell_attrs['debug'] else 'off'}.")
|
567
591
|
|
568
592
|
def do_instance(
|
569
593
|
self,
|
@@ -619,7 +643,7 @@ class Shell(cmd.Cmd):
|
|
619
643
|
else:
|
620
644
|
conn_keys = instance_keys
|
621
645
|
|
622
|
-
|
646
|
+
shell_attrs['instance_keys'] = conn_keys
|
623
647
|
|
624
648
|
self.update_prompt(instance=conn_keys)
|
625
649
|
info(f"Default instance for the current shell: {conn_keys}")
|
@@ -683,7 +707,7 @@ class Shell(cmd.Cmd):
|
|
683
707
|
if conn is None or not conn:
|
684
708
|
conn = get_connector('api', debug=debug)
|
685
709
|
|
686
|
-
|
710
|
+
shell_attrs['repo_keys'] = str(conn)
|
687
711
|
|
688
712
|
info(f"Default repository for the current shell: {conn}")
|
689
713
|
return True, "Success"
|
@@ -712,9 +736,9 @@ class Shell(cmd.Cmd):
|
|
712
736
|
args = parse_line(line)
|
713
737
|
if len(args['action']) == 0:
|
714
738
|
del args['action']
|
715
|
-
|
739
|
+
shell_attrs['_actions']['show'](['actions'], **args)
|
716
740
|
return ""
|
717
|
-
if args['action'][0] not in
|
741
|
+
if args['action'][0] not in shell_attrs['_actions']:
|
718
742
|
try:
|
719
743
|
print(textwrap.dedent(getattr(self, f"do_{args['action'][0]}").__doc__))
|
720
744
|
except Exception as e:
|
@@ -780,17 +804,21 @@ class Shell(cmd.Cmd):
|
|
780
804
|
Patch builtin cmdloop with my own input (defined below).
|
781
805
|
"""
|
782
806
|
import signal, os
|
783
|
-
cmd.__builtins__['input'] = input_with_sigint(
|
807
|
+
cmd.__builtins__['input'] = input_with_sigint(
|
808
|
+
_old_input,
|
809
|
+
shell_attrs['session'],
|
810
|
+
shell = self,
|
811
|
+
)
|
784
812
|
|
785
813
|
### if the user specifies, clear the screen before initializing the shell
|
786
814
|
if _clear_screen:
|
787
815
|
from meerschaum.utils.formatting._shell import clear_screen
|
788
|
-
clear_screen(debug=
|
816
|
+
clear_screen(debug=shell_attrs['debug'])
|
789
817
|
|
790
818
|
### if sysargs are provided, skip printing the intro and execute instead
|
791
|
-
if
|
792
|
-
|
793
|
-
self.precmd(' '.join(
|
819
|
+
if shell_attrs['_sysargs']:
|
820
|
+
shell_attrs['intro'] = ""
|
821
|
+
self.precmd(' '.join(shell_attrs['_sysargs']))
|
794
822
|
|
795
823
|
def postloop(self):
|
796
824
|
print('\n' + self.close_message)
|
@@ -816,24 +844,24 @@ def input_with_sigint(_input, session, shell: Optional[Shell] = None):
|
|
816
844
|
nonlocal last_connected
|
817
845
|
if not get_config('shell', 'bottom_toolbar', 'enabled'):
|
818
846
|
return None
|
819
|
-
if not
|
820
|
-
return
|
847
|
+
if not shell_attrs['_update_bottom_toolbar'] and platform.system() == 'Windows':
|
848
|
+
return shell_attrs['_old_bottom_toolbar']
|
821
849
|
size = os.get_terminal_size()
|
822
850
|
num_cols, num_lines = size.columns, size.lines
|
823
851
|
|
824
852
|
instance_colored = (
|
825
853
|
colored(
|
826
|
-
|
854
|
+
shell_attrs['instance_keys'], 'on ' + get_config(
|
827
855
|
'shell', 'ansi', 'instance', 'rich', 'style'
|
828
856
|
)
|
829
|
-
) if ANSI else colored(
|
857
|
+
) if ANSI else colored(shell_attrs['instance_keys'], 'on white')
|
830
858
|
)
|
831
859
|
repo_colored = (
|
832
|
-
colored(
|
833
|
-
if ANSI else colored(
|
860
|
+
colored(shell_attrs['repo_keys'], 'on ' + get_config('shell', 'ansi', 'repo', 'rich', 'style'))
|
861
|
+
if ANSI else colored(shell_attrs['repo_keys'], 'on white')
|
834
862
|
)
|
835
863
|
try:
|
836
|
-
typ, label =
|
864
|
+
typ, label = shell_attrs['instance_keys'].split(':')
|
837
865
|
connected = typ in connectors and label in connectors[typ]
|
838
866
|
except Exception as e:
|
839
867
|
connected = False
|
@@ -859,9 +887,9 @@ def input_with_sigint(_input, session, shell: Optional[Shell] = None):
|
|
859
887
|
)
|
860
888
|
buffer = (' ' * buffer_size) if buffer_size > 0 else '\n '
|
861
889
|
text = left + buffer + right
|
862
|
-
|
863
|
-
|
864
|
-
return
|
890
|
+
shell_attrs['_old_bottom_toolbar'] = prompt_toolkit_formatted_text.ANSI(text)
|
891
|
+
shell_attrs['_update_bottom_toolbar'] = False
|
892
|
+
return shell_attrs['_old_bottom_toolbar']
|
865
893
|
|
866
894
|
def _patched_prompt(*args):
|
867
895
|
_args = []
|
@@ -24,7 +24,9 @@ class ShellCompleter(Completer):
|
|
24
24
|
"""
|
25
25
|
Bridge the built-in cmd completer with the `prompt_toolkit` completer system.
|
26
26
|
"""
|
27
|
-
|
27
|
+
from meerschaum._internal.shell.Shell import shell_attrs
|
28
|
+
shell = get_shell()
|
29
|
+
shell_actions = [a[3:] for a in dir(shell) if a.startswith('do_')]
|
28
30
|
yielded = []
|
29
31
|
ensure_readline()
|
30
32
|
parts = document.text.split('-')
|
@@ -32,7 +34,6 @@ class ShellCompleter(Completer):
|
|
32
34
|
part_0_subbed_spaces = parts[0].replace(' ', '_')
|
33
35
|
parsed_text = part_0_subbed_spaces + '-'.join(parts[1:])
|
34
36
|
|
35
|
-
shell = get_shell()
|
36
37
|
|
37
38
|
### Index is the rank order (0 is closest match).
|
38
39
|
### Break when no results are returned.
|
@@ -50,11 +51,14 @@ class ShellCompleter(Completer):
|
|
50
51
|
yielded.append(poss)
|
51
52
|
|
52
53
|
args = parse_line(document.text)
|
53
|
-
action_function = get_action(args['action'], _actions=
|
54
|
+
action_function = get_action(args['action'], _actions=shell_attrs.get('_actions', None))
|
54
55
|
if action_function is None:
|
55
56
|
return
|
56
57
|
|
57
|
-
main_action_name = get_main_action_name(
|
58
|
+
main_action_name = get_main_action_name(
|
59
|
+
args['action'],
|
60
|
+
_actions = shell_attrs.get('_actions', None)
|
61
|
+
)
|
58
62
|
|
59
63
|
### If we haven't yet hit space, don't suggest subactions.
|
60
64
|
if not parsed_text.replace(
|
meerschaum/actions/reload.py
CHANGED
@@ -17,8 +17,5 @@ def reload(
|
|
17
17
|
"""
|
18
18
|
Reload the running Meerschaum instance.
|
19
19
|
"""
|
20
|
-
from meerschaum.utils.packages import
|
21
|
-
|
22
|
-
reload_package('meerschaum')
|
23
|
-
reload_plugins(debug=debug)
|
24
|
-
return True, "Success"
|
20
|
+
from meerschaum.utils.packages import reload_meerschaum
|
21
|
+
return reload_meerschaum(debug=debug)
|
meerschaum/actions/show.py
CHANGED
@@ -7,7 +7,8 @@ This module contains functions for printing elements.
|
|
7
7
|
"""
|
8
8
|
|
9
9
|
from __future__ import annotations
|
10
|
-
|
10
|
+
import meerschaum as mrsm
|
11
|
+
from meerschaum.utils.typing import SuccessTuple, Union, Sequence, Any, Optional, List, Dict, Tuple
|
11
12
|
|
12
13
|
def show(
|
13
14
|
action: Optional[List[str]] = None,
|
@@ -738,34 +739,69 @@ def _show_environment(
|
|
738
739
|
|
739
740
|
def _show_tags(
|
740
741
|
tags: Optional[List[str]] = None,
|
742
|
+
workers: Optional[int] = None,
|
741
743
|
nopretty: bool = False,
|
742
744
|
**kwargs
|
743
745
|
) -> SuccessTuple:
|
744
746
|
"""
|
745
747
|
Show the existing tags and their associated pipes.
|
746
748
|
"""
|
749
|
+
import json
|
747
750
|
from collections import defaultdict
|
748
751
|
import meerschaum as mrsm
|
749
|
-
from meerschaum.utils.formatting import pipe_repr
|
750
|
-
|
751
|
-
|
752
|
+
from meerschaum.utils.formatting import pipe_repr, UNICODE, ANSI
|
753
|
+
from meerschaum.utils.pool import get_pool
|
754
|
+
from meerschaum.config import get_config
|
755
|
+
rich_tree, rich_panel, rich_text, rich_console, rich_columns = (
|
756
|
+
mrsm.attempt_import('rich.tree', 'rich.panel', 'rich.text', 'rich.console', 'rich.columns')
|
757
|
+
)
|
758
|
+
panel = rich_panel.Panel.fit('Tags')
|
759
|
+
tree = rich_tree.Tree(panel)
|
752
760
|
pipes = mrsm.get_pipes(as_list=True, **kwargs)
|
761
|
+
pool = get_pool(workers=workers)
|
762
|
+
tag_prefix = get_config('formatting', 'pipes', 'unicode', 'icons', 'tag') if UNICODE else ''
|
763
|
+
tag_style = get_config('formatting', 'pipes', 'ansi', 'styles', 'tags') if ANSI else None
|
753
764
|
|
754
765
|
tags_pipes = defaultdict(lambda: [])
|
766
|
+
gather_pipe_tags = lambda pipe: (pipe, (pipe.tags or []))
|
767
|
+
|
768
|
+
pipes_tags = dict(pool.map(gather_pipe_tags, pipes))
|
755
769
|
|
756
|
-
for pipe in
|
757
|
-
for tag in
|
770
|
+
for pipe, tags in pipes_tags.items():
|
771
|
+
for tag in tags:
|
758
772
|
tags_pipes[tag].append(pipe)
|
759
773
|
|
774
|
+
columns = []
|
760
775
|
sorted_tags = sorted([tag for tag in tags_pipes])
|
761
776
|
for tag in sorted_tags:
|
762
777
|
_pipes = tags_pipes[tag]
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
778
|
+
tag_text = (
|
779
|
+
rich_text.Text(tag_prefix)
|
780
|
+
+ rich_text.Text(
|
781
|
+
tag,
|
782
|
+
style = tag_style,
|
783
|
+
)
|
784
|
+
)
|
785
|
+
pipes_texts = [
|
786
|
+
pipe_repr(pipe, as_rich_text=True)
|
787
|
+
for pipe in _pipes
|
788
|
+
]
|
789
|
+
tag_group = rich_console.Group(*pipes_texts)
|
790
|
+
tag_panel = rich_panel.Panel(tag_group, title=tag_text, title_align='left')
|
791
|
+
columns.append(tag_panel)
|
768
792
|
|
793
|
+
if not nopretty:
|
794
|
+
mrsm.pprint(
|
795
|
+
rich_columns.Columns(
|
796
|
+
columns,
|
797
|
+
equal = True,
|
798
|
+
),
|
799
|
+
)
|
800
|
+
else:
|
801
|
+
for tag, _pipes in tags_pipes.items():
|
802
|
+
print(tag)
|
803
|
+
for pipe in _pipes:
|
804
|
+
print(json.dumps(pipe.meta))
|
769
805
|
|
770
806
|
return True, "Success"
|
771
807
|
|
meerschaum/config/_edit.py
CHANGED
@@ -6,9 +6,9 @@
|
|
6
6
|
Functions for editing the configuration file
|
7
7
|
"""
|
8
8
|
|
9
|
-
# from meerschaum.utils.debug import dprint
|
10
9
|
from __future__ import annotations
|
11
10
|
import sys
|
11
|
+
import pathlib
|
12
12
|
from meerschaum.utils.typing import Optional, Any, SuccessTuple, Mapping, Dict, List, Union
|
13
13
|
|
14
14
|
def edit_config(
|
@@ -21,7 +21,7 @@ def edit_config(
|
|
21
21
|
from meerschaum.config import get_config, config
|
22
22
|
from meerschaum.config._read_config import get_keyfile_path
|
23
23
|
from meerschaum.config._paths import CONFIG_DIR_PATH
|
24
|
-
from meerschaum.utils.packages import
|
24
|
+
from meerschaum.utils.packages import reload_meerschaum
|
25
25
|
from meerschaum.utils.misc import edit_file
|
26
26
|
from meerschaum.utils.debug import dprint
|
27
27
|
|
@@ -35,10 +35,7 @@ def edit_config(
|
|
35
35
|
get_config(k, write_missing=True, warn=False)
|
36
36
|
edit_file(get_keyfile_path(k, create_new=True))
|
37
37
|
|
38
|
-
|
39
|
-
dprint("Reloading configuration...")
|
40
|
-
reload_package('meerschaum', debug=debug, **kw)
|
41
|
-
|
38
|
+
reload_meerschaum(debug=debug)
|
42
39
|
return (True, "Success")
|
43
40
|
|
44
41
|
|
@@ -78,7 +75,7 @@ def write_config(
|
|
78
75
|
from meerschaum.utils.debug import dprint
|
79
76
|
from meerschaum.utils.yaml import yaml
|
80
77
|
from meerschaum.utils.misc import filter_keywords
|
81
|
-
import json, os
|
78
|
+
import json, os
|
82
79
|
if config_dict is None:
|
83
80
|
from meerschaum.config import _config
|
84
81
|
cf = _config()
|
@@ -162,7 +159,6 @@ def general_write_yaml_config(
|
|
162
159
|
"""
|
163
160
|
|
164
161
|
from meerschaum.utils.debug import dprint
|
165
|
-
from pathlib import Path
|
166
162
|
|
167
163
|
if files is None:
|
168
164
|
files = {}
|
@@ -172,7 +168,7 @@ def general_write_yaml_config(
|
|
172
168
|
header = None
|
173
169
|
if isinstance(value, tuple):
|
174
170
|
config, header = value
|
175
|
-
path = Path(fp)
|
171
|
+
path = pathlib.Path(fp)
|
176
172
|
path.parent.mkdir(parents=True, exist_ok=True)
|
177
173
|
path.touch(exist_ok=True)
|
178
174
|
with open(path, 'w+') as f:
|
@@ -193,32 +189,12 @@ def general_write_yaml_config(
|
|
193
189
|
return True
|
194
190
|
|
195
191
|
def general_edit_config(
|
196
|
-
action
|
197
|
-
files
|
198
|
-
default
|
199
|
-
debug
|
192
|
+
action: Optional[List[str]] = None,
|
193
|
+
files: Optional[Dict[str, Union[str, pathlib.Path]]] = None,
|
194
|
+
default: Optional[str] = None,
|
195
|
+
debug: bool = False
|
200
196
|
):
|
201
|
-
"""
|
202
|
-
|
203
|
-
Parameters
|
204
|
-
----------
|
205
|
-
action : Optional[List[str]] :
|
206
|
-
(Default value = None)
|
207
|
-
files : Optional[Dict[str :
|
208
|
-
|
209
|
-
Union[str :
|
210
|
-
|
211
|
-
pathlib.Path]]] :
|
212
|
-
(Default value = None)
|
213
|
-
default : str :
|
214
|
-
(Default value = None)
|
215
|
-
debug : bool :
|
216
|
-
(Default value = False)
|
217
|
-
|
218
|
-
Returns
|
219
|
-
-------
|
220
|
-
|
221
|
-
"""
|
197
|
+
"""Prompt the user to edit any config files."""
|
222
198
|
if default is None:
|
223
199
|
raise Exception("Provide a default choice for which file to edit")
|
224
200
|
import os
|
meerschaum/config/_formatting.py
CHANGED
@@ -35,6 +35,7 @@ default_formatting_config = {
|
|
35
35
|
'running' : '🟢',
|
36
36
|
'paused' : '🟡',
|
37
37
|
'stopped' : '🔴',
|
38
|
+
'tag' : '🏷️',
|
38
39
|
},
|
39
40
|
'pipes' : {
|
40
41
|
'unicode' : {
|
@@ -43,6 +44,7 @@ default_formatting_config = {
|
|
43
44
|
'metric' : 'MRSM{formatting:emoji:metric} ',
|
44
45
|
'location' : 'MRSM{formatting:emoji:location} ',
|
45
46
|
'key' : 'MRSM{formatting:emoji:key} ',
|
47
|
+
'tag' : 'MRSM{formatting:emoji:tag} ',
|
46
48
|
},
|
47
49
|
},
|
48
50
|
'ascii' : {
|
@@ -51,6 +53,7 @@ default_formatting_config = {
|
|
51
53
|
'metric' : '',
|
52
54
|
'location' : '',
|
53
55
|
'key' : '',
|
56
|
+
'tag' : '',
|
54
57
|
},
|
55
58
|
},
|
56
59
|
'ansi' : {
|
@@ -61,6 +64,7 @@ default_formatting_config = {
|
|
61
64
|
'key' : '',
|
62
65
|
'guide' : 'dim',
|
63
66
|
'none' : 'black on magenta',
|
67
|
+
'tags' : 'bold yellow underline',
|
64
68
|
},
|
65
69
|
},
|
66
70
|
'__repr__' : {
|
meerschaum/config/_version.py
CHANGED
@@ -56,6 +56,8 @@ STATIC_CONFIG: Dict[str, Any] = {
|
|
56
56
|
'dep_group': 'MRSM_DEP_GROUP',
|
57
57
|
'home': 'MRSM_HOME',
|
58
58
|
'src': 'MRSM_SRC',
|
59
|
+
'uid': 'MRSM_UID',
|
60
|
+
'gid': 'MRSM_GID',
|
59
61
|
'noask': 'MRSM_NOASK',
|
60
62
|
'id': 'MRSM_SERVER_ID',
|
61
63
|
'uri_regex': r'MRSM_([a-zA-Z0-9]*)_(\d*[a-zA-Z][a-zA-Z0-9-_+]*$)',
|
meerschaum/plugins/_Plugin.py
CHANGED
@@ -283,8 +283,8 @@ class Plugin:
|
|
283
283
|
import tarfile
|
284
284
|
import re
|
285
285
|
import ast
|
286
|
-
from meerschaum.plugins import
|
287
|
-
from meerschaum.utils.packages import attempt_import, determine_version,
|
286
|
+
from meerschaum.plugins import sync_plugins_symlinks
|
287
|
+
from meerschaum.utils.packages import attempt_import, determine_version, reload_meerschaum
|
288
288
|
from meerschaum.utils.venv import init_venv
|
289
289
|
from meerschaum.utils.misc import safely_extract_tar
|
290
290
|
old_cwd = os.getcwd()
|
@@ -415,8 +415,7 @@ class Plugin:
|
|
415
415
|
if '_module' in self.__dict__:
|
416
416
|
del self.__dict__['_module']
|
417
417
|
init_venv(venv=self.name, force=True, debug=debug)
|
418
|
-
|
419
|
-
reload_plugins([self.name], debug=debug)
|
418
|
+
reload_meerschaum(debug=debug)
|
420
419
|
|
421
420
|
### if we've already failed, return here
|
422
421
|
if not success or abort:
|
@@ -493,8 +492,8 @@ class Plugin:
|
|
493
492
|
"""
|
494
493
|
Remove a plugin, its virtual environment, and archive file.
|
495
494
|
"""
|
496
|
-
from meerschaum.utils.packages import
|
497
|
-
from meerschaum.plugins import
|
495
|
+
from meerschaum.utils.packages import reload_meerschaum
|
496
|
+
from meerschaum.plugins import sync_plugins_symlinks
|
498
497
|
from meerschaum.utils.warnings import warn, info
|
499
498
|
warnings_thrown_count: int = 0
|
500
499
|
max_warnings: int = 3
|
@@ -529,8 +528,7 @@ class Plugin:
|
|
529
528
|
success = warnings_thrown_count < max_warnings
|
530
529
|
sync_plugins_symlinks(debug=debug)
|
531
530
|
self.deactivate_venv(force=True, debug=debug)
|
532
|
-
|
533
|
-
reload_plugins(debug=debug)
|
531
|
+
reload_meerschaum(debug=debug)
|
534
532
|
return success, (
|
535
533
|
f"Successfully uninstalled plugin '{self}'." if success
|
536
534
|
else f"Failed to uninstall plugin '{self}'."
|
@@ -9,7 +9,7 @@ Functions for managing packages and virtual environments reside here.
|
|
9
9
|
from __future__ import annotations
|
10
10
|
|
11
11
|
import importlib.util, os, pathlib
|
12
|
-
from meerschaum.utils.typing import Any, List, SuccessTuple, Optional, Union, Tuple, Dict
|
12
|
+
from meerschaum.utils.typing import Any, List, SuccessTuple, Optional, Union, Tuple, Dict, Iterable
|
13
13
|
from meerschaum.utils.threading import Lock, RLock
|
14
14
|
from meerschaum.utils.packages._packages import packages, all_packages, get_install_names
|
15
15
|
from meerschaum.utils.venv import (
|
@@ -1494,16 +1494,18 @@ def import_children(
|
|
1494
1494
|
return members
|
1495
1495
|
|
1496
1496
|
|
1497
|
+
_reload_module_cache = {}
|
1497
1498
|
def reload_package(
|
1498
1499
|
package: str,
|
1500
|
+
skip_submodules: Optional[List[str]] = None,
|
1499
1501
|
lazy: bool = False,
|
1500
1502
|
debug: bool = False,
|
1501
1503
|
**kw: Any
|
1502
|
-
)
|
1504
|
+
):
|
1503
1505
|
"""
|
1504
1506
|
Recursively load a package's subpackages, even if they were not previously loaded.
|
1505
1507
|
"""
|
1506
|
-
import
|
1508
|
+
import sys
|
1507
1509
|
if isinstance(package, str):
|
1508
1510
|
package_name = package
|
1509
1511
|
else:
|
@@ -1511,7 +1513,44 @@ def reload_package(
|
|
1511
1513
|
package_name = package.__name__
|
1512
1514
|
except Exception as e:
|
1513
1515
|
package_name = str(package)
|
1514
|
-
|
1516
|
+
|
1517
|
+
skip_submodules = skip_submodules or []
|
1518
|
+
if 'meerschaum.utils.packages' not in skip_submodules:
|
1519
|
+
skip_submodules.append('meerschaum.utils.packages')
|
1520
|
+
def safeimport():
|
1521
|
+
subs = [
|
1522
|
+
m for m in sys.modules
|
1523
|
+
if m.startswith(package_name + '.')
|
1524
|
+
]
|
1525
|
+
subs_to_skip = []
|
1526
|
+
for skip_mod in skip_submodules:
|
1527
|
+
for mod in subs:
|
1528
|
+
if mod.startswith(skip_mod):
|
1529
|
+
subs_to_skip.append(mod)
|
1530
|
+
continue
|
1531
|
+
|
1532
|
+
subs = [m for m in subs if m not in subs_to_skip]
|
1533
|
+
for module_name in subs:
|
1534
|
+
_reload_module_cache[module_name] = sys.modules.pop(module_name, None)
|
1535
|
+
if not subs_to_skip:
|
1536
|
+
_reload_module_cache[package_name] = sys.modules.pop(package_name, None)
|
1537
|
+
|
1538
|
+
return _import_module(package_name)
|
1539
|
+
|
1540
|
+
return safeimport()
|
1541
|
+
|
1542
|
+
|
1543
|
+
def reload_meerschaum(debug: bool = False) -> SuccessTuple:
|
1544
|
+
"""
|
1545
|
+
Reload the currently loaded Meercshaum modules, refreshing plugins and shell configuration.
|
1546
|
+
"""
|
1547
|
+
reload_package('meerschaum', skip_submodules=['meerschaum._internal.shell'])
|
1548
|
+
|
1549
|
+
from meerschaum.plugins import reload_plugins
|
1550
|
+
from meerschaum._internal.shell.Shell import _insert_shell_actions
|
1551
|
+
reload_plugins(debug=debug)
|
1552
|
+
_insert_shell_actions()
|
1553
|
+
return True, "Success"
|
1515
1554
|
|
1516
1555
|
|
1517
1556
|
def is_installed(
|
@@ -362,7 +362,24 @@ def init_venv(
|
|
362
362
|
return True
|
363
363
|
|
364
364
|
import sys, platform, os, pathlib, shutil
|
365
|
+
from meerschaum.config.static import STATIC_CONFIG
|
365
366
|
from meerschaum.config._paths import VIRTENV_RESOURCES_PATH
|
367
|
+
venv_path = VIRTENV_RESOURCES_PATH / venv
|
368
|
+
docker_home_venv_path = pathlib.Path('/home/meerschaum/venvs/mrsm')
|
369
|
+
|
370
|
+
runtime_env_var = STATIC_CONFIG['environment']['runtime']
|
371
|
+
if (
|
372
|
+
not force
|
373
|
+
and venv == 'mrsm'
|
374
|
+
and os.environ.get(runtime_env_var, None) == 'docker'
|
375
|
+
and docker_home_venv_path.exists()
|
376
|
+
):
|
377
|
+
shutil.move(docker_home_venv_path, venv_path)
|
378
|
+
if verify:
|
379
|
+
verify_venv(venv, debug=debug)
|
380
|
+
verified_venvs.add(venv)
|
381
|
+
return True
|
382
|
+
|
366
383
|
from meerschaum.utils.packages import run_python_package, attempt_import
|
367
384
|
global tried_virtualenv
|
368
385
|
try:
|
@@ -372,7 +389,6 @@ def init_venv(
|
|
372
389
|
_venv = None
|
373
390
|
virtualenv = None
|
374
391
|
|
375
|
-
venv_path = VIRTENV_RESOURCES_PATH / venv
|
376
392
|
|
377
393
|
_venv_success = False
|
378
394
|
if _venv is not None:
|
@@ -1,7 +1,7 @@
|
|
1
1
|
meerschaum/__init__.py,sha256=mw_PhxT7155SW8d_S51T4-WTibL5g205CwMa3qX8qyA,1487
|
2
2
|
meerschaum/__main__.py,sha256=6JMfERA83SyJH2_UHPyrl2v4rjoyXqGh6h4x3UNe3xU,2774
|
3
3
|
meerschaum/_internal/__init__.py,sha256=ilC7utfKtin7GAvuN34fKyUQYfPyqH0Mm3MJF5iyEf4,169
|
4
|
-
meerschaum/_internal/entry.py,sha256=
|
4
|
+
meerschaum/_internal/entry.py,sha256=_76FVDQGzZ_AU37XfC42ZVIDx4KHx4Xf5-lEQR2nmwg,4820
|
5
5
|
meerschaum/_internal/arguments/__init__.py,sha256=HFciFQgo2ZOT19Mo6CpLhPYlpLYh2sNn1C9Lo7NMADc,519
|
6
6
|
meerschaum/_internal/arguments/_parse_arguments.py,sha256=dNVDBvXYNgEw-TrlZJ9A6VPlG696EpQcQm6FOAhseqw,10249
|
7
7
|
meerschaum/_internal/arguments/_parser.py,sha256=siHYO_li3h206iYik786KFT_ZnaHC052zaZK7FFESjQ,13548
|
@@ -12,8 +12,8 @@ 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=
|
16
|
-
meerschaum/_internal/shell/ShellCompleter.py,sha256=
|
15
|
+
meerschaum/_internal/shell/Shell.py,sha256=34lDd4FVTyvj17L4WdcSWwN60VXu0NpiVzY45IGTWq4,33102
|
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
|
@@ -35,10 +35,10 @@ meerschaum/actions/os.py,sha256=dtoppoBhLzW3rLNF0SFovEfNxA4WJWt_9WrOGlS5KbA,2251
|
|
35
35
|
meerschaum/actions/pause.py,sha256=kDK0UMm90TuohFEG5Gugl3PEbuqGua-ghidqvgYShoc,3909
|
36
36
|
meerschaum/actions/python.py,sha256=eXSpAli8ARo9k2NeZi11TwiyA6T5leMSDQXKS6dgRkM,2395
|
37
37
|
meerschaum/actions/register.py,sha256=d99u0Yr395f3g23oWH7VMOqAlWQLZHVaS6woZqrNViU,11214
|
38
|
-
meerschaum/actions/reload.py,sha256=
|
38
|
+
meerschaum/actions/reload.py,sha256=gMXeFBGVfyQ7uhKhYf6bLaDMD0fLPcA9BrLBSiuvWIc,508
|
39
39
|
meerschaum/actions/setup.py,sha256=KkAGWcgwzl_L6A19fTmTX1KtBjW2FwD8QenLjPy0mQQ,3205
|
40
40
|
meerschaum/actions/sh.py,sha256=fLfTJaacKu4sjLTRqEzzYlT2WbbdZBEczsKb6F-qAek,2026
|
41
|
-
meerschaum/actions/show.py,sha256=
|
41
|
+
meerschaum/actions/show.py,sha256=pmH2G3CA-10YM_MLLaHdpXOMmZo112rE17hB2yEEj2Y,25865
|
42
42
|
meerschaum/actions/sql.py,sha256=wYofwk1vGO96U2ncigGEfMtYMZeprz2FR1PRRZhkAPI,4311
|
43
43
|
meerschaum/actions/stack.py,sha256=WMRMebyYwZGNlbnj6Ja09qvCSDNteFJOTa8_joHlnVo,5886
|
44
44
|
meerschaum/actions/start.py,sha256=mNFWqxc_o9moavvDQWE4YoZF6b-SW2nKyw5MtwIj-90,18384
|
@@ -123,9 +123,9 @@ meerschaum/api/routes/_webterm.py,sha256=7eilgDXckpEc2LyeNmJS5YO6HxlyMkwPnAMWd7e
|
|
123
123
|
meerschaum/api/tables/__init__.py,sha256=e2aNC0CdlWICTUMx1i9RauF8Pm426J0RZJbsJWv4SWo,482
|
124
124
|
meerschaum/config/__init__.py,sha256=01hZ4Z8jGs4LbcIwNTeVzSvHD-Y0nAgiewRgngVUYb4,11517
|
125
125
|
meerschaum/config/_default.py,sha256=SJqekCM-90yQQHduF43aNvP6EqvB_fkZqozJSeJ7Wz8,5184
|
126
|
-
meerschaum/config/_edit.py,sha256=
|
126
|
+
meerschaum/config/_edit.py,sha256=CE8gumBiOtnZZdTATCLAZgUnhL04yJdReaNCrv1yuJc,8218
|
127
127
|
meerschaum/config/_environment.py,sha256=Vv4DLDfc2vKLbCLsMvkQDj77K4kEvHKEBmUBo-wCrgo,4419
|
128
|
-
meerschaum/config/_formatting.py,sha256=
|
128
|
+
meerschaum/config/_formatting.py,sha256=BxpWY0vGM8strR2v17cdDqFDrpr6NQ-0cH4uDFPOCWE,6638
|
129
129
|
meerschaum/config/_jobs.py,sha256=2VGbg885rgz8jsIF52Z_Q76kdmAXNKDk7p2dnahmsnc,1073
|
130
130
|
meerschaum/config/_patch.py,sha256=21N30q1ANmWMDQ-2RUjpMx7KafWfPQ3lKx9rrMqg1s4,1526
|
131
131
|
meerschaum/config/_paths.py,sha256=ORzpEpYE5OM06H6Hw_nh51R8fkk45MyGPI7mDd1QzqI,7983
|
@@ -133,14 +133,14 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
|
|
133
133
|
meerschaum/config/_read_config.py,sha256=WFZKIXZMDe_ca0ES7ivgM_mnwShvFxLdoeisT_X5-h0,14720
|
134
134
|
meerschaum/config/_shell.py,sha256=k6PH0BEr2imhgURLYlR5p6s5gXfYpWoyZSV29U-SsXk,3589
|
135
135
|
meerschaum/config/_sync.py,sha256=Q-sz5YcjL3CJS2Dyw4rVRQsz9th9GWa9o5F9D0Jrmn8,4120
|
136
|
-
meerschaum/config/_version.py,sha256=
|
136
|
+
meerschaum/config/_version.py,sha256=EuhT63apwdqJ99P_Z2S28D5qOFqBNhYmqcl2TE_MXX0,76
|
137
137
|
meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
138
138
|
meerschaum/config/stack/__init__.py,sha256=4a_up1oxkitwgIylWWk0vA4XkGhEpWazUaENOPEdYQI,9034
|
139
139
|
meerschaum/config/stack/grafana/__init__.py,sha256=wzuoch_AK49lcn7lH2qTSJ_PPbSagF4lcweeipz_XiE,2010
|
140
140
|
meerschaum/config/stack/mosquitto/__init__.py,sha256=-OwOjq8KiBoSH_pmgCAAF3Dp3CRD4KgAEdimZSadROs,186
|
141
141
|
meerschaum/config/stack/mosquitto/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
142
142
|
meerschaum/config/stack/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
143
|
-
meerschaum/config/static/__init__.py,sha256=
|
143
|
+
meerschaum/config/static/__init__.py,sha256=oDxx1wVGowW-AQsbVGmr4R4ZvCF-f1pdAalX5x5OpJE,4361
|
144
144
|
meerschaum/connectors/Connector.py,sha256=cJKinmk7eWZwCBvtX4H9r66macTZOY1qjxR7JUEmDmg,6381
|
145
145
|
meerschaum/connectors/__init__.py,sha256=0uAfGRyLhUI19p161wytmzAurx3znhh4I9O9PyZ4w_E,12023
|
146
146
|
meerschaum/connectors/parse.py,sha256=gidA2jvOLTvEeL5hM9JjcUwkMRBadUhd4IfA5Jy1tgg,4044
|
@@ -191,7 +191,7 @@ meerschaum/core/Pipe/_verify.py,sha256=KSnthUzImRLjt9fxyBaLvArqDuOLRpKBfk0tnseJC
|
|
191
191
|
meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_uSJJDc,137
|
192
192
|
meerschaum/core/User/_User.py,sha256=waVdpH4SFZSXNYBgX5KFQ8csbCSxRLI5T2efAzVONks,2448
|
193
193
|
meerschaum/core/User/__init__.py,sha256=EiL0rYdtNeu2HqXFLurJcyomjyw3UTFdAR8rgb_vlbU,161
|
194
|
-
meerschaum/plugins/_Plugin.py,sha256=
|
194
|
+
meerschaum/plugins/_Plugin.py,sha256=f0RDPazwzYSTZmD21rxwF48abUeVyFWKggBC9cWR7sw,33706
|
195
195
|
meerschaum/plugins/__init__.py,sha256=pVRgbBk1UMlqLrM5p1s7_x_mN70epdDBZOa4vrt6C6w,20760
|
196
196
|
meerschaum/utils/__init__.py,sha256=Hf-9PtssyubKGBFMjB3R3_N7TVjy24wfm4SLqO4r4_A,552
|
197
197
|
meerschaum/utils/dataframe.py,sha256=OHf2IQOjA77pvpMorHWd3lICMcvkaZsvPE2PZjFakPw,26427
|
@@ -220,16 +220,16 @@ meerschaum/utils/formatting/_jobs.py,sha256=s1lVcdMkzNj5Bqw-GsUhcguUFtahi5nQ-kg1
|
|
220
220
|
meerschaum/utils/formatting/_pipes.py,sha256=vixqKIUYNC7yDtU-MoeSXnHug9IGkK1N2yqujxvJ-i0,18414
|
221
221
|
meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
|
222
222
|
meerschaum/utils/formatting/_shell.py,sha256=ox75O7VHDAiwzSvdMSJZhXLadvAqYJVeihU6WeZ2Ogc,3677
|
223
|
-
meerschaum/utils/packages/__init__.py,sha256=
|
223
|
+
meerschaum/utils/packages/__init__.py,sha256=86mVkFEZP4aCu0EdTA9shBPR0DUPxQvu9c_yIDw4Hh8,56361
|
224
224
|
meerschaum/utils/packages/_packages.py,sha256=KmuQpMNhYb698HlWgG72nFyKQdcAwaDAQCJO3ECwAMc,8024
|
225
225
|
meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
|
226
226
|
meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
|
227
|
-
meerschaum/utils/venv/__init__.py,sha256=
|
228
|
-
meerschaum-2.1.3.
|
229
|
-
meerschaum-2.1.3.
|
230
|
-
meerschaum-2.1.3.
|
231
|
-
meerschaum-2.1.3.
|
232
|
-
meerschaum-2.1.3.
|
233
|
-
meerschaum-2.1.3.
|
234
|
-
meerschaum-2.1.3.
|
235
|
-
meerschaum-2.1.3.
|
227
|
+
meerschaum/utils/venv/__init__.py,sha256=Ln-EguP8g-Jc8OrtDj0orRCJ_VPj2izFkYbV4arIbhE,23118
|
228
|
+
meerschaum-2.1.3.dev3.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
|
229
|
+
meerschaum-2.1.3.dev3.dist-info/METADATA,sha256=m9L4ibFqN4-zStsrcCpndEWcsxTPkz7i7wCFWYnYHyE,24120
|
230
|
+
meerschaum-2.1.3.dev3.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
|
231
|
+
meerschaum-2.1.3.dev3.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
|
232
|
+
meerschaum-2.1.3.dev3.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
|
233
|
+
meerschaum-2.1.3.dev3.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
|
234
|
+
meerschaum-2.1.3.dev3.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
235
|
+
meerschaum-2.1.3.dev3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|