From 461133a1785bbf8e71ac9e386a533425872d6d40 Mon Sep 17 00:00:00 2001 From: up-n-atom Date: Sat, 30 Dec 2023 04:23:09 -0500 Subject: [PATCH] Add service enable/disable helper --- xmo/dmz.py | 8 +++----- xmo/xmo.py | 12 +++++++++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/xmo/dmz.py b/xmo/dmz.py index eab48fc..38ecfc8 100644 --- a/xmo/dmz.py +++ b/xmo/dmz.py @@ -13,12 +13,10 @@ def _validate_mac_address(ctx: click.Context, param: click.Parameter, value: str @xmo.cli.command() @click.option('-m', '--mac-address', callback=_validate_mac_address, prompt='MAC Address') -@click.pass_obj -async def enable_advanced_dmz(client: SagemcomClient, mac_address: str) -> None: +async def enable_advanced_dmz(mac_address: str) -> None: try: - await client.set_value_by_xpath('Device/Services/BellNetworkCfg/AdvancedDMZ/Enable', False) - await client.set_value_by_xpath('Device/Services/BellNetworkCfg/AdvancedDMZ/AdvancedDMZhost', mac_address) - await client.set_value_by_xpath('Device/Services/BellNetworkCfg/AdvancedDMZ/Enable', True) + async with xmo.flipflop('Device/Services/BellNetworkCfg/AdvancedDMZ/Enable') as client: + await client.set_value_by_xpath('Device/Services/BellNetworkCfg/AdvancedDMZ/AdvancedDMZhost', mac_address) except Exception as e: click.echo(e, err=True) raise click.Abort() diff --git a/xmo/xmo.py b/xmo/xmo.py index b5d0de9..e5f701d 100644 --- a/xmo/xmo.py +++ b/xmo/xmo.py @@ -60,7 +60,6 @@ async def get_value(ctx: click.Context, path: list[str]) -> None: except Exception as e: click.echo(e, err=True) continue - #raise click.Abort() else: click.echo(json.dumps(value, indent=2)) @@ -78,3 +77,14 @@ async def set_value(ctx: click.Context, path: str, value: str) -> None: click.echo(e, err=True) raise click.Abort() + +@asynccontextmanager +async def flipflop(xpath: str) -> None: + if (client := click.get_current_context().find_object(SagemcomClient)) is None: + raise ValueError('client not found') + await client.set_value_by_xpath(xpath, False) + try: + yield client + finally: + await client.set_value_by_xpath(xpath, True) +