meerschaum 2.2.3__py3-none-any.whl → 2.2.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. meerschaum/__init__.py +4 -1
  2. meerschaum/_internal/arguments/_parse_arguments.py +23 -14
  3. meerschaum/_internal/arguments/_parser.py +4 -2
  4. meerschaum/_internal/docs/index.py +513 -110
  5. meerschaum/_internal/entry.py +2 -4
  6. meerschaum/_internal/shell/Shell.py +0 -3
  7. meerschaum/actions/__init__.py +5 -1
  8. meerschaum/actions/bootstrap.py +32 -7
  9. meerschaum/actions/delete.py +62 -0
  10. meerschaum/actions/edit.py +98 -15
  11. meerschaum/actions/python.py +45 -14
  12. meerschaum/actions/show.py +39 -4
  13. meerschaum/actions/stack.py +12 -12
  14. meerschaum/actions/uninstall.py +24 -29
  15. meerschaum/api/__init__.py +0 -1
  16. meerschaum/api/_oauth2.py +17 -0
  17. meerschaum/api/dash/__init__.py +0 -1
  18. meerschaum/api/dash/callbacks/custom.py +1 -1
  19. meerschaum/api/dash/plugins.py +5 -6
  20. meerschaum/api/routes/_login.py +23 -7
  21. meerschaum/config/__init__.py +16 -6
  22. meerschaum/config/_edit.py +1 -1
  23. meerschaum/config/_paths.py +3 -0
  24. meerschaum/config/_version.py +1 -1
  25. meerschaum/config/stack/__init__.py +3 -1
  26. meerschaum/connectors/Connector.py +7 -2
  27. meerschaum/connectors/__init__.py +7 -5
  28. meerschaum/core/Pipe/_data.py +23 -15
  29. meerschaum/core/Pipe/_deduplicate.py +1 -1
  30. meerschaum/core/Pipe/_dtypes.py +5 -0
  31. meerschaum/core/Pipe/_fetch.py +26 -20
  32. meerschaum/core/Pipe/_sync.py +96 -61
  33. meerschaum/plugins/__init__.py +1 -1
  34. meerschaum/plugins/bootstrap.py +333 -0
  35. meerschaum/utils/daemon/Daemon.py +14 -3
  36. meerschaum/utils/daemon/FileDescriptorInterceptor.py +21 -14
  37. meerschaum/utils/daemon/RotatingFile.py +21 -18
  38. meerschaum/utils/dataframe.py +12 -4
  39. meerschaum/utils/debug.py +9 -15
  40. meerschaum/utils/formatting/__init__.py +23 -10
  41. meerschaum/utils/misc.py +117 -11
  42. meerschaum/utils/packages/_packages.py +1 -0
  43. meerschaum/utils/prompt.py +64 -21
  44. meerschaum/utils/typing.py +1 -0
  45. meerschaum/utils/warnings.py +9 -1
  46. meerschaum/utils/yaml.py +32 -1
  47. {meerschaum-2.2.3.dist-info → meerschaum-2.2.5.dist-info}/METADATA +5 -1
  48. {meerschaum-2.2.3.dist-info → meerschaum-2.2.5.dist-info}/RECORD +54 -53
  49. {meerschaum-2.2.3.dist-info → meerschaum-2.2.5.dist-info}/WHEEL +1 -1
  50. {meerschaum-2.2.3.dist-info → meerschaum-2.2.5.dist-info}/LICENSE +0 -0
  51. {meerschaum-2.2.3.dist-info → meerschaum-2.2.5.dist-info}/NOTICE +0 -0
  52. {meerschaum-2.2.3.dist-info → meerschaum-2.2.5.dist-info}/entry_points.txt +0 -0
  53. {meerschaum-2.2.3.dist-info → meerschaum-2.2.5.dist-info}/top_level.txt +0 -0
  54. {meerschaum-2.2.3.dist-info → meerschaum-2.2.5.dist-info}/zip-safe +0 -0
meerschaum/__init__.py CHANGED
@@ -23,7 +23,7 @@ from meerschaum.utils.typing import SuccessTuple
23
23
  from meerschaum.core.Pipe import Pipe
24
24
  from meerschaum.plugins import Plugin
25
25
  from meerschaum.utils.venv import Venv
26
- from meerschaum.connectors import get_connector
26
+ from meerschaum.connectors import get_connector, Connector, make_connector
27
27
  from meerschaum.utils import get_pipes
28
28
  from meerschaum.utils.formatting import pprint
29
29
  from meerschaum._internal.docs import index as __doc__
@@ -49,4 +49,7 @@ __all__ = (
49
49
  "connectors",
50
50
  "plugins",
51
51
  "utils",
52
+ "SuccessTuple",
53
+ "Connector",
54
+ "make_connector",
52
55
  )
@@ -80,8 +80,9 @@ def parse_arguments(sysargs: List[str]) -> Dict[str, Any]:
80
80
 
81
81
  ### rebuild sysargs without sub_arguments
82
82
  filtered_sysargs = [
83
- word for i, word in enumerate(sysargs)
84
- if i not in sub_arg_indices
83
+ word
84
+ for i, word in enumerate(sysargs)
85
+ if i not in sub_arg_indices
85
86
  ]
86
87
 
87
88
  try:
@@ -99,7 +100,6 @@ def parse_arguments(sysargs: List[str]) -> Dict[str, Any]:
99
100
  except Exception as _e:
100
101
  args_dict['text'] = ' '.join(sysargs)
101
102
  args_dict[STATIC_CONFIG['system']['arguments']['failure_key']] = e
102
- unknown = []
103
103
 
104
104
  false_flags = [arg for arg, val in args_dict.items() if val is False]
105
105
  for arg in false_flags:
@@ -126,17 +126,26 @@ def parse_arguments(sysargs: List[str]) -> Dict[str, Any]:
126
126
 
127
127
  ### remove None (but not False) args
128
128
  none_args = []
129
+ none_args_keep = []
129
130
  for a, v in args_dict.items():
130
131
  if v is None:
131
132
  none_args.append(a)
133
+ elif v == 'None':
134
+ none_args_keep.append(a)
132
135
  for a in none_args:
133
136
  del args_dict[a]
137
+ for a in none_args_keep:
138
+ args_dict[a] = None
134
139
 
135
140
  ### location_key '[None]' or 'None' -> None
136
141
  if 'location_keys' in args_dict:
137
142
  args_dict['location_keys'] = [
138
- None if lk in ('[None]', 'None')
139
- else lk for lk in args_dict['location_keys']
143
+ (
144
+ None
145
+ if lk in ('[None]', 'None')
146
+ else lk
147
+ )
148
+ for lk in args_dict['location_keys']
140
149
  ]
141
150
 
142
151
  return parse_synonyms(args_dict)
@@ -145,7 +154,7 @@ def parse_arguments(sysargs: List[str]) -> Dict[str, Any]:
145
154
  def parse_line(line: str) -> Dict[str, Any]:
146
155
  """
147
156
  Parse a line of text into standard Meerschaum arguments.
148
-
157
+
149
158
  Parameters
150
159
  ----------
151
160
  line: str
@@ -165,12 +174,12 @@ def parse_line(line: str) -> Dict[str, Any]:
165
174
  try:
166
175
  return parse_arguments(shlex.split(line))
167
176
  except Exception as e:
168
- return {'action': [], 'text': line,}
177
+ return {'action': [], 'text': line}
169
178
 
170
179
 
171
180
  def parse_synonyms(
172
- args_dict: Dict[str, Any]
173
- ) -> Dict[str, Any]:
181
+ args_dict: Dict[str, Any]
182
+ ) -> Dict[str, Any]:
174
183
  """Check for synonyms (e.g. `async` = `True` -> `unblock` = `True`)"""
175
184
  if args_dict.get('async', None):
176
185
  args_dict['unblock'] = True
@@ -194,8 +203,8 @@ def parse_synonyms(
194
203
 
195
204
 
196
205
  def parse_dict_to_sysargs(
197
- args_dict : Dict[str, Any]
198
- ) -> List[str]:
206
+ args_dict: Dict[str, Any]
207
+ ) -> List[str]:
199
208
  """Revert an arguments dictionary back to a command line list."""
200
209
  from meerschaum._internal.arguments._parser import get_arguments_triggers
201
210
  sysargs = []
@@ -230,9 +239,9 @@ def parse_dict_to_sysargs(
230
239
 
231
240
 
232
241
  def remove_leading_action(
233
- action: List[str],
234
- _actions: Optional[Dict[str, Callable[[Any], SuccessTuple]]] = None,
235
- ) -> List[str]:
242
+ action: List[str],
243
+ _actions: Optional[Dict[str, Callable[[Any], SuccessTuple]]] = None,
244
+ ) -> List[str]:
236
245
  """
237
246
  Remove the leading strings in the `action` list.
238
247
 
@@ -37,12 +37,15 @@ class ArgumentParser(argparse.ArgumentParser):
37
37
  return result
38
38
 
39
39
 
40
- def parse_datetime(dt_str: str) -> datetime:
40
+ def parse_datetime(dt_str: str) -> Union[datetime, int, str]:
41
41
  """Parse a string into a datetime."""
42
42
  from meerschaum.utils.misc import is_int
43
43
  if is_int(dt_str):
44
44
  return int(dt_str)
45
45
 
46
+ if dt_str in ('None', '[None]'):
47
+ return 'None'
48
+
46
49
  from meerschaum.utils.packages import attempt_import
47
50
  dateutil_parser = attempt_import('dateutil.parser')
48
51
 
@@ -155,7 +158,6 @@ groups['actions'].add_argument(
155
158
  '-d', '--daemon', action='store_true',
156
159
  help = "Run an action as a background daemon."
157
160
  )
158
-
159
161
  groups['actions'].add_argument(
160
162
  '--rm', action='store_true', help="Delete a job once it has finished executing."
161
163
  )