You've already forked MicroPythonOS
mirror of
https://github.com/m5stack/MicroPythonOS.git
synced 2026-05-20 11:51:27 -07:00
72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
import lvgl as lv
|
|
import os
|
|
|
|
def urldecode(s):
|
|
result = ""
|
|
i = 0
|
|
while i < len(s):
|
|
if s[i] == '%':
|
|
result += chr(int(s[i+1:i+3], 16))
|
|
i += 3
|
|
else:
|
|
result += s[i]
|
|
i += 1
|
|
return result
|
|
|
|
def print_lvgl_widget(obj, depth=0):
|
|
if obj:
|
|
label = ""
|
|
hidden = ""
|
|
editable = "editable"
|
|
obj_area = lv.area_t()
|
|
obj.get_coords(obj_area)
|
|
if obj.has_flag(lv.obj.FLAG.HIDDEN):
|
|
hidden = "hidden "
|
|
if not obj.is_editable():
|
|
editable = "not editable "
|
|
if isinstance(obj,lv.label):
|
|
label = f" with label '{obj.get_text()}'"
|
|
padding = " " * depth
|
|
print(f"{padding}{obj} pos:{obj_area.x1}x{obj_area.y1} size:{obj_area.get_width()}x{obj_area.get_height()} {hidden}{editable} {label}")
|
|
for childnr in range(obj.get_child_count()):
|
|
print_lvgl_widget(obj.get_child(childnr), depth+1)
|
|
else:
|
|
print("print_lvgl_widget called on 'None'")
|
|
|
|
|
|
def mkdir_parents(path):
|
|
"""
|
|
Create directory and all parent directories like `mkdir -p`.
|
|
|
|
Creates intermediate directories as needed, does nothing if the path
|
|
already exists, and raises if any component exists as a non-directory.
|
|
"""
|
|
if not path:
|
|
return
|
|
|
|
def _is_dir(stat_result):
|
|
return (stat_result[0] & 0x4000) != 0
|
|
|
|
parts = path.split("/")
|
|
current = "/" if path.startswith("/") else ""
|
|
|
|
for part in parts:
|
|
if not part:
|
|
continue
|
|
if current in ("", "/"):
|
|
current = f"{current}{part}"
|
|
else:
|
|
current = f"{current}/{part}"
|
|
try:
|
|
stat_result = os.stat(current)
|
|
except OSError:
|
|
try:
|
|
os.mkdir(current)
|
|
except OSError:
|
|
stat_result = os.stat(current)
|
|
if not _is_dir(stat_result):
|
|
raise
|
|
else:
|
|
if not _is_dir(stat_result):
|
|
raise OSError("Path component exists and is not a directory")
|