Projekt Litsimaja - Lapikute tagatoa seintele programmeeritavad ARGB ribad
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

40 lines
1.6 KiB

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