Source code for lodstorage.docstring_parser
"""
Created on 2024-01-21
@author: wf
"""
from pyparsing import (
Group,
Literal,
OneOrMore,
Optional,
Suppress,
Word,
alphanums,
alphas,
restOfLine,
)
[docs]
class DocstringParser:
"""
A Python docstring parser.
"""
def __init__(self):
# Define basic elements
identifier = Word(alphas, alphanums + "_")
type_identifier = Word(alphas, alphanums + "_.[]")
description = restOfLine
# Define patterns for capturing attributes
attribute_start = Suppress(Literal("Attributes:"))
self.attribute = Group(
identifier("name")
+ Suppress("(")
+ Optional(type_identifier("type"))
+ Suppress("):")
+ description("description")
)
# Define pattern for class docstring
class_docstring = restOfLine("class_description") + Optional(
attribute_start + OneOrMore(self.attribute)("attributes")
)
# Updated class_docstring pattern to correctly handle multi-line class descriptions
self.class_docstring = class_docstring + Optional(
OneOrMore(~attribute_start + restOfLine)("class_description")
+ attribute_start
+ OneOrMore(self.attribute)("attributes")
)
[docs]
def parse(self, docstring: str):
"""
Parse the given docstring.
"""
result = self.class_docstring.parseString(docstring, parseAll=True)
class_description = " ".join(result.class_description).strip()
attributes = {
attr.name: {"type": attr.type, "description": attr.description.strip()}
for attr in result.attributes
}
return class_description, attributes