dekshell 0.2.25__py3-none-any.whl → 0.2.27__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.
dekshell/core/__init__.py CHANGED
@@ -37,11 +37,11 @@ def shell_command_file(filepath, **kwargs):
37
37
  filepath = normal_path(filepath, unix=True)
38
38
  with codecs.open(filepath, encoding='utf-8') as f:
39
39
  kwargs['source'] = dict(desc=filepath)
40
- kwargs['context'] = (kwargs.get('context') or {}) | dict(
40
+ kwargs['context'] = {**(kwargs.get('context') or {}), **dict(
41
41
  fp=filepath,
42
42
  fpp=os.path.dirname(filepath),
43
43
  fpy=seek_py_module_path(filepath),
44
- )
44
+ )}
45
45
  return shell_command_batch(f.read(), **kwargs)
46
46
 
47
47
 
@@ -56,9 +56,10 @@ default_configs = {
56
56
  'descper': dict(desc_begin_per=True, desc_took_per=True),
57
57
  'source': lambda src: dict(source=dict(desc=src))
58
58
  }
59
- default_configs |= {
60
- 'notify': default_configs['beep'] | default_configs['deschead'],
61
- 'notifyper': default_configs['beep'] | default_configs['deschead'] | default_configs['descper'],
59
+ default_configs = {
60
+ **default_configs,
61
+ 'notify': {**default_configs['beep'], **default_configs['deschead']},
62
+ 'notifyper': {**default_configs['beep'], **default_configs['deschead'], **default_configs['descper']},
62
63
  }
63
64
 
64
65
 
@@ -114,7 +115,7 @@ def shell_command_batch_core(
114
115
  generate_markers(*(marker or []), **(plugin_kwargs or {})),
115
116
  shell_exec, shell_cmd
116
117
  )
117
- context_final = get_all_context() | (context or {})
118
+ context_final = {**get_all_context(), **(context or {})}
118
119
  tz = get_tz(tz)
119
120
  ts_begin = time.time()
120
121
  commands, ln = _get_commands(commands)
@@ -217,9 +217,9 @@ default_methods = {
217
217
  'io': _io,
218
218
  'reduce': reduce,
219
219
  'chain': chain,
220
- 'echo': lambda *x, **y: print(*x, **dict(flush=True) | y),
221
- 'echos': lambda *x, **y: print(*x, **dict(end='', flush=True) | y),
222
- 'echox': lambda *x, **y: print(*x, **dict(file=sys.stderr, flush=True) | y),
220
+ 'echo': lambda *x, **y: print(*x, **{**dict(flush=True), **y}),
221
+ 'echos': lambda *x, **y: print(*x, **{**dict(end='', flush=True), **y}),
222
+ 'echox': lambda *x, **y: print(*x, **{**dict(file=sys.stderr, flush=True), **y}),
223
223
  'pprint': pprint,
224
224
  'o2s': obj2str,
225
225
  'now': now,
@@ -39,7 +39,7 @@ def generate_markers(*args, **kwargs):
39
39
  FunctionMarker, CallMarker, ReturnMarker, EnvGlobalMarker, EnvNonlocalMarker,
40
40
  VarGlobalMarker, VarNonlocalMarker,
41
41
  EndMarker, BreakMarker, ContinueMarker,
42
- CommentMultiLineMarker, CommentMarker, CommentShebangMarker, CommentConfigMarker,
42
+ CommentMultiLineMarker, CommentMarker, CommentShebangMarker, CommentConfigMarker, TextContentMarker,
43
43
  PipMarker,
44
44
  CommandsMarker,
45
45
  RedirectMarker, ShiftMarker,
@@ -74,6 +74,9 @@ class MarkerBase:
74
74
  return bool(re.match(r, command))
75
75
  return False
76
76
 
77
+ def text_content(self, command):
78
+ return command
79
+
77
80
  def transform(self, parent):
78
81
  return self
79
82
 
@@ -235,7 +238,7 @@ class MarkerBase:
235
238
  def eval(context, s, v=None):
236
239
  if not s:
237
240
  return None
238
- return eval(s, context.variables_full() | (v or {}))
241
+ return eval(s, {**context.variables_full(), **(v or {})})
239
242
 
240
243
  @classmethod
241
244
  def eval_mixin(cls, context, expression, translate=True):
@@ -278,7 +281,7 @@ class MarkerBase:
278
281
 
279
282
  @staticmethod
280
283
  def eval_lines(context, s, v=None):
281
- globals_ = context.variables_full() | (v or {})
284
+ globals_ = {**context.variables_full(), **(v or {})}
282
285
  locals_ = {}
283
286
  exec(s, globals_, locals_)
284
287
  return locals_
@@ -354,10 +357,13 @@ class MarkerWithEnd(MarkerBase):
354
357
  tag_tail = EndMarker
355
358
 
356
359
  def get_inner_content(self, context, marker_node, sep='\n', translate=None):
360
+ def walk(node, depth):
361
+ if depth != 0:
362
+ commands.append(self.translate_case(context, node.text_content, translate))
363
+
357
364
  commands = []
358
- marker_node.walk(lambda node, depth: commands.extend([] if depth == 0 else [node.command]))
359
- text = sep.join(commands)
360
- return self.translate_case(context, text, translate)
365
+ marker_node.walk(walk)
366
+ return sep.join(commands)
361
367
 
362
368
  def eval_codes(self, context, code):
363
369
  if not code:
@@ -402,7 +408,7 @@ class MarkerShellBase(MarkerBase):
402
408
 
403
409
  @classmethod
404
410
  def execute_core(cls, context, command, marker_node, marker_set, kwargs=None):
405
- kwargs = (marker_node.payload or {}) | (kwargs or {})
411
+ kwargs = {**(marker_node.payload or {}), **(kwargs or {})}
406
412
  return marker_set.shell_cmd(command, cls.shell_cls(kwargs), env=context.environ_full())
407
413
 
408
414
 
@@ -1,9 +1,9 @@
1
1
  import os
2
2
  import sys
3
- from types import NoneType
4
3
  from dektools.output import obj2str
5
4
  from dektools.str import hex_random
6
5
  from dektools.dict import MapChainContext
6
+ from dektools.typing import NoneType
7
7
  from . import MarkerBase, TransformerMarker, ExitException, QuitContextException
8
8
 
9
9
 
@@ -142,6 +142,10 @@ class MarkerNode:
142
142
  def __repr__(self):
143
143
  return f'Node({self.marker.__class__.__name__},line={self.line_number})'
144
144
 
145
+ @property
146
+ def text_content(self):
147
+ return self.marker.text_content(self.command)
148
+
145
149
  @property
146
150
  def debug_info(self):
147
151
  def walk(node):
@@ -350,6 +354,6 @@ class MarkerSet:
350
354
  try:
351
355
  root = self.generate_tree(commands, ln)
352
356
  return root.execute(
353
- self.context_cls().update_variables((context or {}) | dict(__inner_marker_set__=self)), self)
357
+ self.context_cls().update_variables({**(context or {}), **dict(__inner_marker_set__=self)}), self)
354
358
  except ExitException:
355
359
  pass
@@ -9,7 +9,7 @@ class ShellCommand:
9
9
  self.kwargs = kwargs
10
10
 
11
11
  def __call__(self, *args, **kwargs):
12
- kwargs = kwargs | self.kwargs
12
+ kwargs = {**kwargs, **self.kwargs}
13
13
  return self.shell(*args, **kwargs)
14
14
 
15
15
  def shell(self, *args, **kwargs):
@@ -33,3 +33,10 @@ class CommentConfigMarker(MarkerCommentBase):
33
33
  if end == -1:
34
34
  end = None
35
35
  return content[begin:end].strip()
36
+
37
+
38
+ class TextContentMarker(MarkerCommentBase):
39
+ tag_head = "/"
40
+
41
+ def text_content(self, command):
42
+ return command[len(self.tag_head):]
@@ -42,16 +42,18 @@ class AssignRawStrMarker(AssignStrMarker, MarkerNoTranslator):
42
42
 
43
43
  class AssignMultiLineStrMarker(MarkerAssignBase, MarkerWithEnd):
44
44
  tag_head_re_args = '::'
45
+ _translate_type = None
45
46
 
46
47
  def execute(self, context, command, marker_node, marker_set):
47
- text = self.get_inner_content(context, marker_node)
48
- args = self.split_raw(command, 1, self.tag_head_re_args)
49
- self.set_var(context, args, 0, text)
48
+ text = self.get_inner_content(context, marker_node, translate=self._translate_type)
49
+ var_name = command[:re.search(self.tag_head_re_args, command).span()[0]]
50
+ self.set_var_raw(context, var_name.strip(), text)
50
51
  return []
51
52
 
52
53
 
53
54
  class AssignMultiLineRawStrMarker(AssignMultiLineStrMarker, MarkerNoTranslator):
54
55
  tag_head_re_args = re.escape(r'\::')
56
+ _translate_type = False
55
57
 
56
58
 
57
59
  class AssignEvalMarker(MarkerAssignValueBase, MarkerNoTranslator):
dekshell/utils/cmd.py CHANGED
@@ -34,12 +34,13 @@ def ak2cmd(args=None, kwargs=None):
34
34
 
35
35
 
36
36
  def pack_context(args, kwargs):
37
- return {f'{key_arg}{i}': arg for i, arg in enumerate(args)} | {key_args: tuple(args), key_kwargs: kwargs} | kwargs
37
+ return {
38
+ **{f'{key_arg}{i}': arg for i, arg in enumerate(args)}, **{key_args: tuple(args), key_kwargs: kwargs}, **kwargs}
38
39
 
39
40
 
40
41
  def pack_context_argv():
41
- return {f"{key_argv}{i}": x for i, x in enumerate(sys.argv)} | {key_argv: sys.argv}
42
+ return {**{f"{key_argv}{i}": x for i, x in enumerate(sys.argv)}, **{key_argv: sys.argv}}
42
43
 
43
44
 
44
45
  def pack_context_full(args=None, kwargs=None):
45
- return pack_context(args or [], kwargs or {}) | pack_context_argv()
46
+ return {**pack_context(args or [], kwargs or {}), **pack_context_argv()}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dekshell
3
- Version: 0.2.25
3
+ Version: 0.2.27
4
4
  Author-Email: sanzenwin <sanzenwin@gmail.com>
5
5
  License: MIT
6
6
  Requires-Python: >=3.8
@@ -1,19 +1,19 @@
1
- dekshell-0.2.25.dist-info/METADATA,sha256=UFqA_plZ8cNmlxdtBwbPzo7pnm2a8FZ91rk5IyuUfHg,573
2
- dekshell-0.2.25.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
- dekshell-0.2.25.dist-info/entry_points.txt,sha256=d-kbfULiUTZWIBBsrQF3J_-wESncF-4K2rwHT08grlI,75
1
+ dekshell-0.2.27.dist-info/METADATA,sha256=4g1SAFNRqiCj9b1SaNNDVnY2sKGDALxg3jXW3Zy45io,573
2
+ dekshell-0.2.27.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
+ dekshell-0.2.27.dist-info/entry_points.txt,sha256=d-kbfULiUTZWIBBsrQF3J_-wESncF-4K2rwHT08grlI,75
4
4
  dekshell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  dekshell/click/__entry__.py,sha256=CMuxUzXoEe4TcHFZwv-MNFwHnu1HSZCDpXFpqQ814uM,42
6
6
  dekshell/click/__init__.py,sha256=rFzB_exzPQaIcbbms5PdHAU3NGdl2MBaYbq9v7g7BOI,1870
7
- dekshell/core/__init__.py,sha256=w-IeR-tO61Mv4ubZyw9LvyagudyD8SXH0YD3yKApNXk,5405
7
+ dekshell/core/__init__.py,sha256=7d3AjVUGIjXIXRYYiJ03rz5ZONTTojmGfgwpjGmKqtU,5448
8
8
  dekshell/core/contexts/__init__.py,sha256=ynsfv37azOKfI2UKd0iPl2M6iBW-k5cb1BqSLOWuJpI,482
9
- dekshell/core/contexts/methods.py,sha256=7z2c0kHY5ktMiMje4fCueAHWhl4sWsjQVivSD8OSNaQ,9707
9
+ dekshell/core/contexts/methods.py,sha256=ksoOgBHDRM6uiGHw3ubCk4x7ExJKvJ6H3eGhaM-SNDE,9722
10
10
  dekshell/core/contexts/properties.py,sha256=esr51c6wDTDsuFXF2uj7WfyIGSq9H0dzqDqWzeMTNQE,2382
11
- dekshell/core/markers/__init__.py,sha256=_HJsxjjsyYbL7Pj6jhoeJ1WJI92qwCbdl-BKvQcGHlA,1949
12
- dekshell/core/markers/base/__init__.py,sha256=DDYlAIiVwmXCv4PiH042FRTwxn6Wxdnt0PsV_BSbYaY,13729
13
- dekshell/core/markers/base/core.py,sha256=ztB28fDPeqUkXCHchxjU2JO7R1klp_iUj2d6e8IlGCA,11567
14
- dekshell/core/markers/base/shell.py,sha256=DhaekMMTuABYP4GyZA05eejFfgxb1lQBwI88dlFv90E,479
11
+ dekshell/core/markers/__init__.py,sha256=yRQazZ1dxMltFao_RQnDnawSnQcjN_4B930MjJhaZ40,1968
12
+ dekshell/core/markers/base/__init__.py,sha256=mrOgC5glSG60NMpflSi5mb4bXTmDgv2i-ZYUHCef2Nw,13826
13
+ dekshell/core/markers/base/core.py,sha256=InsUA3md2gC6GyXQsvARfeNTrfbVD3gGOYxTM8VqqPA,11679
14
+ dekshell/core/markers/base/shell.py,sha256=fiFsTUDI8pSDDUCk834OI4ajri2qNWFJkLVhmUk2uAs,484
15
15
  dekshell/core/markers/commands.py,sha256=mDRj4dSfKbDaZ_ts4lPXd6wftvGFI4VKkRoIzxV7otA,1696
16
- dekshell/core/markers/comment.py,sha256=28iccgLs_0bRdXLhHyQR2I_kzlWdeMSqqNUFW-2vkes,818
16
+ dekshell/core/markers/comment.py,sha256=U1U3Xc4-giTqSEAPa4E_DmilZM9hs9zG-PCJ9nn4y5U,965
17
17
  dekshell/core/markers/define.py,sha256=LpMSfz9ziXq2aFJ6oMpUFFo93TpBx7GxKYNzCeht4fQ,516
18
18
  dekshell/core/markers/echo.py,sha256=1H61qQbY9tZnrKsdTI_shTmDY5ZaSGipDuBSRptAuZw,660
19
19
  dekshell/core/markers/empty.py,sha256=pWKsHlrp6uXWU6blqOs0IgN_3kYm1OmDQiKGPERabAo,79
@@ -27,14 +27,14 @@ dekshell/core/markers/invoke.py,sha256=To_U_FscoCbf7osvjC5MQTk2gjH5Mu_-06Kb22YQP
27
27
  dekshell/core/markers/pip_.py,sha256=mxXa_oqcrk4Qz-HvhlkMoirsl-SbM9Fz610leNqP1o0,832
28
28
  dekshell/core/markers/redirect.py,sha256=3vfkRQ2tnQ6rSGGn7csgUlpDi0s2ep5X7JU7NVvo0eI,1984
29
29
  dekshell/core/markers/shell.py,sha256=43BDAAzMdmgZmemkW5buh_w4LL1GDGw-s9fNZo6vhag,1929
30
- dekshell/core/markers/var.py,sha256=_7Z4gMxm63Q0eVgg71hFSy1nGUz7Tf5Kp02ek16c3Cc,5043
30
+ dekshell/core/markers/var.py,sha256=hGz2Gn6kjU563fPEjqBWhlbXGS_Oeg_az0ZRRjX2Dpo,5159
31
31
  dekshell/core/markers/while_.py,sha256=e7lI5jsIM-qxNHMY_wUyCMvvesdXQibR5Ez2jNO9csc,1195
32
32
  dekshell/core/plugin/__init__.py,sha256=jAB_KnnHJsyJR_zIfBU_HNLngyhcyyqVv05PdlNZtF8,428
33
33
  dekshell/core/redirect.py,sha256=6YCJpG0TkQ4WMt7LBtDD_W1T-C-QkLtGRQw0S60qe54,1058
34
34
  dekshell/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  dekshell/utils/beep.py,sha256=teuQgHbWDr8BD1xCJ4Pt79X6N1-eq1tTlyGunK6wBIM,120
36
- dekshell/utils/cmd.py,sha256=FfWNRRRdiiTs3xoXvaAyZ-3OzsWFRnd3m5k6sIexrhc,1209
36
+ dekshell/utils/cmd.py,sha256=A0lEixQ7Ui0UxmeuymniyqCZXss9qQdX1C0COM7EEkQ,1234
37
37
  dekshell/utils/pkg.py,sha256=TgYqRqawoJfjkxt6UAHnp9ttmpjuHiWRFbqxADOS1VE,1337
38
38
  dekshell/utils/serializer.py,sha256=aIdF2Wzo-qHmIshv46jn1XD0X66vQ1JFdU-g3ZFbH2w,386
39
39
  dekshell/utils/shell.py,sha256=0NoA2-SOOMinbmZZipwzL-npBbzPOdWEfdPVYqq5G5g,92
40
- dekshell-0.2.25.dist-info/RECORD,,
40
+ dekshell-0.2.27.dist-info/RECORD,,