diff --git a/docs/conf.py b/docs/conf.py index 75bca8d3..c5243f78 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,6 +12,8 @@ # import os import sys +import types + import django sys.path.insert(0, os.path.abspath('..')) os.environ['DJANGO_SETTINGS_MODULE'] = 'mamweb.settings' @@ -97,5 +99,32 @@ def ignorovat(app, what, name, obj, skip, options): ignore = (what, name) in blacklist return True if ignore else None + +def see(app, what: str, name: str, obj, options, lines: list[str]): + from django.urls.resolvers import URLPattern + if what == "module" and name.endswith("urls") and hasattr(obj, "urlpatterns"): + for url_pattern in obj.urlpatterns: + text = f"- ``{url_pattern.pattern}`` " + if isinstance(url_pattern, URLPattern): + if url_pattern.name is not None: + text += f"({url_pattern.name}) " + + if hasattr(url_pattern.callback, "view_class"): + text += f":class:`~{url_pattern.callback.view_class.__module__}.{url_pattern.callback.view_class.__name__}`" + else: + text += f":func:`~{url_pattern.callback.__module__}.{url_pattern.callback.__name__}`" + + else: + if isinstance(url_pattern.urlconf_name, types.ModuleType): + text += f":mod:`~{url_pattern.urlconf_name.__name__}`" + else: + # FIXME nějak lépe ošetřit. Ale `admin/` je zatím jediný případ + pass + + lines.append(text) + return lines + + def setup(app): app.connect('autodoc-skip-member', ignorovat) + app.connect('autodoc-process-docstring', see)