setup poetry and redid parsing
This commit is contained in:
parent
43de4df4c4
commit
8bb3bdbebf
5 changed files with 248 additions and 50 deletions
90
config_parsing.py
Normal file
90
config_parsing.py
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
from yaml import dump, safe_load
|
||||||
|
from schema import And, Optional, Regex, Schema, SchemaError, Or
|
||||||
|
from json import dumps
|
||||||
|
|
||||||
|
def get_validated_config(filename):
|
||||||
|
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,
|
||||||
|
Optional("seperator", default="|"): str
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
str: {
|
||||||
|
"command": str,
|
||||||
|
"refresh": And(int, lambda n : n > 0),
|
||||||
|
Optional("prefix"): str,
|
||||||
|
"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}$')
|
||||||
|
},
|
||||||
|
Optional("button"): {
|
||||||
|
"activator": Or("left", "center", "right", "scrup", "scrdown"),
|
||||||
|
"command": str
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
with open(filename, "r", encoding="utf8") as file:
|
||||||
|
config_file = safe_load(file)
|
||||||
|
|
||||||
|
try:
|
||||||
|
return config_schema.validate(config_file)
|
||||||
|
except SchemaError as se:
|
||||||
|
raise se
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_lemonbar_flags(config):
|
||||||
|
configuration_options = config["bar"]["config"]
|
||||||
|
flags = ""
|
||||||
|
for option in configuration_options:
|
||||||
|
match option:
|
||||||
|
case 'geometry':
|
||||||
|
flags += (" -g '" + configuration_options[option] + "'")
|
||||||
|
case 'bottom':
|
||||||
|
flags += (" -b")
|
||||||
|
case 'force':
|
||||||
|
flags += (" -d")
|
||||||
|
case 'font':
|
||||||
|
flags += (" -f '" + configuration_options[option] + "'")
|
||||||
|
case 'name':
|
||||||
|
flags += (" -n '" + configuration_options[option] + "'")
|
||||||
|
case 'line_thickness':
|
||||||
|
flags += (" -u " + str(configuration_options[option]))
|
||||||
|
case 'bg_color':
|
||||||
|
flags += (" -B '" + configuration_options[option] + "'")
|
||||||
|
case 'fg_color':
|
||||||
|
flags += (" -F '" + configuration_options[option] + "'")
|
||||||
|
case 'offset':
|
||||||
|
flags += (" -o " + str(configuration_options[option]))
|
||||||
|
case 'line_color':
|
||||||
|
flags += (" -U '" + configuration_options[option] + "'")
|
||||||
|
return flags.strip()
|
||||||
|
|
||||||
|
|
||||||
|
print(get_lemonbar_flags(get_validated_config("./testing_config.yml")))
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ bar:
|
||||||
# Define a custom size of the bar. By default, this is different for every
|
# Define a custom size of the bar. By default, this is different for every
|
||||||
# screen, so the format is shown below.
|
# screen, so the format is shown below.
|
||||||
geometry: "widthxheight+x+y"
|
geometry: "widthxheight+x+y"
|
||||||
|
# geometry: "100x200+5+10"
|
||||||
# Dock the bar at the bottom of the screen.
|
# Dock the bar at the bottom of the screen.
|
||||||
bottom: false
|
bottom: false
|
||||||
# Force the bar to dock (if your window manager is weird).
|
# Force the bar to dock (if your window manager is weird).
|
||||||
|
@ -38,57 +39,59 @@ bar:
|
||||||
# the seperator.
|
# the seperator.
|
||||||
seperator: "|"
|
seperator: "|"
|
||||||
|
|
||||||
# Here is where you can define your individual modules. You can define as
|
# Here is where you can define a list your individual modules. You can define
|
||||||
# many modules as you want. Some fields are required; these will be indicated.
|
# as many modules as you want. Some fields are required; these will be
|
||||||
# If a field doesn't say its required, you can safely omit it in your own
|
# indicated. If a field doesn't say its required, you can safely omit it in
|
||||||
# configuration. A "bare minimum" configuration is shown below for your
|
# your own configuration. A "bare minimum" configuration is shown below for
|
||||||
# convience.
|
# your convience.
|
||||||
modules:
|
modules:
|
||||||
# This is an example module. You can name it whatever you want, it doesn't
|
# This is an example module. You can name it whatever you want, it doesn't
|
||||||
# matter.
|
# matter. Notice the `-` before the name. Each module must be a list item!
|
||||||
example_module:
|
- example_module:
|
||||||
# This command is run by `sh -c`, and whatever is sent to stdout is the
|
# This command is run by `sh -c`, and whatever is sent to stdout is the
|
||||||
# text that will be displayed for this module. `date` here is used as an
|
# text that will be displayed for this module. `date` here is used as an
|
||||||
# example. THIS IS A REQUIRED FIELD.
|
# example. THIS IS A REQUIRED FIELD.
|
||||||
command: "date"
|
command: "date"
|
||||||
# How often to re-run the command and display the updated text. THIS IS A
|
# How often to re-run the command and display the updated text. THIS IS A
|
||||||
# REQUIRED FIELD.
|
# REQUIRED FIELD.
|
||||||
refresh: 1000
|
refresh: 1000
|
||||||
# Prefix to be printed before the text of the command.
|
# Prefix to be printed before the text of the command.
|
||||||
prefix: "DATE: "
|
prefix: "DATE: "
|
||||||
# Formatting options. These will only affect the text and padding of this
|
# Formatting options. These will only affect the text and padding of this
|
||||||
# module.
|
# module.
|
||||||
format:
|
format:
|
||||||
# Where the text should be placed on the bar. `left`, `right`, or
|
# Where the text should be placed on the bar. `left`, `right`, or
|
||||||
# `center`. THIS IS A REQUIRED FIELD.
|
# `center`. THIS IS A REQUIRED FIELD.
|
||||||
align: left
|
align: left
|
||||||
# Background color of the bar.
|
# Background color of the bar.
|
||||||
bg_color: "#000"
|
bg_color: "#000"
|
||||||
# Text color
|
# Text color
|
||||||
fg_color: "#FFF"
|
fg_color: "#FFF"
|
||||||
# INDEX of the font for this module to be displayed in (see above).
|
# INDEX of the font for this module to be displayed in (see above).
|
||||||
font: 1
|
font: 1
|
||||||
# Set an underline or overline
|
# Horizontal offset of the module text in pixels (can be negative).
|
||||||
line:
|
offset: 0
|
||||||
# Self-explanatory. `underline` or `overline`. IF you set a line, then
|
# Set an underline or overline
|
||||||
# this is a required field.
|
line:
|
||||||
type: underline
|
# Self-explanatory. `underline` or `overline`. IF you set a line, then
|
||||||
# Set a custom color for the line.
|
# this is a required field.
|
||||||
color: "#000"
|
type: underline
|
||||||
# Make this module act like a button. Both of these fields are required
|
# Set a custom color for the line.
|
||||||
# if you are making a button. You may also define multiple buttons with
|
color: "#000"
|
||||||
# different activators for a single module.
|
# Make this module act like a button. Both of these fields are required
|
||||||
button:
|
# if you are making a button. You may also define multiple buttons with
|
||||||
# What mouse click you have to make to activate the button. Can be
|
# different activators for a single module.
|
||||||
# `left`, `center`, or `right`. You can also set it to activate when
|
button:
|
||||||
# you scroll up or down with `scrup` and `scrdown.`
|
# What mouse click you have to make to activate the button. Can be
|
||||||
activator: left
|
# `left`, `center`, or `right`. You can also set it to activate when
|
||||||
# Command to be executed upon activation. Will be run with `sh -c`.
|
# you scroll up or down with `scrup` and `scrdown.`
|
||||||
command: "echo 'hello' > ~/file.txt"
|
activator: left
|
||||||
|
# Command to be executed upon activation. Will be run with `sh -c`.
|
||||||
|
command: "echo 'hello' > ~/file.txt"
|
||||||
|
|
||||||
# Here is a simpler example module showing only the required fields.
|
# Here is a simpler example module showing only the required fields.
|
||||||
bare_minimum:
|
- bare_minimum:
|
||||||
command: "whoami"
|
command: "whoami"
|
||||||
refresh: 1000
|
refresh: 1000
|
||||||
format:
|
format:
|
||||||
align: right
|
align: right
|
||||||
|
|
83
poetry.lock
generated
Normal file
83
poetry.lock
generated
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
# This file is automatically @generated by Poetry and should not be changed by hand.
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "contextlib2"
|
||||||
|
version = "21.6.0"
|
||||||
|
description = "Backports and enhancements for the contextlib module"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.6"
|
||||||
|
files = [
|
||||||
|
{file = "contextlib2-21.6.0-py2.py3-none-any.whl", hash = "sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f"},
|
||||||
|
{file = "contextlib2-21.6.0.tar.gz", hash = "sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyyaml"
|
||||||
|
version = "6.0"
|
||||||
|
description = "YAML parser and emitter for Python"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.6"
|
||||||
|
files = [
|
||||||
|
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
|
||||||
|
{file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
|
||||||
|
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
|
||||||
|
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
|
||||||
|
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
|
||||||
|
{file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
|
||||||
|
{file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
|
||||||
|
{file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"},
|
||||||
|
{file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"},
|
||||||
|
{file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"},
|
||||||
|
{file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"},
|
||||||
|
{file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"},
|
||||||
|
{file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"},
|
||||||
|
{file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"},
|
||||||
|
{file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
|
||||||
|
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
|
||||||
|
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
|
||||||
|
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
|
||||||
|
{file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
|
||||||
|
{file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
|
||||||
|
{file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
|
||||||
|
{file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
|
||||||
|
{file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
|
||||||
|
{file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
|
||||||
|
{file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
|
||||||
|
{file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
|
||||||
|
{file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
|
||||||
|
{file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
|
||||||
|
{file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
|
||||||
|
{file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
|
||||||
|
{file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
|
||||||
|
{file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
|
||||||
|
{file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
|
||||||
|
{file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
|
||||||
|
{file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
|
||||||
|
{file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
|
||||||
|
{file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
|
||||||
|
{file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
|
||||||
|
{file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
|
||||||
|
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "schema"
|
||||||
|
version = "0.7.5"
|
||||||
|
description = "Simple data validation library"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
files = [
|
||||||
|
{file = "schema-0.7.5-py2.py3-none-any.whl", hash = "sha256:f3ffdeeada09ec34bf40d7d79996d9f7175db93b7a5065de0faa7f41083c1e6c"},
|
||||||
|
{file = "schema-0.7.5.tar.gz", hash = "sha256:f06717112c61895cabc4707752b88716e8420a8819d71404501e114f91043197"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
contextlib2 = ">=0.5.5"
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
lock-version = "2.0"
|
||||||
|
python-versions = "^3.10"
|
||||||
|
content-hash = "1d5f331a8e059d3c178cae193c847ca08eb8682aa32651ab7829863453ec08da"
|
18
pyproject.toml
Normal file
18
pyproject.toml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
[tool.poetry]
|
||||||
|
name = "easyconf-lemonbar"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "A python script to easily configure lemonbar"
|
||||||
|
authors = ["Noah Swerhun <noah@noahsw.xyz>"]
|
||||||
|
license = "GPL-3.0-or-later"
|
||||||
|
readme = "README.md"
|
||||||
|
packages = [{include = "easyconf_lemonbar"}]
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
python = "^3.10"
|
||||||
|
PyYAML = "^6.0"
|
||||||
|
schema = "^0.7.5"
|
||||||
|
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["poetry-core"]
|
||||||
|
build-backend = "poetry.core.masonry.api"
|
4
pyrightconfig.json
Normal file
4
pyrightconfig.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"venv": "easyconf-lemonbar-yKjthnqC-py3.10",
|
||||||
|
"venvPath": "/home/noah/.cache/pypoetry/virtualenvs"
|
||||||
|
}
|
Loading…
Reference in a new issue