meerschaum 2.3.3__py3-none-any.whl → 2.3.5.dev0__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.
@@ -9,11 +9,7 @@ This package includes argument parsing utilities.
9
9
  from meerschaum._internal.arguments._parse_arguments import (
10
10
  parse_arguments, parse_line, remove_leading_action,
11
11
  parse_dict_to_sysargs, split_chained_sysargs, split_pipeline_sysargs,
12
+ sysargs_has_api_executor_keys,
12
13
  )
13
14
  from meerschaum._internal.arguments._parser import parser
14
15
  from meerschaum.plugins import add_plugin_argument
15
-
16
- __all__ = [
17
- 'parser', 'parse_arguments', 'parse_line', 'add_plugin_argument', 'parse_dict_to_sysargs',
18
- 'remove_leading_action',
19
- ]
@@ -283,18 +283,29 @@ def parse_dict_to_sysargs(
283
283
  ### Add list flags
284
284
  if isinstance(args_dict[a], (list, tuple)):
285
285
  if len(args_dict[a]) > 0:
286
- sysargs.extend(
287
- [t[0]]
288
- + [
289
- str(item)
290
- for item in args_dict[a]
291
- ]
292
- )
286
+ if a == 'sub_args' and args_dict[a] != ['']:
287
+ print(f"{args_dict[a]=}")
288
+ sysargs.extend(
289
+ [
290
+ '-A',
291
+ shlex.join([
292
+ str(item) for item in args_dict[a]
293
+ ]),
294
+ ]
295
+ )
296
+ else:
297
+ sysargs.extend(
298
+ [t[0]]
299
+ + [
300
+ str(item)
301
+ for item in args_dict[a]
302
+ ]
303
+ )
293
304
 
294
305
  ### Add dict flags
295
306
  elif isinstance(args_dict[a], dict):
296
307
  if len(args_dict[a]) > 0:
297
- sysargs += [t[0], json.dumps(args_dict[a])]
308
+ sysargs += [t[0], json.dumps(args_dict[a], separators=(',', ':'))]
298
309
 
299
310
  ### Account for None and other values
300
311
  elif (args_dict[a] is not None) or (args_dict[a] is None and a in allow_none_args):
@@ -403,4 +414,22 @@ def load_plugin_args() -> None:
403
414
  to_import.append(plugin.name)
404
415
  if not to_import:
405
416
  return
406
- import_plugins(*to_import)
417
+ import_plugins(*to_import)
418
+
419
+
420
+ def sysargs_has_api_executor_keys(sysargs: List[str]) -> bool:
421
+ """
422
+ Check whether a `sysargs` list contains an `api` executor.
423
+ """
424
+ if '-e' not in sysargs and '--executor-keys' not in sysargs:
425
+ return False
426
+
427
+ executor_keys_flag = '-e' if '-e' in sysargs else '--executor-keys'
428
+ executor_keys_flag_ix = sysargs.index(executor_keys_flag)
429
+ executor_keys_ix = executor_keys_flag_ix + 1
430
+
431
+ if len(sysargs) < executor_keys_ix:
432
+ return False
433
+
434
+ executor_keys = sysargs[executor_keys_ix]
435
+ return executor_keys.startswith('api:')
@@ -2,7 +2,7 @@
2
2
  # -*- coding: utf-8 -*-
3
3
  # vim:fenc=utf-8
4
4
 
5
- """
5
+ r"""
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
7
  <style>
8
8
 
@@ -50,6 +50,7 @@ def entry(
50
50
  parse_arguments,
51
51
  split_chained_sysargs,
52
52
  split_pipeline_sysargs,
53
+ sysargs_has_api_executor_keys,
53
54
  )
54
55
  from meerschaum.config.static import STATIC_CONFIG
55
56
  if sysargs is None:
@@ -63,21 +64,22 @@ def entry(
63
64
 
64
65
  has_daemon = '-d' in sysargs or '--daemon' in sysargs
65
66
  has_start_job = sysargs[:2] == ['start', 'job']
67
+ pipeline_has_api_executor_keys = sysargs_has_api_executor_keys(pipeline_args)
68
+
66
69
  chained_sysargs = (
67
70
  [sysargs]
68
- if has_daemon or has_start_job
71
+ if has_daemon or has_start_job or pipeline_has_api_executor_keys
69
72
  else split_chained_sysargs(sysargs)
70
73
  )
71
74
  if pipeline_args:
75
+ start_pipeline_params = {
76
+ 'sub_args_line': shlex.join(sysargs),
77
+ 'patch_args': _patch_args,
78
+ }
72
79
  chained_sysargs = [
73
80
  ['start', 'pipeline']
74
81
  + [str(arg) for arg in pipeline_args]
75
- + (
76
- ['--params', json.dumps(_patch_args)]
77
- if _patch_args
78
- else []
79
- )
80
- + ['--sub-args', shlex.join(sysargs)]
82
+ + ['-P', json.dumps(start_pipeline_params, separators=(',', ':'))]
81
83
  ]
82
84
 
83
85
  results: List[SuccessTuple] = []
@@ -127,7 +129,12 @@ def entry(
127
129
  (
128
130
  'Successfully c'
129
131
  if success
130
- else 'C'
132
+ else (
133
+ 'Failed pipeline after '
134
+ + f"{len(success_messages)} step"
135
+ + ('s' if len(success_messages) != 1 else '')
136
+ + '.\n\nC'
137
+ )
131
138
  ) + 'ompleted step'
132
139
  + ('s' if len(success_messages) != 1 else '')
133
140
  + ':\n\n'
@@ -158,7 +165,7 @@ def entry(
158
165
  successes_msg
159
166
  + ('\n\n' if any_success else '')
160
167
  + fails_msg
161
- ).rstrip()
168
+ ).rstrip() if len(chained_sysargs) > 1 else results[0][1]
162
169
 
163
170
  if _systemd_result_path:
164
171
  import json
@@ -14,6 +14,7 @@ def python(
14
14
  nopretty: bool = False,
15
15
  noask: bool = False,
16
16
  venv: Optional[str] = None,
17
+ executor_keys: Optional[str] = None,
17
18
  debug: bool = False,
18
19
  **kw: Any
19
20
  ) -> SuccessTuple:
@@ -53,6 +54,9 @@ def python(
53
54
  from meerschaum.utils.packages import run_python_package, attempt_import
54
55
  from meerschaum.utils.process import run_process
55
56
 
57
+ if executor_keys and executor_keys.startswith('api:'):
58
+ warn("Cannot open a Python REPL remotely, falling back to local...", stack=False)
59
+
56
60
  if action is None:
57
61
  action = []
58
62
 
@@ -7,7 +7,7 @@ Start subsystems (API server, logging daemon, etc.).
7
7
  """
8
8
 
9
9
  from __future__ import annotations
10
- from meerschaum.utils.typing import SuccessTuple, Optional, List, Any, Union
10
+ from meerschaum.utils.typing import SuccessTuple, Optional, List, Any, Union, Dict
11
11
 
12
12
  def start(
13
13
  action: Optional[List[str]] = None,
@@ -539,7 +539,6 @@ def _complete_start_connectors(**kw) -> List[str]:
539
539
 
540
540
  def _start_pipeline(
541
541
  action: Optional[List[str]] = None,
542
- sub_args: Optional[List[str]] = None,
543
542
  loop: bool = False,
544
543
  min_seconds: Union[float, int, None] = 1.0,
545
544
  params: Optional[Dict[str, Any]] = None,
@@ -569,7 +568,10 @@ def _start_pipeline(
569
568
  else 1
570
569
  )
571
570
 
572
- if not sub_args:
571
+ sub_args_line = params.get('sub_args_line', None)
572
+ patch_args = params.get('patch_args', None)
573
+
574
+ if not sub_args_line:
573
575
  return False, "Nothing to do."
574
576
 
575
577
  if min_seconds is None:
@@ -580,7 +582,7 @@ def _start_pipeline(
580
582
  def run_loop():
581
583
  nonlocal ran_n_times, success, msg
582
584
  while True:
583
- success, msg = entry(sub_args, _patch_args=params)
585
+ success, msg = entry(sub_args_line, _patch_args=patch_args)
584
586
  ran_n_times += 1
585
587
 
586
588
  if not loop and do_n_times == 1:
@@ -14,6 +14,7 @@ from functools import partial
14
14
  from datetime import datetime, timezone
15
15
 
16
16
  from fastapi import WebSocket, WebSocketDisconnect
17
+ from websockets.exceptions import ConnectionClosedError
17
18
 
18
19
  from meerschaum.utils.misc import generate_password
19
20
  from meerschaum.jobs import Job
@@ -27,6 +28,7 @@ import meerschaum.core
27
28
  from meerschaum.config import get_config
28
29
  from meerschaum._internal.arguments._parse_arguments import parse_dict_to_sysargs, parse_arguments
29
30
  from meerschaum.api.routes._jobs import clean_sysargs
31
+ from meerschaum.jobs._Job import StopMonitoringLogs
30
32
 
31
33
  actions_endpoint = endpoints['actions']
32
34
 
@@ -71,8 +73,8 @@ async def notify_client(client, content: str):
71
73
  """
72
74
  try:
73
75
  await client.send_text(content)
74
- except WebSocketDisconnect:
75
- pass
76
+ except (RuntimeError, WebSocketDisconnect, Exception):
77
+ raise StopMonitoringLogs
76
78
 
77
79
  _temp_jobs = {}
78
80
  @app.websocket(actions_endpoint + '/ws')
@@ -83,6 +85,8 @@ async def do_action_websocket(websocket: WebSocket):
83
85
  await websocket.accept()
84
86
 
85
87
  stop_event = asyncio.Event()
88
+ job_name = '.' + generate_password(12)
89
+ job = None
86
90
 
87
91
  async def monitor_logs(job):
88
92
  success, msg = job.start()
@@ -92,12 +96,14 @@ async def do_action_websocket(websocket: WebSocket):
92
96
  stop_on_exit=True,
93
97
  )
94
98
 
95
- job = None
96
- job_name = '.' + generate_password(12)
97
99
  try:
98
100
  token = await websocket.receive_text()
99
101
  user = await manager.get_current_user(token) if not no_auth else None
100
102
  if user is None and not no_auth:
103
+ stop_event.set()
104
+ if job is not None:
105
+ job.delete()
106
+ _ = _temp_jobs.pop(job_name, None)
101
107
  raise fastapi.HTTPException(
102
108
  status_code=401,
103
109
  detail="Invalid credentials.",
@@ -114,14 +120,11 @@ async def do_action_websocket(websocket: WebSocket):
114
120
  }
115
121
  await websocket.send_json(auth_payload)
116
122
  if not auth_success:
123
+ stop_event.set()
124
+ job.stop()
117
125
  await websocket.close()
118
126
 
119
127
  sysargs = clean_sysargs(await websocket.receive_json())
120
- # kwargs = parse_arguments(sysargs)
121
- # _ = kwargs.pop('executor_keys', None)
122
- # _ = kwargs.pop('shell', None)
123
- # sysargs = parse_dict_to_sysargs(kwargs)
124
-
125
128
  job = Job(
126
129
  job_name,
127
130
  sysargs,
@@ -134,25 +137,32 @@ async def do_action_websocket(websocket: WebSocket):
134
137
  )
135
138
  _temp_jobs[job_name] = job
136
139
  monitor_task = asyncio.create_task(monitor_logs(job))
137
- await monitor_task
138
- try:
139
- await websocket.close()
140
- except RuntimeError:
141
- pass
140
+
141
+ ### NOTE: Await incoming text to trigger `WebSocketDisconnect`.
142
+ while True:
143
+ await websocket.receive_text()
144
+
142
145
  except fastapi.HTTPException:
143
146
  await websocket.send_text("Invalid credentials.")
144
147
  await websocket.close()
145
- except WebSocketDisconnect:
146
- pass
147
- except asyncio.CancelledError:
148
- pass
148
+ except (WebSocketDisconnect, asyncio.CancelledError):
149
+ stop_event.set()
150
+ job.stop()
149
151
  except Exception:
152
+ stop_event.set()
153
+ job.stop()
150
154
  warn(f"Error in logs websocket:\n{traceback.format_exc()}")
151
155
  finally:
156
+ stop_event.set()
157
+ job.stop()
158
+ monitor_task.cancel()
152
159
  if job is not None:
153
160
  job.delete()
154
161
  _ = _temp_jobs.pop(job_name, None)
155
- stop_event.set()
162
+ try:
163
+ await websocket.close()
164
+ except RuntimeError:
165
+ pass
156
166
 
157
167
 
158
168
  @app.post(actions_endpoint + "/{action}", tags=['Actions'])
@@ -114,7 +114,7 @@ def clean_sysargs(sysargs: List[str]) -> List[str]:
114
114
  clean_sysargs = []
115
115
  executor_flag = False
116
116
  for arg in sysargs:
117
- if arg in ('-e', '--executor', 'api'):
117
+ if arg in ('-e', '--executor-keys', 'api'):
118
118
  executor_flag = True
119
119
  continue
120
120
  if executor_flag:
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.3.3"
5
+ __version__ = "2.3.5.dev0"
meerschaum/jobs/_Job.py CHANGED
@@ -494,13 +494,15 @@ class Job:
494
494
  await asyncio.sleep(sleep_time)
495
495
  sleep_time = round(sleep_time * 1.1, 2)
496
496
  continue
497
-
497
+
498
498
  if stop_callback_function is not None:
499
499
  try:
500
500
  if asyncio.iscoroutinefunction(stop_callback_function):
501
501
  await stop_callback_function(self.result)
502
502
  else:
503
503
  stop_callback_function(self.result)
504
+ except asyncio.exceptions.CancelledError:
505
+ break
504
506
  except Exception:
505
507
  warn(traceback.format_exc())
506
508
 
@@ -555,6 +557,7 @@ class Job:
555
557
  for task in pending:
556
558
  task.cancel()
557
559
  except asyncio.exceptions.CancelledError:
560
+ print('cancelled?')
558
561
  pass
559
562
  finally:
560
563
  combined_event.set()
@@ -596,6 +599,8 @@ class Job:
596
599
  )
597
600
  try:
598
601
  _ = asyncio.gather(*tasks, return_exceptions=True)
602
+ except asyncio.exceptions.CancelledError:
603
+ raise
599
604
  except Exception:
600
605
  warn(f"Failed to run async checks:\n{traceback.format_exc()}")
601
606
 
@@ -152,7 +152,7 @@ class SystemdExecutor(Executor):
152
152
  mrsm_env_vars.update(job.env)
153
153
 
154
154
  environment_lines = [
155
- f"Environment={key}={val}"
155
+ f"Environment={key}={shlex.quote(str(val))}"
156
156
  for key, val in mrsm_env_vars.items()
157
157
  ]
158
158
  environment_str = '\n'.join(environment_lines)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.3.3
3
+ Version: 2.3.5.dev0
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -1,12 +1,12 @@
1
1
  meerschaum/__init__.py,sha256=6bn5zz7VInDP4fE_FGBMzJYrM6rQhBMJNQqsf1pU7eI,1701
2
2
  meerschaum/__main__.py,sha256=r5UjYxH1WA6dGG9YGBPul5xOdgF3Iwl0X4dWDtXU-30,2646
3
3
  meerschaum/_internal/__init__.py,sha256=ilC7utfKtin7GAvuN34fKyUQYfPyqH0Mm3MJF5iyEf4,169
4
- meerschaum/_internal/entry.py,sha256=kjRuc8xMOrhhEwIIcHgWfHZ_nhpP6lIdTzb_FjVWeas,10992
5
- meerschaum/_internal/arguments/__init__.py,sha256=CbNgnlH6fqNI5n7EuQC6m3Do6ckXDqw4Vuc4T_qPJGQ,566
6
- meerschaum/_internal/arguments/_parse_arguments.py,sha256=6Tf9xTXZA-wH51Ep_iuG5JFLzD2rYevuA8n69FTi6Mk,12984
4
+ meerschaum/_internal/entry.py,sha256=N14gqUfKZGgB3HZAm4ceFlYd3Phb4z_qo8LVAhsBOVM,11430
5
+ meerschaum/_internal/arguments/__init__.py,sha256=UehxpvVPD6VGzl24xZBzjQzRZWFiKdAeJgXTCIronGQ,462
6
+ meerschaum/_internal/arguments/_parse_arguments.py,sha256=lKGQzZEMEZyY3n11lYSRUcPNoDCjp6ndYxTfFbbp8XM,14058
7
7
  meerschaum/_internal/arguments/_parser.py,sha256=LfiVDTr1akj5D31qpJAAXKxMcnLQiD3jRpZtvvHWrAo,14917
8
8
  meerschaum/_internal/docs/__init__.py,sha256=ZQYHWo6n0kfLLkyG36YXqTYvv2Pc7it5HZHMylT6cBA,126
9
- meerschaum/_internal/docs/index.py,sha256=LwpPMX5ODsv-CSLOmwKhJpYdEK4LBrZ260yJhYwN0L8,24389
9
+ meerschaum/_internal/docs/index.py,sha256=LOxk1p_ChRkijfRGOB6UnoUEzt-SvtnMO56fTcSIMsU,24390
10
10
  meerschaum/_internal/gui/__init__.py,sha256=KF6Opae0aBOjIndMZ2txoPs7ozCXRlR-lcTsicLO7fc,1313
11
11
  meerschaum/_internal/gui/app/__init__.py,sha256=rKUa8hHk6Fai-PDF61tQcpT1myxKcfmvEMDHxThNp7o,1565
12
12
  meerschaum/_internal/gui/app/_windows.py,sha256=-VHdjTzA3V596fVqnbmTxemONSp_80-sTNJ0CTB8FwU,2632
@@ -35,7 +35,7 @@ meerschaum/actions/install.py,sha256=jdhOrR_KlvinTKr0YJNkUHsnh5EY6OzA7cRq0Vnp1oU
35
35
  meerschaum/actions/login.py,sha256=fNgsgkrFCn9wBQJY50SQhz2PwsN_TvEYYHnXK3JG4ig,4206
36
36
  meerschaum/actions/os.py,sha256=dtoppoBhLzW3rLNF0SFovEfNxA4WJWt_9WrOGlS5KbA,2251
37
37
  meerschaum/actions/pause.py,sha256=WI4dQFfjQ6ObWKUzwQ5FrtYPDyEcnxWwval8cSIzzJw,4221
38
- meerschaum/actions/python.py,sha256=aoSaDSIQ-wJixexFDtsxBMqITktba3DLkJNFIra_6qk,4546
38
+ meerschaum/actions/python.py,sha256=k3Oo64RhyPd49W8bSjYvm6DOXuqY17NpR6BmfZb3-os,4737
39
39
  meerschaum/actions/register.py,sha256=bOQY0AlZlchsxPF27LL7G1OgdiCyj7mkBaD-PO6bFZc,14491
40
40
  meerschaum/actions/reload.py,sha256=gMXeFBGVfyQ7uhKhYf6bLaDMD0fLPcA9BrLBSiuvWIc,508
41
41
  meerschaum/actions/restart.py,sha256=6ffp3-X9eTEgunVSdD41HnOwqp71yjuSAmXJ5j39ONI,3038
@@ -44,7 +44,7 @@ meerschaum/actions/sh.py,sha256=fLfTJaacKu4sjLTRqEzzYlT2WbbdZBEczsKb6F-qAek,2026
44
44
  meerschaum/actions/show.py,sha256=Ij6v5so9GHUrYVi7AhPfhHGjABBofXTPAljLFa2xuWA,28141
45
45
  meerschaum/actions/sql.py,sha256=wYofwk1vGO96U2ncigGEfMtYMZeprz2FR1PRRZhkAPI,4311
46
46
  meerschaum/actions/stack.py,sha256=7ODAxzmCx8i9AHxvkbr5ZtzUNPpY-iqlSVo4rZHMOw4,5900
47
- meerschaum/actions/start.py,sha256=R3ooagL5VazTrC2yOSjakROSC3FoYT1NYhmWF1gsbFo,19262
47
+ meerschaum/actions/start.py,sha256=Tma2VhH3mDsufQvp_1ZWHHspHw1SPwKWYC7_BYv4ME4,19343
48
48
  meerschaum/actions/stop.py,sha256=5fdUw70YN-yuUWrC-NhA88cxr9FZ5NbssbQ8xXO8nFU,4632
49
49
  meerschaum/actions/sync.py,sha256=AkH-1O5bkUC-UElQGr0lRhrX-z18ZY2nBPSy9EsW1Kc,17506
50
50
  meerschaum/actions/tag.py,sha256=SJf5qFW0ccLXjqlTdkK_0MCcrCMdg6xhYrhKdco0hdA,3053
@@ -115,10 +115,10 @@ meerschaum/api/resources/templates/old_index.html,sha256=BDeOlcXhSsBH3-NaRtuX4Z1
115
115
  meerschaum/api/resources/templates/secret.html,sha256=0QWkm4ZoN81Aw1pd2-62rGCvx3nXPHfFUoegj3Iy8Ls,141
116
116
  meerschaum/api/resources/templates/termpage.html,sha256=qspXRuOkzqOn2mXw9mmUldzsvOHq_LyaywQ29CUevp0,4527
117
117
  meerschaum/api/routes/__init__.py,sha256=jbkeFNl51Tg8aT5gWe560ZLZLojFJsLMe5IENRjRkb0,606
118
- meerschaum/api/routes/_actions.py,sha256=J_d0jcBZbVDLfzqjR7Ar58oflA-dRQ2oCFYpvk5HHRE,6201
118
+ meerschaum/api/routes/_actions.py,sha256=xB_g1AeVGdFo0qBZgAmXPA1GuVkWGNFWihqON_N7bZ4,6574
119
119
  meerschaum/api/routes/_connectors.py,sha256=NNbcn5xWhKqw2PqueSEaqRaZ95hFGDKazG5lE7gsssc,1849
120
120
  meerschaum/api/routes/_index.py,sha256=QI6CBo6pI2Zi0a6fJHDjZfiLa9f4okb0BGe3A_JD0kM,578
121
- meerschaum/api/routes/_jobs.py,sha256=gmbgz_yqJB8K6nJVrzzPCnGRC5Kh6g5iiVGLNvZjUQM,11222
121
+ meerschaum/api/routes/_jobs.py,sha256=odL_roGipSwvZ-heGZd7Ub59a7-e0PeDmuqi3YfwQ9g,11227
122
122
  meerschaum/api/routes/_login.py,sha256=psPKmFkXgYVX83NepqwIhaLsQ5uWgOc4F2QZtPGxY1A,2482
123
123
  meerschaum/api/routes/_misc.py,sha256=05--9ZVFeaCgZrHER2kA3SYdK4TyfkEXOCjLvPbum-w,2469
124
124
  meerschaum/api/routes/_pipes.py,sha256=1gBuE4E-QvIK_kmbmiw7uLcXjnIobFI1t4tb2skpp6E,21592
@@ -140,7 +140,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
140
140
  meerschaum/config/_read_config.py,sha256=WFZKIXZMDe_ca0ES7ivgM_mnwShvFxLdoeisT_X5-h0,14720
141
141
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
142
142
  meerschaum/config/_sync.py,sha256=oK2ZujO2T1he08BXCFyiniBUevNGWSQKXLcS_jRv_7Y,4155
143
- meerschaum/config/_version.py,sha256=77O-JjgjLz0XGusI-Yd7mQH2SrggQbyeHPLiUIYO3K4,71
143
+ meerschaum/config/_version.py,sha256=glPnSrQWzzidiljlSe9lTKxgO5s_mx2sORdE64VNYgU,76
144
144
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
145
145
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
146
  meerschaum/config/stack/__init__.py,sha256=Yt7GNzC_hz7iUDZ4gVho_lugJO2DnXgnMtsMG_ReoRg,9114
@@ -201,9 +201,9 @@ meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_u
201
201
  meerschaum/core/User/_User.py,sha256=CApB7Y0QJL6S9QOCCfrG4SbPuPXJ9AsAYQ5pASMP_Aw,6527
202
202
  meerschaum/core/User/__init__.py,sha256=lJ7beIZTG9sO4dAi3367fFBl17dXYEWHKi7HoaPlDyk,193
203
203
  meerschaum/jobs/_Executor.py,sha256=qM62BhFTM4tyJ7p90KOM0y3qyeRY9k3ZV_aTDJMHnO8,1682
204
- meerschaum/jobs/_Job.py,sha256=leyW98wPQUJwvF68zL4vSScalpy6v-e9CiDynoI6aPk,31056
204
+ meerschaum/jobs/_Job.py,sha256=f8eeH6OpBF4YEKTRB2Jx-SUWGiAxe0cUtdwDGhNEZLo,31240
205
205
  meerschaum/jobs/__init__.py,sha256=ieruFbPxozkgyYMEO5wWQ4OXqfD5Pw9VtFWGub6DQxs,11970
206
- meerschaum/jobs/systemd.py,sha256=H1hdUh7QJs-DSZ7-jEYZ0NLNEplWmyFo2zt2LAsZO9M,24147
206
+ meerschaum/jobs/systemd.py,sha256=tQl5VFqGa3fiaX412fsjAFQAAW07o54ADmzAy3W-QWA,24165
207
207
  meerschaum/plugins/_Plugin.py,sha256=p6j39tm-xrZENBq-eGtixBuXxLLddtEKWRCRFNqpRu0,34086
208
208
  meerschaum/plugins/__init__.py,sha256=trMQ53qgP7ikJhhV_uXzqJw6X1NDz2rPOGXFk40bb1Y,26190
209
209
  meerschaum/plugins/bootstrap.py,sha256=qg9MQ1YAU8ShwGqWDl38WjiXLIxDPl95pSIGDLN9rOw,11423
@@ -241,11 +241,11 @@ meerschaum/utils/packages/_packages.py,sha256=GzbJ0kxW_EQogXmY4vguRkUyad42cshFs7
241
241
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
242
242
  meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
243
243
  meerschaum/utils/venv/__init__.py,sha256=bLAWnllKDuE_z6bLk7gLh4mI3Sp1j5hsboTqPKOQq84,24361
244
- meerschaum-2.3.3.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
245
- meerschaum-2.3.3.dist-info/METADATA,sha256=XXIvdo8w7h0jjkwTUZXj8v-l_B6T9zEN5GXokPZSPNo,24006
246
- meerschaum-2.3.3.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
247
- meerschaum-2.3.3.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
248
- meerschaum-2.3.3.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
249
- meerschaum-2.3.3.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
250
- meerschaum-2.3.3.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
251
- meerschaum-2.3.3.dist-info/RECORD,,
244
+ meerschaum-2.3.5.dev0.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
245
+ meerschaum-2.3.5.dev0.dist-info/METADATA,sha256=aW9MN6MOEmWcmHoVp9T2UexyQrQ2-3lf2Lcnyo978M8,24011
246
+ meerschaum-2.3.5.dev0.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
247
+ meerschaum-2.3.5.dev0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
248
+ meerschaum-2.3.5.dev0.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
249
+ meerschaum-2.3.5.dev0.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
250
+ meerschaum-2.3.5.dev0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
251
+ meerschaum-2.3.5.dev0.dist-info/RECORD,,