dekshell 0.1.95__tar.gz → 0.1.97__tar.gz

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 (38) hide show
  1. {dekshell-0.1.95 → dekshell-0.1.97}/PKG-INFO +1 -1
  2. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/contexts/properties.py +1 -0
  3. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/__init__.py +4 -1
  4. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/base/__init__.py +17 -7
  5. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/base/core.py +1 -1
  6. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/exec.py +2 -2
  7. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/function.py +8 -0
  8. dekshell-0.1.97/dekshell/core/markers/input.py +16 -0
  9. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/while_.py +9 -2
  10. {dekshell-0.1.95 → dekshell-0.1.97}/pyproject.toml +1 -1
  11. {dekshell-0.1.95 → dekshell-0.1.97}/README.md +0 -0
  12. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/__init__.py +0 -0
  13. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/click/__entry__.py +0 -0
  14. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/click/__init__.py +0 -0
  15. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/__init__.py +0 -0
  16. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/contexts/__init__.py +0 -0
  17. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/contexts/methods.py +0 -0
  18. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/comment.py +0 -0
  19. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/define.py +0 -0
  20. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/echo.py +0 -0
  21. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/empty.py +0 -0
  22. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/env.py +0 -0
  23. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/for_.py +0 -0
  24. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/if_.py +0 -0
  25. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/invoke.py +0 -0
  26. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/pip_.py +0 -0
  27. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/redirect.py +0 -0
  28. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/shell.py +0 -0
  29. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/timout.py +0 -0
  30. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/markers/var.py +0 -0
  31. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/plugin/__init__.py +0 -0
  32. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/core/redirect.py +0 -0
  33. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/utils/__init__.py +0 -0
  34. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/utils/beep.py +0 -0
  35. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/utils/cmd.py +0 -0
  36. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/utils/pkg.py +0 -0
  37. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/utils/serializer.py +0 -0
  38. {dekshell-0.1.95 → dekshell-0.1.97}/dekshell/utils/shell.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dekshell
3
- Version: 0.1.95
3
+ Version: 0.1.97
4
4
  Author-Email: sanzenwin <sanzenwin@gmail.com>
5
5
  License: MIT
6
6
  Requires-Python: >=3.8
@@ -20,6 +20,7 @@ def make_shell_properties(shell):
20
20
  'rf': f'{shell} rf',
21
21
  'rfc': f'{shell} rfc',
22
22
  'rs': f'{shell} rs',
23
+ 'ext': '.pysh',
23
24
  },
24
25
  }
25
26
 
@@ -14,6 +14,7 @@ from .echo import *
14
14
  from .pip_ import *
15
15
  from .shell import *
16
16
  from .redirect import *
17
+ from .input import *
17
18
  from .timout import *
18
19
  from .empty import *
19
20
 
@@ -23,14 +24,16 @@ def generate_markers(*args, **kwargs):
23
24
  *args,
24
25
  *get_markers_from_modules(**kwargs),
25
26
  ErrorEchoMarker, EchoNoWrapMarker, EchoMarker,
27
+ InputMarker,
26
28
  DelVarMarker,
27
29
  ExecLinesUpdateMarker, ExecLinesMarker, ExecMarker, ExecCmdcallLinesMarker, ExecCmdcallMarker,
28
30
  EnvShellMarker, EnvMarker,
29
31
  IfMarker, IfElifMarker, IfElseMarker,
30
- WhileMarker,
32
+ WhileMarker, WhileElseMarker,
31
33
  ForMarker, ForElseMarker,
32
34
  DefineMarker,
33
35
  GotoMarker, InvokeMarker,
36
+ RaiseMarker,
34
37
  FunctionMarker, CallMarker, ReturnMarker, EnvGlobalMarker, EnvNonlocalMarker,
35
38
  VarGlobalMarker, VarNonlocalMarker,
36
39
  EndMarker, BreakMarker, ContinueMarker,
@@ -90,6 +90,9 @@ class MarkerBase:
90
90
  def ret(self, value):
91
91
  raise QuitContextException(value)
92
92
 
93
+ def raise_(self, message):
94
+ raise RaiseException(message)
95
+
93
96
  def set_var(self, context, array, index, value):
94
97
  self.set_var_raw(context, self.get_item(array, index, self.var_name_anonymous), value)
95
98
 
@@ -291,7 +294,7 @@ class TransformerMarker(MarkerBase):
291
294
 
292
295
  def transform(self, parent):
293
296
  for target in self.targets:
294
- if target.is_type(*parent.final_branch_set):
297
+ if isinstance(target, tuple(parent.final_branch_set)):
295
298
  return target
296
299
  return self.targets[0]
297
300
 
@@ -302,13 +305,13 @@ class TransformerMarker(MarkerBase):
302
305
  records_target = set()
303
306
  for i, marker in enumerate(markers):
304
307
  match = marker.get_tag_match()
305
- if marker in records_markers:
308
+ if match in records_markers:
306
309
  records_markers[match].append(marker)
307
310
  else:
308
- records_markers[match] = []
311
+ records_markers[match] = [marker]
309
312
  if len(records_markers[match]) > 1:
310
313
  records_target.add(match)
311
- if marker not in records_index:
314
+ if match not in records_index:
312
315
  records_index[match] = i
313
316
  offset = 0
314
317
  for match in sorted(records_target, key=lambda x: records_index[x]):
@@ -321,11 +324,14 @@ class TransformerMarker(MarkerBase):
321
324
  class MarkerWithEnd(MarkerBase):
322
325
  tag_tail = EndMarker
323
326
 
324
- def get_inner_content(self, context, marker_node):
327
+ def get_inner_content(self, context, marker_node, sep='\n', translate=None):
325
328
  commands = []
326
329
  marker_node.walk(lambda node, depth: commands.extend([] if depth == 0 else [node.command]))
327
- text = '\n'.join(commands)
328
- return self.translate(context, text)
330
+ text = sep.join(commands)
331
+ if translate is None:
332
+ return self.translate(context, text)
333
+ else:
334
+ return self._translate(context, text) if translate else text
329
335
 
330
336
  def eval_codes(self, context, code):
331
337
  if not code:
@@ -382,3 +388,7 @@ class ExitException(ExceptionShell):
382
388
 
383
389
  class QuitContextException(ExceptionShell):
384
390
  pass
391
+
392
+
393
+ class RaiseException(ExceptionShell):
394
+ pass
@@ -134,7 +134,7 @@ class MarkerNode:
134
134
  return obj2str(walk(self))
135
135
 
136
136
  def is_type(self, *markers_cls):
137
- return isinstance(self.marker, tuple(markers_cls))
137
+ return isinstance(self.marker, markers_cls)
138
138
 
139
139
  def add_child(self, node):
140
140
  node.parent = self
@@ -16,7 +16,7 @@ class ExecLinesMarker(MarkerWithEnd, MarkerNoTranslator):
16
16
  tag_head = '=='
17
17
 
18
18
  def execute(self, context, command, marker_node, marker_set):
19
- code = self.get_inner_content(context, marker_node)
19
+ code = self.get_inner_content(context, marker_node, translate=False)
20
20
  self.eval_lines(context, code)
21
21
  return []
22
22
 
@@ -25,7 +25,7 @@ class ExecLinesUpdateMarker(MarkerWithEnd, MarkerNoTranslator):
25
25
  tag_head = '==='
26
26
 
27
27
  def execute(self, context, command, marker_node, marker_set):
28
- code = self.get_inner_content(context, marker_node)
28
+ code = self.get_inner_content(context, marker_node, translate=False)
29
29
  context.update_variables(self.eval_lines(context, code))
30
30
  return []
31
31
 
@@ -63,6 +63,14 @@ class ReturnMarker(MarkerNoTranslator):
63
63
  self.ret(self.eval_mixin(context, args[1]))
64
64
 
65
65
 
66
+ class RaiseMarker(MarkerBase):
67
+ tag_head = "raise"
68
+
69
+ def execute(self, context, command, marker_node, marker_set):
70
+ args = self.split_raw(command, 1, self.tag_head)
71
+ self.raise_(args[1])
72
+
73
+
66
74
  class VarGlobalMarker(MarkerBase):
67
75
  tag_head = "global"
68
76
 
@@ -0,0 +1,16 @@
1
+ import subprocess
2
+ from dektools.shell import shell_with_input
3
+ from .base import MarkerWithEnd, MarkerNoTranslator
4
+
5
+
6
+ class InputMarker(MarkerWithEnd, MarkerNoTranslator):
7
+ tag_head = 'input'
8
+
9
+ def execute(self, context, command, marker_node, marker_set):
10
+ command_text = self.get_inner_content(context, marker_node, sep='', translate=True).strip()
11
+ expression = self.split_raw(command, 1, self.tag_head)[1]
12
+ inputs = self.eval_mixin(context, expression)
13
+ rc = shell_with_input(command_text, inputs, env=context.environ_full())
14
+ if rc:
15
+ raise subprocess.CalledProcessError(rc, command_text)
16
+ return []
@@ -1,8 +1,13 @@
1
1
  from .base import MarkerWithEnd, BreakMarker, ContinueMarker, MarkerNoTranslator
2
2
 
3
3
 
4
+ class WhileElseMarker(MarkerWithEnd):
5
+ tag_head = "else"
6
+
7
+
4
8
  class WhileMarker(MarkerWithEnd, MarkerNoTranslator):
5
9
  tag_head = "while"
10
+ branch_set = {WhileElseMarker}
6
11
 
7
12
  def bubble_continue(self, context, marker_set, marker_node_self, marker_node_target):
8
13
  if marker_node_target.is_type(BreakMarker):
@@ -12,11 +17,13 @@ class WhileMarker(MarkerWithEnd, MarkerNoTranslator):
12
17
  return None
13
18
 
14
19
  def execute(self, context, command, marker_node, marker_set):
20
+ index_else = self.find_node(marker_node.children, True)
21
+
15
22
  result = self.get_condition_result(context, command)
16
23
  if result:
17
- return [*marker_node.children, marker_set.node_cls(ContinueMarker(), None, None, marker_node)]
24
+ return [*marker_node.children[:index_else], marker_set.node_cls(ContinueMarker(), None, None, marker_node)]
18
25
  else:
19
- return []
26
+ return marker_node.children[index_else:]
20
27
 
21
28
  def get_condition_result(self, context, command):
22
29
  expression = command.split(self.tag_head, 1)[-1].strip()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dekshell"
3
- version = "0.1.95"
3
+ version = "0.1.97"
4
4
  description = ""
5
5
  authors = [
6
6
  { name = "sanzenwin", email = "sanzenwin@gmail.com" },
File without changes