flask-debugtoolbar icon indicating copy to clipboard operation
flask-debugtoolbar copied to clipboard

AttributeError: 'ProfilerDebugPanel' object has no attribute 'dump_filename'

Open mconigliaro opened this issue 1 year ago • 2 comments

I enable the profiler and this happens:

Traceback (most recent call last):
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 1498, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 1476, in wsgi_app
    response = self.handle_exception(e)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 1473, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 883, in full_dispatch_request
    return self.finalize_request(rv)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 904, in finalize_request
    response = self.process_response(response)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 1281, in process_response
    response = self.ensure_sync(func)(response)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask_debugtoolbar/__init__.py", line 248, in process_response
    panel.process_response(real_request, response)
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask_debugtoolbar/panels/profiler.py", line 96, in process_response
    if self.dump_filename:
       ^^^^^^^^^^^^^^^^^^^
AttributeError: 'ProfilerDebugPanel' object has no attribute 'dump_filename'

I have to clear my cookies to make the error go away.

Environment:

  • Python version: Python 3.12.5
  • Flask-DebugToolbar version: 0.15.1
  • Flask version: 3.0.3

mconigliaro avatar Sep 13 '24 22:09 mconigliaro

According to the code, self.dump_filename doesn't get set unless DEBUG_TB_PROFILER_ENABLED is True. But if I enable that, I get this:

Traceback (most recent call last):
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 1498, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 1476, in wsgi_app
    response = self.handle_exception(e)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 1473, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 882, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask/app.py", line 880, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mike/Developer/other/test/test-flask/.venv/lib/python3.12/site-packages/flask_debugtoolbar/__init__.py", line 149, in dispatch_request
    return view_func(**req.view_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.5/Frameworks/Python.framework/Versions/3.12/lib/python3.12/cProfile.py", line 109, in runcall
    self.enable()
ValueError: Another profiling tool is already active

mconigliaro avatar Sep 13 '24 23:09 mconigliaro

Set environment variant to resolve the issues like "no attribute 'dump_filename' ". DEBUG_TB_PROFILER_ENABLED = True DEBUG_TB_DUMP_FILENAME_FORMAT = {request.url} # other setting like: {request.method}, {request.path}

liaosf avatar Sep 25 '24 15:09 liaosf

It seems that ProfilerDebugPanel().dump_filename attribute is undefined when DEBUG_TB_PROFILER_ENABLED != True. Possible solution is to modify __init__(self, jinja_env, context={}) method, someting like:

diff --git a/.venv/Lib/site-packages/flask_debugtoolbar/panels/profiler.py b/.venv/Lib/site-packages/flask_debugtoolbar/panels/profiler.py
--- a/.venv/Lib/site-packages/flask_debugtoolbar/panels/profiler.py	
+++ b/.venv/Lib/site-packages/flask_debugtoolbar/panels/profiler.py	(date 1727604243564)
@@ -27,6 +27,8 @@
             self.dump_filename = current_app.config.get(
                 "DEBUG_TB_PROFILER_DUMP_FILENAME"
             )
+        else:
+            self.dump_filename = None
 
     def has_content(self):
         return bool(self.profiler)

trupka avatar Sep 29 '24 10:09 trupka

Feel free to submit a PR with your suggested fix.

jeffwidman avatar Nov 06 '24 22:11 jeffwidman