statik icon indicating copy to clipboard operation
statik copied to clipboard

Misformed YAML context crashes with unhelpful error

Open pathunstrom opened this issue 4 years ago • 1 comments

I forgot the key in a view's dynamic context. The resulting errors:

2020-05-26 08:35:14,078 statik.project  ERROR   Error: Failed to build project. Run Statik in verbose mode (-v) to see additional traceback inform
ation about this error. (in file personal-site\views\blog.yml"). Additional error detail: 'str' object has no attr
ibute 'items'

Verbose mode:

2020-05-26 08:37:31,096 statik.project  DEBUG   Traceback (most recent call last):
  File "personal-site\.venv\lib\site-packages\statik\project.py", line 121, in generate
    self.views = self.load_views()
  File "personal-site\.venv\lib\site-packages\statik\project.py", line 209, in load_views
    views[view_name] = StatikView(
  File "personal-site\.venv\lib\site-packages\statik\views.py", line 340, in __init__
    self.context = StatikContext(
  File "personal-site\.venv\lib\site-packages\statik\context.py", line 29, in __init__
    self.dynamic = underscore_var_names(
  File "personal-site\.venv\lib\site-packages\statik\utils.py", line 120, in underscore_var_names
    for k, v in d.items():
AttributeError: 'str' object has no attribute 'items'

2020-05-26 08:37:31,096 statik.project  ERROR   Error: Failed to build project. Run Statik in verbose mode (-v) to see additional traceback inform
ation about this error. (in file "C:\Users\pathu\src\pathunstrom\personal-site\views\blog.yml"). Additional error detail: 'str' object has no attr
ibute 'items'

Looking at the code, StatikContext knows it's looking for dynamic context as a dict, so wrapping the call to underscore_var_names in a try: except AttributeError should make it possible to give the user a clear explanation of where and what was wrong.

This is only the case if your context is a single item and you forgot the key. If you have multiple items and forget one key, the yaml scanner yells at you about the misformed YAML.

I'd be looking for a message along the lines of "{dynamic|static} context for {file_name} must be a mapping."

pathunstrom avatar May 26 '20 12:05 pathunstrom

I'm willing to do the work on this, just want to confirm it's work you think needs done.

pathunstrom avatar May 26 '20 12:05 pathunstrom