Source code for imgwrench.param
"""Custom parameter types for the click-based CLI"""
import click
from PIL import ImageColor
[docs]class Color(click.ParamType):
"""Parameter type representing a color as name, hex or rgb value"""
name = "color"
[docs] def convert(self, value, param, ctx):
if isinstance(value, tuple):
# click 8.0 may pass already parsed parameter values to convert, see
# https://github.com/pallets/click/issues/1898
return value
try:
return ImageColor.getrgb(value)
except ValueError:
self.fail("{} is not a valid color".format(value), param, ctx)
[docs]class Ratio(click.ParamType):
"""Parameter type representing a ratio or rational number"""
name = "ratio"
[docs] def convert(self, value, param, ctx):
if isinstance(value, float):
# click 8.0 may pass already parsed parameter values to convert, see
# https://github.com/pallets/click/issues/1898
return value
try:
a, b = value.split(":")
a, b = float(a), float(b)
ratio = a / b
except ValueError:
try:
ratio = float(value)
except ValueError:
self.fail("{} is not a valid ratio".format(value), param, ctx)
if ratio <= 0:
self.fail(
"parsed ratio {} is not strictly positive".format(value), param, ctx
)
return ratio
COLOR = Color()
RATIO = Ratio()