forked from andreeuuetoa/litsimaja
Add python led programs
This commit is contained in:
40
pyleds/lib/ProgramLoading.py
Normal file
40
pyleds/lib/ProgramLoading.py
Normal file
@@ -0,0 +1,40 @@
|
||||
from os import scandir
|
||||
from lib.Litsimaja import Litsimaja
|
||||
from lib.Program import Program
|
||||
|
||||
|
||||
def resolve(namespace: str, class_name: str):
|
||||
m_name = 'program.' + namespace + '.' + class_name
|
||||
module = __import__(m_name, None, None, [m_name])
|
||||
return module
|
||||
|
||||
|
||||
def run(namespace: str, class_name: str, lm: Litsimaja, logger, args: [] = None):
|
||||
module = resolve(namespace, class_name)
|
||||
loaded_class = getattr(module, class_name)
|
||||
program = loaded_class(lm)
|
||||
logger.info('Loaded "' + module.name() + '" from ' + namespace + '.' + class_name + ' with args: ' + repr(args))
|
||||
lm.add_loop(program.get_loop())
|
||||
program.run(args)
|
||||
|
||||
|
||||
def list_all(grouped: bool = False):
|
||||
all_programs = []
|
||||
programs = []
|
||||
for entry in scandir('program'):
|
||||
if entry.is_dir():
|
||||
for file in scandir('program/' + entry.name):
|
||||
if file.is_file() and file.name[-3:] == '.py':
|
||||
try:
|
||||
program_name = file.name[: -3]
|
||||
module = resolve(entry.name, program_name)
|
||||
if hasattr(module, program_name) and issubclass(getattr(module, program_name), Program):
|
||||
programs.append({'prg': entry.name + '.' + program_name, 'name': module.name()})
|
||||
except AttributeError:
|
||||
continue
|
||||
if grouped and len(programs) > 0:
|
||||
all_programs.append({'group': entry.name, 'programs': programs})
|
||||
programs = []
|
||||
if not grouped:
|
||||
all_programs = programs
|
||||
return all_programs
|
||||
Reference in New Issue
Block a user