dshellInterpreter 1.2.0.12__tar.gz → 1.2.0.14__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 (53) hide show
  1. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/dshell_file.py +1 -2
  2. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_global.py +13 -1
  3. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellParser/ast_nodes.py +54 -45
  4. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellParser/dshell_parser.py +1 -9
  5. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellTokenizer/dshell_keywords.py +1 -0
  6. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/full_import.py +1 -0
  7. {dshellinterpreter-1.2.0.12/dshellInterpreter.egg-info → dshellinterpreter-1.2.0.14}/PKG-INFO +1 -1
  8. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14/dshellInterpreter.egg-info}/PKG-INFO +1 -1
  9. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/setup.py +1 -1
  10. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/__init__.py +0 -0
  11. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/dshell_channel.py +0 -0
  12. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/dshell_embed.py +0 -0
  13. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/dshell_interaction.py +0 -0
  14. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/dshell_member.py +0 -0
  15. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/dshell_message.py +0 -0
  16. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/dshell_pastbin.py +0 -0
  17. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/dshell_role.py +0 -0
  18. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/dshell_ui.py +0 -0
  19. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/__init__.py +0 -0
  20. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_embed.py +0 -0
  21. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_file.py +0 -0
  22. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_list.py +0 -0
  23. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_member.py +0 -0
  24. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_message.py +0 -0
  25. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_numbers.py +0 -0
  26. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_permissions.py +0 -0
  27. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_string.py +0 -0
  28. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_thread.py +0 -0
  29. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DISCORD_COMMANDS/utils/utils_type_validation.py +0 -0
  30. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellInterpreteur/__init__.py +0 -0
  31. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellInterpreteur/cached_messages.py +0 -0
  32. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellInterpreteur/dshell_arguments.py +0 -0
  33. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellInterpreteur/dshell_global_variables.py +0 -0
  34. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellInterpreteur/dshell_interpreter.py +0 -0
  35. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellInterpreteur/dshell_scope.py +0 -0
  36. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellInterpreteur/errors.py +0 -0
  37. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellInterpreteur/utils_interpreter.py +0 -0
  38. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellParser/__init__.py +0 -0
  39. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellParser/errors.py +0 -0
  40. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellPreProcess/__init__.py +0 -0
  41. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellPreProcess/dshell_preprocess.py +0 -0
  42. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellTokenizer/__init__.py +0 -0
  43. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellTokenizer/dshell_token_type.py +0 -0
  44. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/DshellTokenizer/dshell_tokenizer.py +0 -0
  45. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/__init__.py +0 -0
  46. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/Dshell/regex_test.py +0 -0
  47. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/LICENSE +0 -0
  48. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/README.md +0 -0
  49. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/dshellInterpreter.egg-info/SOURCES.txt +0 -0
  50. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/dshellInterpreter.egg-info/dependency_links.txt +0 -0
  51. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/dshellInterpreter.egg-info/requires.txt +0 -0
  52. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/dshellInterpreter.egg-info/top_level.txt +0 -0
  53. {dshellinterpreter-1.2.0.12 → dshellinterpreter-1.2.0.14}/setup.cfg +0 -0
@@ -50,7 +50,7 @@ async def dshell_read_file(ctx: Message, file: FileNode) -> StrNode:
50
50
  _CMD = "rf"
51
51
  _validate_required_file_node(file, 'file', _CMD)
52
52
 
53
- return StrNode(file.read())
53
+ return file.read()
54
54
 
55
55
  async def dshell_stream_file(ctx: Message, file: FileNode, separator: Optional[StrNode] = None) -> FileStreamNode:
56
56
  """
@@ -70,7 +70,6 @@ async def dshell_stream_file(ctx: Message, file: FileNode, separator: Optional[S
70
70
 
71
71
  return file.stream(separator)
72
72
 
73
-
74
73
  async def dshell_write_file(ctx: Message,
75
74
  message: StrNode,
76
75
  append: BoolNode = BoolNode(False),
@@ -1,4 +1,5 @@
1
1
  __all__ = [
2
+ "utils_get_size",
2
3
  "utils_make_mention",
3
4
  "utils_len",
4
5
  "utils_random",
@@ -25,7 +26,8 @@ from Dshell.full_import import (Message,
25
26
  ForumChannel,
26
27
  Thread,
27
28
  Colour,
28
- get)
29
+ get,
30
+ getsizeof)
29
31
 
30
32
  from Dshell.full_import import (random,
31
33
  choice)
@@ -47,6 +49,16 @@ class DiscordType(StrEnum):
47
49
  THREAD = "thread"
48
50
  UNKNOWN = "unknown"
49
51
 
52
+ async def utils_get_size(ctx: Message, target: Any):
53
+ """
54
+ Récupère la taille de l'objet
55
+ :param ctx:
56
+ :param target:
57
+ :return:
58
+ """
59
+
60
+ return IntNode(getsizeof(target))
61
+
50
62
  def utils_what_discord_type_is(ctx: Union[Message, Guild], value: IntNode) -> tuple[StrNode, Union[Member, Role, TextChannel, VoiceChannel, CategoryChannel, ForumChannel, Thread, None]]:
51
63
  """
52
64
  Identifie le type Discord d'un ID et retourne l'objet correspondant.
@@ -1,10 +1,8 @@
1
- from Dshell.full_import import (Any, randint, Optional, Union, Embed, Member, Role, PermissionOverwrite)
1
+ from Dshell.full_import import (Any, randint, Optional, Union, Embed, Member, Role, PermissionOverwrite, getsizeof)
2
2
  from ..DshellTokenizer.dshell_token_type import Token
3
3
  from ..DshellInterpreteur.dshell_global_variables import MAX_STR_SIZE, MAX_LIST_SIZE, MAX_FILE_SIZE
4
4
  from .errors import *
5
5
 
6
- from sys import getsizeof
7
-
8
6
  __all__ = [
9
7
  'ASTNode',
10
8
  'StrNode',
@@ -72,7 +70,7 @@ class StrNode(str, ASTNode):
72
70
  return IntNode(super().__len__())
73
71
 
74
72
  def __sizeof__(self):
75
- return len(self.encode("utf-8", errors="ignore"))+getsizeof(StrNode)
73
+ return len(self.encode("utf-8", errors="ignore"))
76
74
 
77
75
  def __add__(self, other: "StrNode"):
78
76
  if not isinstance(other, StrNode):
@@ -114,7 +112,7 @@ class StrNode(str, ASTNode):
114
112
  return StrNode(super().replace(old, new))
115
113
 
116
114
  def __repr__(self):
117
- return f"{super().__repr__()}"
115
+ return StrNode(f"{super().__repr__()}")
118
116
 
119
117
  class IntNode(int, ASTNode):
120
118
  def __new__(cls, value: Union[str, StrNode, int, "IntNode", float, "FloatNode"], base: int = 10):
@@ -123,30 +121,30 @@ class IntNode(int, ASTNode):
123
121
  return super().__new__(cls, value, base)
124
122
 
125
123
  def __repr__(self):
126
- return f"{super().__repr__()}"
124
+ return StrNode(f"{super().__repr__()}")
127
125
 
128
126
  def __sizeof__(self):
129
- return getsizeof(int)+getsizeof(IntNode)
127
+ return getsizeof(IntNode)
130
128
 
131
129
  class FloatNode(float, ASTNode):
132
130
  def __new__(cls, value: Union[str, StrNode, float, "FloatNode", int, IntNode]):
133
131
  return super().__new__(cls, value)
134
132
 
135
133
  def __repr__(self):
136
- return f"{super().__repr__()}"
134
+ return StrNode(f"{super().__repr__()}")
137
135
 
138
136
  def __sizeof__(self):
139
- return getsizeof(float)+getsizeof(FloatNode)
137
+ return getsizeof(FloatNode)
140
138
 
141
139
  class BoolNode(int, ASTNode):
142
140
  def __new__(cls, value: Union[str, StrNode, int, IntNode, bool, "BoolNode"]):
143
141
  return super().__new__(cls, int(bool(value)))
144
142
 
145
143
  def __repr__(self):
146
- return f"{super().__repr__()}"
144
+ return StrNode(f"{super().__repr__()}")
147
145
 
148
146
  def __sizeof__(self):
149
- return getsizeof(int)+getsizeof(BoolNode)
147
+ return getsizeof(BoolNode)
150
148
 
151
149
  class StartNode(ASTNode):
152
150
  """
@@ -158,7 +156,7 @@ class StartNode(ASTNode):
158
156
  self.body = body
159
157
 
160
158
  def __repr__(self):
161
- return f"<StartNode> - {self.body}"
159
+ return StrNode(f"<START> - {self.body}")
162
160
 
163
161
  def to_dict(self):
164
162
  """
@@ -183,7 +181,7 @@ class ElseNode(ASTNode):
183
181
  self.body = body
184
182
 
185
183
  def __repr__(self):
186
- return f"<Else> - {self.body}"
184
+ return StrNode(f"<ELSE> - {self.body}")
187
185
 
188
186
  def to_dict(self):
189
187
  """
@@ -213,7 +211,7 @@ class ElifNode(ASTNode):
213
211
  self.parent = parent
214
212
 
215
213
  def __repr__(self):
216
- return f"<Elif> - {self.condition} - {self.body}"
214
+ return StrNode(f"<ELIF> - {self.condition} - {self.body}")
217
215
 
218
216
  def to_dict(self):
219
217
  """
@@ -249,7 +247,7 @@ class IfNode(ASTNode):
249
247
  self.id = randint(0, 1000000) # Unique identifier for the IfNode instance
250
248
 
251
249
  def __repr__(self):
252
- return f"<If> - {self.condition} - {self.body} *- {self.elif_nodes} **- {self.else_body}"
250
+ return StrNode(f"<IF> - {self.condition} - {self.body} *- {self.elif_nodes} **- {self.else_body}")
253
251
 
254
252
  def to_dict(self):
255
253
  """
@@ -281,7 +279,7 @@ class LoopNode(ASTNode):
281
279
  self.body = body
282
280
 
283
281
  def __repr__(self):
284
- return f"<Loop> - {self.variable.name} -> {self.variable.body} *- {self.body}"
282
+ return StrNode(f"<LOOP> - {self.variable.name} -> {self.variable.body} *- {self.body}")
285
283
 
286
284
  def to_dict(self):
287
285
  """
@@ -303,7 +301,7 @@ class BreakNode(ASTNode):
303
301
  super().__init__(line)
304
302
 
305
303
  def __repr__(self):
306
- return "<Break>"
304
+ return StrNode("<BREAK>")
307
305
 
308
306
  def to_dict(self):
309
307
  """
@@ -327,7 +325,7 @@ class ArgsCommandNode(ASTNode):
327
325
  self.body: list[Token] = body
328
326
 
329
327
  def __repr__(self):
330
- return f"<Args Command> - {self.body}"
328
+ return StrNode(f"<ARGS_COMMAND> - {self.body}")
331
329
 
332
330
  def to_dict(self):
333
331
  """
@@ -348,7 +346,7 @@ class ScanNode(ASTNode):
348
346
  self.body = body
349
347
 
350
348
  def __repr__(self):
351
- return f"<SCAN> - {self.body}"
349
+ return StrNode(f"<SCAN> - {self.body}")
352
350
 
353
351
  def to_dict(self):
354
352
  """
@@ -375,7 +373,7 @@ class CommandNode(ASTNode):
375
373
  self.body = body
376
374
 
377
375
  def __repr__(self):
378
- return f"<{self.name}> - {self.body}"
376
+ return StrNode(f"<{self.name}> - {self.body}")
379
377
 
380
378
  def to_dict(self):
381
379
  """
@@ -404,7 +402,7 @@ class VarNode(ASTNode):
404
402
  self.body = body
405
403
 
406
404
  def __repr__(self):
407
- return f"<VAR> - {self.name} *- {self.body}"
405
+ return StrNode(f"<VAR> - {self.name} *- {self.body}")
408
406
 
409
407
  def to_dict(self):
410
408
  """
@@ -430,7 +428,7 @@ class LengthNode(ASTNode):
430
428
  self.body = body
431
429
 
432
430
  def __repr__(self):
433
- return f"<LENGTH> - {self.body}"
431
+ return StrNode(f"<LENGTH> - {self.body}")
434
432
 
435
433
  def to_dict(self):
436
434
  """
@@ -447,12 +445,12 @@ class EndNode(ASTNode):
447
445
  Node representing the end of the AST.
448
446
  """
449
447
 
450
- def __init__(self, line: int, error_message: Union[Token, bool] = True):
448
+ def __init__(self, line: int, error_message: Union[Token, BoolNode] = BoolNode(1)):
451
449
  super().__init__(line)
452
- self.error_message: bool = error_message
450
+ self.error_message: Union[Token, BoolNode] = error_message
453
451
 
454
452
  def __repr__(self):
455
- return f"<END>"
453
+ return StrNode(f"<END>")
456
454
 
457
455
  def to_dict(self):
458
456
  """
@@ -478,7 +476,7 @@ class FieldEmbedNode(ASTNode):
478
476
  self.body: list[Token] = body
479
477
 
480
478
  def __repr__(self):
481
- return f"<EMBED_FIELD> - {self.body}"
479
+ return StrNode(f"<EMBED_FIELD> - {self.body}")
482
480
 
483
481
  def to_dict(self):
484
482
  """
@@ -506,7 +504,7 @@ class ConstructEmbedNode(ASTNode):
506
504
  self.fields = fields
507
505
 
508
506
  def __repr__(self):
509
- return f"<EMBED> - {self.body}"
507
+ return StrNode(f"<EMBED> - {self.body}")
510
508
 
511
509
  def to_dict(self):
512
510
  """
@@ -524,10 +522,10 @@ class EmbedNode(Embed, ASTNode):
524
522
  super().__init__(*args, **kwargs)
525
523
 
526
524
  def __sizeof__(self):
527
- return super().__len__()+getsizeof(EmbedNode)
525
+ return super().__len__()
528
526
 
529
527
  def __repr__(self):
530
- return f"<EMBED> - {super().title}"
528
+ return StrNode(f"<EMBED> - {super().title}")
531
529
 
532
530
  class ConstructPermissionNode(ASTNode):
533
531
  """
@@ -542,7 +540,7 @@ class ConstructPermissionNode(ASTNode):
542
540
  self.body = body
543
541
 
544
542
  def __repr__(self):
545
- return f"<PERMISSION> - {self.body}"
543
+ return StrNode(f"<PERMISSION> - {self.body}")
546
544
 
547
545
  def to_dict(self):
548
546
  """
@@ -574,7 +572,10 @@ class PermissionNode(ASTNode):
574
572
  self.value.update(other.value)
575
573
 
576
574
  def __sizeof__(self):
577
- return len(self.value)*getsizeof(PermissionOverwrite)*getsizeof(str)
575
+ return len(self.value)*getsizeof(PermissionNode)
576
+
577
+ def __repr__(self):
578
+ return StrNode(f"<PERMISSION> - {self.value}")
578
579
 
579
580
  class SleepNode(ASTNode):
580
581
  """
@@ -589,7 +590,7 @@ class SleepNode(ASTNode):
589
590
  self.body = body
590
591
 
591
592
  def __repr__(self):
592
- return f"<SLEEP> - {self.body}"
593
+ return StrNode(f"<SLEEP> - {self.body}")
593
594
 
594
595
  def to_dict(self):
595
596
  """
@@ -615,7 +616,7 @@ class EvalGroupNode(ASTNode):
615
616
  self.body = body
616
617
 
617
618
  def __repr__(self):
618
- return f"<EVAL GROUP> - {self.body}"
619
+ return StrNode(f"<EVAL GROUP> - {self.body}")
619
620
 
620
621
  def to_dict(self):
621
622
  """
@@ -642,7 +643,7 @@ class ParamNode(ASTNode):
642
643
  self.body = body
643
644
 
644
645
  def __repr__(self):
645
- return f"<PARAM> - {self.body}"
646
+ return StrNode(f"<PARAM> - {self.body}")
646
647
 
647
648
  def to_dict(self):
648
649
  """
@@ -666,7 +667,7 @@ class CodeNode(ASTNode):
666
667
  self.body = body
667
668
 
668
669
  def __repr__(self):
669
- return f"<CODE> - {self.body}"
670
+ return StrNode(f"<CODE> - {self.body}")
670
671
 
671
672
  def to_dict(self):
672
673
  """
@@ -693,7 +694,7 @@ class EvalNode(ASTNode):
693
694
  self.argsNode = argsNode
694
695
 
695
696
  def __repr__(self):
696
- return f"<EVAL> - {self.argsNode} -> {self.codeNode}"
697
+ return StrNode(f"<EVAL> - {self.argsNode} -> {self.codeNode}")
697
698
 
698
699
  def to_dict(self):
699
700
  """
@@ -720,7 +721,7 @@ class ReturnNode(ASTNode):
720
721
  self.body = body
721
722
 
722
723
  def __repr__(self):
723
- return f"<RETURN> - {self.body}"
724
+ return StrNode(f"<RETURN> - {self.body}")
724
725
 
725
726
  def to_dict(self):
726
727
  """
@@ -747,7 +748,7 @@ class UiButtonNode(ASTNode):
747
748
  self.body = body
748
749
 
749
750
  def __repr__(self):
750
- return f"<UI BUTTON> - {self.body}"
751
+ return StrNode(f"<UI BUTTON> - {self.body}")
751
752
 
752
753
  def to_dict(self):
753
754
  """
@@ -774,7 +775,7 @@ class UiSelectNode(ASTNode):
774
775
  self.options: list[OptionUiSelectNode] = []
775
776
 
776
777
  def __repr__(self):
777
- return f"<UI SELECT> - {self.body} -> {self.options}"
778
+ return StrNode(f"<UI SELECT> - {self.body} -> {self.options}")
778
779
 
779
780
  def to_dict(self):
780
781
  """
@@ -800,7 +801,7 @@ class OptionUiSelectNode(ASTNode):
800
801
  self.body = body
801
802
 
802
803
  def __repr__(self):
803
- return f"<UI SELECT OPTION> - {self.body}"
804
+ return StrNode(f"<UI SELECT OPTION> - {self.body}")
804
805
 
805
806
  def to_dict(self):
806
807
  """
@@ -831,20 +832,22 @@ class FileNode(ASTNode):
831
832
  self.content = content
832
833
 
833
834
  def read(self):
834
- return self.content.decode(encoding="utf-8", errors="ignore")
835
+ return StrNode(self.content.decode(encoding="utf-8", errors="ignore"))
835
836
 
836
837
  def stream(self, separator: Optional[StrNode] = None):
837
838
  return FileStreamNode(self, separator)
838
839
 
839
-
840
840
  def size(self):
841
- return len(self.read())
841
+ return IntNode(len(self.read()))
842
842
 
843
843
  def __len__(self):
844
844
  return self.size()
845
845
 
846
846
  def __sizeof__(self):
847
- return self.size()+getsizeof(FileNode)
847
+ return self.size()
848
+
849
+ def __repr__(self):
850
+ return StrNode(f"<FILE> - {self.name}")
848
851
 
849
852
  class FileStreamNode(ASTNode):
850
853
 
@@ -889,6 +892,12 @@ class FileStreamNode(ASTNode):
889
892
  self.pointer += 1 # Skip the newline character
890
893
  return StrNode(buffer)
891
894
 
895
+ def __repr__(self):
896
+ return StrNode(f"<FILE_STREAM> - {self.file.__repr__()}")
897
+
898
+ def __sizeof__(self):
899
+ return self.file.size()
900
+
892
901
 
893
902
  class ListNode(ASTNode):
894
903
  """
@@ -1089,5 +1098,5 @@ class ListNode(ASTNode):
1089
1098
  return self.size
1090
1099
 
1091
1100
  def __repr__(self):
1092
- return f"<LIST> - {self.iterable}"
1101
+ return StrNode(f"<LIST> - {self.iterable}")
1093
1102
 
@@ -134,17 +134,9 @@ def parse(token_lines: list[list[Token]], start_node: ASTNode) -> tuple[list[AST
134
134
  return blocks, pointer # return the parsed information to the last opened loop
135
135
 
136
136
  elif first_token_line.value == 'break':
137
- last_loop_block = None
138
-
139
- for i in blocks:
140
- if isinstance(i, LoopNode):
141
- last_loop_block = i
142
-
143
- if last_loop_block is None:
144
- raise SyntaxError(f'[BREAK] No loop open on line {first_token_line.position} !')
145
137
 
146
138
  break_node = BreakNode(line=line)
147
- last_loop_block.body.append(break_node)
139
+ last_block.body.append(break_node)
148
140
 
149
141
  elif first_token_line.value == 'var':
150
142
  if len(tokens_by_line) <= 2:
@@ -38,6 +38,7 @@ dshell_commands: dict[str, Callable] = {
38
38
  "debug": dshell_debug,
39
39
  ## global utils
40
40
  'random': utils_random,
41
+ 'size': utils_get_size,
41
42
 
42
43
  ## List utils
43
44
  'list': utils_convert_to_list,
@@ -1,5 +1,6 @@
1
1
  from asyncio import sleep
2
2
  from typing import *
3
+ from sys import getsizeof
3
4
  from copy import deepcopy
4
5
  from pycordViews import EasyModifiedViews, SelectMenu
5
6
  from pycordViews.views.errors import CustomIDNotFound
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dshellInterpreter
3
- Version: 1.2.0.12
3
+ Version: 1.2.0.14
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.0.12
3
+ Version: 1.2.0.14
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.0.12",
8
+ version="1.2.0.14",
9
9
  author="Chronos",
10
10
  author_email="vagabonwalybi@gmail.com",
11
11
  description="A Discord bot interpreter for creating custom commands and automations.",