From bea812e43b7cfe4fb4e4cab88ef9a71f78fd895f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Sch=C3=A4fer?= <david.schaefer@ufz.de>
Date: Thu, 28 Mar 2024 15:49:57 +0100
Subject: [PATCH] fix docurator for functions with empty parameter lists

---
 saqc/lib/docs.py | 40 +++++++++++++++++++++++-----------------
 1 file changed, 23 insertions(+), 17 deletions(-)

diff --git a/saqc/lib/docs.py b/saqc/lib/docs.py
index 99f194e35..99f7848ac 100644
--- a/saqc/lib/docs.py
+++ b/saqc/lib/docs.py
@@ -4,9 +4,15 @@
 
 from __future__ import annotations
 
-from typing import Any, TypedDict
+from typing import TypedDict
 
-from docstring_parser import DocstringParam, DocstringReturns, compose, parse
+from docstring_parser import (
+    DocstringParam,
+    DocstringReturns,
+    DocstringStyle,
+    compose,
+    parse,
+)
 
 
 class ParamDict(TypedDict):
@@ -50,18 +56,17 @@ COMMON = {
 }
 
 
-class FunctionParam(DocstringParam):
-    def __init__(
-        self, name: str, typehint: str, description: str, optional: bool = False
-    ):
-        super().__init__(
-            args=["param", name],
-            description=description,
-            arg_name=name,
-            type_name=typehint,
-            is_optional=optional,
-            default=None,
-        )
+def toParameter(
+    name: str, typehint: str, description: str, optional: bool = False
+) -> DocstringParam:
+    return DocstringParam(
+        args=["param", name],
+        description=description,
+        arg_name=name,
+        type_name=typehint,
+        is_optional=optional,
+        default=None,
+    )
 
 
 def docurator(func, defaults: dict[str, ParamDict] | None = None):
@@ -76,7 +81,7 @@ def docurator(func, defaults: dict[str, ParamDict] | None = None):
         return_name="SaQC",
     )
 
-    tree = parse(func.__doc__)
+    tree = parse(func.__doc__, style=DocstringStyle.NUMPYDOC)
 
     if tree.returns:
         raise ValueError(
@@ -84,7 +89,7 @@ def docurator(func, defaults: dict[str, ParamDict] | None = None):
         )
 
     # rewrite parameters
-    meta = [FunctionParam(**{**COMMON["field"], **defaults.get("field", {})})]
+    meta = [toParameter(**{**COMMON["field"], **defaults.get("field", {})})]
     for p in tree.params:
         if p.arg_name in COMMON:
             raise ValueError(
@@ -94,7 +99,7 @@ def docurator(func, defaults: dict[str, ParamDict] | None = None):
 
     # additional parameters
     for p in ("target", "dfilter", "flag"):
-        meta.append(FunctionParam(**{**COMMON[p], **defaults.get(p, {})}))
+        meta.append(toParameter(**{**COMMON[p], **defaults.get(p, {})}))
 
     # return sections
     meta.append(docstring_return)
@@ -107,4 +112,5 @@ def docurator(func, defaults: dict[str, ParamDict] | None = None):
     tree.meta = meta
 
     func.__doc__ = compose(tree)
+
     return func
-- 
GitLab