diff --git a/luxafor/cli.py b/luxafor/cli.py index b97fb74..6a22ba5 100644 --- a/luxafor/cli.py +++ b/luxafor/cli.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import logging import sys import click @@ -6,11 +7,14 @@ import click from luxafor import luxafor +logger = logging.getLogger() + + def get_luxafor(): return luxafor.Luxafor() -def convert_hex_to_dec_color(hex_color): +def convert_hex_to_dec_color(hex_color: str) -> tuple: (red, green, blue) = hex_color[0:2], hex_color[2:4], hex_color[4:6] red = int(red, 16) @@ -20,12 +24,31 @@ def convert_hex_to_dec_color(hex_color): return (red, green, blue) -def convert_dec_to_hex_color(red, green, blue): +def convert_dec_to_hex_color(red: int, green: int, blue: int) -> str: colors = (red, green, blue) return "".join([ hex(color).split('x')[1].upper() for color in colors]) +def get_matching_led(led: str) -> hex: + """ + Returns a mathching Led object from the :class:`luxafor.Leds` based + on the user input in the CLI. + + If no valid input is given defaults to all leds. + """ + led_group = getattr(luxafor.Leds, led.upper(), False) + if led_group: + return led_group + + led_number = getattr(luxafor.Leds, 'LED%s' % led, False) + if led_number: + return led_number + + logger.info('Led(s) %s not found, falling back to all' % led) + return luxafor.Leds.ALL + + @click.group() def cli(): pass @@ -60,7 +83,7 @@ def dec2hex(red, green, blue): @cli.command() -@click.option('--led', default=luxafor.Leds.ALL) +@click.option('--led', default='all') @click.argument('color') def set(led, color): """Sets the flag with a fixed color.""" @@ -68,11 +91,11 @@ def set(led, color): flag = get_luxafor() - flag.set_color(*color, led=led) + flag.set_color(*color, led=get_matching_led(led)) @cli.command() -@click.option('--led', default=luxafor.Leds.ALL) +@click.option('--led', default='all') @click.option('--speed', default=128, type=click.IntRange(0, 255)) @click.argument('color') def fade(led, speed, color): @@ -80,11 +103,11 @@ def fade(led, speed, color): flag = get_luxafor() - flag.fade(*color, led=led, speed=speed) + flag.fade(*color, led=get_matching_led(led), speed=speed) @cli.command() -@click.option('--led', default=luxafor.Leds.ALL) +@click.option('--led', default='all') @click.option('--speed', default=6, type=click.IntRange(0, 255)) @click.option('--repeat', default=1, type=click.IntRange(1, 255)) @click.argument('color') @@ -93,7 +116,8 @@ def strobe(led, speed, repeat, color): flag = get_luxafor() - flag.strobe(*color, led=led, speed=speed, repeat=repeat) + flag.strobe(*color, led=get_matching_led(led), + speed=speed, repeat=repeat) @cli.command()