micrOSDevToolKit 2.1.5__py3-none-any.whl → 2.26.1__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.
- env/driver_cp210x/.DS_Store +0 -0
- env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
- env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +17 -1
- micrOS/micropython/esp32-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32c3-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32c6-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s2-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s2-LOLIN_MINI-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s3-4MBflash-20241129-v1.24.1.bin +0 -0
- micrOS/micropython/esp32s3-8MBflash-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s3_spiram_oct-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/rpi-pico-w-20251209-v1.27.0.uf2 +0 -0
- micrOS/micropython/tinypico-20251209-v1.27.0.bin +0 -0
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +191 -151
- micrOS/source/Auth.py +37 -0
- micrOS/source/Common.py +376 -102
- micrOS/source/Config.py +55 -25
- micrOS/source/Debug.py +54 -193
- micrOS/source/Espnow.py +404 -0
- micrOS/source/Files.py +207 -0
- micrOS/source/Hooks.py +88 -16
- micrOS/source/InterConnect.py +130 -46
- micrOS/source/Interrupts.py +8 -8
- micrOS/source/Logger.py +131 -0
- micrOS/source/Network.py +41 -21
- micrOS/source/Notify.py +74 -198
- micrOS/source/Pacman.py +326 -0
- micrOS/source/Scheduler.py +18 -55
- micrOS/source/Server.py +84 -217
- micrOS/source/Shell.py +103 -93
- micrOS/source/Tasks.py +239 -173
- micrOS/source/Time.py +21 -22
- micrOS/source/Types.py +89 -54
- micrOS/source/Web.py +485 -0
- micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Debug.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Files.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Scheduler.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Shell.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/replhelper.cpython-312.pyc +0 -0
- micrOS/source/helpers.py +132 -0
- micrOS/source/micrOS.py +25 -21
- micrOS/source/micrOSloader.py +14 -23
- micrOS/source/microIO.py +94 -57
- toolkit/simulator_lib/LP_darwin.py → micrOS/source/modules/IO_esp32.py +22 -11
- micrOS/source/{IO_esp32c3.py → modules/IO_esp32c3.py} +6 -1
- micrOS/source/modules/IO_esp32c6.py +38 -0
- micrOS/source/{IO_esp32s2.py → modules/IO_esp32s2.py} +6 -1
- micrOS/source/{IO_esp32s3.py → modules/IO_esp32s3.py} +43 -2
- micrOS/source/modules/IO_m5stamp.py +86 -0
- micrOS/source/{IO_qtpy.py → modules/IO_qtpy.py} +28 -18
- micrOS/source/{IO_tinypico.py → modules/IO_tinypico.py} +48 -3
- micrOS/source/modules/LM_L298N.py +161 -0
- {toolkit/workspace/precompiled → micrOS/source/modules}/LM_L9110_DCmotor.py +4 -4
- micrOS/source/{LM_OV2640.py → modules/LM_OV2640.py} +53 -42
- micrOS/source/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
- micrOS/source/{LM_aht10.py → modules/LM_aht10.py} +12 -4
- micrOS/source/{LM_bme280.py → modules/LM_bme280.py} +13 -25
- micrOS/source/{LM_buzzer.py → modules/LM_buzzer.py} +42 -40
- micrOS/source/{LM_cct.py → modules/LM_cct.py} +22 -27
- micrOS/source/modules/LM_cluster.py +255 -0
- micrOS/source/{LM_co2.py → modules/LM_co2.py} +13 -6
- micrOS/source/{LM_dht11.py → modules/LM_dht11.py} +13 -29
- micrOS/source/{LM_dht22.py → modules/LM_dht22.py} +13 -28
- micrOS/source/{LM_dimmer.py → modules/LM_dimmer.py} +19 -16
- micrOS/source/modules/LM_distance.py +135 -0
- micrOS/source/{LM_ds18.py → modules/LM_ds18.py} +12 -4
- micrOS/source/{LM_esp32.py → modules/LM_esp32.py} +16 -4
- micrOS/source/modules/LM_espnow.py +53 -0
- micrOS/source/modules/LM_fileserver.py +265 -0
- micrOS/source/{LM_gameOfLife.py → modules/LM_gameOfLife.py} +5 -5
- micrOS/source/{LM_genIO.py → modules/LM_genIO.py} +49 -35
- micrOS/source/modules/LM_haptic.py +111 -0
- micrOS/source/modules/LM_i2c.py +61 -0
- micrOS/source/{LM_i2s_mic.py → modules/LM_i2s_mic.py} +20 -23
- micrOS/source/{LM_ld2410.py → modules/LM_ld2410.py} +3 -3
- micrOS/source/{LM_light_sensor.py → modules/LM_light_sensor.py} +22 -26
- micrOS/source/modules/LM_mh_z19c.py +198 -0
- micrOS/source/modules/LM_neoeffects.py +284 -0
- micrOS/source/{LM_neopixel.py → modules/LM_neopixel.py} +26 -31
- micrOS/source/{LM_oled.py → modules/LM_oled.py} +28 -20
- micrOS/source/{LM_oled_sh1106.py → modules/LM_oled_sh1106.py} +28 -24
- micrOS/source/{LM_oled_ui.py → modules/LM_oled_ui.py} +132 -174
- micrOS/source/modules/LM_pacman.py +320 -0
- micrOS/source/{LM_presence.py → modules/LM_presence.py} +24 -36
- micrOS/source/modules/LM_qmi8658.py +204 -0
- micrOS/source/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
- micrOS/source/modules/LM_rest.py +81 -0
- micrOS/source/{LM_rgb.py → modules/LM_rgb.py} +25 -34
- micrOS/source/{LM_rgbcct.py → modules/LM_rgbcct.py} +5 -5
- micrOS/source/{LM_roboarm.py → modules/LM_roboarm.py} +37 -45
- micrOS/source/modules/LM_robustness.py +137 -0
- micrOS/source/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
- micrOS/source/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
- micrOS/source/{LM_servo.py → modules/LM_servo.py} +4 -4
- micrOS/source/modules/LM_sound_event.py +751 -0
- micrOS/source/{LM_stepper.py → modules/LM_stepper.py} +8 -8
- micrOS/source/{LM_switch.py → modules/LM_switch.py} +21 -18
- micrOS/source/{LM_system.py → modules/LM_system.py} +96 -59
- micrOS/source/modules/LM_tcs3472.py +187 -0
- micrOS/source/modules/LM_telegram.py +388 -0
- micrOS/source/modules/LM_trackball.py +287 -0
- micrOS/source/modules/LM_veml7700.py +159 -0
- micrOS/source/modules/LM_web.py +38 -0
- micrOS/source/urequests.py +204 -91
- {toolkit/workspace/precompiled → micrOS/source/web}/dashboard.html +9 -4
- micrOS/source/web/editor.js +440 -0
- micrOS/source/web/filesui.html +178 -0
- micrOS/source/web/filesui.js +338 -0
- micrOS/source/{index.html → web/index.html} +44 -2
- micrOS/source/web/uapi.js +103 -0
- micrOS/source/web/udashboard.js +129 -0
- micrOS/source/web/ustyle.css +55 -0
- micrOS/source/web/uwidgets.js +172 -0
- micrOS/source/web/uwidgets_pro.js +99 -0
- micrOS/utests/__init__.py +0 -0
- micrOS/utests/test_scheduler.py +435 -0
- {micrOSDevToolKit-2.1.5.data → microsdevtoolkit-2.26.1.data}/scripts/devToolKit.py +47 -4
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/METADATA +392 -279
- microsdevtoolkit-2.26.1.dist-info/RECORD +396 -0
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/WHEEL +1 -1
- toolkit/DevEnvCompile.py +63 -33
- toolkit/DevEnvOTA.py +72 -22
- toolkit/DevEnvUSB.py +147 -77
- toolkit/Gateway.py +9 -9
- toolkit/LM_to_compile.dat +12 -4
- toolkit/MicrOSDevEnv.py +129 -51
- toolkit/WebRepl.py +73 -0
- toolkit/dashboard_apps/BackupRestore.py +171 -0
- toolkit/dashboard_apps/CCTDemo.py +12 -17
- toolkit/dashboard_apps/CCTTest.py +20 -24
- toolkit/dashboard_apps/CamStream.py +2 -6
- toolkit/dashboard_apps/CatGame.py +14 -16
- toolkit/dashboard_apps/Dimmer.py +11 -21
- toolkit/dashboard_apps/GetVersion.py +11 -19
- toolkit/dashboard_apps/MicrophoneTest.py +2 -7
- toolkit/dashboard_apps/NeoEffectsDemo.py +22 -35
- toolkit/dashboard_apps/NeopixelTest.py +20 -25
- toolkit/dashboard_apps/PresenceTest.py +2 -8
- toolkit/dashboard_apps/QMI8685_GYRO.py +68 -0
- toolkit/dashboard_apps/RGBTest.py +20 -24
- toolkit/dashboard_apps/RoboArm.py +24 -32
- toolkit/dashboard_apps/SED_test.py +10 -14
- toolkit/dashboard_apps/SensorsTest.py +61 -0
- toolkit/dashboard_apps/SystemTest.py +219 -117
- toolkit/dashboard_apps/Template_app.py +12 -19
- toolkit/dashboard_apps/_app_base.py +34 -0
- toolkit/dashboard_apps/_gyro_visualizer.py +78 -0
- toolkit/dashboard_apps/uLightDemo.py +15 -24
- toolkit/index.html +6 -5
- toolkit/lib/LocalMachine.py +6 -1
- toolkit/lib/MicrosFiles.py +46 -0
- toolkit/lib/Repository.py +64 -0
- toolkit/lib/TerminalColors.py +4 -0
- toolkit/lib/macroScript.py +371 -0
- toolkit/lib/micrOSClient.py +124 -51
- toolkit/lib/micrOSClientHistory.py +156 -0
- toolkit/lib/pip_package_installer.py +31 -4
- toolkit/micrOSdashboard.py +16 -21
- toolkit/micrOSlint.py +28 -10
- toolkit/simulator_lib/.DS_Store +0 -0
- micrOS/source/IO_esp32.py → toolkit/simulator_lib/IO_darwin.py +3 -0
- toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/mip.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_common.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/urandom.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
- toolkit/simulator_lib/aioespnow.py +28 -0
- toolkit/simulator_lib/camera.py +84 -0
- toolkit/simulator_lib/dht.py +1 -1
- toolkit/simulator_lib/framebuf.py +49 -1
- toolkit/simulator_lib/machine.py +32 -2
- toolkit/simulator_lib/micropython.py +3 -3
- toolkit/simulator_lib/mip.py +165 -0
- toolkit/simulator_lib/neopixel.py +3 -2
- toolkit/simulator_lib/network.py +2 -1
- toolkit/simulator_lib/node_config.json +2 -3
- toolkit/simulator_lib/ntptime.py +1 -1
- toolkit/simulator_lib/{sim_console.py → sim_common.py} +2 -3
- toolkit/simulator_lib/simgc.py +6 -2
- toolkit/simulator_lib/simulator.py +138 -46
- toolkit/simulator_lib/uasyncio.py +34 -3
- toolkit/simulator_lib/uos.py +147 -0
- toolkit/simulator_lib/urandom.py +4 -0
- toolkit/simulator_lib/usocket.py +5 -1
- toolkit/simulator_lib/view01.jpg +0 -0
- toolkit/simulator_lib/view02.jpg +0 -0
- toolkit/socketClient.py +43 -23
- toolkit/user_data/webhooks/generic.py +1 -1
- toolkit/user_data/webhooks/macro.py +44 -0
- toolkit/user_data/webhooks/template.macro +20 -0
- toolkit/user_data/webhooks/template.py +1 -1
- toolkit/workspace/precompiled/Auth.mpy +0 -0
- toolkit/workspace/precompiled/Common.mpy +0 -0
- toolkit/workspace/precompiled/Config.mpy +0 -0
- toolkit/workspace/precompiled/Debug.mpy +0 -0
- toolkit/workspace/precompiled/Espnow.mpy +0 -0
- toolkit/workspace/precompiled/Files.mpy +0 -0
- toolkit/workspace/precompiled/Hooks.mpy +0 -0
- toolkit/workspace/precompiled/InterConnect.mpy +0 -0
- toolkit/workspace/precompiled/Interrupts.mpy +0 -0
- toolkit/workspace/precompiled/Logger.mpy +0 -0
- toolkit/workspace/precompiled/Network.mpy +0 -0
- toolkit/workspace/precompiled/Notify.mpy +0 -0
- toolkit/workspace/precompiled/Pacman.mpy +0 -0
- toolkit/workspace/precompiled/Scheduler.mpy +0 -0
- toolkit/workspace/precompiled/Server.mpy +0 -0
- toolkit/workspace/precompiled/Shell.mpy +0 -0
- toolkit/workspace/precompiled/Tasks.mpy +0 -0
- toolkit/workspace/precompiled/Time.mpy +0 -0
- toolkit/workspace/precompiled/Types.mpy +0 -0
- toolkit/workspace/precompiled/Web.mpy +0 -0
- toolkit/workspace/precompiled/_mpy.version +1 -1
- toolkit/workspace/precompiled/config/_git.keep +0 -0
- toolkit/workspace/precompiled/helpers.mpy +0 -0
- toolkit/workspace/precompiled/micrOS.mpy +0 -0
- toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
- toolkit/workspace/precompiled/microIO.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32c3.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32s2.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32s3.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_m5stamp.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_qtpy.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_rp2.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_tinypico.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_L298N.mpy +0 -0
- {micrOS/source → toolkit/workspace/precompiled/modules}/LM_L9110_DCmotor.py +4 -4
- toolkit/workspace/precompiled/modules/LM_OV2640.mpy +0 -0
- toolkit/workspace/precompiled/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
- toolkit/workspace/precompiled/modules/LM_aht10.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_bme280.mpy +0 -0
- toolkit/workspace/precompiled/{LM_buzzer.mpy → modules/LM_buzzer.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_cct.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_cluster.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_co2.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_dht11.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_dht22.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_dimmer.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_distance.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_ds18.mpy +0 -0
- toolkit/workspace/precompiled/{LM_esp32.py → modules/LM_esp32.py} +16 -4
- toolkit/workspace/precompiled/modules/LM_espnow.py +53 -0
- toolkit/workspace/precompiled/modules/LM_fileserver.mpy +0 -0
- toolkit/workspace/precompiled/{LM_gameOfLife.mpy → modules/LM_gameOfLife.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_genIO.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_haptic.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_i2c.py +61 -0
- toolkit/workspace/precompiled/modules/LM_i2s_mic.mpy +0 -0
- toolkit/workspace/precompiled/{LM_ld2410.mpy → modules/LM_ld2410.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_light_sensor.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_mh_z19c.py +198 -0
- toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_neopixel.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled_sh1106.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_presence.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_qmi8658.py +204 -0
- toolkit/workspace/precompiled/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
- toolkit/workspace/precompiled/modules/LM_rest.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_rgb.mpy +0 -0
- toolkit/workspace/precompiled/{LM_rgbcct.mpy → modules/LM_rgbcct.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_roboarm.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_robustness.py +137 -0
- toolkit/workspace/precompiled/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
- toolkit/workspace/precompiled/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
- toolkit/workspace/precompiled/{LM_servo.mpy → modules/LM_servo.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_sound_event.mpy +0 -0
- toolkit/workspace/precompiled/{LM_stepper.mpy → modules/LM_stepper.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_switch.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_system.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_tcs3472.py +187 -0
- toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
- toolkit/workspace/precompiled/{LM_tinyrgb.mpy → modules/LM_tinyrgb.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_trackball.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_veml7700.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_web.mpy +0 -0
- toolkit/workspace/precompiled/urequests.mpy +0 -0
- {micrOS/source → toolkit/workspace/precompiled/web}/dashboard.html +9 -4
- toolkit/workspace/precompiled/web/editor.js +440 -0
- toolkit/workspace/precompiled/web/filesui.html +178 -0
- toolkit/workspace/precompiled/web/filesui.js +338 -0
- toolkit/workspace/precompiled/{index.html → web/index.html} +44 -2
- toolkit/workspace/precompiled/web/uapi.js +103 -0
- toolkit/workspace/precompiled/web/udashboard.js +129 -0
- toolkit/workspace/precompiled/web/ustyle.css +55 -0
- toolkit/workspace/precompiled/web/uwidgets.js +172 -0
- toolkit/workspace/precompiled/web/uwidgets_pro.js +99 -0
- env/driver_cp210x/CH34XSER_MAC/CH34X_DRV_INSTALL_INSTRUCTIONS.pdf +0 -0
- env/driver_cp210x/CH34XSER_MAC/CH34xVCPDriver.pkg +0 -0
- micrOS/micropython/esp32-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/esp32c3-GENERIC-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32c3-GENERIC-20240222-v1.22.2.bin +0 -0
- micrOS/micropython/esp32s2-GENERIC-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
- micrOS/micropython/esp32s3-GENERIC-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/rpi-pico-w-20231005-v1.21.0.uf2 +0 -0
- micrOS/micropython/tinypico-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/tinypico-usbc-UM-20240105-v1.22.1.bin +0 -0
- micrOS/source/LM_L298N_DCmotor.py +0 -86
- micrOS/source/LM_catgame.py +0 -74
- micrOS/source/LM_dashboard_be.py +0 -37
- micrOS/source/LM_demo.py +0 -85
- micrOS/source/LM_distance.py +0 -88
- micrOS/source/LM_i2c.py +0 -44
- micrOS/source/LM_intercon.py +0 -57
- micrOS/source/LM_keychain.py +0 -318
- micrOS/source/LM_lmpacman.py +0 -126
- micrOS/source/LM_neoeffects.py +0 -327
- micrOS/source/LM_pet_feeder.py +0 -76
- micrOS/source/LM_ph_sensor.py +0 -51
- micrOS/source/LM_rest.py +0 -40
- micrOS/source/LM_robustness.py +0 -73
- micrOS/source/LM_telegram.py +0 -96
- micrOS/source/reset.py +0 -11
- micrOS/source/uapi.js +0 -76
- micrOS/source/udashboard.js +0 -137
- micrOS/source/ustyle.css +0 -28
- micrOS/source/uwidgets.js +0 -179
- micrOSDevToolKit-2.1.5.dist-info/RECORD +0 -337
- toolkit/dashboard_apps/AirQualityBME280.py +0 -36
- toolkit/dashboard_apps/AirQualityDHT22_CO2.py +0 -36
- toolkit/lib/file_extensions.py +0 -16
- toolkit/simulator_lib/__pycache__/LP_darwin.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/LP_darwin.cpython-38.pyc +0 -0
- toolkit/simulator_lib/__pycache__/LP_darwin.cpython-39.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_console.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_console.cpython-38.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_console.cpython-39.pyc +0 -0
- toolkit/workspace/precompiled/IO_esp32.mpy +0 -0
- toolkit/workspace/precompiled/IO_esp32c3.mpy +0 -0
- toolkit/workspace/precompiled/IO_esp32s2.mpy +0 -0
- toolkit/workspace/precompiled/IO_esp32s3.mpy +0 -0
- toolkit/workspace/precompiled/IO_qtpy.mpy +0 -0
- toolkit/workspace/precompiled/IO_rp2.mpy +0 -0
- toolkit/workspace/precompiled/IO_tinypico.mpy +0 -0
- toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy +0 -0
- toolkit/workspace/precompiled/LM_OV2640.mpy +0 -0
- toolkit/workspace/precompiled/LM_aht10.mpy +0 -0
- toolkit/workspace/precompiled/LM_bme280.mpy +0 -0
- toolkit/workspace/precompiled/LM_catgame.py +0 -74
- toolkit/workspace/precompiled/LM_cct.mpy +0 -0
- toolkit/workspace/precompiled/LM_co2.mpy +0 -0
- toolkit/workspace/precompiled/LM_dashboard_be.py +0 -37
- toolkit/workspace/precompiled/LM_demo.py +0 -85
- toolkit/workspace/precompiled/LM_dht11.mpy +0 -0
- toolkit/workspace/precompiled/LM_dht22.mpy +0 -0
- toolkit/workspace/precompiled/LM_dimmer.mpy +0 -0
- toolkit/workspace/precompiled/LM_distance.py +0 -88
- toolkit/workspace/precompiled/LM_ds18.mpy +0 -0
- toolkit/workspace/precompiled/LM_genIO.mpy +0 -0
- toolkit/workspace/precompiled/LM_i2c.py +0 -44
- toolkit/workspace/precompiled/LM_i2s_mic.mpy +0 -0
- toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
- toolkit/workspace/precompiled/LM_keychain.mpy +0 -0
- toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
- toolkit/workspace/precompiled/LM_lmpacman.mpy +0 -0
- toolkit/workspace/precompiled/LM_neoeffects.mpy +0 -0
- toolkit/workspace/precompiled/LM_neopixel.mpy +0 -0
- toolkit/workspace/precompiled/LM_oled.mpy +0 -0
- toolkit/workspace/precompiled/LM_oled_sh1106.mpy +0 -0
- toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
- toolkit/workspace/precompiled/LM_pet_feeder.py +0 -76
- toolkit/workspace/precompiled/LM_ph_sensor.py +0 -51
- toolkit/workspace/precompiled/LM_presence.mpy +0 -0
- toolkit/workspace/precompiled/LM_rest.mpy +0 -0
- toolkit/workspace/precompiled/LM_rgb.mpy +0 -0
- toolkit/workspace/precompiled/LM_roboarm.mpy +0 -0
- toolkit/workspace/precompiled/LM_robustness.py +0 -73
- toolkit/workspace/precompiled/LM_switch.mpy +0 -0
- toolkit/workspace/precompiled/LM_system.mpy +0 -0
- toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
- toolkit/workspace/precompiled/reset.mpy +0 -0
- toolkit/workspace/precompiled/uapi.js +0 -76
- toolkit/workspace/precompiled/udashboard.js +0 -137
- toolkit/workspace/precompiled/ustyle.css +0 -28
- toolkit/workspace/precompiled/uwidgets.js +0 -179
- /toolkit/user_data/node_config_archive/.include → /micrOS/source/config/_git.keep +0 -0
- /micrOS/source/{IO_rp2.py → modules/IO_rp2.py} +0 -0
- /micrOS/source/{LM_tinyrgb.py → modules/LM_tinyrgb.py} +0 -0
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info/licenses}/LICENSE +0 -0
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/top_level.txt +0 -0
|
@@ -2,22 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
import sys
|
|
5
|
-
import time
|
|
6
5
|
MYPATH = os.path.dirname(os.path.abspath(__file__))
|
|
7
|
-
sys.path.append(os.path.dirname(MYPATH))
|
|
8
|
-
import socketClient
|
|
9
6
|
sys.path.append(os.path.join(MYPATH, '../lib/'))
|
|
10
7
|
from TerminalColors import Colors
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def base_cmd():
|
|
17
|
-
if PASSWD is None:
|
|
18
|
-
return ['--dev', DEVICE]
|
|
19
|
-
return ['--dev', DEVICE, '--password', PASSWD]
|
|
9
|
+
try:
|
|
10
|
+
from ._app_base import AppBase
|
|
11
|
+
except:
|
|
12
|
+
from _app_base import AppBase
|
|
20
13
|
|
|
14
|
+
CLIENT = None
|
|
21
15
|
|
|
22
16
|
def app(devfid=None, pwd=None):
|
|
23
17
|
"""
|
|
@@ -25,14 +19,13 @@ def app(devfid=None, pwd=None):
|
|
|
25
19
|
send command(s) over socket connection [socketClient.run(args)]
|
|
26
20
|
list load module commands and send in single connection
|
|
27
21
|
"""
|
|
28
|
-
global
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
status, answer = socketClient.run(args)
|
|
22
|
+
global CLIENT
|
|
23
|
+
CLIENT = AppBase(device=devfid, password=pwd)
|
|
24
|
+
|
|
25
|
+
output = CLIENT.execute(['help', 'version'])
|
|
26
|
+
status = output[0]
|
|
27
|
+
result = output[1]
|
|
28
|
+
print(f"{Colors.WARN}[{status}]{Colors.NC} {result}")
|
|
36
29
|
|
|
37
30
|
|
|
38
31
|
if __name__ == "__main__":
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#####################################
|
|
2
|
+
# APP CONFIG #
|
|
3
|
+
#####################################
|
|
4
|
+
import os, sys
|
|
5
|
+
MYPATH = os.path.dirname(os.path.abspath(__file__))
|
|
6
|
+
sys.path.append(os.path.dirname(MYPATH))
|
|
7
|
+
import socketClient
|
|
8
|
+
|
|
9
|
+
class AppBase:
|
|
10
|
+
|
|
11
|
+
def __init__(self, device:str, password:str):
|
|
12
|
+
self.device = device
|
|
13
|
+
self.password = password
|
|
14
|
+
|
|
15
|
+
def base_cmd(self) -> list:
|
|
16
|
+
if self.password is None:
|
|
17
|
+
return ['--dev', self.device]
|
|
18
|
+
return ['--dev', self.device, '--password', self.password]
|
|
19
|
+
|
|
20
|
+
def get_device(self):
|
|
21
|
+
return self.device
|
|
22
|
+
|
|
23
|
+
def execute(self, cmd_list, tout=5, verbose=False):
|
|
24
|
+
cmd_args = self.base_cmd() + cmd_list
|
|
25
|
+
print(f"Execute: {cmd_args}")
|
|
26
|
+
return socketClient.run(cmd_args, timeout=tout, verbose=verbose)
|
|
27
|
+
|
|
28
|
+
def run(self, cmd_list):
|
|
29
|
+
"""Legacy"""
|
|
30
|
+
out = self.execute(cmd_list)
|
|
31
|
+
return out[0], out[1]
|
|
32
|
+
|
|
33
|
+
def connection_metrics(self):
|
|
34
|
+
return socketClient.connection_metrics(f"{self.device}.local")
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import matplotlib.pyplot as plt
|
|
2
|
+
import matplotlib.animation as animation
|
|
3
|
+
import multiprocessing as mp
|
|
4
|
+
from collections import deque
|
|
5
|
+
from datetime import datetime
|
|
6
|
+
import matplotlib.dates as mdates
|
|
7
|
+
|
|
8
|
+
def visualizer_main(queue):
|
|
9
|
+
# Make figure wider and a bit taller
|
|
10
|
+
fig, (ax_accel, ax_gyro) = plt.subplots(2, 1, figsize=(14, 8))
|
|
11
|
+
plt.subplots_adjust(top=0.88, bottom=0.12, hspace=0.3)
|
|
12
|
+
|
|
13
|
+
history = 100
|
|
14
|
+
accel_data = {'x': deque([0] * history, maxlen=history),
|
|
15
|
+
'y': deque([0] * history, maxlen=history),
|
|
16
|
+
'z': deque([0] * history, maxlen=history)}
|
|
17
|
+
gyro_data = {'x': deque([0] * history, maxlen=history),
|
|
18
|
+
'y': deque([0] * history, maxlen=history),
|
|
19
|
+
'z': deque([0] * history, maxlen=history)}
|
|
20
|
+
time_axis = deque([datetime.now()] * history, maxlen=history)
|
|
21
|
+
|
|
22
|
+
# Increase line width here
|
|
23
|
+
line_width = 2.5
|
|
24
|
+
|
|
25
|
+
accel_lines = {
|
|
26
|
+
axis: ax_accel.plot([], [], label=f'accel_{axis}', linewidth=line_width)[0]
|
|
27
|
+
for axis in 'xyz'
|
|
28
|
+
}
|
|
29
|
+
gyro_lines = {
|
|
30
|
+
axis: ax_gyro.plot([], [], label=f'gyro_{axis}', linewidth=line_width)[0]
|
|
31
|
+
for axis in 'xyz'
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
ax_accel.set_ylim(-2, 2)
|
|
35
|
+
ax_gyro.set_ylim(-300, 300)
|
|
36
|
+
|
|
37
|
+
for ax in [ax_accel, ax_gyro]:
|
|
38
|
+
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
|
|
39
|
+
ax.legend()
|
|
40
|
+
ax.grid(True)
|
|
41
|
+
ax.set_xlabel("Time (H:M:S)")
|
|
42
|
+
|
|
43
|
+
ax_accel.set_title("Acceleration")
|
|
44
|
+
ax_gyro.set_title("Gyroscope")
|
|
45
|
+
|
|
46
|
+
def update(_):
|
|
47
|
+
try:
|
|
48
|
+
while not queue.empty():
|
|
49
|
+
data = queue.get_nowait()
|
|
50
|
+
current_time = datetime.now()
|
|
51
|
+
time_axis.append(current_time)
|
|
52
|
+
|
|
53
|
+
for axis, val in zip('xyz', data['accel']):
|
|
54
|
+
accel_data[axis].append(val)
|
|
55
|
+
for axis, val in zip('xyz', data['gyro']):
|
|
56
|
+
gyro_data[axis].append(val)
|
|
57
|
+
except Exception as e:
|
|
58
|
+
print(f"Visualizer error: {e}")
|
|
59
|
+
return
|
|
60
|
+
|
|
61
|
+
for axis in 'xyz':
|
|
62
|
+
accel_lines[axis].set_data(time_axis, accel_data[axis])
|
|
63
|
+
gyro_lines[axis].set_data(time_axis, gyro_data[axis])
|
|
64
|
+
|
|
65
|
+
for ax in [ax_accel, ax_gyro]:
|
|
66
|
+
ax.set_xlim(time_axis[0], time_axis[-1])
|
|
67
|
+
ax.figure.autofmt_xdate()
|
|
68
|
+
|
|
69
|
+
return list(accel_lines.values()) + list(gyro_lines.values())
|
|
70
|
+
|
|
71
|
+
ani = animation.FuncAnimation(fig, update, interval=50)
|
|
72
|
+
plt.show()
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
if __name__ == "__main__":
|
|
76
|
+
mp.set_start_method('spawn')
|
|
77
|
+
queue = mp.Queue()
|
|
78
|
+
visualizer_main(queue)
|
|
@@ -4,28 +4,23 @@ import os
|
|
|
4
4
|
import sys
|
|
5
5
|
import time
|
|
6
6
|
MYPATH = os.path.dirname(os.path.abspath(__file__))
|
|
7
|
-
sys.path.append(os.path.dirname(MYPATH))
|
|
8
|
-
import socketClient
|
|
9
7
|
sys.path.append(os.path.join(MYPATH, '../lib/'))
|
|
10
8
|
from TerminalColors import Colors
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def base_cmd():
|
|
17
|
-
return ['--dev', DEVICE]
|
|
10
|
+
try:
|
|
11
|
+
from ._app_base import AppBase
|
|
12
|
+
except:
|
|
13
|
+
from _app_base import AppBase
|
|
18
14
|
|
|
15
|
+
CLIENT = None
|
|
19
16
|
|
|
20
17
|
def light_demo(modules, smooth=True, sample=10):
|
|
21
18
|
verdict = [True, []]
|
|
22
19
|
smooth_str = '[smooth]' if smooth else '[simple]'
|
|
23
20
|
|
|
24
|
-
if '
|
|
25
|
-
args = base_cmd() + [f'rgb random {smooth}'] * sample + ['rgb toggle False']
|
|
26
|
-
print(args)
|
|
21
|
+
if 'rgb' in modules:
|
|
27
22
|
delta_t = time.time()
|
|
28
|
-
status_rgb, answer_rgb =
|
|
23
|
+
status_rgb, answer_rgb = CLIENT.run([f'rgb random {smooth}'] * sample + ['rgb toggle False'])
|
|
29
24
|
delta_t = round((time.time() - delta_t) / sample, 2)
|
|
30
25
|
if status_rgb:
|
|
31
26
|
msg = f"{smooth_str} rgb module random color func: {Colors.OK}OK{Colors.NC} [{delta_t}sec]"
|
|
@@ -35,10 +30,9 @@ def light_demo(modules, smooth=True, sample=10):
|
|
|
35
30
|
verdict[1].append(msg)
|
|
36
31
|
verdict[0] &= False
|
|
37
32
|
|
|
38
|
-
if '
|
|
39
|
-
args = base_cmd() + [f'cct random {smooth}'] * sample + ['cct toggle False']
|
|
33
|
+
if 'cct' in modules:
|
|
40
34
|
delta_t = time.time()
|
|
41
|
-
status_cct, answer_cct =
|
|
35
|
+
status_cct, answer_cct = CLIENT.run([f'cct random {smooth}'] * sample + ['cct toggle False'])
|
|
42
36
|
delta_t = round((time.time() - delta_t) / sample, 2)
|
|
43
37
|
if status_cct:
|
|
44
38
|
msg = f"{smooth_str} cct module random color func: {Colors.OK}OK{Colors.NC} [{delta_t}sec]"
|
|
@@ -48,10 +42,9 @@ def light_demo(modules, smooth=True, sample=10):
|
|
|
48
42
|
verdict[1].append(msg)
|
|
49
43
|
verdict[0] &= False
|
|
50
44
|
|
|
51
|
-
if '
|
|
52
|
-
args = base_cmd() + [f'neopixel random {smooth}'] * sample + ['neopixel toggle False']
|
|
45
|
+
if 'neopixel' in modules:
|
|
53
46
|
delta_t = time.time()
|
|
54
|
-
status_neo, answer_neo =
|
|
47
|
+
status_neo, answer_neo = CLIENT.run([f'neopixel random {smooth}'] * sample + ['neopixel toggle False'])
|
|
55
48
|
delta_t = round((time.time() - delta_t) / sample, 2)
|
|
56
49
|
if status_neo:
|
|
57
50
|
msg = f"{smooth_str} neopixel module random color func: {Colors.OK}OK{Colors.NC} [{delta_t}sec]"
|
|
@@ -63,19 +56,17 @@ def light_demo(modules, smooth=True, sample=10):
|
|
|
63
56
|
return verdict
|
|
64
57
|
|
|
65
58
|
|
|
66
|
-
def app(devfid=None):
|
|
59
|
+
def app(devfid=None, pwd=None):
|
|
67
60
|
"""
|
|
68
61
|
devfid: selected device input
|
|
69
62
|
send command(s) over socket connection [socketClient.run(args)]
|
|
70
63
|
list load module commands and send in single connection
|
|
71
64
|
"""
|
|
72
|
-
global
|
|
73
|
-
|
|
74
|
-
DEVICE = devfid
|
|
65
|
+
global CLIENT
|
|
66
|
+
CLIENT = AppBase(device=devfid, password=pwd)
|
|
75
67
|
|
|
76
68
|
# Get loaded modules
|
|
77
|
-
|
|
78
|
-
status, modules = socketClient.run(args)
|
|
69
|
+
status, modules = CLIENT.run(['modules'])
|
|
79
70
|
print("status: {}\nanswer: {}".format(status, modules))
|
|
80
71
|
|
|
81
72
|
if not status:
|
toolkit/index.html
CHANGED
|
@@ -11,15 +11,15 @@
|
|
|
11
11
|
50% {background-position: 100% 50%;}
|
|
12
12
|
100% {background-position: 0% 50%;}}
|
|
13
13
|
body {
|
|
14
|
-
height:
|
|
15
|
-
width:
|
|
14
|
+
height: calc(100vh - 6%); /* Set the height to 100% of the viewport height */
|
|
15
|
+
width: calc(100vw - 6%); /* Set the width to 200% of the viewport height */
|
|
16
16
|
padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
|
|
17
|
-
margin:
|
|
17
|
+
margin: 3%;
|
|
18
18
|
background: linear-gradient(110deg, #720000, #656565, #252525);
|
|
19
19
|
background-size: 400% 400%;
|
|
20
20
|
animation: backgroundAnimation 20s infinite;
|
|
21
21
|
color: #d9d9d9;
|
|
22
|
-
font-family: '
|
|
22
|
+
font-family: 'Verdana', Sans-serif;
|
|
23
23
|
}
|
|
24
24
|
button {
|
|
25
25
|
background-color: #e7e7e7; /* Gray */
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
<h1> micrOS GATEWAY </h1>
|
|
41
41
|
<!-- Display micrOSDevices output -->
|
|
42
42
|
<p id="micrOSDevices"></p>
|
|
43
|
-
<p> micrOS gateway <b>v2.
|
|
43
|
+
<p> micrOS gateway <b>v2.1</b> </p>
|
|
44
44
|
<p> /list List known devices, sort by online/offline </p>
|
|
45
45
|
<p> /search Search devices </p>
|
|
46
46
|
<p> /status Get all device status - node info </p>
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
<p> /image/<device> Get esp camera image over gateway (without device param endpoint lists cameras)</p>
|
|
50
50
|
<p> /imgstream Get esp camera image stream (with camera endpoint detection)</p>
|
|
51
51
|
<p> /webhooks/<payload>/<args> Webhook for micrOS Gateway. Payload: name of the script. Args: optional script args </p>
|
|
52
|
+
<p> /webhooks/macro/<macroName> Webhook/macro for micrOS Gateway. macroName: macro to call </p>
|
|
52
53
|
|
|
53
54
|
<div id="camera_stream_link">Camera stream link</div>
|
|
54
55
|
|
toolkit/lib/LocalMachine.py
CHANGED
|
@@ -186,11 +186,13 @@ class FileHandler:
|
|
|
186
186
|
os.remove(path)
|
|
187
187
|
elif type_ == 'd':
|
|
188
188
|
shutil.rmtree(path)
|
|
189
|
+
return True
|
|
189
190
|
except Exception as e:
|
|
190
191
|
if ignore:
|
|
191
192
|
debug_print("[DEBUG] Removing " + path + " is forced to ignore failure: " + str(e))
|
|
192
193
|
else:
|
|
193
194
|
raise Exception("Cannot remove " + path + ": " + str(e))
|
|
195
|
+
return False
|
|
194
196
|
|
|
195
197
|
@staticmethod
|
|
196
198
|
def extract_tar(targz, extract_path):
|
|
@@ -210,7 +212,10 @@ class FileHandler:
|
|
|
210
212
|
def copy(from_path, to_path):
|
|
211
213
|
debug_print("[DEBUG] Copy " + from_path + " to " + to_path)
|
|
212
214
|
try:
|
|
213
|
-
|
|
215
|
+
if os.path.isdir(from_path):
|
|
216
|
+
shutil.copytree(from_path, to_path, dirs_exist_ok=True)
|
|
217
|
+
else:
|
|
218
|
+
shutil.copy(from_path, to_path)
|
|
214
219
|
return True
|
|
215
220
|
except Exception as e:
|
|
216
221
|
debug_print("Copy error: {}".format(e))
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
try:
|
|
4
|
+
from . import LocalMachine
|
|
5
|
+
except Exception as e:
|
|
6
|
+
print("Import warning __name__:{}: {}".format(__name__, e))
|
|
7
|
+
import LocalMachine
|
|
8
|
+
|
|
9
|
+
PYTHON_EXTENSIONS = ('py', 'mpy')
|
|
10
|
+
WEB_ONLY = ('js', 'html', 'css', 'json', 'ico', 'jpeg', 'png')
|
|
11
|
+
ENABLED_EXTENSIONS = PYTHON_EXTENSIONS + WEB_ONLY
|
|
12
|
+
|
|
13
|
+
def check_all_extensions(path):
|
|
14
|
+
extension = path.split('.')[-1]
|
|
15
|
+
if extension in ENABLED_EXTENSIONS:
|
|
16
|
+
return True
|
|
17
|
+
return False
|
|
18
|
+
|
|
19
|
+
def check_web_extensions(path):
|
|
20
|
+
extension = path.split('.')[-1]
|
|
21
|
+
if extension in WEB_ONLY:
|
|
22
|
+
return True
|
|
23
|
+
return False
|
|
24
|
+
|
|
25
|
+
def check_python_extensions(path):
|
|
26
|
+
extension = path.split('.')[-1]
|
|
27
|
+
if extension in PYTHON_EXTENSIONS:
|
|
28
|
+
return True
|
|
29
|
+
return False
|
|
30
|
+
|
|
31
|
+
def micros_resource_list(root_folder):
|
|
32
|
+
resources_path = []
|
|
33
|
+
subfolders = []
|
|
34
|
+
for source in LocalMachine.FileHandler.list_dir(root_folder):
|
|
35
|
+
source_full_path = os.path.join(root_folder, source)
|
|
36
|
+
# [1] / Root directory source files and folders.
|
|
37
|
+
if check_all_extensions(source):
|
|
38
|
+
resources_path.append(source_full_path)
|
|
39
|
+
# [2] /dir Handle sub dictionary sources
|
|
40
|
+
elif LocalMachine.FileHandler.path_is_exists(source_full_path)[1] == 'd':
|
|
41
|
+
subfolders.append(source)
|
|
42
|
+
for sub_source in LocalMachine.FileHandler.list_dir(source_full_path):
|
|
43
|
+
sub_source_full_path = os.path.join(source_full_path, sub_source)
|
|
44
|
+
if check_all_extensions(sub_source):
|
|
45
|
+
resources_path.append(sub_source_full_path)
|
|
46
|
+
return resources_path, subfolders
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
import zipfile
|
|
3
|
+
import io
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
try:
|
|
7
|
+
from .LocalMachine import CommandHandler
|
|
8
|
+
except:
|
|
9
|
+
from LocalMachine import CommandHandler
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def git_clone_archive(url):
|
|
13
|
+
"""
|
|
14
|
+
Clone git repo as archive (without git installed)
|
|
15
|
+
Note: No git history, it is just a snapshot
|
|
16
|
+
:param url: https://github.com/micropython/webrepl
|
|
17
|
+
"""
|
|
18
|
+
print(f"CLONE ARCHIVE: {url}")
|
|
19
|
+
url = url.replace(".git", "") if url.endswith(".git") else url
|
|
20
|
+
# URL of the repository zip archive (adjust branch name if needed)
|
|
21
|
+
target_name = url.split("/")[-1].strip()
|
|
22
|
+
zip_url = f"{url}/archive/refs/heads/master.zip"
|
|
23
|
+
response = requests.get(zip_url)
|
|
24
|
+
if response.status_code == 200:
|
|
25
|
+
# Read the downloaded content as a binary stream
|
|
26
|
+
with zipfile.ZipFile(io.BytesIO(response.content)) as z:
|
|
27
|
+
for member in z.infolist():
|
|
28
|
+
# Each member's filename is something like 'webrepl-master/filename'
|
|
29
|
+
# Remove the first directory component
|
|
30
|
+
parts = member.filename.split('/', 1)
|
|
31
|
+
if len(parts) > 1:
|
|
32
|
+
relative_path = parts[1]
|
|
33
|
+
else:
|
|
34
|
+
relative_path = parts[0]
|
|
35
|
+
|
|
36
|
+
# Build the target path relative to the current directory
|
|
37
|
+
target_path = os.path.join(target_name, relative_path)
|
|
38
|
+
|
|
39
|
+
if member.is_dir():
|
|
40
|
+
os.makedirs(target_path, exist_ok=True)
|
|
41
|
+
else:
|
|
42
|
+
os.makedirs(os.path.dirname(target_path), exist_ok=True)
|
|
43
|
+
with z.open(member) as source, open(target_path, 'wb') as target_file:
|
|
44
|
+
target_file.write(source.read())
|
|
45
|
+
print(f"\tRepository extracted successfully: {target_name}")
|
|
46
|
+
return 0, zip_url, ""
|
|
47
|
+
print(f"\tFailed to download repository archive: {target_name}")
|
|
48
|
+
return 1, zip_url, ""
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def git_clone(url):
|
|
52
|
+
"""
|
|
53
|
+
Git clone - subshell call
|
|
54
|
+
- git is needed to be preinstalled
|
|
55
|
+
"""
|
|
56
|
+
print(f"GIT CLONE: {url}")
|
|
57
|
+
target_name = url.split("/")[-1].strip().replace(".git", "")
|
|
58
|
+
command = 'git clone {url} {name}'.format(name=target_name, url=url)
|
|
59
|
+
exitcode, stdout, stderr = CommandHandler.run_command(command, shell=True)
|
|
60
|
+
if exitcode == 0:
|
|
61
|
+
print(f"\tRepository was cloned successfully: {target_name}")
|
|
62
|
+
else:
|
|
63
|
+
print(f"\tRepository clone failed: {target_name}")
|
|
64
|
+
return exitcode, stdout, stderr
|
toolkit/lib/TerminalColors.py
CHANGED
|
@@ -16,6 +16,8 @@ class Colors:
|
|
|
16
16
|
OKGREEN = '\033[92m'
|
|
17
17
|
HEADER = '\033[95m'
|
|
18
18
|
UNDERLINE = '\033[4m'
|
|
19
|
+
LIGHT_GRAY = '\033[37m'
|
|
20
|
+
GRAY = '\033[90m'
|
|
19
21
|
else:
|
|
20
22
|
NC = ''
|
|
21
23
|
OK = ''
|
|
@@ -26,6 +28,8 @@ class Colors:
|
|
|
26
28
|
OKGREEN = ''
|
|
27
29
|
HEADER = ''
|
|
28
30
|
UNDERLINE = ''
|
|
31
|
+
LIGHT_GRAY = ''
|
|
32
|
+
GRAY = ''
|
|
29
33
|
|
|
30
34
|
|
|
31
35
|
if __name__ == "__main__":
|