Module lib.tools.starter

Allows automatic component start without editing python scripts. This searches for startup.py files in lib directory and runs the 'startup' function

Expand source code
# Distributed under Pycameresp License
# Copyright (c) 2023 Remi BERTHOLET
""" Allows automatic component start without editing python scripts.
This searches for __startup__.py files in lib directory and runs the 'startup' function """
import tools.logger
import tools.filesystem
import tools.tasking

starter_kwargs = None
class Starter:
        """ Automatic component start without editing python script """
        @staticmethod
        async def task(**kwargs):
                """ Starter of components """
                global starter_kwargs
                directories,filenames = await tools.filesystem.ascandir("lib","__startup__.py",True)
                for startup in filenames:
                        startup = startup.replace("lib/","")
                        startup = startup.replace(".py","")
                        startup = startup.replace("/",".")

                        try:
                                # pylint:disable=consider-using-f-string
                                exec("import %s"%startup)
                                starter_kwargs = kwargs
                                exec("%s.startup(**starter_kwargs)"%startup)
                                starter_kwargs = None
                                tools.logger.syslog("Start component %s"%startup[:-12])
                        except Exception as err:
                                tools.logger.syslog(err)

        @staticmethod
        def start(**kwargs):
                """ Start module started """
                tools.tasking.Tasks.create_task(Starter.task(**kwargs))

Classes

class Starter

Automatic component start without editing python script

Expand source code
class Starter:
        """ Automatic component start without editing python script """
        @staticmethod
        async def task(**kwargs):
                """ Starter of components """
                global starter_kwargs
                directories,filenames = await tools.filesystem.ascandir("lib","__startup__.py",True)
                for startup in filenames:
                        startup = startup.replace("lib/","")
                        startup = startup.replace(".py","")
                        startup = startup.replace("/",".")

                        try:
                                # pylint:disable=consider-using-f-string
                                exec("import %s"%startup)
                                starter_kwargs = kwargs
                                exec("%s.startup(**starter_kwargs)"%startup)
                                starter_kwargs = None
                                tools.logger.syslog("Start component %s"%startup[:-12])
                        except Exception as err:
                                tools.logger.syslog(err)

        @staticmethod
        def start(**kwargs):
                """ Start module started """
                tools.tasking.Tasks.create_task(Starter.task(**kwargs))

Static methods

def start(**kwargs)

Start module started

Expand source code
@staticmethod
def start(**kwargs):
        """ Start module started """
        tools.tasking.Tasks.create_task(Starter.task(**kwargs))
async def task(**kwargs)

Starter of components

Expand source code
@staticmethod
async def task(**kwargs):
        """ Starter of components """
        global starter_kwargs
        directories,filenames = await tools.filesystem.ascandir("lib","__startup__.py",True)
        for startup in filenames:
                startup = startup.replace("lib/","")
                startup = startup.replace(".py","")
                startup = startup.replace("/",".")

                try:
                        # pylint:disable=consider-using-f-string
                        exec("import %s"%startup)
                        starter_kwargs = kwargs
                        exec("%s.startup(**starter_kwargs)"%startup)
                        starter_kwargs = None
                        tools.logger.syslog("Start component %s"%startup[:-12])
                except Exception as err:
                        tools.logger.syslog(err)