Modify

Opened 10 years ago

Closed 10 years ago

#2147 closed defect (fixed)

UnboundLocalError: local variable 'impl' referenced before assignment

Reported by: anonymous Owned by: Alec Thomas
Priority: normal Component: TracDeveloperPlugin
Severity: major Keywords:
Cc: Trac Release: 0.11

Description

(FYI, environment: Debian 4.0, sid; trac 0.11dev r6083)

I received the following error when I followed the "Plugins" link immediately after install:

Traceback (most recent call last):
  File "/var/lib/python-support/python2.5/trac/web/main.py", line 381, in dispatch_request
    dispatcher.dispatch(req)
  File "/var/lib/python-support/python2.5/trac/web/main.py", line 191, in dispatch
    resp = chosen_handler.process_request(req)
  File "/var/lib/python-support/python2.5/trac/admin/web_ui.py", line 108, in process_request
    path_info)
  File "/var/lib/python-support/python2.5/tracdeveloper/plugins.py", line 22, in render_admin_panel
    data = self.get_api(req)
  File "/var/lib/python-support/python2.5/tracdeveloper/plugins.py", line 71, in get_api
    interface_methods = [m['name'] for i in impl for m in i['methods']]
UnboundLocalError: local variable 'impl' referenced before assignment

I'm not sure if this is a fix or a workaround, as I just barely looked at the code. In any case, the below patch fixes the problem without causing any apparent problems (yet).

--- plugins.py.orig     2007-11-03 00:19:53.335412857 -0400
+++ plugins.py  2007-11-03 00:10:11.300490812 -0400
@@ -68,14 +68,15 @@
             if hasattr(component, '_implements'):
                 impl = [interfaces['%s.%s' % (i.__module__, i.__name__)]
                         for i in component._implements]
-            interface_methods = [m['name'] for i in impl for m in i['methods']]
+                interface_methods = [m['name'] for i in impl for m in i['methods']]
+                data['implements'] = impl
+                for imp in impl:
+                    imp['implemented_by'].append(data)
+
             methods = self.extract_methods(req, component, interface_methods)
             data = self.base_data(req, component)
             data['extensionpoints'] = self.extension_points(req, component)
-            data['implements'] = impl
             data['methods'] = methods
-            for imp in impl:
-                imp['implemented_by'].append(data)
             components[data['name']] = data
         api['components'] = components
         return api

Attachments (0)

Change History (1)

comment:1 Changed 10 years ago by Alec Thomas

Resolution: fixed
Status: newclosed

Fixed in r2737, thanks.

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain Alec Thomas.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.