Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change Docstring.params (and others) to be dict-like types #89

Open
LecrisUT opened this issue Jun 28, 2024 · 6 comments
Open

Change Docstring.params (and others) to be dict-like types #89

LecrisUT opened this issue Jun 28, 2024 · 6 comments

Comments

@LecrisUT
Copy link

In order to make extracting the necessary attribute's docstring simpler, it would be great if it had a dict-like interface. attribute interface would also be great to have, but might require more sophisticated refactoring.

@scarere
Copy link

scarere commented Aug 7, 2024

Attribute interface would be better as it would be consistent with the rest of the api. Ei

fndocs = parse(fn.__doc__)
fndocs.params.argument1.description

Is cleaner than:

fndocs = parse(fn.__doc__)
fndocs.params['argument1'].description

@LecrisUT
Copy link
Author

LecrisUT commented Aug 7, 2024

Unfortunately this would not play quite well with type-hints

@scarere
Copy link

scarere commented Aug 7, 2024

I'm not sure what you mean. Right now the Docstring class has attribute params with type List[DocstringParam]. Instead we could have

class DocstringParams():
        def __init__(self, params_list: List[DocstringParam]):
               for param in params_list:
                      setattr(self, param.arg_name, param)

Docstring
       self.params: DocstringParams = DocstringParams(list_of_DocstringParam_objects)

type hint should show Docstring.param as DocstringParams. Right now it just shows List[DocstringParam]. Or if you are talking about argument type hints, they are still available with

docstring.params.argument1.type_name

@LecrisUT
Copy link
Author

LecrisUT commented Aug 7, 2024

It's about (statically) type-hinting for argument1. Afaiu you don't have a way to type-hint dynamic attributes statically, while the dict case is handled by __getitem__. I haven't ecperimented with type-hinting __getattr__.

@scarere
Copy link

scarere commented Aug 7, 2024

Maybe I'm missing something but would argument1 not be type DocstringParam? as would all the param attributes of DocstingParams. We're not type hinting with the arguments actual type anyways, its just a string parameter under type_name

@ndahn
Copy link

ndahn commented Sep 6, 2024

I think dict-like access would be preferable. You could use a TypedDict or simply dict[str, DocstringParam] to accommodate for type hints. For backwards compatibility this could be an additional member instead of replacing params, e.g. params_dict or params_by_names.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants