micrOSDevToolKit 2.20.0__py3-none-any.whl → 2.21.0__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 micrOSDevToolKit might be problematic. Click here for more details.

Files changed (34) hide show
  1. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +19 -15
  2. micrOS/source/Config.py +5 -2
  3. micrOS/source/Espnow.py +99 -40
  4. micrOS/source/Files.py +50 -23
  5. micrOS/source/InterConnect.py +9 -3
  6. micrOS/source/Pacman.py +141 -0
  7. micrOS/source/Shell.py +1 -1
  8. micrOS/source/Tasks.py +4 -1
  9. micrOS/source/modules/LM_oled_ui.py +39 -41
  10. micrOS/source/modules/LM_oledui.py +56 -85
  11. micrOS/source/modules/LM_pacman.py +36 -44
  12. micrOS/source/urequests.py +1 -1
  13. {microsdevtoolkit-2.20.0.dist-info → microsdevtoolkit-2.21.0.dist-info}/METADATA +9 -6
  14. {microsdevtoolkit-2.20.0.dist-info → microsdevtoolkit-2.21.0.dist-info}/RECORD +34 -32
  15. toolkit/DevEnvOTA.py +2 -2
  16. toolkit/DevEnvUSB.py +1 -1
  17. toolkit/lib/micrOSClient.py +37 -15
  18. toolkit/lib/micrOSClientHistory.py +35 -1
  19. toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
  20. toolkit/simulator_lib/uos.py +1 -0
  21. toolkit/workspace/precompiled/Config.mpy +0 -0
  22. toolkit/workspace/precompiled/Espnow.mpy +0 -0
  23. toolkit/workspace/precompiled/Files.mpy +0 -0
  24. toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  25. toolkit/workspace/precompiled/Pacman.mpy +0 -0
  26. toolkit/workspace/precompiled/Shell.mpy +0 -0
  27. toolkit/workspace/precompiled/Tasks.mpy +0 -0
  28. toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
  29. toolkit/workspace/precompiled/modules/LM_oledui.mpy +0 -0
  30. toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
  31. {microsdevtoolkit-2.20.0.data → microsdevtoolkit-2.21.0.data}/scripts/devToolKit.py +0 -0
  32. {microsdevtoolkit-2.20.0.dist-info → microsdevtoolkit-2.21.0.dist-info}/WHEEL +0 -0
  33. {microsdevtoolkit-2.20.0.dist-info → microsdevtoolkit-2.21.0.dist-info}/licenses/LICENSE +0 -0
  34. {microsdevtoolkit-2.20.0.dist-info → microsdevtoolkit-2.21.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: micrOSDevToolKit
3
- Version: 2.20.0
3
+ Version: 2.21.0
4
4
  Summary: Development and deployment environment for micrOS, the diy micropython automation OS (IoT)
5
5
  Home-page: https://github.com/BxNxM/micrOS
6
6
  Author: Marcell Ban
@@ -497,7 +497,7 @@ Version **3.0.0-0** `micrOS-Autonomous`
497
497
  - urequest module async redesign for rest clients [OK]
498
498
  - LM_telegram (Notify) + server (listener - chatbot) [OK]
499
499
  - (2) ESP-NOW (peer-to-peer communication) integration into InterCon [DONE]
500
- - Multi command same device improvement (session ID handling) [TODO]
500
+ - Multi command same device improvement (session ID handling) [DONE]
501
501
  - (3) New intercon syntax - command level integration: [DONE]
502
502
  - rgb toggle >>RingLight.local
503
503
  - similar as (obsolete): intercon sendcmd host="RingLight.local" cmd="rgb toggle"
@@ -540,15 +540,18 @@ Version **3.0.0-0** `micrOS-Autonomous`
540
540
 
541
541
  - (5) [DONE] Universal task creation response: `{taskID: verdict}`
542
542
 
543
- - (6) [TODO] Proper mip installer support (/modules or /lib or /web)
543
+ - (6) [DONE] Proper mip installer support (/modules or /lib or /web)
544
544
  - Note: Autonomous package management over wifi (github)
545
- - pacman download [POC][DONE][TODO]
545
+ - pacman download [DONE]
546
546
  - pacman ls [DONE]
547
547
  - pacman dirtree [DONE]
548
548
  - pacman ...
549
549
 
550
- - (7) [TODO] /config/requirements.txt handling
551
- - pacman requirements install/remove/list
550
+ - (7) [DONE] /config/requirements.txt handling (native micropython requirements syntax)
551
+ - pacman download "requirements.txt"
552
+
553
+ - [TODO] General system review and optimization (with Codex AI)
554
+ - memory usage and performance
552
555
  ```
553
556
 
554
557
  Version **3.1.0-0** `micrOS-Waterbear`
@@ -31,23 +31,24 @@ micrOS/micropython/esp32s3-8MBflash-20241129-v1.24.1.bin,sha256=Att5Tefiky4cDYBh
31
31
  micrOS/micropython/esp32s3_spiram_oct-20241129-v1.24.1.bin,sha256=VbOF_F0YeqttkQd2ePTW66Jd34RU8u9ccFfcv8kxO_U,1662672
32
32
  micrOS/micropython/rpi-pico-w-20241129-v1.24.1.uf2,sha256=v4aYIbWaE94_f6DDzBWS-a9L1BzlcdkZwld9R7bOVA4,1727488
33
33
  micrOS/micropython/tinypico-20241129-v1.24.1.bin,sha256=Kf3cr766a5SK99CZy8bwdWjwvAZxls3tBYvaHBsw7ac,1527200
34
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=jxV1a-5_zokkX1Ot_ZchBpVjMUckk4b6142YbfItyMY,6260
34
+ micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=hCygQauU89dR9vLlp2xTkmeRudATsc9v8idyw-wVfuI,6327
35
35
  micrOS/source/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
36
36
  micrOS/source/Common.py,sha256=Ef6Pk2Esx0SpNbxV951NilMBUqFf2LbGSAeKUSNovxs,16585
37
- micrOS/source/Config.py,sha256=Ci2VjlK2RW1rvKr1xR4A6HeqktZYAkrU12hFVqngXB0,9178
37
+ micrOS/source/Config.py,sha256=IdKoyawKSIGwhyeD34Gl9rIHASmoweC_3gQdrn8dyms,9311
38
38
  micrOS/source/Debug.py,sha256=in2tx6Dw8EqeKYTrJpLxSevpoIrJjxlH17JLrTui1o8,3287
39
- micrOS/source/Espnow.py,sha256=E-hqJstOrcE2WtniwMdUT3UfXX1NlitAir05pSbou-8,13082
40
- micrOS/source/Files.py,sha256=SsA4kDWiB8gcunmu9mVVVGmTzxSvkpBqQV-J-U5rzt4,5428
39
+ micrOS/source/Espnow.py,sha256=fzvd54XJXrofeWfDRSWwOqKOr36_jzCVw32KQ0qO-ZM,15072
40
+ micrOS/source/Files.py,sha256=IqzRjVFKZt7tNJGqWY_xqxY8IXX0W_7IOpJvyKGkHHU,6445
41
41
  micrOS/source/Hooks.py,sha256=XdHCo2avht0wUj5xT1oM4tPGZM4uZ2DYmaCOFHYIpjM,4190
42
- micrOS/source/InterConnect.py,sha256=MZGPo1h2fcztDkXUBHt9oRknbg6Mr281-3z6XKrUZgo,11098
42
+ micrOS/source/InterConnect.py,sha256=_UsUm73Di-HG5tD2YuT69H3bUkIzCnqcYZbrVyCVyIA,11377
43
43
  micrOS/source/Interrupts.py,sha256=kLDsByjoGeEiDk_0yV7iAvsZlKs9uFqPcAKkdNNR6HU,7543
44
44
  micrOS/source/Logger.py,sha256=QSABn-dFDBDQFxgQzu1vpWnqHFg7UjJ-6utMmpEWqes,3979
45
45
  micrOS/source/Network.py,sha256=bFG_OE1baHQFJgpcNC_KAKTGPQlgN7pisV07CI30k1g,10165
46
46
  micrOS/source/Notify.py,sha256=5_Sqy2FeBVG6HznC48Rgg812AglGjO8pkDYGSpp5qSg,2637
47
+ micrOS/source/Pacman.py,sha256=9IqgO5bHWQi5wPiXYkyWZJZd3BWHKdLwS054Gl7iwdI,5230
47
48
  micrOS/source/Scheduler.py,sha256=EhOdDQqN4V1G0TD2jU5cmjUjY_g-sU8NwFoUfniBKF0,9628
48
49
  micrOS/source/Server.py,sha256=WSDW2BaCkTxkDruKZXW98jhtQXHKaCz7Em1oPYQL4Kk,16869
49
- micrOS/source/Shell.py,sha256=I1zK7WFhOVUt9VicUJLnv-pmwTWNVMFu4hu7pSOZRfs,13309
50
- micrOS/source/Tasks.py,sha256=yZK3LeDcAZZ-tthFdAD1BWon5pbTzY-ReW-I1Q-0-mY,24383
50
+ micrOS/source/Shell.py,sha256=_IQLE8KR4MpmYgIfY97vosA7e1obOsd1SkrtgRPE7ak,13309
51
+ micrOS/source/Tasks.py,sha256=BqGj6i1Ao_T89M5mos8yeNtBohsb2euFc8p6GK5ZWGg,24504
51
52
  micrOS/source/Time.py,sha256=8EHp86CAkbGIErGgN-VGAsslUBFIooRGkHB1hUYwwOE,6408
52
53
  micrOS/source/Types.py,sha256=Ft_gHokGNa9aQRGSwE3NYIvYZuolT3zfkD5JzhycQ1s,3499
53
54
  micrOS/source/Web.py,sha256=EeZzKcZMTDVls5Qu-kT8dnX2Mt8L6M4eLiCBhDBJa40,11059
@@ -56,7 +57,7 @@ micrOS/source/micrOS.py,sha256=QM1lgUnv2qrklj5-qgU6MM_6YsTKq4VGk71Od3Dzx1M,2872
56
57
  micrOS/source/micrOSloader.py,sha256=9o6VIWPAgnQVb3uQDHENW9aO21gkM4jgR4O1t6uoPHI,4624
57
58
  micrOS/source/microIO.py,sha256=h7i78Rl_DKG5vwpCgk1dsY-Z9ikvmOQLMiusYP_yRMI,7096
58
59
  micrOS/source/reset.py,sha256=i7wsPkOXE7Mm0xOiw1CjqCvCdNjBvYswn9CRDvE2VbE,248
59
- micrOS/source/urequests.py,sha256=SrzOgo8UF9YncjfeItM9-xqUr5xEoUt1kOcPxisn6uw,9456
60
+ micrOS/source/urequests.py,sha256=yqLR4B0JBTIo_B1vbPBafDWivVAsiYAT7sh_YX6as1k,9464
60
61
  micrOS/source/__pycache__/Common.cpython-312.pyc,sha256=lQtONeXVsuA-HBJs6PDex5dzKTS5NAT9vSBuD3TZFss,20232
61
62
  micrOS/source/__pycache__/Debug.cpython-312.pyc,sha256=mpOPlK6qEb2Xd2j3PmXXV6jYA4R1MFUtNMgCKa9q2Qs,3932
62
63
  micrOS/source/__pycache__/Files.cpython-312.pyc,sha256=kaWr8UH2EPFwaOE6GK_kcTODqrjZeS42Kj4J4xF-rv0,6724
@@ -105,9 +106,9 @@ micrOS/source/modules/LM_neomatrix.py,sha256=jCNpV-HDOpNHe7k00fr4TfDVYkM45wCmB4Z
105
106
  micrOS/source/modules/LM_neopixel.py,sha256=V0WEwHtjj0cKfiUpWNdRVOa6KEJ6q3VhNzobN9PfQr4,13212
106
107
  micrOS/source/modules/LM_oled.py,sha256=ZwLndxWuY1Ii5d06YEf9Z_jxmTyoOYRL-BO3VhJ0b14,9903
107
108
  micrOS/source/modules/LM_oled_sh1106.py,sha256=av2_ftFHvfAIxcPYHbrOMQNZgM1Go6MQzBu5cIeVK4w,11723
108
- micrOS/source/modules/LM_oled_ui.py,sha256=Dux4h8zUwSPa8zfo_lwmhH31Xmyb76d04AFoSTlwa98,22276
109
- micrOS/source/modules/LM_oledui.py,sha256=LlkJixv3bl3o-8Das7Iu8ouaivuB79iWs2ZLiSRnwuI,35321
110
- micrOS/source/modules/LM_pacman.py,sha256=YWshcR0itd3CAZSfvpOkyH9Ux9H0dBKonI4fzK77qls,9750
109
+ micrOS/source/modules/LM_oled_ui.py,sha256=3E3f2goWfmue7Oq34sXyYWqIC9fHxtNhg-8A_dOqnfE,22285
110
+ micrOS/source/modules/LM_oledui.py,sha256=6QduSOFDRH3Tr4SAv3L-qWb6x1sk9cgshnsCBBD3MnE,34357
111
+ micrOS/source/modules/LM_pacman.py,sha256=a2M-c_DJ7bsvfOy6a09PDUx9qg3kSJi0JGaGaofPShI,9787
111
112
  micrOS/source/modules/LM_presence.py,sha256=jzJKJJ6hwPCZjQfOTO8iQdVIym89V4DhIiYf72KtXso,8741
112
113
  micrOS/source/modules/LM_qmi8658.py,sha256=4OOAUo7NV7G1Rx01l8LK-wGw19GDaAukDjH6vvxt7ds,6303
113
114
  micrOS/source/modules/LM_rencoder.py,sha256=9w00JP8UKC_GEKr18xgZ5axX9xc_wVeR9XlWpVR2Qzw,3973
@@ -136,11 +137,11 @@ micrOS/source/web/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN6uGqw9LpScDrGGF5
136
137
  micrOS/source/web/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
137
138
  micrOS/source/web/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
138
139
  micrOS/source/web/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
139
- microsdevtoolkit-2.20.0.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
140
- microsdevtoolkit-2.20.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
140
+ microsdevtoolkit-2.21.0.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
141
+ microsdevtoolkit-2.21.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
141
142
  toolkit/DevEnvCompile.py,sha256=wNBf0T7w07SYC3eLFow3JtZApHQK-92Fu7CvJHqWuSM,13189
142
- toolkit/DevEnvOTA.py,sha256=8IfAcvV0L_H91FAiZDRBmC06cWOXXCpoSDO-JWE6CG4,26889
143
- toolkit/DevEnvUSB.py,sha256=TorXJt5qJ1Wk8Qi5Ncn3ortu432GHVCSQFXhSuA0OSU,37197
143
+ toolkit/DevEnvOTA.py,sha256=oUZsOy9MFO3RWyNypV2jbWWMtd4VI-N14-EAhxVNWe0,26945
144
+ toolkit/DevEnvUSB.py,sha256=NTocKaYBRoNPEJ4jJVHukPqjwS_5KwzDQ_gQcd8y4ao,37207
144
145
  toolkit/Gateway.py,sha256=wz81ZteRtKuNsXmX3Zi9Uo4g5fuCxbErAhas0HrkJqU,25353
145
146
  toolkit/LM_to_compile.dat,sha256=EcJSCR3xugskiLAJY1BWEBfa0A4EhP5qHDXNRQZQ30E,619
146
147
  toolkit/MicrOSDevEnv.py,sha256=Puh0u2oQhPptj-XTvvi8N9Wm3UzDBys1ZHQvzCXjmB4,14583
@@ -185,8 +186,8 @@ toolkit/lib/SerialDriverHandler.py,sha256=Zn0zeq4mshTMVc6fzycvrOZiKt6w6YOxJcTWw3
185
186
  toolkit/lib/TerminalColors.py,sha256=Ly_8o9-eBmka1dqA2M3DBlcd1zvCCO2K_BnQ1XbqxcE,947
186
187
  toolkit/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
187
188
  toolkit/lib/macroScript.py,sha256=DQR8cFoks7fa0dgRUfGhTpEdUJWNQ1vikRoqukRKx14,14014
188
- toolkit/lib/micrOSClient.py,sha256=q1zN3nqW9t36sHqYt0fKsP61tPSC-u21-7WYqbJcO0Q,19346
189
- toolkit/lib/micrOSClientHistory.py,sha256=EyCqbFeMy940bfXq4Yfu8dcvb7GnBvuHHxOAIgmW1FQ,4736
189
+ toolkit/lib/micrOSClient.py,sha256=CWSmuYMJ4Rlphh8ZnBFn4Eq2tL26usubKNkGfnPqBFI,20000
190
+ toolkit/lib/micrOSClientHistory.py,sha256=XsymDBTUhfyvmHhAMZ2wHQCZrgkITFeeNm0fAOxgOIQ,5673
190
191
  toolkit/lib/pip_package_installer.py,sha256=BYhJR3KnVan9iTAe4p5ZgpHJlimtRx_yG3uKGbQrjXc,4482
191
192
  toolkit/simulator_lib/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
192
193
  toolkit/simulator_lib/IO_darwin.py,sha256=f8HOfQKJvniShvjpBe6f4nisr6oJd9SnvxPsbdNIGQk,2336
@@ -209,7 +210,7 @@ toolkit/simulator_lib/simgc.py,sha256=qaYlZKW48ciIglgYxZt9ZxRUyThskhoQqke_A_bfIy
209
210
  toolkit/simulator_lib/simulator.py,sha256=BHIQVY0f71ActHJo2Eo3JEg-4ELr2bv-TRSZqlPVHIo,8102
210
211
  toolkit/simulator_lib/tinypico.py,sha256=z6B0743-7Cg8ISa7q7kljvKi0DGoegWus3HbiaOGU3E,156
211
212
  toolkit/simulator_lib/uasyncio.py,sha256=4ENv435IIr56x5IWeJUr1-QdczBBVG1zFr3-H2VDSpw,822
212
- toolkit/simulator_lib/uos.py,sha256=HEa7lK8ow2Zppy8n3z0O_vz0BBmMHxG1MES2cZ_kzy4,3611
213
+ toolkit/simulator_lib/uos.py,sha256=QREvzngY5R4dhxyl-h-6gUxpzvVIJncAwZkWxyHy0Mw,3643
213
214
  toolkit/simulator_lib/usocket.py,sha256=7cqbG03yW5wySY1yCdFRbjDgDvbFqpU1otNJxyedaGU,347
214
215
  toolkit/simulator_lib/ussl.py,sha256=yBXPRGKIWwBRQFcKwciHCDfTj69bgfswH0WSrk3Zhjg,601
215
216
  toolkit/simulator_lib/ustruct.py,sha256=XEcN7BdO_dDw2j5fDNzv-McTGPC0kObt1LJ2KU1Kpm8,136
@@ -265,7 +266,7 @@ toolkit/simulator_lib/__pycache__/tinypico.cpython-39.pyc,sha256=VPvz9Caomn5rtrR
265
266
  toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc,sha256=ihShEcyfAQVtDTWDcsx3rENRGWKlw4ZLo90OTt_opCQ,2112
266
267
  toolkit/simulator_lib/__pycache__/uasyncio.cpython-38.pyc,sha256=F9FU77fFSaOYcAsDiMTQbOIaQ9bKeI1HuAqLZCjNIfk,976
267
268
  toolkit/simulator_lib/__pycache__/uasyncio.cpython-39.pyc,sha256=OMX0MlM7Y4WWePolE-QTVMoKn1yQnQHxvpsb42JErcI,1355
268
- toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc,sha256=VxxLUl1JT4bIZE79kjCmdESt2v9D37hjTG-1jWt8rM0,6149
269
+ toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc,sha256=3zfY4et_ChyusaeHot6vbuNxufAYVHjb67Mq7fDg8QE,6186
269
270
  toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc,sha256=rAKwfzQXhHGDSvCYyRcohNbb1dzKxZHZ2EGrSF-B8L0,842
270
271
  toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc,sha256=ZffWjvpL_43ihw5Rb4dGQ-8a7s3r5G-6ZvX8LixPCjU,1019
271
272
  toolkit/simulator_lib/__pycache__/ustruct.cpython-312.pyc,sha256=T_xaVNR9vCkHsrkuBOB9jKzx9HPGo1I3GeSO20b2kRI,516
@@ -290,20 +291,21 @@ toolkit/user_data/webhooks/template.macro,sha256=XikSl3FsD6W9pUx3sqavM5tWIMBquFx
290
291
  toolkit/user_data/webhooks/template.py,sha256=UhyXmETAEr-VQutY9ME4gAb-4qi7qVfZ0NjSU1inn-E,342
291
292
  toolkit/workspace/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
292
293
  toolkit/workspace/precompiled/Common.mpy,sha256=NhIMgu2QPTifEzkZCLBKVxGwNIQ6xyyQ3b03gEJoTBg,4133
293
- toolkit/workspace/precompiled/Config.mpy,sha256=tj0x_vwNo59wqBbkoFJ_-7reXQWwwQtG3-Sg_CMeNlo,3272
294
+ toolkit/workspace/precompiled/Config.mpy,sha256=Zj45tP3RcZ9dNhIsIx69Fnpbf2m6r-mVO6exxlTPoUo,3347
294
295
  toolkit/workspace/precompiled/Debug.mpy,sha256=BJqoH4QdOmeybdUxUlhNu6ApHo4KTraJ5F_winmwOm0,1039
295
- toolkit/workspace/precompiled/Espnow.mpy,sha256=iIWsO_ov7Wh_iQlEeqtb8vHd6ppo8BgqnInbuRFljsA,4445
296
- toolkit/workspace/precompiled/Files.mpy,sha256=_qwNi5p_d1PXPRoF5SWiFuxmY3qt8OtT8FOhW5JusF0,1798
296
+ toolkit/workspace/precompiled/Espnow.mpy,sha256=esmiz87lAdd_QiQ_ilOkdA1B6LK__XJVGF2qHrndjME,4837
297
+ toolkit/workspace/precompiled/Files.mpy,sha256=AtPakPIScSpVW3GdEDTZ9dlhu02lfpYHdOOsoVousQE,1920
297
298
  toolkit/workspace/precompiled/Hooks.mpy,sha256=Jb-3JliF0O4RitSfsVm8zxSFT3VGcYmPked9W6X1jNw,1769
298
- toolkit/workspace/precompiled/InterConnect.mpy,sha256=bhoTshgN07Ou4fRnW5YHDtd8sk2e3-dCQEgdJWlsnYQ,3330
299
+ toolkit/workspace/precompiled/InterConnect.mpy,sha256=lpSXfr_c6sXwUxKiIPhF9AuxMj8gpIxZsIGyxsCRDag,3482
299
300
  toolkit/workspace/precompiled/Interrupts.mpy,sha256=0p3Bpx1C7wXWHz9jLM-eqFD0X9wuT6eKzaOdmzpkVBE,2128
300
301
  toolkit/workspace/precompiled/Logger.mpy,sha256=lgAiS5nQqIskNBtEqDoH3GwohOH0mflr8JoYV6b5x4g,1324
301
302
  toolkit/workspace/precompiled/Network.mpy,sha256=foBjsIZ1SafRplCw8v5GgDU_WjPTaRz1W9D6VYyaBSc,3553
302
303
  toolkit/workspace/precompiled/Notify.mpy,sha256=i8LNNynvNxi-tA5QT0pQJ8NJ_DNxJNW4NTZRD6gGS7M,970
304
+ toolkit/workspace/precompiled/Pacman.mpy,sha256=jNKvOMl_4JJyZKoy55h-egVnCA5axQJ9H9p0OjTSjGs,1805
303
305
  toolkit/workspace/precompiled/Scheduler.mpy,sha256=S-ZS1N420Xew74F_90O4FvFvrvmRTMiCh-C8szrdhfI,2198
304
306
  toolkit/workspace/precompiled/Server.mpy,sha256=dS2IY9NAjvy2v7-fQHeY44n080GlL3ZV8ENtN1A3KPw,4896
305
- toolkit/workspace/precompiled/Shell.mpy,sha256=EgF2dSFgednlMKdoR4TCndHV4frf4h2XBseIzU31_xw,4821
306
- toolkit/workspace/precompiled/Tasks.mpy,sha256=OCEIC_9OCjOA0hye1t-d_5iGv1Hg700XZMvyz2UIFts,6712
307
+ toolkit/workspace/precompiled/Shell.mpy,sha256=yUVTELQ3Fhkgu5eWuh8Bhy5IRiQV3vxnDB3HUZYpiCQ,4821
308
+ toolkit/workspace/precompiled/Tasks.mpy,sha256=j4GC3pjZ2g2Npm5FUWLZWMZcJrrc5BxfD8G3IloncC8,6762
307
309
  toolkit/workspace/precompiled/Time.mpy,sha256=3thC6iKW4UJdjNP-Jo1Ol0Zn-e4oy2H1wiIz7SH182E,2865
308
310
  toolkit/workspace/precompiled/Types.mpy,sha256=5QGhswa0jWAU1Ywpyl_92miQg4qDHReXLqq3iHBwUCs,1397
309
311
  toolkit/workspace/precompiled/Web.mpy,sha256=X3-nqKYY_RSLsAspTFY_O7H5vkUR0OwECFbSyxqSUUc,4030
@@ -357,9 +359,9 @@ toolkit/workspace/precompiled/modules/LM_neomatrix.mpy,sha256=exJxcMKVP4xUi1ct7y
357
359
  toolkit/workspace/precompiled/modules/LM_neopixel.mpy,sha256=INhwGU1maVlk52j8_WS1t9wX22xsnpPeE0rNyZoPKlc,3637
358
360
  toolkit/workspace/precompiled/modules/LM_oled.mpy,sha256=82OqTsCgooB4y6BdMMBaDyfHYoHkq1W_UMteOmy0ePw,3162
359
361
  toolkit/workspace/precompiled/modules/LM_oled_sh1106.mpy,sha256=tOsOk5zOT9f5sw027wQyUEXRanx8IcSyuUN6tgfd73w,3769
360
- toolkit/workspace/precompiled/modules/LM_oled_ui.mpy,sha256=JRd-1h_rk8_-r7BuXW18d7abJHgr8zv56Kjd4dJ-Ass,7044
361
- toolkit/workspace/precompiled/modules/LM_oledui.mpy,sha256=vf3dnKokNmOlE4e_z1J6gMV1bfOuWmJ3quGzQWgP0UY,11488
362
- toolkit/workspace/precompiled/modules/LM_pacman.mpy,sha256=m7S4Gi3fAihwxpfzCaSkTDPyIzmqp4hf6KroBo5ucPw,3946
362
+ toolkit/workspace/precompiled/modules/LM_oled_ui.mpy,sha256=_VVkCz9y0VKQy-44DIqwn3yy5p02LxxwFojBljDckGM,6964
363
+ toolkit/workspace/precompiled/modules/LM_oledui.mpy,sha256=mNWY2P7vJ6GCwrbXepcPxN58NdV3CYYPWIFOOYwNrpQ,11084
364
+ toolkit/workspace/precompiled/modules/LM_pacman.mpy,sha256=p4T2GthxJGncvsQZWS7tpRzy5qATga-Es-tsXAvNNmE,3439
363
365
  toolkit/workspace/precompiled/modules/LM_presence.mpy,sha256=dYdKcSMimZBHNJakSgfwe0wjqXBPALyNfZC6TrHlK0U,2706
364
366
  toolkit/workspace/precompiled/modules/LM_qmi8658.py,sha256=4OOAUo7NV7G1Rx01l8LK-wGw19GDaAukDjH6vvxt7ds,6303
365
367
  toolkit/workspace/precompiled/modules/LM_rencoder.py,sha256=9w00JP8UKC_GEKr18xgZ5axX9xc_wVeR9XlWpVR2Qzw,3973
@@ -388,7 +390,7 @@ toolkit/workspace/precompiled/web/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN
388
390
  toolkit/workspace/precompiled/web/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
389
391
  toolkit/workspace/precompiled/web/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
390
392
  toolkit/workspace/precompiled/web/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
391
- microsdevtoolkit-2.20.0.dist-info/METADATA,sha256=RozLFA-_nXNRhi9y_plpL6s0ZKpPu0nlDfwzDdBR6jQ,50711
392
- microsdevtoolkit-2.20.0.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
393
- microsdevtoolkit-2.20.0.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
394
- microsdevtoolkit-2.20.0.dist-info/RECORD,,
393
+ microsdevtoolkit-2.21.0.dist-info/METADATA,sha256=417XpOTgpz2Li0KndHPjqrNMr7jU10WQ0eWZskbnq0I,50837
394
+ microsdevtoolkit-2.21.0.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
395
+ microsdevtoolkit-2.21.0.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
396
+ microsdevtoolkit-2.21.0.dist-info/RECORD,,
toolkit/DevEnvOTA.py CHANGED
@@ -42,7 +42,7 @@ class OTA(Compile):
42
42
  # Skip the following modules in OTA update (safe mode) to have recovery mode
43
43
  self.safe_mode_file_exception_list = ['main.py', 'micrOSloader.mpy',
44
44
  'Network.mpy', 'Config.mpy',
45
- 'Debug.mpy']
45
+ 'Debug.mpy', 'Files.py']
46
46
 
47
47
  def safe_core_list(self):
48
48
  return self.safe_mode_file_exception_list
@@ -421,7 +421,7 @@ class OTA(Compile):
421
421
  source_name_target = os.path.join('web', source_name)
422
422
  elif check_python_extensions(source_name):
423
423
  source_name_target = os.path.join('modules', source_name)
424
- elif source_name.endswith("node_config.json"):
424
+ elif source_name.endswith("node_config.json") or source_name.endswith("requirements.txt"):
425
425
  source_name_target = os.path.join('config', source_name)
426
426
  else:
427
427
  # Copy file to micrOS data folder (not web, not module, not config)
toolkit/DevEnvUSB.py CHANGED
@@ -386,7 +386,7 @@ class USB(Compile):
386
386
  # List USB devices on Windows
387
387
  import serial.tools.list_ports as serial_port_list # Import here (only windows...), package not exists on some platforms
388
388
  ports = list(serial_port_list.comports())
389
- win_known_devices = ("CP210", "CH340", "CH343")
389
+ win_known_devices = ("CP210", "CH340", "CH343", "CH9102")
390
390
  for item in ports:
391
391
  self.console(f'[Win] Com device: {item.description}')
392
392
  if any(device in str(item.description) for device in win_known_devices):
@@ -7,6 +7,9 @@ try:
7
7
  except:
8
8
  from TerminalColors import Colors as color
9
9
 
10
+
11
+ ANSI_ESCAPE_RE = re.compile(r"\x1B\[[0-?]*[ -/]*[@-~]")
12
+
10
13
  def load_command_history(prompt_getter):
11
14
  """Optional command history feature"""
12
15
  try:
@@ -173,22 +176,33 @@ class micrOSClient:
173
176
 
174
177
  def __filter_preprompt(self, _data):
175
178
  if len(_data) == 0:
176
- return
177
- last_line = _data.strip().split('\n')[-1]
178
- # get pre-prompt: >[configure]< prompt $
179
+ return _data
180
+
181
+ has_trailing_newline = _data.endswith('\n')
182
+ working = _data.rstrip('\n')
183
+ lines = working.split('\n') if working else ['']
184
+ last_line = lines[-1]
185
+
179
186
  if self.prompt is not None:
180
- # Check prompt is in last line
181
- if self.prompt in last_line:
182
- # Check pre-prompt - remove prompt
183
- x = last_line.replace(self.prompt, '')
184
- # SET preprompt if preprompt exists
185
- self.preprompt = x if len(x) > 0 else self.preprompt
186
- # Pre-prompt remove and cancel preprompt modes
187
- if self.preprompt in last_line:
188
- _data = _data.replace(self.preprompt, "")
189
- else:
190
- self.preprompt = ""
191
- return _data
187
+ prompt_index = last_line.find(self.prompt)
188
+ if prompt_index != -1:
189
+ raw_prefix = last_line[:prompt_index]
190
+ plain_prefix = ANSI_ESCAPE_RE.sub('', raw_prefix)
191
+
192
+ plain_prefix = plain_prefix.rstrip()
193
+ if plain_prefix:
194
+ if not plain_prefix.endswith(' '):
195
+ plain_prefix += ' '
196
+ self.preprompt = plain_prefix
197
+ else:
198
+ self.preprompt = ""
199
+
200
+ lines[-1] = last_line[prompt_index:]
201
+
202
+ rebuilt = '\n'.join(lines)
203
+ if has_trailing_newline:
204
+ rebuilt += '\n'
205
+ return rebuilt
192
206
 
193
207
  def __receive_data(self, read_timeout=20, stream=False):
194
208
  """
@@ -323,18 +337,26 @@ class micrOSClient:
323
337
  return
324
338
 
325
339
  history = load_command_history(self.telnet_prompt) # History: Beta feature
340
+ if history is not None:
341
+ history.prompt = self.telnet_prompt
326
342
  print(self.telnet_prompt, end="")
327
343
  is_empty = False # Empty input support
328
344
  while True:
329
345
  try:
330
346
  # INPUT HANDLING
347
+ if history is not None:
348
+ history.prompt = self.telnet_prompt
331
349
  cmd = input(self.telnet_prompt if is_empty else '') # CANNOT contain prompt - it is coming back from response data
332
350
  if len(cmd.strip()) == 0:
333
351
  is_empty = True
352
+ if history is not None:
353
+ history.prompt = self.telnet_prompt
334
354
  continue
335
355
  is_empty = False
336
356
  # SEND COMMAND
337
357
  output = self.send_cmd(cmd, timeout=timeout, stream=True)
358
+ if history is not None:
359
+ history.prompt = self.telnet_prompt
338
360
  if not (history is None or output is None) and "Shell: for hints type help." not in output: # History: Beta feature
339
361
  history.add_history(cmd)
340
362
  # OUTPUT HANDLING
@@ -1,5 +1,6 @@
1
1
  import sys
2
2
  import os
3
+ import re
3
4
 
4
5
  try:
5
6
  import readline # Linux/macOS
@@ -12,8 +13,14 @@ except:
12
13
  from TerminalColors import Colors as color
13
14
 
14
15
 
16
+ ANSI_ESCAPE_RE = re.compile(r"\x1B\[[0-?]*[ -/]*[@-~]")
17
+
18
+
15
19
  class CommandInterface:
16
20
  def __init__(self, prompt):
21
+ self._prompt = ""
22
+ self._prompt_plain = ""
23
+ self._last_rendered_length = 0
17
24
  self.prompt = prompt
18
25
  self.command_history = ["help"]
19
26
  self.history_file = os.path.expanduser("~/.micrOS_cmd_history") # History file (Linux/macOS)
@@ -76,10 +83,37 @@ class CommandInterface:
76
83
  matches = list(dict.fromkeys(cmd for cmd in self.command_history if cmd.startswith(text)))
77
84
  return matches[state] if state < len(matches) else None
78
85
 
86
+ @staticmethod
87
+ def _strip_ansi(value):
88
+ if not value:
89
+ return ""
90
+ return ANSI_ESCAPE_RE.sub("", value)
91
+
92
+ @property
93
+ def prompt(self):
94
+ return self._prompt
95
+
96
+ @prompt.setter
97
+ def prompt(self, value):
98
+ self._prompt = value
99
+ self._prompt_plain = self._strip_ansi(value)
100
+
79
101
  def pre_input_hook(self):
80
102
  """Ensures prompt visibility when scrolling through history."""
81
- sys.stdout.write(f"\r{self.prompt}{readline.get_line_buffer()}")
103
+ buffer = readline.get_line_buffer()
104
+ sys.stdout.write("\r")
105
+ rendered = f"{self.prompt}{buffer}"
106
+ sys.stdout.write(rendered)
107
+
108
+ visible_length = len(self._prompt_plain) + len(buffer)
109
+ if visible_length < self._last_rendered_length:
110
+ padding = " " * (self._last_rendered_length - visible_length)
111
+ sys.stdout.write(padding)
112
+ sys.stdout.write("\r")
113
+ sys.stdout.write(rendered)
114
+
82
115
  sys.stdout.flush()
116
+ self._last_rendered_length = visible_length
83
117
  readline.redisplay() # Ensures history navigation does not erase prompt
84
118
 
85
119
  def completion_display(self, substitutions, matches, longest_match_length):
@@ -94,6 +94,7 @@ def stat(path):
94
94
 
95
95
 
96
96
  def rmdir(path):
97
+ path = __mock_sim_dir(path)
97
98
  print(f"[uos.SIM] rmdir: {path}")
98
99
  if "simulator" in path and path.replace('/', '').endswith('simulator'):
99
100
  print(f"\t[uos.SIM] rmdir: Invalid path! {path}")
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file