Skip to content

Commit 9e19792

Browse files
committed
added @device.code_follow decorator
1 parent e19b56e commit 9e19792

File tree

4 files changed

+113
-25
lines changed

4 files changed

+113
-25
lines changed

examples/decorators/test_dec.py

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,66 @@
11
from upydevice import Device
22

3-
# pyb = Device('/dev/tty.usbmodem3370377430372')
4-
espd = Device('espdev.local', "oXQdh0wQ", init=True)
5-
bled = Device('00FEFE2D-5983-4D6C-9679-01F732CBA9D9', init=True)
6-
#@pyb.code
7-
#def led_toggle(led):
8-
# pyb.LED(led).toggle()
9-
@bled.code
10-
def led_toggle():
11-
led.value(not led.value())
3+
pyb = Device('/dev/tty.usbmodem3370377430372')
4+
# espd = Device('espdev.local', "oXQdh0wQ:espkeyhack", init=True)
5+
# bled = Device('00FEFE2D-5983-4D6C-9679-01F732CBA9D9', init=True)
126

137

8+
@pyb.code
9+
def led_toggle(led):
10+
pyb.LED(led).toggle()
1411

1512

16-
print('Toggling led..')
17-
#for i in range(1,5):
18-
led_toggle()
13+
# @bled.code
14+
# def led_esp_toggle():
15+
# led.value(not led.value())
16+
1917

18+
print('Toggling led..')
19+
for i in range(1,5):
20+
led_toggle(i)
2021

21-
# espd = Device('espdev.local', "oXQdh0wQ", init=True)
2222

23-
@espd.code
24-
def esp_led_toggle():
25-
led.value(not led.value())
26-
return 1
23+
@pyb.code_follow
24+
def dothis():
25+
import time
26+
for i in range(5):
27+
print("hello")
28+
time.sleep(0.5)
2729

2830

31+
dothis()
2932

30-
print('Toggling esp led..')
33+
#espd = Device('espdev.local', "oXQdh0wQ", init=True)
3134

32-
res1 = esp_led_toggle()
33-
# res2 = espd.wr_cmd('esp_led_toggle()', rtn=True, rtn_resp=True)
34-
print(res1 + 1)
35+
# @espd.code
36+
# def esp_led_toggle():
37+
# led.value(not led.value())
38+
# return 1
39+
#
40+
#
41+
#
42+
# print('Toggling esp led..')
43+
#
44+
# res1=esp_led_toggle()
45+
# led_esp_toggle()
46+
#
47+
# @bled.code_follow
48+
# def dothat():
49+
# for i in range(5):
50+
# print("hello")
51+
# time.sleep(0.5)
52+
#
53+
#
54+
# dothat()
55+
#
56+
#
57+
# @espd.code_follow
58+
# def doit():
59+
# for i in range(5):
60+
# print("hello")
61+
# time.sleep(0.5)
62+
#
63+
#
64+
# doit()
65+
#res2 = espd.wr_cmd('esp_led_toggle()', rtn=True, rtn_resp=True)
66+
#print(res1 + 1)

upydevice/bledevice.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,7 @@ def paste_buff(self, cmd, **kargs):
12431243
print(e)
12441244

12451245
def code(self, func):
1246-
str_func = uparser_dec(getsource(func)).replace('\r', '\n ')
1246+
str_func = '\n'.join(getsource(func).split('\n')[1:])
12471247
self.paste_buff(str_func)
12481248
self.cmd('\x04', silent=True)
12491249

@@ -1261,6 +1261,25 @@ def wrapper_cmd(*args, **kwargs):
12611261
return self.output
12621262
return wrapper_cmd
12631263

1264+
def code_follow(self, func):
1265+
str_func = '\n'.join(getsource(func).split('\n')[1:])
1266+
self.paste_buff(str_func)
1267+
self.cmd('\x04', silent=True)
1268+
1269+
@functools.wraps(func)
1270+
def wrapper_cmd(*args, **kwargs):
1271+
flags = ['>', '<', 'object', 'at', '0x']
1272+
args_repr = [repr(a) for a in args if any(
1273+
f not in repr(a) for f in flags)]
1274+
kwargs_repr = [f"{k}={v!r}" if not callable(
1275+
v) else f"{k}={v.__name__}" for k, v in kwargs.items()]
1276+
signature = ", ".join(args_repr + kwargs_repr)
1277+
cmd_ = f"{func.__name__}({signature})"
1278+
self.wr_cmd(cmd_, rtn=True, follow=True)
1279+
if self.output:
1280+
return self.output
1281+
return wrapper_cmd
1282+
12641283
def load(self, file):
12651284
with open(file, 'r') as upy_file:
12661285
upy_content = upy_file.read()

upydevice/serialdevice.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ def __init__(self, *args, **kargs):
599599
super().__init__(*args, **kargs)
600600

601601
def code(self, func):
602-
str_func = uparser_dec(getsource(func)).replace('\r', '\n ')
602+
str_func = '\n'.join(getsource(func).split('\n')[1:])
603603
self.paste_buff(str_func)
604604
self.cmd('\x04', silent=True)
605605

@@ -616,7 +616,25 @@ def wrapper_cmd(*args, **kwargs):
616616
if self.output:
617617
return self.output
618618
return wrapper_cmd
619-
# return decorator_cmd_str
619+
620+
def code_follow(self, func):
621+
str_func = '\n'.join(getsource(func).split('\n')[1:])
622+
self.paste_buff(str_func)
623+
self.cmd('\x04', silent=True)
624+
625+
@functools.wraps(func)
626+
def wrapper_cmd(*args, **kwargs):
627+
flags = ['>', '<', 'object', 'at', '0x']
628+
args_repr = [repr(a) for a in args if any(
629+
f not in repr(a) for f in flags)]
630+
kwargs_repr = [f"{k}={v!r}" if not callable(
631+
v) else f"{k}={v.__name__}" for k, v in kwargs.items()]
632+
signature = ", ".join(args_repr + kwargs_repr)
633+
cmd_ = f"{func.__name__}({signature})"
634+
self.wr_cmd(cmd_, rtn=True, follow=True)
635+
if self.output:
636+
return self.output
637+
return wrapper_cmd
620638

621639
def load(self, file):
622640
with open(file, 'r') as upy_file:

upydevice/websocketdevice.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -906,7 +906,7 @@ def __init__(self, *args, **kargs):
906906
super().__init__(*args, **kargs)
907907

908908
def code(self, func):
909-
str_func = uparser_dec(getsource(func)).replace('\r', '\n ')
909+
str_func = '\n'.join(getsource(func).split('\n')[1:])
910910
self.paste_buff(str_func)
911911
self.cmd('\x04', silent=True)
912912

@@ -924,6 +924,25 @@ def wrapper_cmd(*args, **kwargs):
924924
return self.output
925925
return wrapper_cmd
926926

927+
def code_follow(self, func):
928+
str_func = '\n'.join(getsource(func).split('\n')[1:])
929+
self.paste_buff(str_func)
930+
self.cmd('\x04', silent=True)
931+
932+
@functools.wraps(func)
933+
def wrapper_cmd(*args, **kwargs):
934+
flags = ['>', '<', 'object', 'at', '0x']
935+
args_repr = [repr(a) for a in args if any(
936+
f not in repr(a) for f in flags)]
937+
kwargs_repr = [f"{k}={v!r}" if not callable(
938+
v) else f"{k}={v.__name__}" for k, v in kwargs.items()]
939+
signature = ", ".join(args_repr + kwargs_repr)
940+
cmd_ = f"{func.__name__}({signature})"
941+
self.wr_cmd(cmd_, rtn=True, follow=True)
942+
if self.output:
943+
return self.output
944+
return wrapper_cmd
945+
927946
def load(self, file):
928947
with open(file, 'r') as upy_file:
929948
upy_content = upy_file.read()

0 commit comments

Comments
 (0)