Color Types
Warning
To use this type, you need to install the optional pydantic-extra-types package:
pip install pydantic-extra-types
Color
parses HTML and CSS colors.
You can use the Color
data type for storing colors as per
CSS3 specification. Colors can be defined via:
- name (e.g.
"Black"
,"azure"
) - hexadecimal value
(e.g.
"0x000"
,"#FFFFFF"
,"7fffd4"
) - RGB/RGBA tuples (e.g.
(255, 255, 255)
,(255, 255, 255, 0.5)
) - RGB/RGBA strings
(e.g.
"rgb(255, 255, 255)"
,"rgba(255, 255, 255, 0.5)"
) - HSL strings
(e.g.
"hsl(270, 60%, 70%)"
,"hsl(270, 60%, 70%, .5)"
)
from pydantic import BaseModel, ValidationError
from pydantic_extra_types import Color
c = Color('ff00ff')
print(c.as_named())
#> magenta
print(c.as_hex())
#> #f0f
c2 = Color('green')
print(c2.as_rgb_tuple())
#> (0, 128, 0)
print(c2.original())
#> green
print(repr(Color('hsl(180, 100%, 50%)')))
#> Color('cyan', rgb=(0, 255, 255))
class Model(BaseModel):
color: Color
print(Model(color='purple'))
#> color=Color('purple', rgb=(128, 0, 128))
try:
Model(color='hello')
except ValidationError as e:
print(e)
"""
1 validation error for Model
color
value is not a valid color: string not recognised as a valid color [type=color_error, input_value='hello', input_type=str]
"""
Color
has the following methods:
original
- the original string or tuple passed to
Color
as_named
- returns a named CSS3 color; fails if the alpha channel is set or no such color exists unless
fallback=True
is supplied, in which case it falls back toas_hex
as_hex
- returns a string in the format
#fff
or#ffffff
; will contain 4 (or 8) hex values if the alpha channel is set, e.g.#7f33cc26
as_rgb
- returns a string in the format
rgb(<red>, <green>, <blue>)
, orrgba(<red>, <green>, <blue>, <alpha>)
if the alpha channel is set as_rgb_tuple
- returns a 3- or 4-tuple in RGB(a) format. The
alpha
keyword argument can be used to define whether the alpha channel should be included; options:True
- always include,False
- never include,None
(default) - include if set as_hsl
- string in the format
hsl(<hue deg>, <saturation %>, <lightness %>)
orhsl(<hue deg>, <saturation %>, <lightness %>, <alpha>)
if the alpha channel is set as_hsl_tuple
- returns a 3- or 4-tuple in HSL(a) format. The
alpha
keyword argument can be used to define whether the alpha channel should be included; options:True
- always include,False
- never include,None
(the default) - include if set
The __str__
method for Color
returns self.as_named(fallback=True)
.
Note
The as_hsl*
refer to hue, saturation, lightness "HSL" as used in html and most of the world, not
"HLS" as used in Python's colorsys
.