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
@@ -1,307 +1,308 @@
|
|
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
|
-
R=True
|
28
|
-
Q='family'
|
29
|
-
P=len
|
30
|
-
O=open
|
31
|
-
N=ImportError
|
32
|
-
M=dir
|
33
|
-
K='port'
|
34
|
-
J='.'
|
35
|
-
I=AttributeError
|
36
|
-
H=False
|
37
|
-
G='/'
|
38
|
-
F=OSError
|
39
|
-
E=None
|
40
|
-
C='version'
|
41
|
-
B=''
|
42
|
-
import gc as D,os,sys
|
43
|
-
from time import sleep
|
44
|
-
try:from ujson import dumps
|
45
|
-
except:from json import dumps
|
46
|
-
try:from machine import reset
|
47
|
-
except N:pass
|
48
|
-
try:from collections import OrderedDict as
|
49
|
-
except N:from ucollections import OrderedDict as
|
50
|
-
__version__='v1.23.
|
51
|
-
|
52
|
-
z=2
|
53
|
-
A0=
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
def
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
A
|
67
|
-
L.
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
B.
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
elif F in
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
except
|
101
|
-
|
102
|
-
|
103
|
-
def
|
104
|
-
|
105
|
-
|
106
|
-
B.
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
if B in C.
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
K.
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
if F[
|
138
|
-
if
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
if
|
148
|
-
|
149
|
-
C
|
150
|
-
|
151
|
-
elif I
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
elif G in(
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
if K in H:H=H.split(K)[0]+Z
|
162
|
-
|
163
|
-
|
164
|
-
|
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
|
-
elif A[K]==
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
if A[Q]==
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
A[
|
252
|
-
|
253
|
-
A[
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
return
|
274
|
-
|
275
|
-
|
276
|
-
def
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
if
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
1
|
+
y='No report file'
|
2
|
+
x='Failed to create the report.'
|
3
|
+
w='{}/{}'
|
4
|
+
v='method'
|
5
|
+
u='function'
|
6
|
+
t='bool'
|
7
|
+
s='str'
|
8
|
+
r='float'
|
9
|
+
q='int'
|
10
|
+
p='stubber'
|
11
|
+
o=Exception
|
12
|
+
n=KeyError
|
13
|
+
m=sorted
|
14
|
+
l=NotImplementedError
|
15
|
+
g=',\n'
|
16
|
+
f='dict'
|
17
|
+
e='list'
|
18
|
+
d='tuple'
|
19
|
+
c='micropython'
|
20
|
+
b=TypeError
|
21
|
+
a=repr
|
22
|
+
X='-preview'
|
23
|
+
W='-'
|
24
|
+
V='board'
|
25
|
+
U=IndexError
|
26
|
+
T=print
|
27
|
+
R=True
|
28
|
+
Q='family'
|
29
|
+
P=len
|
30
|
+
O=open
|
31
|
+
N=ImportError
|
32
|
+
M=dir
|
33
|
+
K='port'
|
34
|
+
J='.'
|
35
|
+
I=AttributeError
|
36
|
+
H=False
|
37
|
+
G='/'
|
38
|
+
F=OSError
|
39
|
+
E=None
|
40
|
+
C='version'
|
41
|
+
B=''
|
42
|
+
import gc as D,os,sys
|
43
|
+
from time import sleep
|
44
|
+
try:from ujson import dumps
|
45
|
+
except:from json import dumps
|
46
|
+
try:from machine import reset
|
47
|
+
except N:pass
|
48
|
+
try:from collections import OrderedDict as h
|
49
|
+
except N:from ucollections import OrderedDict as h
|
50
|
+
__version__='v1.23.2'
|
51
|
+
S=__version__.rsplit(J,1)[0]
|
52
|
+
z=2
|
53
|
+
A0=2
|
54
|
+
A1=['lib','/lib','/sd/lib','/flash/lib',J]
|
55
|
+
class L:
|
56
|
+
INFO=20;WARNING=30;ERROR=40;level=INFO;prnt=T
|
57
|
+
@staticmethod
|
58
|
+
def getLogger(name):return L()
|
59
|
+
@classmethod
|
60
|
+
def basicConfig(A,level):A.level=level
|
61
|
+
def info(A,msg):
|
62
|
+
if A.level<=L.INFO:A.prnt('INFO :',msg)
|
63
|
+
def warning(A,msg):
|
64
|
+
if A.level<=L.WARNING:A.prnt('WARN :',msg)
|
65
|
+
def error(A,msg):
|
66
|
+
if A.level<=L.ERROR:A.prnt('ERROR :',msg)
|
67
|
+
A=L.getLogger(p)
|
68
|
+
L.basicConfig(level=L.INFO)
|
69
|
+
class Stubber:
|
70
|
+
def __init__(B,path=E,firmware_id=E):
|
71
|
+
C=firmware_id
|
72
|
+
try:
|
73
|
+
if os.uname().release=='1.13.0'and os.uname().version<'v1.13-103':raise l('MicroPython 1.13.0 cannot be stubbed')
|
74
|
+
except I:pass
|
75
|
+
B.info=_info();A.info('Port: {}'.format(B.info[K]));A.info('Board: {}'.format(B.info[V]));D.collect()
|
76
|
+
if C:B._fwid=C.lower()
|
77
|
+
elif B.info[Q]==c:B._fwid='{family}-v{version}-{port}-{board}'.format(**B.info).rstrip(W)
|
78
|
+
else:B._fwid='{family}-v{version}-{port}'.format(**B.info)
|
79
|
+
B._start_free=D.mem_free()
|
80
|
+
if path:
|
81
|
+
if path.endswith(G):path=path[:-1]
|
82
|
+
else:path=get_root()
|
83
|
+
B.path='{}/stubs/{}'.format(path,B.flat_fwid).replace('//',G)
|
84
|
+
try:Y(path+G)
|
85
|
+
except F:A.error('error creating stub folder {}'.format(path))
|
86
|
+
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=E;B._json_first=H
|
87
|
+
def get_obj_attributes(L,item_instance):
|
88
|
+
H=item_instance;C=[];K=[]
|
89
|
+
for A in M(H):
|
90
|
+
if A.startswith('__')and not A in L.modules:continue
|
91
|
+
try:
|
92
|
+
E=getattr(H,A)
|
93
|
+
try:F=a(type(E)).split("'")[1]
|
94
|
+
except U:F=B
|
95
|
+
if F in{q,r,s,t,d,e,f}:G=1
|
96
|
+
elif F in{u,v}:G=2
|
97
|
+
elif F in'class':G=3
|
98
|
+
else:G=4
|
99
|
+
C.append((A,a(E),a(type(E)),E,G))
|
100
|
+
except I as J:K.append("Couldn't get attribute '{}' from object '{}', Err: {}".format(A,H,J))
|
101
|
+
except MemoryError as J:T('MemoryError: {}'.format(J));sleep(1);reset()
|
102
|
+
C=m([A for A in C if not A[0].startswith('__')],key=lambda x:x[4]);D.collect();return C,K
|
103
|
+
def add_modules(A,modules):A.modules=m(set(A.modules)|set(modules))
|
104
|
+
def create_all_stubs(B):
|
105
|
+
A.info('Start micropython-stubber {} on {}'.format(__version__,B._fwid));B.report_start();D.collect()
|
106
|
+
for C in B.modules:B.create_one_stub(C)
|
107
|
+
B.report_end();A.info('Finally done')
|
108
|
+
def create_one_stub(C,module_name):
|
109
|
+
B=module_name
|
110
|
+
if B in C.problematic:A.warning('Skip module: {:<25} : Known problematic'.format(B));return H
|
111
|
+
if B in C.excluded:A.warning('Skip module: {:<25} : Excluded'.format(B));return H
|
112
|
+
I='{}/{}.pyi'.format(C.path,B.replace(J,G));D.collect();E=H
|
113
|
+
try:E=C.create_module_stub(B,I)
|
114
|
+
except F:return H
|
115
|
+
D.collect();return E
|
116
|
+
def create_module_stub(K,module_name,file_name=E):
|
117
|
+
I=file_name;C=module_name
|
118
|
+
if I is E:L=C.replace(J,'_')+'.pyi';I=K.path+G+L
|
119
|
+
else:L=I.split(G)[-1]
|
120
|
+
if G in C:C=C.replace(G,J)
|
121
|
+
M=E
|
122
|
+
try:M=__import__(C,E,E,'*');Q=D.mem_free();A.info('Stub module: {:<25} to file: {:<70} mem:{:>5}'.format(C,L,Q))
|
123
|
+
except N:return H
|
124
|
+
Y(I)
|
125
|
+
with O(I,'w')as P:T=str(K.info).replace('OrderedDict(',B).replace('})','}');U='"""\nModule: \'{0}\' on {1}\n"""\n# MCU: {2}\n# Stubber: {3}\n'.format(C,K._fwid,T,S);P.write(U);P.write('from __future__ import annotations\nfrom typing import Any, Generator\nfrom _typeshed import Incomplete\n\n');K.write_object_stub(P,M,C,B)
|
126
|
+
K.report_add(C,I)
|
127
|
+
if C not in{'os','sys','logging','gc'}:
|
128
|
+
try:del M
|
129
|
+
except(F,n):A.warning('could not del new_module')
|
130
|
+
D.collect();return R
|
131
|
+
def write_object_stub(L,fp,object_expr,obj_name,indent,in_class=0):
|
132
|
+
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;E=indent;D.collect()
|
133
|
+
if M in L.problematic:A.warning('SKIPPING problematic module:{}'.format(M));return
|
134
|
+
a,Q=L.get_obj_attributes(M)
|
135
|
+
if Q:A.error(Q)
|
136
|
+
for(F,H,I,b,g)in a:
|
137
|
+
if F in['classmethod','staticmethod','BaseException',N]:continue
|
138
|
+
if F[0].isdigit():A.warning('NameError: invalid name {}'.format(F));continue
|
139
|
+
if I=="<class 'type'>"and P(E)<=A0*4:
|
140
|
+
R=B;S=F.endswith(N)or F.endswith('Error')or F in['KeyboardInterrupt','StopIteration','SystemExit']
|
141
|
+
if S:R=N
|
142
|
+
C='\n{}class {}({}):\n'.format(E,F,R)
|
143
|
+
if S:C+=E+' ...\n';J.write(C);continue
|
144
|
+
J.write(C);L.write_object_stub(J,b,'{0}.{1}'.format(obj_name,F),E+' ',O+1);C=E+' def __init__(self, *argv, **kwargs) -> None:\n';C+=E+' ...\n\n';J.write(C)
|
145
|
+
elif any(A in I for A in[v,u,'closure']):
|
146
|
+
T=V;U=B
|
147
|
+
if O>0:U='self, '
|
148
|
+
if W in I or W in H:C='{}@classmethod\n'.format(E)+'{}def {}(cls, *args, **kwargs) -> {}:\n'.format(E,F,T)
|
149
|
+
else:C='{}def {}({}*args, **kwargs) -> {}:\n'.format(E,F,U,T)
|
150
|
+
C+=E+' ...\n\n';J.write(C)
|
151
|
+
elif I=="<class 'module'>":0
|
152
|
+
elif I.startswith("<class '"):
|
153
|
+
G=I[8:-2];C=B
|
154
|
+
if G in(s,q,r,t,'bytearray','bytes'):C=X.format(E,F,H,G)
|
155
|
+
elif G in(f,e,d):c={f:'{}',e:'[]',d:'()'};C=X.format(E,F,c[G],G)
|
156
|
+
elif G in('object','set','frozenset','Pin',Y):
|
157
|
+
if G==Y:G='Generator'
|
158
|
+
C='{0}{1}: {2} ## = {4}\n'.format(E,F,G,I,H)
|
159
|
+
else:
|
160
|
+
G=V
|
161
|
+
if K in H:H=H.split(K)[0]+Z
|
162
|
+
if K in H:H=H.split(K)[0]+Z
|
163
|
+
C='{0}{1}: {2} ## {3} = {4}\n'.format(E,F,G,I,H)
|
164
|
+
J.write(C)
|
165
|
+
else:J.write("# all other, type = '{0}'\n".format(I));J.write(E+F+' # type: Incomplete\n')
|
166
|
+
@property
|
167
|
+
def flat_fwid(self):
|
168
|
+
A=self._fwid;B=' .()/\\:$'
|
169
|
+
for C in B:A=A.replace(C,'_')
|
170
|
+
return A
|
171
|
+
def clean(C,path=E):
|
172
|
+
if path is E:path=C.path
|
173
|
+
A.info('Clean/remove files in folder: {}'.format(path))
|
174
|
+
try:os.stat(path);D=os.listdir(path)
|
175
|
+
except(F,I):return
|
176
|
+
for G in D:
|
177
|
+
B=w.format(path,G)
|
178
|
+
try:os.remove(B)
|
179
|
+
except F:
|
180
|
+
try:C.clean(B);os.rmdir(B)
|
181
|
+
except F:pass
|
182
|
+
def report_start(B,filename='modules.json'):
|
183
|
+
H='firmware';B._json_name=w.format(B.path,filename);B._json_first=R;Y(B._json_name);A.info('Report file: {}'.format(B._json_name));D.collect()
|
184
|
+
try:
|
185
|
+
with O(B._json_name,'w')as G:G.write('{');G.write(dumps({H:B.info})[1:-1]);G.write(g);G.write(dumps({p:{C:S},'stubtype':H})[1:-1]);G.write(g);G.write('"modules" :[\n')
|
186
|
+
except F as I:A.error(x);B._json_name=E;raise I
|
187
|
+
def report_add(B,module_name,stub_file):
|
188
|
+
if not B._json_name:raise o(y)
|
189
|
+
try:
|
190
|
+
with O(B._json_name,'a')as C:
|
191
|
+
if not B._json_first:C.write(g)
|
192
|
+
else:B._json_first=H
|
193
|
+
D='{{"module": "{}", "file": "{}"}}'.format(module_name,stub_file.replace('\\',G));C.write(D)
|
194
|
+
except F:A.error(x)
|
195
|
+
def report_end(B):
|
196
|
+
if not B._json_name:raise o(y)
|
197
|
+
with O(B._json_name,'a')as C:C.write('\n]}')
|
198
|
+
A.info('Path: {}'.format(B.path))
|
199
|
+
def Y(path):
|
200
|
+
B=D=0
|
201
|
+
while B!=-1:
|
202
|
+
B=path.find(G,D)
|
203
|
+
if B!=-1:
|
204
|
+
C=path[0]if B==0 else path[:B]
|
205
|
+
try:I=os.stat(C)
|
206
|
+
except F as E:
|
207
|
+
if E.args[0]==z:
|
208
|
+
try:os.mkdir(C)
|
209
|
+
except F as H:A.error('failed to create folder {}'.format(C));raise H
|
210
|
+
D=B+1
|
211
|
+
def Z(s):
|
212
|
+
C=' on '
|
213
|
+
if not s:return B
|
214
|
+
s=s.split(C,1)[0]if C in s else s
|
215
|
+
if s.startswith('v'):
|
216
|
+
if not W in s:return B
|
217
|
+
A=s.split(W)[1];return A
|
218
|
+
if not X in s:return B
|
219
|
+
A=s.split(X)[1].split(J)[1];return A
|
220
|
+
def _info():
|
221
|
+
d='ev3-pybricks';a='pycom';Y='pycopy';W='unix';T='win32';R='arch';P='cpu';O='ver';F='mpy';D='build'
|
222
|
+
try:H=sys.implementation[0]
|
223
|
+
except b:H=sys.implementation.name
|
224
|
+
A=h({Q:H,C:B,D:B,O:B,K:sys.platform,V:'UNKNOWN',P:B,F:B,R:B})
|
225
|
+
if A[K].startswith('pyb'):A[K]='stm32'
|
226
|
+
elif A[K]==T:A[K]='windows'
|
227
|
+
elif A[K]=='linux':A[K]=W
|
228
|
+
try:A[C]=S(sys.implementation.version)
|
229
|
+
except I:pass
|
230
|
+
try:J=sys.implementation._machine if'_machine'in M(sys.implementation)else os.uname().machine;A[V]=J;A[P]=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
|
231
|
+
except(I,U):pass
|
232
|
+
A[V]=A2()
|
233
|
+
try:
|
234
|
+
if'uname'in M(os):
|
235
|
+
A[D]=Z(os.uname()[3])
|
236
|
+
if not A[D]:A[D]=Z(os.uname()[2])
|
237
|
+
elif C in M(sys):A[D]=Z(sys.version)
|
238
|
+
except(I,U,b):pass
|
239
|
+
if A[C]==B and sys.platform not in(W,T):
|
240
|
+
try:e=os.uname();A[C]=e.release
|
241
|
+
except(U,I,b):pass
|
242
|
+
for(f,g,i)in[(Y,Y,'const'),(a,a,'FAT'),(d,'pybricks.hubs','EV3Brick')]:
|
243
|
+
try:j=__import__(g,E,E,i);A[Q]=f;del j;break
|
244
|
+
except(N,n):pass
|
245
|
+
if A[Q]==d:A['release']='2.0.0'
|
246
|
+
if A[Q]==c:
|
247
|
+
A[C]
|
248
|
+
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]
|
249
|
+
if F in A and A[F]:
|
250
|
+
G=int(A[F]);L=[E,'x86','x64','armv6','armv6m','armv7m','armv7em','armv7emsp','armv7emdp','xtensa','xtensawin'][G>>10]
|
251
|
+
if L:A[R]=L
|
252
|
+
A[F]='v{}.{}'.format(G&255,G>>8&3)
|
253
|
+
if A[D]and not A[C].endswith(X):A[C]=A[C]+X
|
254
|
+
A[O]=f"{A[C]}-{A[D]}"if A[D]else f"{A[C]}";return A
|
255
|
+
def S(version):
|
256
|
+
A=version;B=J.join([str(A)for A in A[:3]])
|
257
|
+
if P(A)>3 and A[3]:B+=W+A[3]
|
258
|
+
return B
|
259
|
+
def A2():
|
260
|
+
try:from boardname import BOARDNAME as C;A.info('Found BOARDNAME: {}'.format(C))
|
261
|
+
except N:A.warning('BOARDNAME not found');C=B
|
262
|
+
return C
|
263
|
+
def get_root():
|
264
|
+
try:A=os.getcwd()
|
265
|
+
except(F,I):A=J
|
266
|
+
B=A
|
267
|
+
for B in[A,'/sd','/flash',G,J]:
|
268
|
+
try:C=os.stat(B);break
|
269
|
+
except F:continue
|
270
|
+
return B
|
271
|
+
def i(filename):
|
272
|
+
try:
|
273
|
+
if os.stat(filename)[0]>>14:return R
|
274
|
+
return H
|
275
|
+
except F:return H
|
276
|
+
def j():T("-p, --path path to store the stubs in, defaults to '.'");sys.exit(1)
|
277
|
+
def read_path():
|
278
|
+
path=B
|
279
|
+
if P(sys.argv)==3:
|
280
|
+
A=sys.argv[1].lower()
|
281
|
+
if A in('--path','-p'):path=sys.argv[2]
|
282
|
+
else:j()
|
283
|
+
elif P(sys.argv)==2:j()
|
284
|
+
return path
|
285
|
+
def k():
|
286
|
+
try:A=bytes('abc',encoding='utf8');B=k.__module__;return H
|
287
|
+
except(l,I):return R
|
288
|
+
def main():
|
289
|
+
stubber=Stubber(path=read_path());stubber.clean()
|
290
|
+
def A(stubber):
|
291
|
+
D.collect();stubber.modules=[]
|
292
|
+
for C in A1:
|
293
|
+
B=C+'/modulelist.txt'
|
294
|
+
if not i(B):continue
|
295
|
+
with O(B)as E:
|
296
|
+
while R:
|
297
|
+
A=E.readline().strip()
|
298
|
+
if not A:break
|
299
|
+
if P(A)>0 and A[0]!='#':stubber.modules.append(A)
|
300
|
+
D.collect();T('BREAK');break
|
301
|
+
if not stubber.modules:stubber.modules=[c]
|
302
|
+
D.collect()
|
303
|
+
stubber.modules=[];A(stubber);D.collect();stubber.create_all_stubs()
|
304
|
+
if __name__=='__main__'or k():
|
305
|
+
if not i('no_auto_stubber.txt'):
|
306
|
+
try:D.threshold(4*1024);D.enable()
|
307
|
+
except BaseException:pass
|
307
308
|
main()
|
Binary file
|