easycoder 250826.2__py2.py3-none-any.whl → 250920.1__py2.py3-none-any.whl

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.

easycoder/__init__.py CHANGED
@@ -12,4 +12,4 @@ from .ec_pyside import *
12
12
  from .ec_timestamp import *
13
13
  from .ec_value import *
14
14
 
15
- __version__ = "250826.2"
15
+ __version__ = "250920.1"
easycoder/ec_compiler.py CHANGED
@@ -211,7 +211,6 @@ class Compiler:
211
211
  token = self.tokens[self.index]
212
212
  keyword = token.token
213
213
  if self.debugCompile: print(self.script.lines[token.lino])
214
- # print(f'{keyword} - {line}')
215
214
  # if keyword != 'else':
216
215
  if self.compileOne() == True:
217
216
  if self.index == len(self.tokens) - 1:
easycoder/ec_core.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import json, math, hashlib, threading, os, subprocess, time
2
2
  import numbers, base64, binascii, random, requests, paramiko
3
+ from copy import deepcopy
3
4
  from psutil import Process
4
5
  from datetime import datetime
5
6
  from .ec_classes import FatalError, RuntimeWarning, RuntimeError, AssertionError, NoValueError, NoValueRuntimeError, Condition, Object
@@ -276,7 +277,7 @@ class Core(Handler):
276
277
  return self.incdec(command, '-')
277
278
 
278
279
  # Delete a file or a property
279
- # delete {filename}
280
+ # delete file {filename}
280
281
  # delete property {value} of {variable}
281
282
  # delete element {name} of {variable}
282
283
  def k_delete(self, command):
@@ -305,8 +306,8 @@ class Core(Handler):
305
306
  type = command['type']
306
307
  if type == 'file':
307
308
  filename = self.getRuntimeValue(command['filename'])
308
- if os.path.isfile(filename):
309
- os.remove(filename)
309
+ if filename != None:
310
+ if os.path.isfile(filename): os.remove(filename)
310
311
  elif type == 'property':
311
312
  key = self.getRuntimeValue(command['key'])
312
313
  symbolRecord = self.getVariable(command['var'])
@@ -1076,7 +1077,7 @@ class Core(Handler):
1076
1077
  return False
1077
1078
 
1078
1079
  def r_push(self, command):
1079
- value = self.getRuntimeValue(command['value'])
1080
+ value = deepcopy(self.getRuntimeValue(command['value']))
1080
1081
  stackRecord = self.getVariable(command['to'])
1081
1082
  if stackRecord['keyword'] != 'stack':
1082
1083
  RuntimeError(self.program, f'{stackRecord["name"]} is not a stack')
@@ -1503,8 +1504,11 @@ class Core(Handler):
1503
1504
  ssh = paramiko.SSHClient()
1504
1505
  target['ssh'] = ssh
1505
1506
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
1506
- ssh.connect(host, username=user, password=password)
1507
- target['sftp'] = ssh.open_sftp()
1507
+ try:
1508
+ ssh.connect(host, username=user, password=password, timeout=10)
1509
+ target['sftp'] = ssh.open_sftp()
1510
+ except:
1511
+ target['error'] = f'Unable to connect to {host} (timeout)'
1508
1512
  return self.nextPC()
1509
1513
 
1510
1514
  # Shuffle a list
@@ -2108,14 +2112,24 @@ class Core(Handler):
2108
2112
  return value
2109
2113
 
2110
2114
  if token == 'error':
2111
- if self.peek() == 'code':
2115
+ token = self.peek()
2116
+ if token == 'code':
2112
2117
  self.nextToken()
2113
2118
  value['item'] = 'errorCode'
2114
2119
  return value
2115
- if self.peek() == 'reason':
2120
+ elif token == 'reason':
2116
2121
  self.nextToken()
2117
2122
  value['item'] = 'errorReason'
2118
2123
  return value
2124
+ elif token in ['in', 'of']:
2125
+ self.nextToken()
2126
+ if self.nextIsSymbol():
2127
+ record = self.getSymbolRecord()
2128
+ if record['keyword'] == 'ssh':
2129
+ value['item'] = 'sshError'
2130
+ value['name'] = record['name']
2131
+ return value
2132
+ return None
2119
2133
 
2120
2134
  if token == 'type':
2121
2135
  if self.nextIs('of'):
@@ -2279,6 +2293,10 @@ class Core(Handler):
2279
2293
  elif v['item'] == 'errorReason':
2280
2294
  value['type'] = 'text'
2281
2295
  value['content'] = errorReason
2296
+ elif v['item'] == 'sshError':
2297
+ record = self.getVariable(v['name'])
2298
+ value['type'] = 'text'
2299
+ value['content'] = record['error'] if 'error' in record else ''
2282
2300
  return value
2283
2301
 
2284
2302
  def v_files(self, v):
@@ -2430,7 +2448,7 @@ class Core(Handler):
2430
2448
  def v_now(self, v):
2431
2449
  value = {}
2432
2450
  value['type'] = 'int'
2433
- value['content'] = getTimestamp(time.time())
2451
+ value['content'] = int(time.time())
2434
2452
  return value
2435
2453
 
2436
2454
  def v_position(self, v):
@@ -2613,12 +2631,25 @@ class Core(Handler):
2613
2631
  def compileCondition(self):
2614
2632
  condition = Condition()
2615
2633
 
2616
- if self.getToken() == 'not':
2634
+ token = self.getToken()
2635
+
2636
+ if token == 'not':
2617
2637
  condition.type = 'not'
2618
2638
  condition.value = self.nextValue()
2619
2639
  return condition
2620
2640
 
2621
- if self.getToken() == 'file':
2641
+ elif token == 'error':
2642
+ self.nextToken()
2643
+ self.skip('in')
2644
+ if self.nextIsSymbol():
2645
+ record = self.getSymbolRecord()
2646
+ if record['keyword'] == 'ssh':
2647
+ condition.type = 'sshError'
2648
+ condition.target = record['name']
2649
+ return condition
2650
+ return None
2651
+
2652
+ elif token == 'file':
2622
2653
  path = self.nextValue()
2623
2654
  condition.path = path
2624
2655
  condition.type = 'exists'
@@ -2798,6 +2829,13 @@ class Core(Handler):
2798
2829
 
2799
2830
  def c_odd(self, condition):
2800
2831
  return self.getRuntimeValue(condition.value1) % 2 == 1
2832
+
2833
+ def c_sshError(self, condition):
2834
+ target = self.getVariable(condition.target)
2835
+ errormsg = target['error'] if 'error' in target else None
2836
+ condition.errormsg = errormsg
2837
+ test = errormsg != None
2838
+ return not test if condition.negate else test
2801
2839
 
2802
2840
  def c_starts(self, condition):
2803
2841
  value1 = self.getRuntimeValue(condition.value1)
easycoder/ec_pyside.py CHANGED
@@ -81,6 +81,7 @@ class Graphics(Handler):
81
81
  def __init__(self):
82
82
  super().__init__()
83
83
  self.multiline = False
84
+ self.container = None
84
85
 
85
86
  def setContainer(self, container):
86
87
  self.container = container
@@ -96,6 +97,7 @@ class Graphics(Handler):
96
97
  def __init__(self):
97
98
  super().__init__()
98
99
  self.multiline = True
100
+ self.container = None
99
101
 
100
102
  def setContainer(self, container):
101
103
  self.container = container
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easycoder
3
- Version: 250826.2
3
+ Version: 250920.1
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>
@@ -1,19 +1,19 @@
1
- easycoder/__init__.py,sha256=UtclhKbGdjMumFBAT_zAsSck8VnFGCK4NPb1ZcBqMdE,339
1
+ easycoder/__init__.py,sha256=kWiWYZ-Agk6P3r4zV7TXSUdQAZ3Kgcivns14FJJmIQc,339
2
2
  easycoder/close.png,sha256=3B9ueRNtEu9E4QNmZhdyC4VL6uqKvGmdfeFxIV9aO_Y,9847
3
3
  easycoder/ec_border.py,sha256=KpOy0Jq8jI_6DYGo4jaFvoBP_jTIoAYWrmuHhl-FXA4,2355
4
4
  easycoder/ec_classes.py,sha256=bejrby7mLHTeAQXhhz-1l8iv6LSbNSy30lW21KJKjXE,1832
5
- easycoder/ec_compiler.py,sha256=zImpvvSEfHRGe5MiIgmiu2i7rJxsB4pVLujqmHaOqTo,5392
5
+ easycoder/ec_compiler.py,sha256=LYwGNs8dcHKXI_nnu1sVFe1N36vjvylcUO_tX_bLjrk,5359
6
6
  easycoder/ec_condition.py,sha256=YXvSBQKEzKGCcgUGo3Qp8iHolXmm2BpEm0NimSDszIM,785
7
- easycoder/ec_core.py,sha256=s7Ovz6iTjlMqVk-tmsnOH-EEECHxsudgUF1EAlIsOZ4,98044
7
+ easycoder/ec_core.py,sha256=6O9u923WCeK4U2hEPVPY1Zx1EgHdhfSr4y9KosuWW98,99514
8
8
  easycoder/ec_handler.py,sha256=ED08ULiOlZkcs4XHxAguvdPZw_dFXuwGDFLbFuo0kLs,2317
9
9
  easycoder/ec_keyboard.py,sha256=ru-HdWolBMZJPyck2s72In9tXFeLJQSPtR1TpjmIo90,18350
10
10
  easycoder/ec_program.py,sha256=3KM9n_SAChUgUnRxhPCnA75K2FP1fgxjW8z1YUA3cL4,10140
11
- easycoder/ec_pyside.py,sha256=m_xyuE3GR-vjPdsrp5bmHmZ_KePRlMgXF6gW9zKeFzo,54080
11
+ easycoder/ec_pyside.py,sha256=bnGwnlYyN-4KI4ECpocrgVx2uGO_9aDrDZNjT4AK7ak,54148
12
12
  easycoder/ec_timestamp.py,sha256=myQnnF-mT31_1dpQKv2VEAu4BCcbypvMdzq7_DUi1xc,277
13
13
  easycoder/ec_value.py,sha256=zgDJTJhIg3yOvmnnKIfccIizmIhGbtvL_ghLTL1T5fg,2516
14
14
  easycoder/tick.png,sha256=OedASXJJTYvnza4J6Kv5m5lz6DrBfy667zX_WGgtbmM,9127
15
- easycoder-250826.2.dist-info/entry_points.txt,sha256=JXAZbenl0TnsIft2FcGJbJ-4qoztVu2FuT8PFmWFexM,44
16
- easycoder-250826.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
17
- easycoder-250826.2.dist-info/WHEEL,sha256=Dyt6SBfaasWElUrURkknVFAZDHSTwxg3PaTza7RSbkY,100
18
- easycoder-250826.2.dist-info/METADATA,sha256=0-hj10IUXVcvGCF9KY-hnxcfOrHIDGPJ33JaJDx2Po8,6897
19
- easycoder-250826.2.dist-info/RECORD,,
15
+ easycoder-250920.1.dist-info/entry_points.txt,sha256=JXAZbenl0TnsIft2FcGJbJ-4qoztVu2FuT8PFmWFexM,44
16
+ easycoder-250920.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
17
+ easycoder-250920.1.dist-info/WHEEL,sha256=Dyt6SBfaasWElUrURkknVFAZDHSTwxg3PaTza7RSbkY,100
18
+ easycoder-250920.1.dist-info/METADATA,sha256=EdjNgyIApW7KyP9S4TfI87vBkC3Ru8dVlTs6oqkucHk,6897
19
+ easycoder-250920.1.dist-info/RECORD,,