Nice, thanks! --Paul On Sep 7, 2010, at 4:49 PM, Chris McDonough wrote: > This is fixed on the BFG trunk and the fix will be released in r.bfg > 1.3a12. > > -- > (Ariadne Prod) dictionary changed size during iteration > https://bugs.launchpad.net/bugs/621364 > You received this bug notification because you are subscribed to KARL3. > > Status in KARL3: Won't Fix > > Bug description: > reported in error monitor on prod > This happened right after update > Could this just be a glitch of someone hitting site exact time site mod_wsgi was restarting the site? > > ENTRY > Fri Aug 20 15:32:44 2010 > Exception when processing https://portal.ariadne-network.eu/login.html?came_from=https%3A%2F%2Fportal.ariadne-network.eu%2F > Traceback (most recent call last): > File "/opt/karl/ariadne/3.3.1-0/src/karl/karl/errorlog.py", line 15, in middleware > return app(environ, start_response) > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.retry-0.9.4-py2.5.egg/repoze/retry/__init__.py", line 88, in __call__ > app_iter = self.application(environ, replace_start_response) > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.tm2-1.0a5-py2.5.egg/repoze/tm/__init__.py", line 23, in __call__ > result = self.application(environ, save_status_and_headers) > File "/opt/karl/ariadne/3.3.1-0/eggs/Paste-1.7.2-py2.5.egg/paste/registry.py", line 350, in __call__ > app_iter = self.application(environ, start_response) > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.who-1.0.15-py2.5.egg/repoze/who/middleware.py", line 107, in __call__ > app_iter = app(environ, wrapper.wrap_start_response) > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.browserid-0.3-py2.5.egg/repoze/browserid/middleware.py", line 134, in __call__ > app_iter = self.app(environ, wrapper.wrap_start_response) > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.bfg-1.2-py2.5.egg/repoze/bfg/router.py", line 130, in __call__ > response = view_callable(context, request) > File "/opt/karl/ariadne/3.3.1-0/src/karl/karl/views/login.py", line 41, in login_view > app_url=request.application_url, > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.bfg-1.2-py2.5.egg/repoze/bfg/chameleon_zpt.py", line 84, in render_template_to_response > result = renderer(kw, {}) > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.bfg-1.2-py2.5.egg/repoze/bfg/chameleon_zpt.py", line 46, in __call__ > result = self.template(**system) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/template.py", line 83, in __call__ > return self.render(**kwargs) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/template.py", line 335, in render > return super(TemplateFile, self).render(**kwargs) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/zpt/template.py", line 18, in render > return super(PageTemplate, self).render(**kwargs) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/template.py", line 188, in render > return self.cook_and_render(kwargs, utils.emptydict, None, True) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/template.py", line 315, in cook_and_render > args, slots, macro, global_scope) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/template.py", line 180, in cook_and_render > return func(econtext, rcontext) > File "", line 160, in render > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/template.py", line 379, in render > return self.render(name, slots=slots, parameters=kwargs) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/zpt/template.py", line 23, in render_macro > macro, global_scope=global_scope, slots=slots, parameters=parameters) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/template.py", line 198, in render_macro > return self.cook_and_render(parameters, slots, macro, global_scope) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/template.py", line 315, in cook_and_render > args, slots, macro, global_scope) > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/template.py", line 180, in cook_and_render > return func(econtext, rcontext) > File "", line 27, in render > File "/opt/karl/ariadne/3.3.1-0/eggs/Chameleon-1.1.1-py2.5.egg/chameleon/core/codegen.py", line 29, in lookup_attr > return getattr(obj, key) > File "/opt/karl/ariadne/3.3.1-0/src/karl/karl/views/api.py", line 109, in snippets > self._snippets = get_template('templates/snippets.pt') > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.bfg-1.2-py2.5.egg/repoze/bfg/chameleon_zpt.py", line 62, in get_template > renderer = renderer_factory(path) > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.bfg-1.2-py2.5.egg/repoze/bfg/chameleon_zpt.py", line 25, in renderer_factory > return template_renderer_factory(path, ZPTTemplateRenderer) > File "/opt/karl/ariadne/3.3.1-0/eggs/repoze.bfg-1.2-py2.5.egg/repoze/bfg/renderers.py", line 63, in template_renderer_factory > reg.registerUtility(renderer, ITemplateRenderer, name=spec) > File "/opt/karl/ariadne/3.3.1-0/eggs/zope.component-3.6.0-py2.5.egg/zope/component/registry.py", line 99, in registerUtility > for ((p, _), data) in self._utility_registrations.iteritems(): > RuntimeError: dictionary changed size during iteration > >