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

Stub Files and Wildcard Expansion issues #79

Closed
LordOfPolls opened this issue May 31, 2022 · 11 comments
Closed

Stub Files and Wildcard Expansion issues #79

LordOfPolls opened this issue May 31, 2022 · 11 comments
Labels
bug Something isn't working griffe: wildcard-imports Related to wildcard imports

Comments

@LordOfPolls
Copy link

LordOfPolls commented May 31, 2022

Describe the bug
Griffe seems to be unable to resolve builtins in stub files - https://pastebin.com/JsqPWvZn.

The error seems to be occur within these 2 files
https://github.com/NAFTeam/NAFF/blob/master/naff/client/utils/attr_utils.pyi
https://github.com/NAFTeam/NAFF/blob/master/naff/client/utils/attr_utils.py

Upon deleting the pyi file to bypass the error, another error occurs (https://pastebin.com/CHYvChzD). I resolved this by adding a dumb-fix to griffe/loader.py[260] allowing my docs to build successfully.

# original
if new_member.name not in obj.members or obj[new_member.name].lineno < alias_lineno:
#"fixed"
if new_member.name not in obj.members or (obj[new_member.name].lineno or 0) < alias_lineno:

To Reproduce
clone https://github.com/NAFTeam/NAFF
mkdocs build

Expected behavior
Docs build successfully

Screenshots
exceptions
griffe.exceptions.AliasResolutionError: Could not resolve logging:
https://pastebin.com/JsqPWvZn
TypeError: '<' not supported between instances of 'NoneType' and 'int':
https://pastebin.com/CHYvChzD

System (please complete the following information):

  • griffe version: [e.g. 0.2.1] 0.19.3
  • Python version: [e.g. 3.8] 3.10.4
  • OS: [Windows/Linux] Windows and Linux

Additional context
We've previously had issues building docs with mkdocstrings new parser mkdocstrings/mkdocstrings#382

@pawamoy
Copy link
Member

pawamoy commented May 31, 2022

Hi, thanks for the report!

Griffe seems to be unable to resolve builtins in stub files

After having taken a look at your logs (thanks!), I'd rephrase that to say that I forgot to take aliases into account when merging stubs. We should not try to resolve aliases when merging stubs.

About the second issue: yup, it has been reported in #72 as well. I need to check why these aliases don't have a line number. A quick check of the code just told me that I never instantiate an alias without line numbers, at least not when visiting (when inspecting, yes, of course, since there's no line number information). That's one more reproducible example for me so, thanks 🙂 I'll try to get to it soon.

Eventually, if it's not fixable, your "dumb fix", which is not dumb, will probably be applied 😄

@pawamoy
Copy link
Member

pawamoy commented May 31, 2022

Ah, maybe found a patch, if you could try it:

        for new_member, alias_lineno, alias_endlineno in expanded:
            overwrite = False
            already_present = new_member.name in obj.members
            if already_present:
                old_member = obj[new_member.name]
                old_lineno = getattr(old_member, "alias_lineno", old_member.lineno)
                overwrite = alias_lineno > old_lineno
            if not already_present or overwrite:
                obj[new_member.name] = Alias(
                    new_member.name, new_member, lineno=alias_lineno, endlineno=alias_endlineno
                )

@LordOfPolls
Copy link
Author

Unfortunately unsuccessful

ERROR    -  Error reading page 'API Reference\Client.md': '>' not supported between instances of 'int' and 'NoneType'
Traceback (most recent call last):
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\click\core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\click\core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\mkdocs\__main__.py", line 192, in build_command
    build.build(config.load_config(**kwargs), dirty=not clean)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\mkdocs\commands\build.py", line 292, in build
    _populate_page(file.page, config, files, dirty)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\mkdocs\commands\build.py", line 174, in _populate_page
    page.render(config, files)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\mkdocs\structure\pages.py", line 175, in render
    self.content = md.convert(self.markdown)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\markdown\core.py", line 264, in convert
    root = self.parser.parseDocument(self.lines).getroot()
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\markdown\blockparser.py", line 90, in parseDocument
    self.parseChunk(self.root, '\n'.join(lines))
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\markdown\blockparser.py", line 105, in parseChunk
    self.parseBlocks(parent, text.split('\n\n'))
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\markdown\blockparser.py", line 123, in parseBlocks
    if processor.run(parent, blocks) is not False:
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\mkdocstrings\extension.py", line 121, in run
    html, handler, data = self._process_block(identifier, block, heading_level)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\mkdocstrings\extension.py", line 195, in _process_block
    data: CollectorItem = handler.collect(identifier, options)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\mkdocstrings_handlers\python\handler.py", line 195, in collect
    unresolved, iterations = loader.resolve_aliases(only_exported=True, only_known_modules=True)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\griffe\loader.py", line 179, in resolve_aliases
    self.expand_wildcards(wildcards_module)
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\griffe\loader.py", line 247, in expand_wildcards
    self.expand_wildcards(target, only_known_modules)  # type: ignore[union-attr]
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\griffe\loader.py", line 247, in expand_wildcards
    self.expand_wildcards(target, only_known_modules)  # type: ignore[union-attr]
  File "C:\Users\LordOfPolls\Documents\Projects\NAFF\.venv\lib\site-packages\griffe\loader.py", line 265, in expand_wildcards
    overwrite = alias_lineno > old_lineno
TypeError: '>' not supported between instances of 'int' and 'NoneType'

@pawamoy
Copy link
Member

pawamoy commented Jun 3, 2022

This should now be fixed by 0.20.0! Thank you for the report and help! Let me know if you still encounter issues 🙂

@pawamoy pawamoy closed this as completed Jun 3, 2022
@LordOfPolls
Copy link
Author

LordOfPolls commented Jun 3, 2022

Im still showing this as an issue with griffe 0.20.0

relevent versions:

> pip list
[...]
griffe                      0.20.0
[...]
mkdocs                      1.3.0
mkdocs-autorefs             0.4.1
mkdocs-awesome-pages-plugin 2.7.0
mkdocs-material             8.2.15
mkdocs-material-extensions  1.0.3
mkdocstrings                0.19.0
mkdocstrings-python         0.7.0

@LordOfPolls
Copy link
Author

ERROR    -  Error reading page 'API Reference/Client.md': Could not resolve logging
Traceback (most recent call last):
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/dataclasses.py", line 944, in resolve_target
    resolved = self.modules_collection[self.target_path]
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/mixins.py", line 26, in __getitem__
    return self.members[parts[0]]  # type: ignore[attr-defined]
KeyError: 'logging'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/lordofpolls/.pyenv/versions/docs/bin/mkdocs", line 8, in <module>
    sys.exit(cli())
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/mkdocs/__main__.py", line 192, in build_command
    build.build(config.load_config(**kwargs), dirty=not clean)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/mkdocs/commands/build.py", line 292, in build
    _populate_page(file.page, config, files, dirty)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/mkdocs/commands/build.py", line 174, in _populate_page
    page.render(config, files)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/mkdocs/structure/pages.py", line 175, in render
    self.content = md.convert(self.markdown)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/markdown/core.py", line 264, in convert
    root = self.parser.parseDocument(self.lines).getroot()
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/markdown/blockparser.py", line 90, in parseDocument
    self.parseChunk(self.root, '\n'.join(lines))
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/markdown/blockparser.py", line 105, in parseChunk
    self.parseBlocks(parent, text.split('\n\n'))
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/markdown/blockparser.py", line 123, in parseBlocks
    if processor.run(parent, blocks) is not False:
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/mkdocstrings/extension.py", line 121, in run
    html, handler, data = self._process_block(identifier, block, heading_level)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/mkdocstrings/extension.py", line 195, in _process_block
    data: CollectorItem = handler.collect(identifier, options)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/mkdocstrings_handlers/python/handler.py", line 191, in collect
    loader.load_module(module_name)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/loader.py", line 148, in load_module
    top_module = self._load_module(package.name, package.path, submodules=submodules)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/loader.py", line 352, in _load_module
    return self._load_module_path(module_name, module_path, submodules, parent)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/loader.py", line 380, in _load_module_path
    self._load_submodules(module)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/loader.py", line 385, in _load_submodules
    self._load_submodule(module, subparts, subpath)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/loader.py", line 396, in _load_submodule
    member_parent[subparts[-1]] = self._load_module(
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/mixins.py", line 75, in __setitem__
    value = merge_stubs(member, value)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/merger.py", line 92, in merge_stubs
    _merge_module_stubs(module, stubs)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/merger.py", line 20, in _merge_module_stubs
    _merge_stubs_members(module, stubs)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/merger.py", line 60, in _merge_stubs_members
    elif obj_member.is_class:
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/dataclasses.py", line 811, in __getattr__
    attr = getattr(self.target, name)
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/dataclasses.py", line 920, in target
    self.resolve_target()
  File "/home/lordofpolls/.pyenv/versions/3.10.4/envs/docs/lib/python3.10/site-packages/griffe/dataclasses.py", line 946, in resolve_target
    raise AliasResolutionError(self.target_path) from error
griffe.exceptions.AliasResolutionError: Could not resolve logging

@pawamoy
Copy link
Member

pawamoy commented Jun 3, 2022

Oh yes, that's another issue. Will reopen until it's fixed.

@pawamoy pawamoy reopened this Jun 3, 2022
@pawamoy pawamoy added bug Something isn't working griffe: wildcard-imports Related to wildcard imports labels Jun 9, 2022
@LordOfPolls
Copy link
Author

Apologies for bumping this, do you know when you'll have chance to fix this?

@pawamoy
Copy link
Member

pawamoy commented Jun 12, 2022

I'll try to push a fix soon 🙂
Just need proper testing.

@pawamoy
Copy link
Member

pawamoy commented Sep 23, 2022

Hey @LordOfPolls, sorry for the long wait. I've been busy / suffering from burnout.
Could you let me know if I can still replicate the issue within https://github.com/NAFTeam/NAFF?

@pawamoy
Copy link
Member

pawamoy commented Nov 14, 2022

I just built NAFF's docs on master branch without any issues, please open a new issue if you still have encounter errors.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working griffe: wildcard-imports Related to wildcard imports
Projects
None yet
Development

No branches or pull requests

2 participants