Skip to content

Commit 0d422ec

Browse files
About app: refactor more DRY
1 parent 2debeca commit 0d422ec

File tree

1 file changed

+60
-79
lines changed
  • internal_filesystem/builtin/apps/com.micropythonos.about/assets

1 file changed

+60
-79
lines changed

internal_filesystem/builtin/apps/com.micropythonos.about/assets/about.py

Lines changed: 60 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,26 @@
55

66
class About(Activity):
77

8+
def _add_label(self, parent, text):
9+
"""Helper to create and add a label with text."""
10+
label = lv.label(parent)
11+
label.set_text(text)
12+
return label
13+
14+
def _add_disk_info(self, screen, path):
15+
"""Helper to add disk usage info for a given path."""
16+
import os
17+
try:
18+
stat = os.statvfs(path)
19+
total_space = stat[0] * stat[2]
20+
free_space = stat[0] * stat[3]
21+
used_space = total_space - free_space
22+
self._add_label(screen, f"Total space {path}: {total_space} bytes")
23+
self._add_label(screen, f"Free space {path}: {free_space} bytes")
24+
self._add_label(screen, f"Used space {path}: {used_space} bytes")
25+
except Exception as e:
26+
print(f"About app could not get info on {path} filesystem: {e}")
27+
828
def onCreate(self):
929
screen = lv.obj()
1030
screen.set_style_border_width(0, 0)
@@ -15,20 +35,16 @@ def onCreate(self):
1535
if focusgroup:
1636
focusgroup.add_obj(screen)
1737

18-
label0 = lv.label(screen)
19-
label0.set_text(f"MicroPythonOS version: {mpos.info.CURRENT_OS_VERSION}")
20-
label1 = lv.label(screen)
21-
label1.set_text(f"Hardware ID: {mpos.info.get_hardware_id()}")
22-
label2 = lv.label(screen)
23-
label2.set_text(f"sys.version: {sys.version}")
24-
label3 = lv.label(screen)
25-
label3.set_text(f"sys.implementation: {sys.implementation}")
38+
# Basic OS info
39+
self._add_label(screen, f"MicroPythonOS version: {mpos.info.CURRENT_OS_VERSION}")
40+
self._add_label(screen, f"Hardware ID: {mpos.info.get_hardware_id()}")
41+
self._add_label(screen, f"sys.version: {sys.version}")
42+
self._add_label(screen, f"sys.implementation: {sys.implementation}")
2643

44+
# MPY version info
2745
sys_mpy = sys.implementation._mpy
28-
label30 = lv.label(screen)
29-
label30.set_text(f'mpy version: {sys_mpy & 0xff}')
30-
label31 = lv.label(screen)
31-
label31.set_text(f'mpy sub-version: {sys_mpy >> 8 & 3}')
46+
self._add_label(screen, f'mpy version: {sys_mpy & 0xff}')
47+
self._add_label(screen, f'mpy sub-version: {sys_mpy >> 8 & 3}')
3248
arch = [None, 'x86', 'x64',
3349
'armv6', 'armv6m', 'armv7m', 'armv7em', 'armv7emsp', 'armv7emdp',
3450
'xtensa', 'xtensawin', 'rv32imc', 'rv64imc'][(sys_mpy >> 10) & 0x0F]
@@ -38,62 +54,51 @@ def onCreate(self):
3854
if (sys_mpy >> 16) != 0:
3955
flags += ' -march-flags=' + (sys_mpy >> 16)
4056
if len(flags) > 0:
41-
label32 = lv.label(screen)
42-
label32.set_text('mpy flags: ' + flags)
57+
self._add_label(screen, 'mpy flags: ' + flags)
4358

44-
label4 = lv.label(screen)
45-
label4.set_text(f"sys.platform: {sys.platform}")
46-
label15 = lv.label(screen)
47-
label15.set_text(f"sys.path: {sys.path}")
59+
# Platform info
60+
self._add_label(screen, f"sys.platform: {sys.platform}")
61+
self._add_label(screen, f"sys.path: {sys.path}")
4862

63+
# MicroPython and memory info
4964
import micropython
50-
label16 = lv.label(screen)
51-
label16.set_text(f"micropython.opt_level(): {micropython.opt_level()}")
65+
self._add_label(screen, f"micropython.opt_level(): {micropython.opt_level()}")
5266
import gc
53-
label17 = lv.label(screen)
54-
label17.set_text(f"Memory: {gc.mem_free()} free, {gc.mem_alloc()} allocated, {gc.mem_alloc()+gc.mem_free()} total")
67+
self._add_label(screen, f"Memory: {gc.mem_free()} free, {gc.mem_alloc()} allocated, {gc.mem_alloc()+gc.mem_free()} total")
5568
# These are always written to sys.stdout
56-
#label16.set_text(f"micropython.mem_info(): {micropython.mem_info()}")
57-
#label18 = lv.label(screen)
58-
#label18.set_text(f"micropython.qstr_info(): {micropython.qstr_info()}")
59-
label19 = lv.label(screen)
60-
label19.set_text(f"mpos.__path__: {mpos.__path__}") # this will show .frozen if the /lib folder is frozen (prod build)
69+
#self._add_label(screen, f"micropython.mem_info(): {micropython.mem_info()}")
70+
#self._add_label(screen, f"micropython.qstr_info(): {micropython.qstr_info()}")
71+
self._add_label(screen, f"mpos.__path__: {mpos.__path__}") # this will show .frozen if the /lib folder is frozen (prod build)
72+
73+
# Partition info (ESP32 only)
6174
try:
6275
from esp32 import Partition
63-
label5 = lv.label(screen)
64-
label5.set_text("") # otherwise it will show the default "Text" if there's an exception below
6576
current = Partition(Partition.RUNNING)
66-
label5.set_text(f"Partition.RUNNING: {current}")
77+
self._add_label(screen, f"Partition.RUNNING: {current}")
6778
next_partition = current.get_next_update()
68-
label6 = lv.label(screen)
69-
label6.set_text(f"Next update partition: {next_partition}")
79+
self._add_label(screen, f"Next update partition: {next_partition}")
7080
except Exception as e:
7181
print(f"Partition info got exception: {e}")
82+
83+
# Machine info
7284
try:
7385
print("Trying to find out additional board info, not available on every platform...")
7486
import machine
75-
label7 = lv.label(screen)
76-
label7.set_text("") # otherwise it will show the default "Text" if there's an exception below
77-
label7.set_text(f"machine.freq: {machine.freq()}")
78-
label8 = lv.label(screen)
79-
label8.set_text(f"machine.unique_id(): {machine.unique_id()}")
80-
label9 = lv.label(screen)
81-
label9.set_text(f"machine.wake_reason(): {machine.wake_reason()}")
82-
label10 = lv.label(screen)
83-
label10.set_text(f"machine.reset_cause(): {machine.reset_cause()}")
87+
self._add_label(screen, f"machine.freq: {machine.freq()}")
88+
self._add_label(screen, f"machine.unique_id(): {machine.unique_id()}")
89+
self._add_label(screen, f"machine.wake_reason(): {machine.wake_reason()}")
90+
self._add_label(screen, f"machine.reset_cause(): {machine.reset_cause()}")
8491
except Exception as e:
8592
print(f"Additional board info got exception: {e}")
93+
94+
# Freezefs info (production builds only)
8695
try:
8796
print("Trying to find out freezefs info, this only works on production builds...") # dev builds already have the /builtin folder
8897
import freezefs_mount_builtin
89-
label11 = lv.label(screen)
90-
label11.set_text(f"freezefs_mount_builtin.date_frozen: {freezefs_mount_builtin.date_frozen}")
91-
label12 = lv.label(screen)
92-
label12.set_text(f"freezefs_mount_builtin.files_folders: {freezefs_mount_builtin.files_folders}")
93-
label13 = lv.label(screen)
94-
label13.set_text(f"freezefs_mount_builtin.sum_size: {freezefs_mount_builtin.sum_size}")
95-
label14 = lv.label(screen)
96-
label14.set_text(f"freezefs_mount_builtin.version: {freezefs_mount_builtin.version}")
98+
self._add_label(screen, f"freezefs_mount_builtin.date_frozen: {freezefs_mount_builtin.date_frozen}")
99+
self._add_label(screen, f"freezefs_mount_builtin.files_folders: {freezefs_mount_builtin.files_folders}")
100+
self._add_label(screen, f"freezefs_mount_builtin.sum_size: {freezefs_mount_builtin.sum_size}")
101+
self._add_label(screen, f"freezefs_mount_builtin.version: {freezefs_mount_builtin.version}")
97102
except Exception as e:
98103
# This will throw an EEXIST exception if there is already a "/builtin" folder present
99104
# It will throw "no module named 'freezefs_mount_builtin'" if there is no frozen filesystem
@@ -102,34 +107,10 @@ def onCreate(self):
102107
# BUT which will still have the frozen-inside /lib folder. So the user will be able to install apps into /builtin
103108
# but they will not be able to install libraries into /lib.
104109
print("main.py: WARNING: could not import/run freezefs_mount_builtin: ", e)
105-
label11 = lv.label(screen)
106-
label11.set_text(f"freezefs_mount_builtin exception (normal if internal storage partition has overriding /builtin folder): {e}")
107-
# Disk usage:
108-
import os
109-
try:
110-
stat = os.statvfs('/')
111-
total_space = stat[0] * stat[2]
112-
free_space = stat[0] * stat[3]
113-
used_space = total_space - free_space
114-
label20 = lv.label(screen)
115-
label20.set_text(f"Total space in /: {total_space} bytes")
116-
label21 = lv.label(screen)
117-
label21.set_text(f"Free space in /: {free_space} bytes")
118-
label22 = lv.label(screen)
119-
label22.set_text(f"Used space in /: {used_space} bytes")
120-
except Exception as e:
121-
print(f"About app could not get info on / filesystem: {e}")
122-
try:
123-
stat = os.statvfs('/sdcard')
124-
total_space = stat[0] * stat[2]
125-
free_space = stat[0] * stat[3]
126-
used_space = total_space - free_space
127-
label23 = lv.label(screen)
128-
label23.set_text(f"Total space /sdcard: {total_space} bytes")
129-
label24 = lv.label(screen)
130-
label24.set_text(f"Free space /sdcard: {free_space} bytes")
131-
label25 = lv.label(screen)
132-
label25.set_text(f"Used space /sdcard: {used_space} bytes")
133-
except Exception as e:
134-
print(f"About app could not get info on /sdcard filesystem: {e}")
110+
self._add_label(screen, f"freezefs_mount_builtin exception (normal if internal storage partition has overriding /builtin folder): {e}")
111+
112+
# Disk usage info
113+
self._add_disk_info(screen, '/')
114+
self._add_disk_info(screen, '/sdcard')
115+
135116
self.setContentView(screen)

0 commit comments

Comments
 (0)