Skip to content

[BUG] use of set as class attribute type causes exception #139

@JoeHCQ1

Description

@JoeHCQ1

Describe the bug
If you define a class attribute's type as set pytkdocs crashes.

To Reproduce

class Example:
    """The example class is a stand-in class for illustration"""

    my_legal_attribute: List[str]

    my_illegal_attribute: set[str]

Expected behavior
pytkdocs would parse the attributes without breaking.

Error text

ERROR    -  mkdocstrings: 'type' object is not subscriptable
            Traceback (most recent call last):
              File "/home/user/repo/avenv/lib/python3.8/site-packages/pytkdocs/cli.py", line 205, in main
                output = json.dumps(process_json(line))
              File "/home/user/repo/avenv/lib/python3.8/site-packages/pytkdocs/cli.py", line 114, in process_json
                return process_config(json.loads(json_input))
              File "/home/user/repo/avenv/lib/python3.8/site-packages/pytkdocs/cli.py", line 91, in process_config
                obj = loader.get_object_documentation(path, members)
              File "/home/user/repo/avenv/lib/python3.8/site-packages/pytkdocs/loader.py", line 358, in get_object_documentation
                root_object = self.get_module_documentation(leaf, members)
              File "/home/user/repo/avenv/lib/python3.8/site-packages/pytkdocs/loader.py", line 426, in get_module_documentation
                root_object.add_child(self.get_class_documentation(child_node))
              File "/home/user/repo/avenv/lib/python3.8/site-packages/pytkdocs/loader.py", line 483, in get_class_documentation
                merge(attributes_data, get_class_attributes(parent_class))
              File "/home/user/repo/avenv/lib/python3.8/site-packages/pytkdocs/parsers/attributes.py", line 115, in get_class_attributes
                type_hints = get_type_hints(cls)
              File "/usr/lib/python3.8/typing.py", line 1232, in get_type_hints
                value = _eval_type(value, base_globals, localns)
              File "/usr/lib/python3.8/typing.py", line 270, in _eval_type
                return t._evaluate(globalns, localns)
              File "/usr/lib/python3.8/typing.py", line 518, in _evaluate
                eval(self.__forward_code__, globalns, localns),
              File "<string>", line 1, in <module>
            TypeError: 'type' object is not subscriptable
ERROR    -  Error reading page 'reference/api/Example.md':
ERROR    -  Could not collect 'repo.Example'

System (please complete the following information):

  • pytkdocs version: 0.16.1
  • Python version: 3.8
  • OS: Linux

Workaround:

class Example:
    """The example class is a stand-in class for illustration"""

    my_legal_attribute: List[str]

    # my_illegal_attribute: set[str]
    my_illegal_attribute = set()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions