Source code for enhomie.execution.action

"""
Functions and routines associated with Enasis Network Homie Automate.

This file is part of Enasis Network software eco-system. Distribution
is permitted, for more information consult the project license file.
"""



from argparse import ArgumentParser
from sys import argv as sys_argv
from typing import Optional
from typing import TYPE_CHECKING
from typing import get_args

from encommon.types import DictStrAny

from ..homie import Homie
from ..homie import HomieConfig
from ..homie.common import HomieState

if TYPE_CHECKING:
    from ..homie.childs import HomieDevice
    from ..homie.childs import HomieGroup
    from ..homie.childs import HomieScene



[docs] def arguments( # noqa: CFQ001 args: Optional[list[str]] = None, ) -> DictStrAny: """ Construct arguments which are associated with the file. :param args: Override the source for the main arguments. :returns: Construct arguments from command line options. """ parser = ArgumentParser() args = args or sys_argv[1:] parser.add_argument( '--config', required=True, help=( 'complete or relative ' 'path to config file')) parser.add_argument( '--console', action='store_true', default=False, help=( 'write log messages ' 'to standard output')) parser.add_argument( '--debug', action='store_true', default=False, help=( 'increase logging level ' 'for standard output')) parser.add_argument( '--dry-run', action='store_true', default=False, dest='dryrun', help='do not execute actions') parser.add_argument( '--idempotent', action='store_false', default=None, dest='potent', help=( 'do not make requests ' 'when already applied')) parser.add_argument( '--print', action='store_true', default=False, dest='paction', help=( 'print the submited ' 'actions to console')) parser.add_argument( '--group', help=( 'which group action ' 'is performed upon')) parser.add_argument( '--device', help=( 'which device action ' 'is performed upon')) states = list( get_args(HomieState)) parser.add_argument( '--state', choices=states, help=( 'which state value the ' 'target will changed')) parser.add_argument( '--color', help=( 'which color value the ' 'target will changed')) parser.add_argument( '--level', type=int, help=( 'which level value the ' 'target will changed')) parser.add_argument( '--scene', help=( 'which level value the ' 'target will changed')) return vars( parser .parse_args(args))
[docs] def operation( # NOCVR homie: Homie, ) -> None: """ Perform whatever operation is associated with the file. :param homie: Primary class instance for Homie Automate. """ assert homie.refresh() config = homie.config sargs = config.sargs _group = sargs['group'] _device = sargs['device'] _scene = sargs['scene'] childs = homie.childs devices = childs.devices groups = childs.groups scenes = childs.scenes potent = homie.potent group: Optional['HomieGroup'] device: Optional['HomieDevice'] scene: Optional['HomieScene'] group = ( groups[_group] if _group is not None else None) device = ( devices[_device] if _device is not None else None) scene = ( scenes[_scene] if _scene is not None else None) target = device or group assert target is not None aitems = ( homie.get_actions( target=target, state=sargs['state'], color=sargs['color'], level=sargs['level'], scene=scene)) homie.set_actions( aitems=aitems, force=potent)
[docs] def execution( # NOCVR args: Optional[list[str]] = None, ) -> None: """ Perform whatever operation is associated with the file. :param args: Override the source for the main arguments. """ config = HomieConfig( arguments(args)) config.logger.start() config.logger.log_i( base='execution/action', status='started') homie = Homie(config) operation(homie) config.logger.log_i( base='execution/action', status='stopped') config.logger.stop()
if __name__ == '__main__': execution() # NOCVR