micropython-stubber 1.23.1__py3-none-any.whl → 1.23.2__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.
- {micropython_stubber-1.23.1.dist-info → micropython_stubber-1.23.2.dist-info}/LICENSE +30 -30
- {micropython_stubber-1.23.1.dist-info → micropython_stubber-1.23.2.dist-info}/METADATA +32 -15
- micropython_stubber-1.23.2.dist-info/RECORD +158 -0
- micropython_stubber-1.23.2.dist-info/entry_points.txt +5 -0
- mpflash/README.md +220 -194
- mpflash/libusb_flash.ipynb +203 -203
- mpflash/mpflash/add_firmware.py +98 -98
- mpflash/mpflash/ask_input.py +236 -236
- mpflash/mpflash/basicgit.py +284 -284
- mpflash/mpflash/bootloader/__init__.py +2 -2
- mpflash/mpflash/bootloader/activate.py +60 -60
- mpflash/mpflash/bootloader/detect.py +82 -82
- mpflash/mpflash/bootloader/manual.py +101 -101
- mpflash/mpflash/bootloader/micropython.py +12 -12
- mpflash/mpflash/bootloader/touch1200.py +36 -36
- mpflash/mpflash/cli_download.py +129 -129
- mpflash/mpflash/cli_flash.py +224 -219
- mpflash/mpflash/cli_group.py +111 -111
- mpflash/mpflash/cli_list.py +87 -81
- mpflash/mpflash/cli_main.py +39 -39
- mpflash/mpflash/common.py +210 -165
- mpflash/mpflash/config.py +44 -44
- mpflash/mpflash/connected.py +96 -78
- mpflash/mpflash/download.py +364 -364
- mpflash/mpflash/downloaded.py +130 -130
- mpflash/mpflash/errors.py +9 -9
- mpflash/mpflash/flash/__init__.py +55 -55
- mpflash/mpflash/flash/esp.py +59 -59
- mpflash/mpflash/flash/stm32.py +19 -19
- mpflash/mpflash/flash/stm32_dfu.py +104 -104
- mpflash/mpflash/flash/uf2/__init__.py +88 -88
- mpflash/mpflash/flash/uf2/boardid.py +15 -15
- mpflash/mpflash/flash/uf2/linux.py +136 -130
- mpflash/mpflash/flash/uf2/macos.py +42 -42
- mpflash/mpflash/flash/uf2/uf2disk.py +12 -12
- mpflash/mpflash/flash/uf2/windows.py +43 -43
- mpflash/mpflash/flash/worklist.py +170 -170
- mpflash/mpflash/list.py +106 -99
- mpflash/mpflash/logger.py +41 -41
- mpflash/mpflash/mpboard_id/__init__.py +93 -93
- mpflash/mpflash/mpboard_id/add_boards.py +251 -251
- mpflash/mpflash/mpboard_id/board.py +37 -37
- mpflash/mpflash/mpboard_id/board_id.py +86 -86
- mpflash/mpflash/mpboard_id/store.py +43 -43
- mpflash/mpflash/mpremoteboard/__init__.py +266 -222
- mpflash/mpflash/mpremoteboard/mpy_fw_info.py +141 -141
- mpflash/mpflash/mpremoteboard/runner.py +140 -140
- mpflash/mpflash/vendor/click_aliases.py +91 -91
- mpflash/mpflash/vendor/dfu.py +165 -165
- mpflash/mpflash/vendor/pydfu.py +605 -605
- mpflash/mpflash/vendor/readme.md +2 -2
- mpflash/mpflash/versions.py +135 -135
- mpflash/poetry.lock +1599 -1599
- mpflash/pyproject.toml +65 -65
- mpflash/stm32_udev_rules.md +62 -62
- stubber/__init__.py +3 -3
- stubber/board/board_info.csv +193 -193
- stubber/board/boot.py +34 -34
- stubber/board/createstubs.py +1004 -986
- stubber/board/createstubs_db.py +826 -825
- stubber/board/createstubs_db_min.py +332 -331
- stubber/board/createstubs_db_mpy.mpy +0 -0
- stubber/board/createstubs_lvgl.py +741 -741
- stubber/board/createstubs_lvgl_min.py +741 -741
- stubber/board/createstubs_mem.py +767 -766
- stubber/board/createstubs_mem_min.py +307 -306
- stubber/board/createstubs_mem_mpy.mpy +0 -0
- stubber/board/createstubs_min.py +295 -294
- stubber/board/createstubs_mpy.mpy +0 -0
- stubber/board/fw_info.py +141 -141
- stubber/board/info.py +183 -183
- stubber/board/main.py +19 -19
- stubber/board/modulelist.txt +247 -247
- stubber/board/pyrightconfig.json +34 -34
- stubber/bulk/mcu_stubber.py +437 -454
- stubber/codemod/_partials/__init__.py +48 -48
- stubber/codemod/_partials/db_main.py +147 -147
- stubber/codemod/_partials/lvgl_main.py +77 -77
- stubber/codemod/_partials/modules_reader.py +80 -80
- stubber/codemod/add_comment.py +53 -53
- stubber/codemod/add_method.py +65 -65
- stubber/codemod/board.py +317 -317
- stubber/codemod/enrich.py +151 -145
- stubber/codemod/merge_docstub.py +284 -284
- stubber/codemod/modify_list.py +54 -54
- stubber/codemod/utils.py +56 -56
- stubber/commands/build_cmd.py +94 -94
- stubber/commands/cli.py +49 -55
- stubber/commands/clone_cmd.py +78 -78
- stubber/commands/config_cmd.py +29 -29
- stubber/commands/enrich_folder_cmd.py +71 -71
- stubber/commands/get_core_cmd.py +71 -71
- stubber/commands/get_docstubs_cmd.py +92 -89
- stubber/commands/get_frozen_cmd.py +117 -114
- stubber/commands/get_mcu_cmd.py +102 -61
- stubber/commands/merge_cmd.py +66 -66
- stubber/commands/publish_cmd.py +118 -118
- stubber/commands/stub_cmd.py +31 -31
- stubber/commands/switch_cmd.py +62 -62
- stubber/commands/variants_cmd.py +48 -48
- stubber/cst_transformer.py +178 -178
- stubber/data/board_info.csv +193 -193
- stubber/data/board_info.json +1729 -1729
- stubber/data/micropython_tags.csv +15 -15
- stubber/data/requirements-core-micropython.txt +38 -38
- stubber/data/requirements-core-pycopy.txt +39 -39
- stubber/downloader.py +37 -36
- stubber/freeze/common.py +72 -68
- stubber/freeze/freeze_folder.py +69 -69
- stubber/freeze/freeze_manifest_2.py +126 -113
- stubber/freeze/get_frozen.py +131 -127
- stubber/get_cpython.py +112 -101
- stubber/get_lobo.py +59 -59
- stubber/minify.py +423 -419
- stubber/publish/bump.py +86 -86
- stubber/publish/candidates.py +275 -256
- stubber/publish/database.py +18 -18
- stubber/publish/defaults.py +40 -40
- stubber/publish/enums.py +24 -24
- stubber/publish/helpers.py +29 -29
- stubber/publish/merge_docstubs.py +136 -130
- stubber/publish/missing_class_methods.py +51 -49
- stubber/publish/package.py +150 -146
- stubber/publish/pathnames.py +51 -51
- stubber/publish/publish.py +120 -120
- stubber/publish/pypi.py +42 -38
- stubber/publish/stubpackage.py +1055 -1027
- stubber/rst/__init__.py +9 -9
- stubber/rst/classsort.py +78 -77
- stubber/rst/lookup.py +533 -530
- stubber/rst/output_dict.py +401 -401
- stubber/rst/reader.py +814 -814
- stubber/rst/report_return.py +77 -69
- stubber/rst/rst_utils.py +541 -540
- stubber/stubber.py +38 -38
- stubber/stubs_from_docs.py +90 -90
- stubber/tools/manifestfile.py +654 -654
- stubber/tools/readme.md +6 -6
- stubber/update_fallback.py +117 -117
- stubber/update_module_list.py +123 -123
- stubber/utils/__init__.py +6 -6
- stubber/utils/config.py +137 -125
- stubber/utils/makeversionhdr.py +54 -54
- stubber/utils/manifest.py +90 -90
- stubber/utils/post.py +80 -79
- stubber/utils/repos.py +156 -150
- stubber/utils/stubmaker.py +139 -139
- stubber/utils/typed_config_toml.py +80 -77
- stubber/variants.py +106 -106
- micropython_stubber-1.23.1.dist-info/RECORD +0 -159
- micropython_stubber-1.23.1.dist-info/entry_points.txt +0 -3
- mpflash/basicgit.py +0 -288
- {micropython_stubber-1.23.1.dist-info → micropython_stubber-1.23.2.dist-info}/WHEEL +0 -0
stubber/board/createstubs_min.py
CHANGED
@@ -1,295 +1,296 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
O='family'
|
34
|
-
N=ImportError
|
35
|
-
M=dir
|
36
|
-
K='port'
|
37
|
-
J='.'
|
38
|
-
I=AttributeError
|
39
|
-
H=False
|
40
|
-
G='/'
|
41
|
-
E=OSError
|
42
|
-
D=None
|
43
|
-
C='version'
|
44
|
-
B=''
|
45
|
-
import gc as F,os,sys
|
46
|
-
from time import sleep
|
47
|
-
try:from ujson import dumps
|
48
|
-
except:from json import dumps
|
49
|
-
try:from machine import reset
|
50
|
-
except N:pass
|
51
|
-
try:from collections import OrderedDict as
|
52
|
-
except N:from ucollections import OrderedDict as
|
53
|
-
__version__='v1.23.
|
54
|
-
|
55
|
-
A1=2
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
def
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
A
|
70
|
-
L.
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
B.
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
elif E in
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
except
|
104
|
-
|
105
|
-
|
106
|
-
def
|
107
|
-
|
108
|
-
|
109
|
-
B.
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
if B in C.
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
K.
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
if E[
|
141
|
-
if
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
if
|
151
|
-
|
152
|
-
C
|
153
|
-
|
154
|
-
elif I
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
elif G in(
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
if K in H:H=H.split(K)[0]+Z
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
elif A[K]==
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
if A[O]==
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
A[
|
255
|
-
|
256
|
-
A[
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
return
|
277
|
-
|
278
|
-
|
279
|
-
def
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
1
|
+
A0='No report file'
|
2
|
+
z='Failed to create the report.'
|
3
|
+
y='{}/{}'
|
4
|
+
x='logging'
|
5
|
+
w='sys'
|
6
|
+
v='method'
|
7
|
+
u='function'
|
8
|
+
t='bool'
|
9
|
+
s='str'
|
10
|
+
r='float'
|
11
|
+
q='int'
|
12
|
+
p='stubber'
|
13
|
+
o=Exception
|
14
|
+
n=KeyError
|
15
|
+
m=sorted
|
16
|
+
l=NotImplementedError
|
17
|
+
h='pycom'
|
18
|
+
g=',\n'
|
19
|
+
f='dict'
|
20
|
+
e='list'
|
21
|
+
d='tuple'
|
22
|
+
c='micropython'
|
23
|
+
b=TypeError
|
24
|
+
a=repr
|
25
|
+
Z=print
|
26
|
+
W='-preview'
|
27
|
+
V=True
|
28
|
+
U='-'
|
29
|
+
T='board'
|
30
|
+
S=len
|
31
|
+
R=open
|
32
|
+
Q=IndexError
|
33
|
+
O='family'
|
34
|
+
N=ImportError
|
35
|
+
M=dir
|
36
|
+
K='port'
|
37
|
+
J='.'
|
38
|
+
I=AttributeError
|
39
|
+
H=False
|
40
|
+
G='/'
|
41
|
+
E=OSError
|
42
|
+
D=None
|
43
|
+
C='version'
|
44
|
+
B=''
|
45
|
+
import gc as F,os,sys
|
46
|
+
from time import sleep
|
47
|
+
try:from ujson import dumps
|
48
|
+
except:from json import dumps
|
49
|
+
try:from machine import reset
|
50
|
+
except N:pass
|
51
|
+
try:from collections import OrderedDict as i
|
52
|
+
except N:from ucollections import OrderedDict as i
|
53
|
+
__version__='v1.23.2'
|
54
|
+
P=__version__.rsplit(J,1)[0]
|
55
|
+
A1=2
|
56
|
+
A2=2
|
57
|
+
A5=['lib','/lib','/sd/lib','/flash/lib',J]
|
58
|
+
class L:
|
59
|
+
INFO=20;WARNING=30;ERROR=40;level=INFO;prnt=Z
|
60
|
+
@staticmethod
|
61
|
+
def getLogger(name):return L()
|
62
|
+
@classmethod
|
63
|
+
def basicConfig(A,level):A.level=level
|
64
|
+
def info(A,msg):
|
65
|
+
if A.level<=L.INFO:A.prnt('INFO :',msg)
|
66
|
+
def warning(A,msg):
|
67
|
+
if A.level<=L.WARNING:A.prnt('WARN :',msg)
|
68
|
+
def error(A,msg):
|
69
|
+
if A.level<=L.ERROR:A.prnt('ERROR :',msg)
|
70
|
+
A=L.getLogger(p)
|
71
|
+
L.basicConfig(level=L.INFO)
|
72
|
+
class Stubber:
|
73
|
+
def __init__(B,path=D,firmware_id=D):
|
74
|
+
C=firmware_id
|
75
|
+
try:
|
76
|
+
if os.uname().release=='1.13.0'and os.uname().version<'v1.13-103':raise l('MicroPython 1.13.0 cannot be stubbed')
|
77
|
+
except I:pass
|
78
|
+
B.info=_info();A.info('Port: {}'.format(B.info[K]));A.info('Board: {}'.format(B.info[T]));F.collect()
|
79
|
+
if C:B._fwid=C.lower()
|
80
|
+
elif B.info[O]==c:B._fwid='{family}-v{version}-{port}-{board}'.format(**B.info).rstrip(U)
|
81
|
+
else:B._fwid='{family}-v{version}-{port}'.format(**B.info)
|
82
|
+
B._start_free=F.mem_free()
|
83
|
+
if path:
|
84
|
+
if path.endswith(G):path=path[:-1]
|
85
|
+
else:path=get_root()
|
86
|
+
B.path='{}/stubs/{}'.format(path,B.flat_fwid).replace('//',G)
|
87
|
+
try:X(path+G)
|
88
|
+
except E:A.error('error creating stub folder {}'.format(path))
|
89
|
+
B.problematic=['upip','upysh','webrepl_setup','http_client','http_client_ssl','http_server','http_server_ssl'];B.excluded=['webrepl','_webrepl','port_diag','example_sub_led.py','example_pub_button.py'];B.modules=[];B._json_name=D;B._json_first=H
|
90
|
+
def get_obj_attributes(L,item_instance):
|
91
|
+
H=item_instance;C=[];K=[]
|
92
|
+
for A in M(H):
|
93
|
+
if A.startswith('__')and not A in L.modules:continue
|
94
|
+
try:
|
95
|
+
D=getattr(H,A)
|
96
|
+
try:E=a(type(D)).split("'")[1]
|
97
|
+
except Q:E=B
|
98
|
+
if E in{q,r,s,t,d,e,f}:G=1
|
99
|
+
elif E in{u,v}:G=2
|
100
|
+
elif E in'class':G=3
|
101
|
+
else:G=4
|
102
|
+
C.append((A,a(D),a(type(D)),D,G))
|
103
|
+
except I as J:K.append("Couldn't get attribute '{}' from object '{}', Err: {}".format(A,H,J))
|
104
|
+
except MemoryError as J:Z('MemoryError: {}'.format(J));sleep(1);reset()
|
105
|
+
C=m([A for A in C if not A[0].startswith('__')],key=lambda x:x[4]);F.collect();return C,K
|
106
|
+
def add_modules(A,modules):A.modules=m(set(A.modules)|set(modules))
|
107
|
+
def create_all_stubs(B):
|
108
|
+
A.info('Start micropython-stubber {} on {}'.format(__version__,B._fwid));B.report_start();F.collect()
|
109
|
+
for C in B.modules:B.create_one_stub(C)
|
110
|
+
B.report_end();A.info('Finally done')
|
111
|
+
def create_one_stub(C,module_name):
|
112
|
+
B=module_name
|
113
|
+
if B in C.problematic:A.warning('Skip module: {:<25} : Known problematic'.format(B));return H
|
114
|
+
if B in C.excluded:A.warning('Skip module: {:<25} : Excluded'.format(B));return H
|
115
|
+
I='{}/{}.pyi'.format(C.path,B.replace(J,G));F.collect();D=H
|
116
|
+
try:D=C.create_module_stub(B,I)
|
117
|
+
except E:return H
|
118
|
+
F.collect();return D
|
119
|
+
def create_module_stub(K,module_name,file_name=D):
|
120
|
+
I=file_name;C=module_name
|
121
|
+
if I is D:L=C.replace(J,'_')+'.pyi';I=K.path+G+L
|
122
|
+
else:L=I.split(G)[-1]
|
123
|
+
if G in C:C=C.replace(G,J)
|
124
|
+
M=D
|
125
|
+
try:M=__import__(C,D,D,'*');Q=F.mem_free();A.info('Stub module: {:<25} to file: {:<70} mem:{:>5}'.format(C,L,Q))
|
126
|
+
except N:return H
|
127
|
+
X(I)
|
128
|
+
with R(I,'w')as O:S=str(K.info).replace('OrderedDict(',B).replace('})','}');T='"""\nModule: \'{0}\' on {1}\n"""\n# MCU: {2}\n# Stubber: {3}\n'.format(C,K._fwid,S,P);O.write(T);O.write('from __future__ import annotations\nfrom typing import Any, Generator\nfrom _typeshed import Incomplete\n\n');K.write_object_stub(O,M,C,B)
|
129
|
+
K.report_add(C,I)
|
130
|
+
if C not in{'os',w,x,'gc'}:
|
131
|
+
try:del M
|
132
|
+
except(E,n):A.warning('could not del new_module')
|
133
|
+
F.collect();return V
|
134
|
+
def write_object_stub(L,fp,object_expr,obj_name,indent,in_class=0):
|
135
|
+
Z=' at ...>';Y='generator';X='{0}{1}: {3} = {2}\n';W='bound_method';V='Incomplete';O=in_class;N='Exception';M=object_expr;K=' at ';J=fp;D=indent;F.collect()
|
136
|
+
if M in L.problematic:A.warning('SKIPPING problematic module:{}'.format(M));return
|
137
|
+
a,P=L.get_obj_attributes(M)
|
138
|
+
if P:A.error(P)
|
139
|
+
for(E,H,I,b,g)in a:
|
140
|
+
if E in['classmethod','staticmethod','BaseException',N]:continue
|
141
|
+
if E[0].isdigit():A.warning('NameError: invalid name {}'.format(E));continue
|
142
|
+
if I=="<class 'type'>"and S(D)<=A2*4:
|
143
|
+
Q=B;R=E.endswith(N)or E.endswith('Error')or E in['KeyboardInterrupt','StopIteration','SystemExit']
|
144
|
+
if R:Q=N
|
145
|
+
C='\n{}class {}({}):\n'.format(D,E,Q)
|
146
|
+
if R:C+=D+' ...\n';J.write(C);continue
|
147
|
+
J.write(C);L.write_object_stub(J,b,'{0}.{1}'.format(obj_name,E),D+' ',O+1);C=D+' def __init__(self, *argv, **kwargs) -> None:\n';C+=D+' ...\n\n';J.write(C)
|
148
|
+
elif any(A in I for A in[v,u,'closure']):
|
149
|
+
T=V;U=B
|
150
|
+
if O>0:U='self, '
|
151
|
+
if W in I or W in H:C='{}@classmethod\n'.format(D)+'{}def {}(cls, *args, **kwargs) -> {}:\n'.format(D,E,T)
|
152
|
+
else:C='{}def {}({}*args, **kwargs) -> {}:\n'.format(D,E,U,T)
|
153
|
+
C+=D+' ...\n\n';J.write(C)
|
154
|
+
elif I=="<class 'module'>":0
|
155
|
+
elif I.startswith("<class '"):
|
156
|
+
G=I[8:-2];C=B
|
157
|
+
if G in(s,q,r,t,'bytearray','bytes'):C=X.format(D,E,H,G)
|
158
|
+
elif G in(f,e,d):c={f:'{}',e:'[]',d:'()'};C=X.format(D,E,c[G],G)
|
159
|
+
elif G in('object','set','frozenset','Pin',Y):
|
160
|
+
if G==Y:G='Generator'
|
161
|
+
C='{0}{1}: {2} ## = {4}\n'.format(D,E,G,I,H)
|
162
|
+
else:
|
163
|
+
G=V
|
164
|
+
if K in H:H=H.split(K)[0]+Z
|
165
|
+
if K in H:H=H.split(K)[0]+Z
|
166
|
+
C='{0}{1}: {2} ## {3} = {4}\n'.format(D,E,G,I,H)
|
167
|
+
J.write(C)
|
168
|
+
else:J.write("# all other, type = '{0}'\n".format(I));J.write(D+E+' # type: Incomplete\n')
|
169
|
+
@property
|
170
|
+
def flat_fwid(self):
|
171
|
+
A=self._fwid;B=' .()/\\:$'
|
172
|
+
for C in B:A=A.replace(C,'_')
|
173
|
+
return A
|
174
|
+
def clean(C,path=D):
|
175
|
+
if path is D:path=C.path
|
176
|
+
A.info('Clean/remove files in folder: {}'.format(path))
|
177
|
+
try:os.stat(path);F=os.listdir(path)
|
178
|
+
except(E,I):return
|
179
|
+
for G in F:
|
180
|
+
B=y.format(path,G)
|
181
|
+
try:os.remove(B)
|
182
|
+
except E:
|
183
|
+
try:C.clean(B);os.rmdir(B)
|
184
|
+
except E:pass
|
185
|
+
def report_start(B,filename='modules.json'):
|
186
|
+
H='firmware';B._json_name=y.format(B.path,filename);B._json_first=V;X(B._json_name);A.info('Report file: {}'.format(B._json_name));F.collect()
|
187
|
+
try:
|
188
|
+
with R(B._json_name,'w')as G:G.write('{');G.write(dumps({H:B.info})[1:-1]);G.write(g);G.write(dumps({p:{C:P},'stubtype':H})[1:-1]);G.write(g);G.write('"modules" :[\n')
|
189
|
+
except E as I:A.error(z);B._json_name=D;raise I
|
190
|
+
def report_add(B,module_name,stub_file):
|
191
|
+
if not B._json_name:raise o(A0)
|
192
|
+
try:
|
193
|
+
with R(B._json_name,'a')as C:
|
194
|
+
if not B._json_first:C.write(g)
|
195
|
+
else:B._json_first=H
|
196
|
+
D='{{"module": "{}", "file": "{}"}}'.format(module_name,stub_file.replace('\\',G));C.write(D)
|
197
|
+
except E:A.error(z)
|
198
|
+
def report_end(B):
|
199
|
+
if not B._json_name:raise o(A0)
|
200
|
+
with R(B._json_name,'a')as C:C.write('\n]}')
|
201
|
+
A.info('Path: {}'.format(B.path))
|
202
|
+
def X(path):
|
203
|
+
B=D=0
|
204
|
+
while B!=-1:
|
205
|
+
B=path.find(G,D)
|
206
|
+
if B!=-1:
|
207
|
+
C=path[0]if B==0 else path[:B]
|
208
|
+
try:I=os.stat(C)
|
209
|
+
except E as F:
|
210
|
+
if F.args[0]==A1:
|
211
|
+
try:os.mkdir(C)
|
212
|
+
except E as H:A.error('failed to create folder {}'.format(C));raise H
|
213
|
+
D=B+1
|
214
|
+
def Y(s):
|
215
|
+
C=' on '
|
216
|
+
if not s:return B
|
217
|
+
s=s.split(C,1)[0]if C in s else s
|
218
|
+
if s.startswith('v'):
|
219
|
+
if not U in s:return B
|
220
|
+
A=s.split(U)[1];return A
|
221
|
+
if not W in s:return B
|
222
|
+
A=s.split(W)[1].split(J)[1];return A
|
223
|
+
def _info():
|
224
|
+
a='ev3-pybricks';Z='pycopy';X='unix';V='win32';U='arch';S='cpu';R='ver';F='mpy';E='build'
|
225
|
+
try:H=sys.implementation[0]
|
226
|
+
except b:H=sys.implementation.name
|
227
|
+
A=i({O:H,C:B,E:B,R:B,K:sys.platform,T:'UNKNOWN',S:B,F:B,U:B})
|
228
|
+
if A[K].startswith('pyb'):A[K]='stm32'
|
229
|
+
elif A[K]==V:A[K]='windows'
|
230
|
+
elif A[K]=='linux':A[K]=X
|
231
|
+
try:A[C]=P(sys.implementation.version)
|
232
|
+
except I:pass
|
233
|
+
try:J=sys.implementation._machine if'_machine'in M(sys.implementation)else os.uname().machine;A[T]=J;A[S]=J.split('with')[-1].strip();A[F]=sys.implementation._mpy if'_mpy'in M(sys.implementation)else sys.implementation.mpy if F in M(sys.implementation)else B
|
234
|
+
except(I,Q):pass
|
235
|
+
A[T]=A3()
|
236
|
+
try:
|
237
|
+
if'uname'in M(os):
|
238
|
+
A[E]=Y(os.uname()[3])
|
239
|
+
if not A[E]:A[E]=Y(os.uname()[2])
|
240
|
+
elif C in M(sys):A[E]=Y(sys.version)
|
241
|
+
except(I,Q,b):pass
|
242
|
+
if A[C]==B and sys.platform not in(X,V):
|
243
|
+
try:d=os.uname();A[C]=d.release
|
244
|
+
except(Q,I,b):pass
|
245
|
+
for(e,f,g)in[(Z,Z,'const'),(h,h,'FAT'),(a,'pybricks.hubs','EV3Brick')]:
|
246
|
+
try:j=__import__(f,D,D,g);A[O]=e;del j;break
|
247
|
+
except(N,n):pass
|
248
|
+
if A[O]==a:A['release']='2.0.0'
|
249
|
+
if A[O]==c:
|
250
|
+
A[C]
|
251
|
+
if A[C]and A[C].endswith('.0')and A[C]>='1.10.0'and A[C]<='1.19.9':A[C]=A[C][:-2]
|
252
|
+
if F in A and A[F]:
|
253
|
+
G=int(A[F]);L=[D,'x86','x64','armv6','armv6m','armv7m','armv7em','armv7emsp','armv7emdp','xtensa','xtensawin'][G>>10]
|
254
|
+
if L:A[U]=L
|
255
|
+
A[F]='v{}.{}'.format(G&255,G>>8&3)
|
256
|
+
if A[E]and not A[C].endswith(W):A[C]=A[C]+W
|
257
|
+
A[R]=f"{A[C]}-{A[E]}"if A[E]else f"{A[C]}";return A
|
258
|
+
def P(version):
|
259
|
+
A=version;B=J.join([str(A)for A in A[:3]])
|
260
|
+
if S(A)>3 and A[3]:B+=U+A[3]
|
261
|
+
return B
|
262
|
+
def A3():
|
263
|
+
try:from boardname import BOARDNAME as C;A.info('Found BOARDNAME: {}'.format(C))
|
264
|
+
except N:A.warning('BOARDNAME not found');C=B
|
265
|
+
return C
|
266
|
+
def get_root():
|
267
|
+
try:A=os.getcwd()
|
268
|
+
except(E,I):A=J
|
269
|
+
B=A
|
270
|
+
for B in[A,'/sd','/flash',G,J]:
|
271
|
+
try:C=os.stat(B);break
|
272
|
+
except E:continue
|
273
|
+
return B
|
274
|
+
def A4(filename):
|
275
|
+
try:
|
276
|
+
if os.stat(filename)[0]>>14:return V
|
277
|
+
return H
|
278
|
+
except E:return H
|
279
|
+
def j():Z("-p, --path path to store the stubs in, defaults to '.'");sys.exit(1)
|
280
|
+
def read_path():
|
281
|
+
path=B
|
282
|
+
if S(sys.argv)==3:
|
283
|
+
A=sys.argv[1].lower()
|
284
|
+
if A in('--path','-p'):path=sys.argv[2]
|
285
|
+
else:j()
|
286
|
+
elif S(sys.argv)==2:j()
|
287
|
+
return path
|
288
|
+
def k():
|
289
|
+
try:A=bytes('abc',encoding='utf8');B=k.__module__;return H
|
290
|
+
except(l,I):return V
|
291
|
+
def main():stubber=Stubber(path=read_path());stubber.clean();stubber.modules=['WM8960','_OTA','_asyncio','_boot_fat','_coap','_espnow','_flash_control_OTA','_main_pybytes','_mqtt','_mqtt_core','_msg_handl','_onewire','_periodical_pin','_pybytes','_pybytes_ca','_pybytes_config','_pybytes_config_reader','_pybytes_connection','_pybytes_constants','_pybytes_debug','_pybytes_library','_pybytes_machine_learning','_pybytes_main','_pybytes_protocol','_pybytes_pyconfig','_pybytes_pymesh_config','_rp2','_terminal','_thread','_uasyncio','_urequest','adcfft','aioble/__init__','aioble/central','aioble/client','aioble/core','aioble/device','aioble/l2cap','aioble/peripheral','aioble/security','aioble/server','aioespnow','ak8963','apa102','apa106','argparse','array','asyncio/__init__','asyncio/core','asyncio/event','asyncio/funcs','asyncio/lock','asyncio/stream','binascii','bluetooth','breakout_as7262','breakout_bh1745','breakout_bme280','breakout_bme68x','breakout_bmp280','breakout_dotmatrix','breakout_encoder','breakout_icp10125','breakout_ioexpander','breakout_ltr559','breakout_matrix11x7','breakout_mics6814','breakout_msa301','breakout_paa5100','breakout_pmw3901','breakout_potentiometer','breakout_rgbmatrix5x5','breakout_rtc','breakout_scd41','breakout_sgp30','breakout_trackball','breakout_vl53l5cx','btree','cmath','collections','crypto','cryptolib','curl','deflate','dht','display','display_driver_utils','ds18x20','encoder','errno','esp','esp32','espidf','espnow','ffi','flashbdev','framebuf','freesans20','fs_driver','functools','galactic','gc','gfx_pack','gsm','hashlib','heapq','hub75','ili9341','ili9XXX','imagetools','inisetup','interstate75','io','jpegdec','js','jsffi','json','lcd160cr','lodepng',x,'lsm6dsox','lv_colors','lv_utils','lvgl','lwip','machine','math','microWebSocket','microWebSrv','microWebTemplate',c,'mip','mip/__init__','mip/__main__','motor','mpu6500','mpu9250','neopixel','network','ntptime','onewire','openamp','os','pcf85063a','picoexplorer','picographics','picokeypad','picoscroll','picounicorn','picowireless','pimoroni','pimoroni_bus','pimoroni_i2c','plasma','platform','pyb',h,'pye','qrcode','queue','random','requests','requests/__init__','rp2','rtch','samd','select','servo','socket','ssd1306','ssh','ssl','stm','struct',w,'termios','time','tls','tpcalib','uarray','uasyncio/__init__','uasyncio/core','uasyncio/event','uasyncio/funcs','uasyncio/lock','uasyncio/stream','uasyncio/tasks','ubinascii','ubluetooth','ucollections','ucrypto','ucryptolib','uctypes','uerrno','uftpd','uhashlib','uheapq','uio','ujson','ulab','ulab/approx','ulab/compare','ulab/fft','ulab/filter','ulab/linalg','ulab/numerical','ulab/poly','ulab/user','ulab/vector','umachine','umqtt/__init__','umqtt/robust','umqtt/simple','uos','uplatform','uqueue','urandom','ure','urequests','urllib/urequest','usb/device','usb/device/cdc','usb/device/hid','usb/device/keyboard','usb/device/midi','usb/device/mouse','uselect','usocket','ussl','ustruct','usys','utelnetserver','utime','utimeq','uwebsocket','uzlib',C,'vfs','websocket','websocket_helper','wipy','writer','xpt2046','ymodem','zephyr','zlib'];F.collect();stubber.create_all_stubs()
|
292
|
+
if __name__=='__main__'or k():
|
293
|
+
if not A4('no_auto_stubber.txt'):
|
294
|
+
try:F.threshold(4*1024);F.enable()
|
295
|
+
except BaseException:pass
|
295
296
|
main()
|
Binary file
|