@dataclass(frozen=True)
class Function:
id: str
qname: str
decorators: list[str]
parameters: list[Parameter]
results: list[Result]
is_public: bool
reexported_by: list[str]
docstring: FunctionDocstring
code: str
@staticmethod
def from_dict(d: dict[str, Any]) -> Function:
return Function(
d["id"],
d["qname"],
d.get("decorators", []),
[Parameter.from_dict(parameter_json) for parameter_json in d.get("parameters", [])],
[Result.from_dict(result_json) for result_json in d.get("results", [])],
d.get("is_public", True),
d.get("reexported_by", []),
FunctionDocstring(description=d.get("description", "")),
d.get("code", ""),
)
@property
def name(self) -> str:
return self.qname.rsplit(".", maxsplit=1)[-1]
def to_dict(self) -> dict[str, Any]:
return {
"id": self.id,
"name": self.name,
"qname": self.qname,
"decorators": self.decorators,
"parameters": [parameter.to_dict() for parameter in self.parameters],
"results": [result.to_dict() for result in self.results],
"is_public": self.is_public,
"reexported_by": self.reexported_by,
"description": self.docstring.description,
"code": self.code,
}
def get_formatted_code(self, *, cut_documentation: bool = False) -> str:
formatted_code = _generate_formatted_code(self)
if cut_documentation:
formatted_code = _cut_documentation_from_code(formatted_code, self)
return formatted_code