Source code for basicsynbio.decorators
"""Module contains decorators."""
from dataclasses import dataclass
[docs]@dataclass
class ArgDescription:
"""Class for documenting arguments."""
argument: str
description: str
[docs]def addargs2docs(*arg_descriptions: ArgDescription):
"""Decorator for adding argument docstrings to functions.
Note:
Arguments for documentation must be given in the function docstring with a blank description.
Args:
arg_descriptions: The argument to document and its description.
Returns:
Decorator.
"""
def decor(func):
for arg_description in arg_descriptions:
if func.__doc__.find(arg_description.argument + ":") == -1:
raise ValueError(
f"string '{arg_description.argument}:' not found in {func.__name__} __doc__"
)
description_start = func.__doc__.find(arg_description.argument + ":") + len(
arg_description.argument + ":"
)
func.__doc__ = (
func.__doc__[:description_start]
+ " "
+ arg_description.description
+ func.__doc__[description_start:]
)
return func
return decor