easyconf-lemonbar/easyconf_lemonbar/parse_config_file.py

60 lines
2.7 KiB
Python
Raw Normal View History

2023-02-12 20:09:01 +00:00
from yaml import safe_load
2023-02-12 03:16:38 +00:00
from schema import And, Optional, Regex, Schema, SchemaError, Or
2023-03-12 02:20:00 +00:00
from signal import SIGRTMIN, SIGRTMAX
2023-02-12 03:16:38 +00:00
2023-03-11 22:51:30 +00:00
def get_bar_config_and_module_config_list(filename):
2023-02-12 03:16:38 +00:00
config_schema = Schema({
"bar": {
Optional("config"): {
Optional("geometry"): Regex(r'^[0-9]*x[0-9]*\+[0-9]*\+[0-9]*$'),
Optional("bottom"): bool,
Optional("force"): bool,
Optional("font"): str,
Optional("name"): str,
Optional("line_thickness"): And(int, lambda n: n > 0),
Optional("bg_color", default="#000"): Regex(r'^#[0-9a-fA-F]{3}$|^#[0-9a-fA-F]{6}$|^#[0-9a-fA-F]{8}$'),
Optional("fg_color", default="#FFF"): Regex(r'^#[0-9a-fA-F]{3}$|^#[0-9a-fA-F]{6}$|^#[0-9a-fA-F]{8}$'),
Optional("offset"): int,
Optional("line_color"): Regex(r'^#[0-9a-fA-F]{3}$|^#[0-9a-fA-F]{6}$|^#[0-9a-fA-F]{8}$'),
Optional("padding", default=" "): str,
2023-03-11 03:47:01 +00:00
Optional("seperator", default="|"): str,
Optional("margin", default=""): str
2023-02-12 03:16:38 +00:00
},
"modules": [
{
2023-02-12 20:09:01 +00:00
"name": str,
"command": str,
2023-02-18 19:14:08 +00:00
"refresh": And(int, lambda n : n >= 0),
2023-02-12 20:09:01 +00:00
Optional("prefix"): str,
2023-03-12 02:20:00 +00:00
Optional("signal"): And(int, lambda n : SIGRTMIN <= SIGRTMIN+n <= SIGRTMAX),
2023-02-12 20:09:01 +00:00
"format": {
"align": Or("left", "center", "right"),
Optional("bg_color"): Regex(r'^#[0-9a-fA-F]{3}$|^#[0-9a-fA-F]{6}$|^#[0-9a-fA-F]{8}$'),
Optional("fg_color"): Regex(r'^#[0-9a-fA-F]{3}$|^#[0-9a-fA-F]{6}$|^#[0-9a-fA-F]{8}$'),
Optional("font"): And(int, lambda n: 1 <= n <= 5),
Optional("offset"): int,
Optional("line"): {
"type": Or("underline", "overline"),
Optional("color"): Regex(r'^#[0-9a-fA-F]{3}$|^#[0-9a-fA-F]{6}$|^#[0-9a-fA-F]{8}$')
2023-02-12 03:16:38 +00:00
}
2023-03-11 22:51:30 +00:00
# Not yet implemented.
#Optional("button"): {
# "activator": Or("left", "center", "right", "scrup", "scrdown"),
# "command": str
#}
2023-02-12 03:16:38 +00:00
}
}
]
}
})
with open(filename, "r", encoding="utf8") as file:
config_file = safe_load(file)
try:
2023-03-11 22:51:30 +00:00
validated_config = config_schema.validate(config_file)
return validated_config["bar"]["config"], validated_config["bar"]["modules"]
2023-02-12 03:16:38 +00:00
except SchemaError as se:
raise se