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

bug: KeyError: '*' with @field_validator('*') #22

Open
mmzeynalli opened this issue Feb 10, 2025 · 1 comment
Open

bug: KeyError: '*' with @field_validator('*') #22

mmzeynalli opened this issue Feb 10, 2025 · 1 comment
Assignees
Labels
bug Something isn't working

Comments

@mmzeynalli
Copy link
Contributor

mmzeynalli commented Feb 10, 2025

Description of the bug

Cannot build docs if I have field_validator for all fields: '*'

To Reproduce

from pydantic import BaseModel, ValidationInfo
from pydantic_core import PydanticUndefined


class BaseRequestSchema(BaseModel):

    @field_validator('*', mode='before')
    @classmethod
    def set_if_none(cls, v: Any, info: ValidationInfo):
        """If `None` is set, return default value for that field"""
        if (
            info.field_name
            and not cls.model_fields[info.field_name].is_required()
            and cls.model_fields[info.field_name].get_default() is not PydanticUndefined
            and v is None
        ):
            return cls.model_fields[info.field_name].get_default()

Full traceback

Full traceback
poetry run mkdocs build -f docs/az/mkdocs.yml --strict
INFO    -  Cleaning site directory
INFO    -  Building documentation to directory: /home/miradilz/Projects/integrify/docs/az/site
ERROR   -  Error reading page 'azericard/api-reference/callback.md': '*'
Traceback (most recent call last):
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/bin/mkdocs", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/mkdocs/__main__.py", line 288, in build_command
    build.build(cfg, dirty=not clean)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/mkdocs/commands/build.py", line 310, in build
    _populate_page(file.page, config, files, dirty)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/mkdocs/commands/build.py", line 167, in _populate_page
    page.render(config, files)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/mkdocs/structure/pages.py", line 285, in render
    self.content = md.convert(self.markdown)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/markdown/core.py", line 357, in convert
    root = self.parser.parseDocument(self.lines).getroot()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/markdown/blockparser.py", line 117, in parseDocument
    self.parseChunk(self.root, '\n'.join(lines))
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/markdown/blockparser.py", line 136, in parseChunk
    self.parseBlocks(parent, text.split('\n\n'))
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/markdown/blockparser.py", line 158, in parseBlocks
    if processor.run(parent, blocks) is not False:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/mkdocstrings/extension.py", line 128, in run
    html, handler, data = self._process_block(identifier, block, heading_level)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/mkdocstrings/extension.py", line 216, in _process_block
    data: CollectorItem = handler.collect(identifier, options)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/mkdocstrings_handlers/python/handler.py", line 322, in collect
    loader.load(
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/_griffe/loader.py", line 184, in load
    return self._post_load(top_module, obj_path)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/_griffe/loader.py", line 210, in _post_load
    self.extensions.call("on_package_loaded", pkg=module, loader=self)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/_griffe/extensions/base.py", line 313, in call
    getattr(extension, event)(**kwargs)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/griffe_pydantic/extension.py", line 42, in on_package_loaded
    static.process_module(pkg, processed=self.processed, schema=self.schema)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/griffe_pydantic/static.py", line 170, in process_module
    process_module(submodule, processed=processed, schema=schema)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/griffe_pydantic/static.py", line 170, in process_module
    process_module(submodule, processed=processed, schema=schema)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/griffe_pydantic/static.py", line 170, in process_module
    process_module(submodule, processed=processed, schema=schema)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/griffe_pydantic/static.py", line 167, in process_module
    process_class(cls, processed=processed, schema=schema)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/griffe_pydantic/static.py", line 148, in process_class
    process_function(member, cls, processed=processed)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/griffe_pydantic/static.py", line 115, in process_function
    common.process_function(func, cls, fields)
  File "/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/lib/python3.12/site-packages/griffe_pydantic/common.py", line 72, in process_function
    targets = [cls.members[field] for field in fields]
               ~~~~~~~~~~~^^^^^^^
KeyError: '*'
make: *** [Makefile:52: docs] Error 1

Expected behavior

Environment information

python -m griffe_pydantic.debug  # | xclip -selection clipboard
- __System__: Linux-6.8.0-1019-oem-x86_64-with-glibc2.39
- __Python__: cpython 3.12.3 (/home/miradilz/.cache/pypoetry/virtualenvs/integrify-MG0a6qln-py3.12/bin/python)
- __Environment variables__:
- __Installed packages__:
  - `griffe-pydantic` v1.1.0

Additional context

@mmzeynalli mmzeynalli added the unconfirmed This bug was not reproduced yet label Feb 10, 2025
@pawamoy pawamoy changed the title bug: bug: KeyError: '*' with @field_validator('*') Feb 10, 2025
@pawamoy pawamoy added bug Something isn't working and removed unconfirmed This bug was not reproduced yet labels Feb 10, 2025
@pawamoy
Copy link
Member

pawamoy commented Feb 10, 2025

Thanks for the report @mmzeynalli, marking as bug 🙂

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

No branches or pull requests

2 participants