ultrabug / mkdocs-static-i18n

MkDocs i18n plugin using static translation markdown files
https://ultrabug.github.io/mkdocs-static-i18n/
MIT License
222 stars 38 forks source link

[BUG] Hooks plugin with `on_env` & jinja filter : TemplateAssertionError #178

Closed Mara-Li closed 1 year ago

Mara-Li commented 1 year ago

Configuration :

plugins:
  - search
  - ezlinks:
        wikilinks: true
  - mermaid2
  - awesome-pages:
      collapse_single_pages: true
  - embed_file:
      callouts: true
      custom-attributes: 'assets/css/custom_attributes.css'
      language_message: 'ERROR 404 : NOT FOUND'
  - callouts
  - custom-attributes:
      file: 'assets/css/custom_attributes.css'
  - meta-descriptions
  - i18n:
      default_language: en
      docs_structure: folder
      languages:
        en:
          name: English
        fr:
          name: Français
extra_javascript:
  - assets/js/mathjax.js
  - assets/js/utils.js
  - assets/js/wiki_hover.js
  - https://polyfill.io/v3/polyfill.min.js?features=es6
  - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
hooks:
  - overrides/hooks/on_page_markdown.py
  - overrides/hooks/on_env.py

Removing i18n make the build successfull.

Log :

ERROR    -  Error building page 'en/index.md': No filter named 'value_in_frontmatter'.
Traceback (most recent call last):
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\lilis\anaconda3\envs\Publisher\Scripts\mkdocs.exe\__main__.py", line 7, in <module>
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\click\core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\click\core.py", line 1657, in invoke
    {{ super() }}
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\material\base.html", line 178, in block 'content'
    {% include "partials/content.html" %}
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\material\partials\content.html", line 20, in top-level template code
    {% include "partials/comments.html" %}
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\jinja2\environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "D:\Documents\Github\obsidian_mkdocs_publisher_docs\overrides\partials\comments.html", line 1, in template
    {% set local_comments = "comments" | value_in_frontmatter(page.meta) %}
jinja2.exceptions.TemplateAssertionError: No filter named 'value_in_frontmatter'.

Steps :

  1. Write a hooks (here it's in overrides/hooks/on_env.py) modifying template filter (here is my file)
  2. Add the hooks in the hooks part of the mkdocs.yml
  3. Run mkdocs serve
ultrabug commented 1 year ago

Hi @Lisandra-dev

I'm trying to understand what happens. I'm puzzled because if I pass the wrong arguments to the filter I get a contextual error

    {% set test = "comments" | value_in_frontmatter() %}
    E   TypeError: value_in_frontmatter() missing 1 required positional argument: 'metadata'

So it looks like it knows the function filter... only when we pass the correct arguments we get the unknown filter error...

ultrabug commented 1 year ago

New finding: it breaks on added language builds, but it works on the main language

ultrabug commented 1 year ago

@Lisandra-dev could you please test with #183 ?

Mara-Li commented 1 year ago

Hello! I tryed with my two-language branch but, now, I get this :

INFO     -  Cleaning site directory
Traceback (most recent call last):
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\lilis\anaconda3\envs\Publisher\Scripts\mkdocs.exe\__main__.py", line 7, in <module>
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\click\core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\click\core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\click\core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\mkdocs\__main__.py", line 234, in serve_command
    serve.serve(dev_addr=dev_addr, livereload=livereload, watch=watch, **kwargs)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\mkdocs\commands\serve.py", line 83, in serve
    builder(config)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\mkdocs\commands\serve.py", line 76, in builder
    build(config, live_server=live_server, dirty=dirty)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\mkdocs\commands\build.py", line 302, in build
    nav = config.plugins.run_event('nav', nav, config=config, files=files)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\mkdocs\plugins.py", line 520, in run_event
    result = method(item, **kwargs)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\mkdocs_static_i18n\plugin.py", line 418, in on_nav
    nav = folder_structure.on_nav(self, nav, config, files)
  File "C:\Users\lilis\anaconda3\envs\Publisher\lib\site-packages\mkdocs_static_i18n\folder_structure.py", line 368, in on_nav
    raise Exception(f"could not find homepage Page(url='{expected_url}')")
Exception: could not find homepage Page(url='en/')
ultrabug commented 1 year ago

@Lisandra-dev this comes from the rather unexpected _obsidian folder in your docs which is creating a weird navigation tree... what is that supposed to mean / do ?

Mara-Li commented 1 year ago

Oh, it's because I opened the folder in Obsidian, and forgot to delete it when switching branch! Work as expected when deleting these folder :)

ultrabug commented 1 year ago

FYI I released 0.54 with the fix.