e494eab608
Configure wasp using a central toml file Signed-off-by: Adam Blair <adampblair@protonmail.com>
93 lines
4 KiB
Python
93 lines
4 KiB
Python
"""Configure the wasp distribution based on the provided wasp.toml config
|
|
|
|
This script generates the following files and directories
|
|
wasp/apps/user/
|
|
wasp/boards/manifest_user_apps.py
|
|
wasp/appregistry.py
|
|
"""
|
|
|
|
import tomli
|
|
import os
|
|
import sys
|
|
|
|
|
|
def _snake_case_to_pascal_case(s):
|
|
out = ''
|
|
for word in s.split('_'):
|
|
out = out + word[:1].upper() + word[1:]
|
|
return out
|
|
|
|
|
|
def _file_path_to_class_name(path):
|
|
return _snake_case_to_pascal_case(path.split('/')[-1].split('.')[0]) + 'App'
|
|
|
|
|
|
def _file_path_to_display_name(path):
|
|
return _snake_case_to_pascal_case(path.split('/')[-1].split('.')[0])
|
|
|
|
|
|
with open(sys.argv[1:][0], 'rb') as config_file:
|
|
config = tomli.load(config_file)
|
|
|
|
# Copy selected apps to the wasp app user directory
|
|
for app in config.get('app'):
|
|
os.system('cp ' + app.get('file') + ' wasp/apps/user/' + app.get('file').split('/')[-1])
|
|
|
|
# Copy selected watch faces to the wasp app user directory
|
|
for app in config.get('watchface'):
|
|
os.system('cp ' + app.get('file') + ' wasp/apps/user/' + app.get('file').split('/')[-1])
|
|
|
|
# Create the user app manifest containing all user apps and watch faces
|
|
with open('wasp/boards/manifest_user_apps.py', 'w') as manifest_file:
|
|
manifest_file.write('# This file is auto generated from the wasp.toml. Manual changes will be overwritten. \n\n')
|
|
manifest_file.write('manifest = (\n')
|
|
for app in config.get('app'):
|
|
manifest_file.write(' \'' + 'apps/user/' + app.get('file').split('/')[-1] + '\',\n')
|
|
for watchface in config.get('watchface'):
|
|
manifest_file.write(' \'' + 'apps/user/' + watchface.get('file').split('/')[-1] + '\',\n')
|
|
manifest_file.write(')')
|
|
|
|
# Create a registry for the os to use to populate its lists
|
|
with open('wasp/appregistry.py', 'w') as reg_file:
|
|
|
|
# Software to display in the software app
|
|
reg_file.write('# This file is auto generated from the wasp.toml. Manual changes will be overwritten. \n\n')
|
|
reg_file.write('software_list = (\n')
|
|
for app in config.get('app'):
|
|
if not app.get('quick_ring'):
|
|
app_module_name = 'apps.user.' + app.get('file').split('/')[-1].split('.')[0]
|
|
app_display_name = _file_path_to_display_name(app.get('file'))
|
|
reg_file.write(' (\'' + app_module_name + '\', \'' + app_display_name + '\'),\n')
|
|
reg_file.write(')\n\n')
|
|
|
|
# Software to display in the faces app
|
|
reg_file.write('faces_list = (\n')
|
|
for face in config.get('watchface'):
|
|
watchface_module = 'apps.user.' + face.get('file').split('/')[-1].split('.')[0]
|
|
watchface_class = _file_path_to_display_name(face.get('file'))
|
|
reg_file.write(' (\'' + watchface_module + '\',\'' + watchface_class + '\'),\n')
|
|
reg_file.write(')\n\n')
|
|
|
|
|
|
# Software to be loaded at startup (default watch face, quick ring apps, any apps marked auto_load in the config)
|
|
reg_file.write('autoload_list = (\n')
|
|
|
|
# Fist app to autoload should be the default watch face
|
|
default_watchface = None
|
|
for watchface in config.get('watchface'):
|
|
if watchface.get('default'):
|
|
default_watchface = watchface
|
|
elif not default_watchface:
|
|
default_watchface = watchface
|
|
watchface_path = 'apps.user.' + default_watchface.get('file').split('/')[-1].split('.')[0] + '.' + _file_path_to_class_name(default_watchface.get('file'))
|
|
reg_file.write(' (\'' + watchface_path + '\', True, False, True),\n')
|
|
|
|
# The next apps should be the quick ring and any auto_load apps (in order specified in the config)
|
|
for app in config.get('app'):
|
|
if (app.get('quick_ring') or app.get('auto_load')):
|
|
app_path = 'apps.user.' + app.get('file').split('/')[-1].split('.')[0] + '.' + _file_path_to_class_name(app.get('file'))
|
|
app_quick_ring = str(not (app.get('quick_ring') is None))
|
|
app_no_except = str(not (app.get('no_except') is None))
|
|
reg_file.write(' (\'' + app_path + '\', ' + app_quick_ring + ', False, ' + app_no_except + '),\n')
|
|
reg_file.write(')\n\n')
|
|
|