easycoder 250611.4__tar.gz → 250611.6__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.

Potentially problematic release.


This version of easycoder might be problematic. Click here for more details.

Files changed (164) hide show
  1. {easycoder-250611.4 → easycoder-250611.6}/PKG-INFO +1 -1
  2. {easycoder-250611.4 → easycoder-250611.6}/easycoder/__init__.py +1 -1
  3. {easycoder-250611.4 → easycoder-250611.6}/easycoder/ec_core.py +40 -13
  4. {easycoder-250611.4 → easycoder-250611.6}/.gitignore +0 -0
  5. {easycoder-250611.4 → easycoder-250611.6}/LICENSE +0 -0
  6. {easycoder-250611.4 → easycoder-250611.6}/README.md +0 -0
  7. {easycoder-250611.4 → easycoder-250611.6}/backdrop.jpg +0 -0
  8. {easycoder-250611.4 → easycoder-250611.6}/doc/README.md +0 -0
  9. {easycoder-250611.4 → easycoder-250611.6}/doc/core/README.md +0 -0
  10. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/boolean.md +0 -0
  11. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/empty.md +0 -0
  12. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/ends.md +0 -0
  13. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/even.md +0 -0
  14. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/exists.md +0 -0
  15. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/greater.md +0 -0
  16. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/hasProperty.md +0 -0
  17. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/includes.md +0 -0
  18. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/is.md +0 -0
  19. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/less.md +0 -0
  20. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/list.md +0 -0
  21. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/none.md +0 -0
  22. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/not.md +0 -0
  23. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/numeric.md +0 -0
  24. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/object.md +0 -0
  25. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/odd.md +0 -0
  26. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/starts.md +0 -0
  27. {easycoder-250611.4 → easycoder-250611.6}/doc/core/conditions/string.md +0 -0
  28. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/add.md +0 -0
  29. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/append.md +0 -0
  30. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/assert.md +0 -0
  31. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/begin.md +0 -0
  32. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/clear.md +0 -0
  33. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/close.md +0 -0
  34. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/create.md +0 -0
  35. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/debug.md +0 -0
  36. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/decrement.md +0 -0
  37. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/delete.md +0 -0
  38. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/divide.md +0 -0
  39. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/exit.md +0 -0
  40. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/file.md +0 -0
  41. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/fork.md +0 -0
  42. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/get.md +0 -0
  43. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/go.md +0 -0
  44. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/gosub.md +0 -0
  45. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/if.md +0 -0
  46. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/import.md +0 -0
  47. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/increment.md +0 -0
  48. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/index.md +0 -0
  49. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/init.md +0 -0
  50. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/input.md +0 -0
  51. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/load.md +0 -0
  52. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/lock.md +0 -0
  53. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/log.md +0 -0
  54. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/module.md +0 -0
  55. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/multiply.md +0 -0
  56. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/negate.md +0 -0
  57. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/open.md +0 -0
  58. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/pop.md +0 -0
  59. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/post.md +0 -0
  60. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/print.md +0 -0
  61. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/push.md +0 -0
  62. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/put.md +0 -0
  63. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/read.md +0 -0
  64. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/release.md +0 -0
  65. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/replace.md +0 -0
  66. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/return.md +0 -0
  67. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/run.md +0 -0
  68. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/save.md +0 -0
  69. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/script.md +0 -0
  70. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/set.md +0 -0
  71. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/split.md +0 -0
  72. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/stack.md +0 -0
  73. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/stop.md +0 -0
  74. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/system.md +0 -0
  75. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/take.md +0 -0
  76. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/toggle.md +0 -0
  77. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/truncate.md +0 -0
  78. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/unlock.md +0 -0
  79. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/variable.md +0 -0
  80. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/wait.md +0 -0
  81. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/while.md +0 -0
  82. {easycoder-250611.4 → easycoder-250611.6}/doc/core/keywords/write.md +0 -0
  83. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/arg.md +0 -0
  84. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/args.md +0 -0
  85. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/cos.md +0 -0
  86. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/datime.md +0 -0
  87. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/decode.md +0 -0
  88. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/element.md +0 -0
  89. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/elements.md +0 -0
  90. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/empty.md +0 -0
  91. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/encode.md +0 -0
  92. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/error.md +0 -0
  93. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/files.md +0 -0
  94. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/float.md +0 -0
  95. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/from.md +0 -0
  96. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/hash.md +0 -0
  97. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/index.md +0 -0
  98. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/integer.md +0 -0
  99. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/json.md +0 -0
  100. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/keys.md +0 -0
  101. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/left.md +0 -0
  102. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/length.md +0 -0
  103. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/lowercase.md +0 -0
  104. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/memory.md +0 -0
  105. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/modification.md +0 -0
  106. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/modulo.md +0 -0
  107. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/newline.md +0 -0
  108. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/now.md +0 -0
  109. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/position.md +0 -0
  110. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/property.md +0 -0
  111. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/random.md +0 -0
  112. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/right.md +0 -0
  113. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/sin.md +0 -0
  114. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/stringify.md +0 -0
  115. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/tab.md +0 -0
  116. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/tan.md +0 -0
  117. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/timestamp.md +0 -0
  118. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/today.md +0 -0
  119. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/trim.md +0 -0
  120. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/type.md +0 -0
  121. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/uppercase.md +0 -0
  122. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/value.md +0 -0
  123. {easycoder-250611.4 → easycoder-250611.6}/doc/core/values/weekday.md +0 -0
  124. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/README.md +0 -0
  125. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/attach.md +0 -0
  126. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/close.md +0 -0
  127. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/create.md +0 -0
  128. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/ellipse.md +0 -0
  129. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/image.md +0 -0
  130. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/move.md +0 -0
  131. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/on.md +0 -0
  132. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/rectangle.md +0 -0
  133. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/render.md +0 -0
  134. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/run.md +0 -0
  135. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/set.md +0 -0
  136. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/keywords/text.md +0 -0
  137. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/values/attribute.md +0 -0
  138. {easycoder-250611.4 → easycoder-250611.6}/doc/graphics/values/window.md +0 -0
  139. {easycoder-250611.4 → easycoder-250611.6}/easycoder/README.md +0 -0
  140. {easycoder-250611.4 → easycoder-250611.6}/easycoder/ec_classes.py +0 -0
  141. {easycoder-250611.4 → easycoder-250611.6}/easycoder/ec_compiler.py +0 -0
  142. {easycoder-250611.4 → easycoder-250611.6}/easycoder/ec_condition.py +0 -0
  143. {easycoder-250611.4 → easycoder-250611.6}/easycoder/ec_handler.py +0 -0
  144. {easycoder-250611.4 → easycoder-250611.6}/easycoder/ec_program.py +0 -0
  145. {easycoder-250611.4 → easycoder-250611.6}/easycoder/ec_pyside.py +0 -0
  146. {easycoder-250611.4 → easycoder-250611.6}/easycoder/ec_timestamp.py +0 -0
  147. {easycoder-250611.4 → easycoder-250611.6}/easycoder/ec_value.py +0 -0
  148. {easycoder-250611.4 → easycoder-250611.6}/images/Semoigo Dawn.jpg +0 -0
  149. {easycoder-250611.4 → easycoder-250611.6}/json/graphics-demo.json +0 -0
  150. {easycoder-250611.4 → easycoder-250611.6}/plugins/ec_keyboard.py +0 -0
  151. {easycoder-250611.4 → easycoder-250611.6}/plugins/ec_p100.py +0 -0
  152. {easycoder-250611.4 → easycoder-250611.6}/plugins/ec_pyside6.py +0 -0
  153. {easycoder-250611.4 → easycoder-250611.6}/plugins/points.py +0 -0
  154. {easycoder-250611.4 → easycoder-250611.6}/pyproject.toml +0 -0
  155. {easycoder-250611.4 → easycoder-250611.6}/scripts/benchmark.ecs +0 -0
  156. {easycoder-250611.4 → easycoder-250611.6}/scripts/config.ecg +0 -0
  157. {easycoder-250611.4 → easycoder-250611.6}/scripts/ec_keyboard.py +0 -0
  158. {easycoder-250611.4 → easycoder-250611.6}/scripts/findxr.ecs +0 -0
  159. {easycoder-250611.4 → easycoder-250611.6}/scripts/fizzbuzz.ecs +0 -0
  160. {easycoder-250611.4 → easycoder-250611.6}/scripts/hello.ecs +0 -0
  161. {easycoder-250611.4 → easycoder-250611.6}/scripts/points.ecs +0 -0
  162. {easycoder-250611.4 → easycoder-250611.6}/scripts/test.ecs +0 -0
  163. {easycoder-250611.4 → easycoder-250611.6}/scripts/tests.ecs +0 -0
  164. {easycoder-250611.4 → easycoder-250611.6}/testrc.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: easycoder
3
- Version: 250611.4
3
+ Version: 250611.6
4
4
  Summary: Rapid scripting in English
5
5
  Keywords: compiler,scripting,prototyping,programming,coding,python,low code,hypertalk,computer language,learn to code
6
6
  Author-email: Graham Trott <gtanyware@gmail.com>
@@ -9,4 +9,4 @@ from .ec_program import *
9
9
  from .ec_timestamp import *
10
10
  from .ec_value import *
11
11
 
12
- __version__ = "250611.4"
12
+ __version__ = "250611.6"
@@ -732,17 +732,37 @@ class Core(Handler):
732
732
  if record['keyword'] == 'ssh':
733
733
  command['ssh'] = record['name']
734
734
  command['path'] = self.nextValue()
735
- self.add(command)
736
- return True
737
-
738
- command['file'] = self.getValue()
735
+ else:
736
+ command['file'] = self.getValue()
737
+ else:
738
+ command['file'] = self.getValue()
739
+ command['or'] = None
740
+ load = self.getPC()
739
741
  self.add(command)
742
+ if self.peek() == 'or':
743
+ self.nextToken()
744
+ self.nextToken()
745
+ # Add a 'goto' to skip the 'or'
746
+ cmd = {}
747
+ cmd['lino'] = command['lino']
748
+ cmd['domain'] = 'core'
749
+ cmd['keyword'] = 'gotoPC'
750
+ cmd['goto'] = 0
751
+ cmd['debug'] = False
752
+ skip = self.getPC()
753
+ self.add(cmd)
754
+ # Process the 'or'
755
+ self.getCommandAt(load)['or'] = self.getPC()
756
+ self.compileOne()
757
+ # Fixup the skip
758
+ self.getCommandAt(skip)['goto'] = self.getPC()
740
759
  return True
741
760
  else:
742
761
  FatalError(self.compiler, f'I don\'t understand \'{self.getToken()}\'')
743
762
  return False
744
763
 
745
764
  def r_load(self, command):
765
+ errorReason = None
746
766
  target = self.getVariable(command['target'])
747
767
  if 'ssh' in command:
748
768
  ssh = self.getVariable(command['ssh'])
@@ -751,17 +771,24 @@ class Core(Handler):
751
771
  try:
752
772
  with sftp.open(path, 'r') as remote_file: content = remote_file.read().decode()
753
773
  except:
754
- RuntimeError(self.program, f'Unable to read from {path}')
774
+ errorReason = f'Unable to read from {path}'
755
775
  else:
756
776
  filename = self.getRuntimeValue(command['file'])
757
777
  try:
758
778
  with open(filename) as f: content = f.read()
779
+ try:
780
+ if filename.endswith('.json'): content = json.loads(content)
781
+ except:
782
+ errorReason = 'Bad or null JSON string'
759
783
  except:
760
- RuntimeError(self.program, f'Unable to read from {filename}')
761
- try:
762
- if filename.endswith('.json'): content = json.loads(content)
763
- except:
764
- RuntimeError(self.program, 'Bad or null JSON string')
784
+ errorReason = f'Unable to read from {filename}'
785
+
786
+ if errorReason:
787
+ if command['or'] != None:
788
+ print(f'Exception "{errorReason}": Running the "or" clause')
789
+ return command['or']
790
+ else:
791
+ RuntimeError(self.program, f'Error: {errorReason}')
765
792
  value = {}
766
793
  value['type'] = 'text'
767
794
  value['content'] = content
@@ -1293,8 +1320,7 @@ class Core(Handler):
1293
1320
  self.compileOne()
1294
1321
  # Fixup the skip
1295
1322
  self.getCommandAt(skip)['goto'] = self.getPC()
1296
- return True
1297
- return False
1323
+ return True
1298
1324
 
1299
1325
  def r_save(self, command):
1300
1326
  errorReason = None
@@ -1303,8 +1329,9 @@ class Core(Handler):
1303
1329
  ssh = self.getVariable(command['ssh'])
1304
1330
  path = self.getRuntimeValue(command['path'])
1305
1331
  sftp = ssh['sftp']
1332
+ if path.endswith('.json'): content = json.dumps(content)
1306
1333
  try:
1307
- with sftp.open(path, 'w') as remote_file: remote_file.write(content.encode())
1334
+ with sftp.open(path, 'w') as remote_file: remote_file.write(content)
1308
1335
  except:
1309
1336
  errorReason = 'Unable to write to {path}'
1310
1337
  else:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes