Skip to content

[BUG] detect_field_model fails for DjangoModelFactory from factory-boy #142

Open
@mschoettle

Description

@mschoettle

Describe the bug

I use mkdocstrings and have a Django project where I started using factory-boy. Once I added a factory class (sub-class of factory.django.DjangoModelFactory) the following error occurs:

Traceback (most recent call last):
    File "<snip>/.venv/lib/python3.10/site-packages/pytkdocs/cli.py", line 205, in main
    output = json.dumps(process_json(line))
    File "<snip>/.venv/lib/python3.10/site-packages/pytkdocs/cli.py", line 114, in process_json
    return process_config(json.loads(json_input))
    File "<snip>/.venv/lib/python3.10/site-packages/pytkdocs/cli.py", line 91, in process_config
    obj = loader.get_object_documentation(path, members)
    File "<snip>/.venv/lib/python3.10/site-packages/pytkdocs/loader.py", line 358, in get_object_documentation
    root_object = self.get_module_documentation(leaf, members)
    File "<snip>/.venv/lib/python3.10/site-packages/pytkdocs/loader.py", line 426, in get_module_documentation
    root_object.add_child(self.get_class_documentation(child_node))
    File "<snip>/.venv/lib/python3.10/site-packages/pytkdocs/loader.py", line 542, in get_class_documentation
    if self.detect_field_model(attr_name, direct_members, all_members):
    File "<snip>/.venv/lib/python3.10/site-packages/pytkdocs/loader.py", line 577, in detect_field_model
    if remainder and not attrgetter(remainder)(all_members[first_order_attr_name]):
AttributeError: 'DjangoOptions' object has no attribute 'get_fields'

To Reproduce

Creating a factory class for Django's user model should be sufficient:

from django.contrib.auth import get_user_model
from factory.django import DjangoModelFactory

User = get_user_model()

class UserFactory(DjangoModelFactory):
    class Meta:
        model = User

Expected behavior

Not sure if it is a bug in retrieving information from the class. I think simply ignoring should be sufficient.

System (please complete the following information):

  • pytkdocs version: 0.16.0
  • Python version: 3.10.2
  • OS: macOS

Additional context

I was able to workaround this problem by ensuring that the attr exists:

if not hasattr(all_members[first_order_attr_name], remainder):
        return False

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