dshellInterpreter 1.2.3.0__tar.gz → 1.2.5.0__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 (54) hide show
  1. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/utils_interpreter.py +41 -7
  2. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellTokenizer/dshell_keywords.py +41 -40
  3. {dshellinterpreter-1.2.3.0/dshellInterpreter.egg-info → dshellinterpreter-1.2.5.0}/PKG-INFO +1 -1
  4. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0/dshellInterpreter.egg-info}/PKG-INFO +1 -1
  5. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/setup.py +1 -1
  6. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/__init__.py +0 -0
  7. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_channel.py +0 -0
  8. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_embed.py +0 -0
  9. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_file.py +0 -0
  10. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_interaction.py +0 -0
  11. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_member.py +0 -0
  12. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_message.py +0 -0
  13. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_pastbin.py +0 -0
  14. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_role.py +0 -0
  15. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_ui.py +0 -0
  16. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/__init__.py +0 -0
  17. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_embed.py +0 -0
  18. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_file.py +0 -0
  19. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_global.py +0 -0
  20. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_list.py +0 -0
  21. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_member.py +0 -0
  22. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_message.py +0 -0
  23. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_numbers.py +0 -0
  24. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_permissions.py +0 -0
  25. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_string.py +0 -0
  26. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_thread.py +0 -0
  27. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_type_validation.py +0 -0
  28. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/__init__.py +0 -0
  29. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/cached_messages.py +0 -0
  30. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_arguments.py +0 -0
  31. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_global_variables.py +0 -0
  32. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_interpreter.py +0 -0
  33. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_iterators.py +0 -0
  34. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_scope.py +0 -0
  35. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/errors.py +0 -0
  36. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellParser/__init__.py +0 -0
  37. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellParser/ast_nodes.py +0 -0
  38. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellParser/dshell_parser.py +0 -0
  39. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellParser/errors.py +0 -0
  40. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellPreProcess/__init__.py +0 -0
  41. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellPreProcess/dshell_preprocess.py +0 -0
  42. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellTokenizer/__init__.py +0 -0
  43. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellTokenizer/dshell_token_type.py +0 -0
  44. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellTokenizer/dshell_tokenizer.py +0 -0
  45. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/__init__.py +0 -0
  46. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/full_import.py +0 -0
  47. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/Dshell/regex_test.py +0 -0
  48. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/LICENSE +0 -0
  49. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/README.md +0 -0
  50. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/dshellInterpreter.egg-info/SOURCES.txt +0 -0
  51. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/dshellInterpreter.egg-info/dependency_links.txt +0 -0
  52. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/dshellInterpreter.egg-info/requires.txt +0 -0
  53. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/dshellInterpreter.egg-info/top_level.txt +0 -0
  54. {dshellinterpreter-1.2.3.0 → dshellinterpreter-1.2.5.0}/setup.cfg +0 -0
@@ -125,7 +125,7 @@ async def get_params(node: ParamNode, interpreter: "DshellInterpreteur") -> dict
125
125
 
126
126
  if tmp_tokens and len(tmp_tokens[0]) > 0:
127
127
  for i in range(old_index_order, index_order):
128
- param_node_arguments_dict[param_node_arguments_order[i][0]] = tmp_tokens[0][i]
128
+ param_node_arguments_dict[param_node_arguments_order[i][0]] = await interpreter.eval_data_token(tmp_tokens[0][i])
129
129
 
130
130
  # traitement des paramètres à tokeniser à la chaine
131
131
  elif param_node_arguments_order[index_order][1] == DTT.PARAMETERS:
@@ -140,7 +140,9 @@ async def get_params(node: ParamNode, interpreter: "DshellInterpreteur") -> dict
140
140
  tmp_tokens = DshellTokenizer(tmp_parameter).start()
141
141
 
142
142
  if tmp_tokens and len(tmp_tokens[0]) > 0:
143
- param_node_arguments_dict[param_node_arguments_order[old_index_order][0]] = ListNode(tmp_tokens[0])
143
+ param_node_arguments_dict[param_node_arguments_order[old_index_order][0]] = ListNode(
144
+ [await interpreter.eval_data_token(i) for i in tmp_tokens[0]]
145
+ )
144
146
 
145
147
  # traitement des paramètres à considéré comme une chaine de caractère à la chaine
146
148
  elif param_node_arguments_order[index_order][1] == DTT.STR_PARAMETER:
@@ -188,7 +190,7 @@ async def eval_expression(tokens: list[Token], interpreter: "DshellInterpreteur"
188
190
  for token in postfix:
189
191
 
190
192
  if token.type in DTT_DATA:
191
- stack.append(await interpreter.eval_data_token(token))
193
+ stack.append(token)
192
194
 
193
195
  elif token.type in (DTT.MATHS_OPERATOR, DTT.LOGIC_OPERATOR, DTT.LOGIC_WORD_OPERATOR):
194
196
  op = token.value
@@ -210,14 +212,46 @@ async def eval_expression(tokens: list[Token], interpreter: "DshellInterpreteur"
210
212
  raise SyntaxError(f"Too many operands for operator '{op}'")
211
213
 
212
214
  operands.reverse()
213
- result = dshell_operators[op][0](*operands) # call the operator function with the operands
214
215
 
215
- stack.append(result)
216
+ stack.append(await do_operation(op, operands, interpreter, dshell_operators))
216
217
 
217
218
  else:
218
219
  raise SyntaxError(f"Unexpected token type: {token.type} - {token.value}")
219
220
 
220
221
  if len(stack) != 1:
221
- raise SyntaxError(f"Invalid expression: missing operators or operands in expression <{' '.join((i.value for i in tokens))}>")
222
+ raise SyntaxError(f"Invalid expression: missing operators or operands in expression '{' '.join((str(i.value) for i in tokens))}'")
222
223
 
223
- return stack[0]
224
+ result = stack[0]
225
+ if isinstance(result, Token):
226
+ result = await interpreter.eval_data_token(result)
227
+
228
+ return result
229
+
230
+ async def do_operation(operator: str,
231
+ operands: list[Token],
232
+ interpreter: "DshellInterpreteur",
233
+ all_operators: dict) -> Any:
234
+ """
235
+ Do all convertions and operations
236
+ :param operator:
237
+ :param operands:
238
+ :param interpreter:
239
+ :param all_operators: is dshell_operators dictionnary
240
+ :return:
241
+ """
242
+
243
+ i = 0
244
+ if (nbr_operand_to_translate := all_operators[operator][4]) is not None:
245
+ while i != nbr_operand_to_translate and i < len(operands):
246
+ operands[i] = await interpreter.eval_data_token(operands[i])
247
+ i += 1
248
+ else:
249
+ while i < len(operands):
250
+ operands[i] = await interpreter.eval_data_token(operands[i])
251
+ i += 1
252
+
253
+ result = all_operators[operator][0](*operands)
254
+ if isinstance(result, Token):
255
+ result = await interpreter.eval_data_token(result)
256
+
257
+ return result
@@ -167,61 +167,62 @@ dshell_commands: dict[str, Callable] = {
167
167
  }
168
168
 
169
169
  """
170
- Tuple format: (function, precedence, number of operands min, number of operands max)
170
+ Tuple format: (function, precedence, number of operands min, number of operands max,
171
+ Optional[index to translate into value])
171
172
  """
172
173
 
173
- dshell_mathematical_operators: dict[str, tuple[Callable, int, int, int]] = {
174
-
175
- r"++": (lambda a: a + 1, 6, 1, 1),
176
- r"--": (lambda a: a - 1, 6, 1, 1),
177
- r"**": (lambda a, b: a ** b, 8, 2, 2),
178
- r"//": (lambda a, b: a // b, 7, 2, 2),
179
- r">>": (lambda a, b: a >> b, 5, 2, 2),
180
- r"<<": (lambda a, b: a << b, 5, 2, 2),
181
- r"^": (lambda a, b: a ^ b, 5, 2, 2),
182
- r"/": (lambda a, b: a / b, 7, 2, 2),
183
- r"*": (lambda a, b: a * b, 7, 2, 2),
184
- r"%": (lambda a, b: a % b, 7, 2, 2),
185
- r"-": (lambda a, b=None: a-b if b is not None else -a, 6, 1, 2),
186
- r"+": (lambda a, b: a + b, 6, 2, 2),
174
+ dshell_mathematical_operators: dict[str, tuple[Callable, int, int, int, Optional[int]]] = {
175
+
176
+ r"++": (lambda a: a + 1, 6, 1, 1, None),
177
+ r"--": (lambda a: a - 1, 6, 1, 1, None),
178
+ r"**": (lambda a, b: a ** b, 8, 2, 2, None),
179
+ r"//": (lambda a, b: a // b, 7, 2, 2, None),
180
+ r">>": (lambda a, b: a >> b, 5, 2, 2, None),
181
+ r"<<": (lambda a, b: a << b, 5, 2, 2, None),
182
+ r"^": (lambda a, b: a ^ b, 5, 2, 2, None),
183
+ r"/": (lambda a, b: a / b, 7, 2, 2, None),
184
+ r"*": (lambda a, b: a * b, 7, 2, 2, None),
185
+ r"%": (lambda a, b: a % b, 7, 2, 2, None),
186
+ r"-": (lambda a, b=None: a-b if b is not None else -a, 6, 1, 2, None),
187
+ r"+": (lambda a, b: a + b, 6, 2, 2, None),
187
188
  r"..": (lambda a, b: (IntIterator(
188
189
  min_iterator=IntNode(a),
189
190
  max_iterator=IntNode(b),
190
191
  step= IntNode(1 if a <= b else -1))
191
- ), 5, 2, 2)
192
+ ), 5, 2, 2, None)
192
193
  # warning: ambiguity between unary and binary to be handled in your parser
193
194
 
194
195
  }
195
196
 
196
- dshell_logical_word_operators: dict[str, tuple[Callable, int, int, int]] = {
197
- r"and": (lambda a, b: bool(a and b), 2, 2, 2),
198
- r"or": (lambda a, b: bool(a or b), 1, 2, 2),
199
- r"not": (lambda a: not a, 3, 1, 1),
200
- r"in": (lambda a, b: a in b, 4, 2, 2),
197
+ dshell_logical_word_operators: dict[str, tuple[Callable, int, int, int, Optional[int]]] = {
198
+ r"and": (lambda a, b: bool(a and b), 2, 2, 2, None),
199
+ r"or": (lambda a, b: bool(a or b), 1, 2, 2, None),
200
+ r"not": (lambda a: not a, 3, 1, 1, None),
201
+ r"in": (lambda a, b: a in b, 4, 2, 2, None),
201
202
  }
202
203
 
203
- dshell_logical_operators: dict[str, tuple[Callable, int, int, int]] = {
204
-
205
- r"==": (lambda a, b: a == b, 4, 2, 2),
206
- r"<=": (lambda a, b: a <= b, 4, 2, 2),
207
- r"=<": (lambda a, b: a <= b, 4, 2, 2),
208
- r"!=": (lambda a, b: a != b, 4, 2, 2),
209
- r"=!": (lambda a, b: a != b, 4, 2, 2),
210
- r">=": (lambda a, b: a >= b, 4, 2, 2),
211
- r"=>": (lambda a, b: a >= b, 4, 2, 2),
212
- r"&&": (lambda a, b: a and b, 2, 2, 2),
213
- r"||": (lambda a, b: a or b, 1, 2, 2),
214
- r"&": (lambda a, b: a & b, 2, 2, 2),
215
- r"|": (lambda a, b: a | b, 1, 2, 2),
216
- r"=": (lambda a, b: a == b, 4, 2, 2),
217
- r"<": (lambda a, b: a < b, 4, 2, 2),
218
- r">": (lambda a, b: a > b, 4, 2, 2),
219
- r"!": (lambda a: not a, 3, 1, 1),
220
- r"?": (lambda condition, first_choice, second_choice: first_choice if condition else second_choice, 1, 3, 3),
204
+ dshell_logical_operators: dict[str, tuple[Callable, int, int, int, Optional[int]]] = {
205
+
206
+ r"==": (lambda a, b: a == b, 4, 2, 2, None),
207
+ r"<=": (lambda a, b: a <= b, 4, 2, 2, None),
208
+ r"=<": (lambda a, b: a <= b, 4, 2, 2, None),
209
+ r"!=": (lambda a, b: a != b, 4, 2, 2, None),
210
+ r"=!": (lambda a, b: a != b, 4, 2, 2, None),
211
+ r">=": (lambda a, b: a >= b, 4, 2, 2, None),
212
+ r"=>": (lambda a, b: a >= b, 4, 2, 2, None),
213
+ r"&&": (lambda a, b: a and b, 2, 2, 2, None),
214
+ r"||": (lambda a, b: a or b, 1, 2, 2, None),
215
+ r"&": (lambda a, b: a & b, 2, 2, 2, None),
216
+ r"|": (lambda a, b: a | b, 1, 2, 2, None),
217
+ r"=": (lambda a, b: a == b, 4, 2, 2, None),
218
+ r"<": (lambda a, b: a < b, 4, 2, 2, None),
219
+ r">": (lambda a, b: a > b, 4, 2, 2, None),
220
+ r"!": (lambda a: not a, 3, 1, 1, None),
221
+ r"?": (lambda condition, first, second: first if condition else second, 1, 3, 3, 1),
221
222
  #r".": (lambda target, attribute: target.call(attribute) if hasattr(target, attribute) and hasattr(target, 'call') else None, 9, 2, 2), # attribute access operator
222
223
 
223
224
  }
224
225
 
225
- dshell_operators: dict[str, tuple[Callable, int, int]] = dshell_logical_operators.copy()
226
+ dshell_operators: dict[str, tuple[Callable, int, int, int, Optional[int]]] = dshell_logical_operators.copy()
226
227
  dshell_operators.update(dshell_logical_word_operators)
227
228
  dshell_operators.update(dshell_mathematical_operators)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dshellInterpreter
3
- Version: 1.2.3.0
3
+ Version: 1.2.5.0
4
4
  Summary: A Discord bot interpreter for creating custom commands and automations.
5
5
  Home-page: https://github.com/BOXERRMD/Dshell_Interpreter
6
6
  Author: Chronos
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dshellInterpreter
3
- Version: 1.2.3.0
3
+ Version: 1.2.5.0
4
4
  Summary: A Discord bot interpreter for creating custom commands and automations.
5
5
  Home-page: https://github.com/BOXERRMD/Dshell_Interpreter
6
6
  Author: Chronos
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
5
5
 
6
6
  setup(
7
7
  name="dshellInterpreter",
8
- version="1.2.3.0",
8
+ version="1.2.5.0",
9
9
  author="Chronos",
10
10
  author_email="vagabonwalybi@gmail.com",
11
11
  description="A Discord bot interpreter for creating custom commands and automations.",