dshellInterpreter 1.2.4.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.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/utils_interpreter.py +37 -5
  2. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellTokenizer/dshell_keywords.py +41 -40
  3. {dshellinterpreter-1.2.4.0/dshellInterpreter.egg-info → dshellinterpreter-1.2.5.0}/PKG-INFO +1 -1
  4. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0/dshellInterpreter.egg-info}/PKG-INFO +1 -1
  5. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/setup.py +1 -1
  6. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/__init__.py +0 -0
  7. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_channel.py +0 -0
  8. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_embed.py +0 -0
  9. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_file.py +0 -0
  10. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_interaction.py +0 -0
  11. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_member.py +0 -0
  12. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_message.py +0 -0
  13. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_pastbin.py +0 -0
  14. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_role.py +0 -0
  15. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/dshell_ui.py +0 -0
  16. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/__init__.py +0 -0
  17. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_embed.py +0 -0
  18. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_file.py +0 -0
  19. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_global.py +0 -0
  20. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_list.py +0 -0
  21. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_member.py +0 -0
  22. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_message.py +0 -0
  23. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_numbers.py +0 -0
  24. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_permissions.py +0 -0
  25. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_string.py +0 -0
  26. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_thread.py +0 -0
  27. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DISCORD_COMMANDS/utils/utils_type_validation.py +0 -0
  28. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/__init__.py +0 -0
  29. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/cached_messages.py +0 -0
  30. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_arguments.py +0 -0
  31. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_global_variables.py +0 -0
  32. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_interpreter.py +0 -0
  33. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_iterators.py +0 -0
  34. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/dshell_scope.py +0 -0
  35. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellInterpreteur/errors.py +0 -0
  36. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellParser/__init__.py +0 -0
  37. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellParser/ast_nodes.py +0 -0
  38. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellParser/dshell_parser.py +0 -0
  39. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellParser/errors.py +0 -0
  40. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellPreProcess/__init__.py +0 -0
  41. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellPreProcess/dshell_preprocess.py +0 -0
  42. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellTokenizer/__init__.py +0 -0
  43. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellTokenizer/dshell_token_type.py +0 -0
  44. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/DshellTokenizer/dshell_tokenizer.py +0 -0
  45. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/__init__.py +0 -0
  46. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/full_import.py +0 -0
  47. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/Dshell/regex_test.py +0 -0
  48. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/LICENSE +0 -0
  49. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/README.md +0 -0
  50. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/dshellInterpreter.egg-info/SOURCES.txt +0 -0
  51. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/dshellInterpreter.egg-info/dependency_links.txt +0 -0
  52. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/dshellInterpreter.egg-info/requires.txt +0 -0
  53. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/dshellInterpreter.egg-info/top_level.txt +0 -0
  54. {dshellinterpreter-1.2.4.0 → dshellinterpreter-1.2.5.0}/setup.cfg +0 -0
@@ -190,7 +190,7 @@ async def eval_expression(tokens: list[Token], interpreter: "DshellInterpreteur"
190
190
  for token in postfix:
191
191
 
192
192
  if token.type in DTT_DATA:
193
- stack.append(await interpreter.eval_data_token(token))
193
+ stack.append(token)
194
194
 
195
195
  elif token.type in (DTT.MATHS_OPERATOR, DTT.LOGIC_OPERATOR, DTT.LOGIC_WORD_OPERATOR):
196
196
  op = token.value
@@ -212,14 +212,46 @@ async def eval_expression(tokens: list[Token], interpreter: "DshellInterpreteur"
212
212
  raise SyntaxError(f"Too many operands for operator '{op}'")
213
213
 
214
214
  operands.reverse()
215
- result = dshell_operators[op][0](*operands) # call the operator function with the operands
216
215
 
217
- stack.append(result)
216
+ stack.append(await do_operation(op, operands, interpreter, dshell_operators))
218
217
 
219
218
  else:
220
219
  raise SyntaxError(f"Unexpected token type: {token.type} - {token.value}")
221
220
 
222
221
  if len(stack) != 1:
223
- 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))}'")
224
223
 
225
- 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.4.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.4.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.4.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.",