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

Fix get_docs_url and alter_queryset bugs #4469

Merged
merged 3 commits into from
Sep 19, 2023

Conversation

itdependsnetworks
Copy link
Contributor

Closes: #4455

What's Changed

Fixed issue that resulted in stacktrace if no model docs and dunder str was not resolvable.
Fixed alter_queryset not being respected by list views based on NautobotUIViewSet.

TODO

  • Explanation of Change(s)
  • Added change log fragment(s) (for more information see the documentation)
  • Unit, Integration Tests -- See note below.

I am unlikely to have time this week based on my schedule, so please pull down, recreate the PR, etc... do whatever needs to get this over the finish line before 2.0 release.

@itdependsnetworks
Copy link
Contributor Author

Example traceback



--- Logging error ---
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
  File "/source/nautobot_golden_config/models.py", line 755, in __str__
    return f"{self.device.name}-{self.plan_type}-{self.created}"
              ^^^^^^^^^^^
  File "/opt/nautobot/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py", line 197, in __get__
    raise self.RelatedObjectDoesNotExist(
nautobot_golden_config.models.ConfigPlan.device.RelatedObjectDoesNotExist: ConfigPlan has no device.
Call stack:
  File "/usr/local/lib/python3.11/threading.py", line 995, in _bootstrap
    self._bootstrap_inner()
  File "/usr/local/lib/python3.11/threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.11/threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.11/socketserver.py", line 691, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.11/socketserver.py", line 361, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/local/lib/python3.11/socketserver.py", line 755, in __init__
    self.handle()
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/servers/basehttp.py", line 178, in handle
    self.handle_one_request()
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/servers/basehttp.py", line 201, in handle_one_request
    handler.run(self.server.get_app())
  File "/usr/local/lib/python3.11/wsgiref/handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
  File "/opt/nautobot/lib/python3.11/site-packages/django/contrib/staticfiles/handlers.py", line 76, in __call__
    return self.application(environ, start_response)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/wsgi.py", line 133, in __call__
    response = self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/base.py", line 130, in get_response
    response = self._middleware_chain(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/middleware.py", line 58, in __call__
    response = toolbar.process_request(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/timer.py", line 65, in process_request
    return super().process_request(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/headers.py", line 46, in process_request
    return super().process_request(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/staticfiles.py", line 114, in process_request
    response = super().process_request(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/debug_toolbar/panels/__init__.py", line 204, in process_request
    return self.get_response(request)
  [Previous line repeated 1 more time]
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/corsheaders/middleware.py", line 56, in __call__
    result = self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/nautobot/core/middleware.py", line 115, in __call__
    return self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/nautobot/core/middleware.py", line 100, in __call__
    response = self.get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/utils/deprecation.py", line 117, in __call__
    response = response or self.get_response(request)
  File "/opt/nautobot/lib/py
thon3.11/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/nautobot/lib/python3.11/site-packages/django/core/handlers/base.py", line 204, in _get_response
    response = response.render()
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/opt/nautobot/lib/python3.11/site-packages/rest_framework/response.py", line 70, in rendered_content
    ret = renderer.render(self.data, accepted_media_type, context)
  File "/opt/nautobot/lib/python3.11/site-packages/nautobot/core/views/renderers.py", line 279, in render
    return super().render(data, accepted_media_type=accepted_media_type, renderer_context=renderer_context)
  File "/opt/nautobot/lib/python3.11/site-packages/rest_framework/renderers.py", line 724, in render
    ret = template.render(context, request=renderer_context['request'])
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/test/utils.py", line 100, in instrumented_test_render
    return self.nodelist.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/test/utils.py", line 100, in instrumented_test_render
    return self.nodelist.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/test/utils.py", line 100, in instrumented_test_render
    return self.nodelist.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/test/utils.py", line 100, in instrumented_test_render
    return self.nodelist.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/defaulttags.py", line 315, in render
    return nodelist.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/defaulttags.py", line 517, in render
    values = {key: val.resolve(context) for key, val in self.extra_context.items()}
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/defaulttags.py", line 517, in <dictcomp>
    values = {key: val.resolve(context) for key, val in self.extra_context.items()}
  File "/opt/nautobot/lib/python3.11/site-packages/django/template/base.py", line 698, in resolve
    new_obj = func(obj, *arg_vals)
  File "/opt/nautobot/lib/python3.11/site-packages/nautobot/core/templatetags/helpers.py", line 410, in get_docs_url
    logger.debug("No documentation found for %s (expected to find it at %s)", model, path)
Unable to print the message and arguments - possible formatting error.
Use the traceback above to help find the error.

@bryanculver bryanculver merged commit ccfbb9e into nautobot:develop Sep 19, 2023
21 checks passed
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

Successfully merging this pull request may close these issues.

alter_queryset not respected by list views based on NautobotUIViewSet
2 participants