hyprland-community/pyprland

[FEAT] Improve error report when config file failed to be parsed

Closed this issue · 2 comments

Check #83.

Could be improved and show the following:

/full/path/to/config.toml failed to load: tomllib.TOMLDecodeError: Invalid value (at line 2, column 11)

CC @dantefromhell

Just upgraded to 2.2.15 and found a tomllib.TOMLDecodeError error + stacktrace (see below) in my log when using the following config snippet that includes a typo

[system_notifier]
default_color = "#bbccba

Stack trace

2024-05-03 20:24:38,139 [DEBUG] pyprland :: run_reload() :: command.py:180
2024-05-03 20:24:38,139 [INFO] pypr :: Loading /home/dante/.config/hypr/pyprland.toml :: command.py:94
2024-05-03 20:24:38,139 [INFO] pypr :: Loading /home/dante/.config/overrides/pyprland/99__testing.toml :: command.py:94
2024-05-03 20:24:38,139 [CRITICAL] pypr :: Problem reading /home/dante/.config/overrides/pyprland/99__testing.toml: Illegal character '\n' (at line 2, column 25) :: command.py:76
2024-05-03 20:24:38,139 [DEBUG] ipc :: notify 0 5000 rgb(ff1010)  Pyprland failed to read config: Illegal character '\n' (at line 2, column 25) :: ipc.py:126
2024-05-03 20:24:38,140 [WARNING] pypr :: pyprland::run_reload(()) failed: :: command.py:201
2024-05-03 20:24:38,140 [ERROR] pypr ::  :: command.py:202
Traceback (most recent call last):
  File "/nix/store/ny2vkb435dswji452bndpwdhwysqxq85-python3.11-pyprland-2.2.15/lib/python3.11/site-packages/pyprland/command.py", line 74, in __open_config
    config = self.__load_config_file(fname)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/ny2vkb435dswji452bndpwdhwysqxq85-python3.11-pyprland-2.2.15/lib/python3.11/site-packages/pyprland/command.py", line 96, in __load_config_file
    config = tomllib.load(f)
             ^^^^^^^^^^^^^^^
  File "/nix/store/glfr70gi7hfaj50mwj2431p8bg60fhqw-python3-3.11.9/lib/python3.11/tomllib/_parser.py", line66, in load
    return loads(s, parse_float=parse_float)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/glfr70gi7hfaj50mwj2431p8bg60fhqw-python3-3.11.9/lib/python3.11/tomllib/_parser.py", line102, in loads
    pos = key_value_rule(src, pos, out, header, parse_float)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/glfr70gi7hfaj50mwj2431p8bg60fhqw-python3-3.11.9/lib/python3.11/tomllib/_parser.py", line326, in key_value_rule
    pos, key, value = parse_key_value_pair(src, pos, parse_float)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/glfr70gi7hfaj50mwj2431p8bg60fhqw-python3-3.11.9/lib/python3.11/tomllib/_parser.py", line369, in parse_key_value_pair
    pos, value = parse_value(src, pos, parse_float)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/glfr70gi7hfaj50mwj2431p8bg60fhqw-python3-3.11.9/lib/python3.11/tomllib/_parser.py", line598, in parse_value
    return parse_one_line_basic_str(src, pos)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/glfr70gi7hfaj50mwj2431p8bg60fhqw-python3-3.11.9/lib/python3.11/tomllib/_parser.py", line409, in parse_one_line_basic_str
    return parse_basic_str(src, pos, multiline=False)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/glfr70gi7hfaj50mwj2431p8bg60fhqw-python3-3.11.9/lib/python3.11/tomllib/_parser.py", line580, in parse_basic_str
    raise suffixed_err(src, pos, f"Illegal character {char!r}")
tomllib.TOMLDecodeError: Illegal character '\n' (at line 2, column 25)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/nix/store/ny2vkb435dswji452bndpwdhwysqxq85-python3.11-pyprland-2.2.15/lib/python3.11/site-packages/pyprland/command.py", line 191, in _run_plugin_handler
    await getattr(plugin, full_name)(*params)
  File "/nix/store/ny2vkb435dswji452bndpwdhwysqxq85-python3.11-pyprland-2.2.15/lib/python3.11/site-packages/pyprland/command.py", line 170, in load_config
    await self.__open_config()
  File "/nix/store/ny2vkb435dswji452bndpwdhwysqxq85-python3.11-pyprland-2.2.15/lib/python3.11/site-packages/pyprland/command.py", line 86, in __open_config
    merge(config, await self.__open_config(extra_config))
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/ny2vkb435dswji452bndpwdhwysqxq85-python3.11-pyprland-2.2.15/lib/python3.11/site-packages/pyprland/command.py", line 78, in __open_config
    raise PyprError() from e
pyprland.types.PyprError
2024-05-03 20:24:38,142 [DEBUG] ipc :: notify 0 5000 rgb(ff1010)  Pypr error pyprland::run_reload:  :: ipc.py:126

Not sure if it makes more sense to re-open this issue or file a new one. Please advise.

Sorry I didn't see this, is it really the output you get?
With such I get this message:

Problem reading /home/fab/.config/hypr/pyprland.toml: Illegal character '\n' (at line 30, column 20)
Command failed.