I have a new installation of Trac 0.11.7 and Agilo 1.2.1 running and
when I select Dashboard from the menu I receive the below Trac error.
Is there something I may have setup incorrect?
TypeError: 'NoneType' object is not iterable
Most recent call last:
* File "c:\program files\python25\lib\site-packages\Trac-0.11.7-
py2.5.egg\trac\web\main.py", line 450, in _dispatch_request
Code fragment:
445. try:
446. if not env and env_error:
447. raise HTTPInternalError(env_error)
448. try:
449. dispatcher = RequestDispatcher(env)
450. dispatcher.dispatch(req)
451. except RequestDone:
452. pass
453. resp = req._response or []
454.
455. except HTTPException, e:
Local variables:
Name Value
after [u' except RequestDone:', u' pass', u' resp = ...
before [u' try:', u' if not env and env_error:', u' raise ...
dispatcher <trac.web.main.RequestDispatcher object at
0x03C30BD0>
e TypeError("'NoneType' object is not iterable",)
env <trac.env.Environment object at 0x03839630>
env_error None
exc_info (<type 'exceptions.TypeError'>, TypeError("'NoneType'
object is not ...
filename 'c:\\program ...
frames [{'function': '_dispatch_request', 'lines_before': [u'
try:', u' ...
has_admin True
line u' dispatcher.dispatch(req)'
lineno 449
message u"TypeError: 'NoneType' object is not iterable"
req <Request "GET u'/dashboard'">
resp []
tb <traceback object at 0x03F5D260>
tb_hide None
traceback u'Traceback (most recent call last):\n File "c:\
\program ...
* File "c:\program files\python25\lib\site-packages\Trac-0.11.7-
py2.5.egg\trac\web\main.py", line 206, in dispatch
Code fragment:
201. req.args.get('__FORM_TOKEN') != req.form_token:
202. raise HTTPBadRequest('Missing or invalid form token. '
203. 'Do you have cookies enabled?')
204.
205. # Process the request and render the template
206. resp = chosen_handler.process_request(req)
207. if resp:
208. if len(resp) == 2: # Clearsilver
209. chrome.populate_hdf(req)
210. template, content_type = \
211. self._post_process_request(req, *resp)
Local variables:
Name Value
chosen_handler <agilo.scrum.backlog.dashboard.ScrumDashboard
object at 0x03C3C6B0>
chrome <trac.web.chrome.Chrome object at 0x03C30AB0>
err (<type 'exceptions.TypeError'>, TypeError("'NoneType'
object is not ...
handler <agilo.scrum.backlog.dashboard.ScrumDashboard object at
0x03C3C6B0>
req <Request "GET u'/dashboard'">
self <trac.web.main.RequestDispatcher object at 0x03C30BD0>
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\scrum\backlog\dashboard.py",
line 101, in process_request
Code fragment:
96. 'may_edit_tickets': Action.TICKET_EDIT in req.perm
97. }
98. # Makes sure the Add Backlog list data is done once...
99. if not AgiloConfig(self.env).is_agilo_ui:
100. BacklogModule(self.env).send_backlog_list_data(req, data)
101. self._add_charts_to_template_data(req,
current_sprint_name, data)
102.
103. return 'agilo_dashboard.html', data, None
104.
105.
#=============================================================================
106. # INavigationContributor methods
Local variables:
Name Value
current_sprint <spr...@65747120 (Physical Engine Fixes) for
u'Physical Engine v1.0' ...
current_sprint_name u'Physical Engine Fixes'
data {'may_edit_tickets': True, 'may_delete_tickets': True,
'current_sprint': ...
req <Request "GET u'/dashboard'">
self <agilo.scrum.backlog.dashboard.ScrumDashboard object at
0x03C3C6B0>
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\scrum\backlog\dashboard.py",
line 71, in _add_charts_to_template_data
Code fragment:
66. backlog = Backlog(self.env, Key.SPRINT_BACKLOG,
scope=current_sprint_name)
67. cached_data = dict(tickets=backlog)
68. chart_generator = ChartGenerator(self.env)
69. get_widget = chart_generator.get_chartwidget
70. widget = get_widget(ChartType.BURNDOWN, width=680,
height=350,
71. sprint_name=current_sprint_name, cached_data=cached_data)
72. widget.prepare_rendering(req)
73. data['burndown'] = widget
74.
75. widget = get_widget(ChartType.SPRINT_RESOURCES_STATS,
width=300, height=300,
76. sprint_name=current_sprint_name, cached_data=cached_data)
Local variables:
Name Value
backlog <agilo.scrum.backlog.model.Backlog object at
0x03EB3A70>
cached_data {'tickets': <agilo.scrum.backlog.model.Backlog
object at 0x03EB3A70>}
chart_generator <agilo.charts.chart_generator.ChartGenerator
object at 0x03D9A990>
current_sprint_name u'Physical Engine Fixes'
data {'may_edit_tickets': True, 'may_delete_tickets': True,
'current_sprint': ...
get_widget <bound method ChartGenerator.get_chartwidget of ...
req <Request "GET u'/dashboard'">
self <agilo.scrum.backlog.dashboard.ScrumDashboard object at
0x03C3C6B0>
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\charts\chart_generator.py",
line 135, in get_chartwidget
Code fragment:
130. kwargs.pop(Key.WIDTH, None)
131.
132. def get_chartwidget(self, name, use_cache=True, **kwargs):
133. """Return a widget instance which will generate the
chart's HTML."""
134.
135. new_widget = self._get_widget(name, kwargs, use_cache)
136. self._set_widget_dimensions(new_widget, name, kwargs)
137. new_widget.update_data(**kwargs)
138. return new_widget
139.
140. def _add_names_for_persistent_objects(self,
changed_items):
Local variables:
Name Value
kwargs {'cached_data': {'tickets':
<agilo.scrum.backlog.model.Backlog object at ...
name 'burndown'
self <agilo.charts.chart_generator.ChartGenerator object at
0x03D9A990>
use_cache True
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\charts\chart_generator.py",
line 110, in _get_widget
Code fragment:
105. if cache_key is not None and cache_key in self.cache:
106. cached_widget = self.cache[cache_key]
107. new_widget = cached_widget.copy()
108. else:
109. self._add_configured_colors(kwargs)
110. new_widget = generator.generate_widget(name, **kwargs)
111. if cache_key is not None:
112. # Maybe clean cache after a certain amount of time/certain
size?
113. self.cache[cache_key] = new_widget.copy()
114. kwargs = {} # don't overwrite everything again
with .update() below
115. return new_widget
Local variables:
Name Value
cache_key None
generator <agilo.scrum.backlog.charts.BurndownChartGenerator
object at 0x03F519F0>
kwargs {'cached_data': {'tickets':
<agilo.scrum.backlog.model.Backlog object at ...
name 'burndown'
new_widget None
self <agilo.charts.chart_generator.ChartGenerator object at
0x03D9A990>
use_cache True
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\scrum\backlog\charts.py", line
62, in generate_widget
Code fragment:
57. self._push_today_color_if_available(burndown_widget,
kwargs)
58. if 'sprint_name' in kwargs:
59. if 'cached_data' in kwargs:
60.
burndown_widget.update_data(cached_data=kwargs['cached_data'])
61. sprint_name = kwargs.get('sprint_name')
62. burndown_widget.populate_with_sprint_data(sprint_name)
63. return burndown_widget
64.
65. def get_backlog_information(self):
66. # Charts are a layer above the burndown so this module
must not import
67. # agilo.scrum.backlog globally
Local variables:
Name Value
burndown_widget <agilo.scrum.backlog.charts.BurndownWidget
object at 0x037665B0>
kwargs {'cached_data': {'tickets':
<agilo.scrum.backlog.model.Backlog object at ...
name 'burndown'
self <agilo.scrum.backlog.charts.BurndownChartGenerator object
at 0x03F519F0>
sprint_name u'Physical Engine Fixes'
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\scrum\backlog\charts.py", line
300, in populate_with_sprint_data
Code fragment:
295.
296. backlog = self._get_backlog(sprint_name)
297. filtered_backlog = getattr(backlog, 'filter_by', None) is
not None
298.
299. commitment = self.get_commitment(sprint_name)
300. actual_data = self.get_remaining_time_series(sprint_name,
backlog, commitment)
301. capacity_data = self._get_capacity(sprint_name,
filtered_backlog)
302. first_remaining_time = commitment
303. if first_remaining_time is None and len(actual_data) > 0:
304. first_remaining_time = actual_data[0]
305. ideal_data = self._calculate_ideal_burndown(capacity_data,
first_remaining_time, len(dates))
Local variables:
Name Value
backlog <agilo.scrum.backlog.model.Backlog object at
0x03EB3A70>
commitment None
dates [733861, 733862, 733863, 733864, 733865, 733866, 733867,
733868, 733869, ...
end_sprint 733877
filtered_backlog False
self <agilo.scrum.backlog.charts.BurndownWidget object at
0x037665B0>
sprint ValueObject({'end': datetime.datetime(2010, 4, 14, 16,
0, ...
sprint_name u'Physical Engine Fixes'
start_sprint 733861
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\scrum\backlog\charts.py", line
284, in get_remaining_time_series
Code fragment:
279.
280. def get_remaining_time_series(self, sprint_name, backlog,
commitment):
281. cmd_rem_times =
SprintController.GetRemainingTimesCommand(self.env,
282. sprint=sprint_name, cut_to_today=True,
283. commitment=commitment, tickets=backlog)
284. actual_data =
self.sp_controller.process_command(cmd_rem_times)
285. return actual_data
286.
287. def populate_with_sprint_data(self, sprint_name):
288. sprint = self._load_sprint(sprint_name)
289. if sprint == None:
Local variables:
Name Value
backlog <agilo.scrum.backlog.model.Backlog object at
0x03EB3A70>
cmd_rem_times
<agilo.scrum.sprint.controller.GetRemainingTimesCommand object at ...
commitment None
self <agilo.scrum.backlog.charts.BurndownWidget object at
0x037665B0>
sprint_name u'Physical Engine Fixes'
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\api\controller.py", line 333,
in process_command
Code fragment:
328. if not
self._check_command_is_for_this_controller(command):
329. raise self.CommandNotFoundError("The command (%s) was " \
330. "not found on this " \
331. "controller" % command)
332. try:
333. return command.execute(self, date_converter, as_key)
334. except Exception, e:
335. if not isinstance(e, ICommand.CommandError):
336. e = ICommand.CommandError(to_unicode(e))
337. #raise e
338. raise
Local variables:
Name Value
as_key None
command <agilo.scrum.sprint.controller.GetRemainingTimesCommand
object at ...
date_converter None
e CommandError(u"'NoneType' object is not iterable",)
self <agilo.scrum.sprint.controller.SprintController object at
0x03C3CA50>
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\api\controller.py", line 286,
in execute
Code fragment:
281. command can be executed, normally called by the controller
282. """
283. if self._errors and len(self._errors) > 0:
284. self._raise_errors()
285. else:
286. return self._execute(controller, date_converter, as_key)
287.
288. def _execute(self, controller, date_converter=None,
as_key=None):
289. """
290. Execute the command, needs to have a controller reference
to
291. access the environment and other members specific to the
Local variables:
Name Value
as_key None
controller <agilo.scrum.sprint.controller.SprintController
object at 0x03C3CA50>
date_converter None
self <agilo.scrum.sprint.controller.GetRemainingTimesCommand
object at ...
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\scrum\sprint\controller.py",
line 654, in _execute
Code fragment:
649. # rather False by default, the validator checks for not
None so if
650. # it would be None would be evaluated as False, and not as
True
651. if self.cut_to_today:
652. end = min(end, self._midnight(today + timedelta(days=1)))
653. remaining_times =
self._get_remaining_times_for_interval(env,
654. start, end, sprint, sp_controller, commitment)
655. return remaining_times
656.
657.
658. class
GetTotalRemainingTimeCommand(GetRemainingTimesCommand):
659. """Returns the total current remaining time for this
sprint,
Local variables:
Name Value
as_key None
commitment None
date_converter None
end datetime.datetime(2010, 4, 7, 0, 0, tzinfo=<FixedOffset
"UTC" 0:00:00>)
env <trac.env.Environment object at 0x03839630>
self <agilo.scrum.sprint.controller.GetRemainingTimesCommand
object at ...
sp_controller <agilo.scrum.sprint.controller.SprintController
object at 0x03C3CA50>
sprint <spr...@65747120 (Physical Engine Fixes) for u'Physical
Engine v1.0' ...
start datetime.datetime(2010, 3, 30, 15, 52, 40,
tzinfo=<FixedOffset "UTC" ...
today datetime.datetime(2010, 4, 6, 17, 20, 1, 329000,
tzinfo=<FixedOffset "UTC" ...
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\scrum\sprint\controller.py",
line 623, in _get_remaining_times_for_interval
Code fragment:
618.
619. def _get_remaining_times_for_interval(self, env, start,
end, sprint,
620. sp_controller, commitment):
621. rt_series_by_task = \
622. self.build_remaining_time_series_for_interval(env, start,
end,
623. sprint, sp_controller)
624. remaining_time_by_day = {}
625. for task, days in rt_series_by_task.items():
626. for day, remaining_time in days:
627. if day not in remaining_time_by_day:
628. remaining_time_by_day[day] = 0
Local variables:
Name Value
commitment None
end datetime.datetime(2010, 4, 7, 0, 0, tzinfo=<FixedOffset
"UTC" 0:00:00>)
env <trac.env.Environment object at 0x03839630>
self <agilo.scrum.sprint.controller.GetRemainingTimesCommand
object at ...
sp_controller <agilo.scrum.sprint.controller.SprintController
object at 0x03C3CA50>
sprint <spr...@65747120 (Physical Engine Fixes) for u'Physical
Engine v1.0' ...
start datetime.datetime(2010, 3, 30, 15, 52, 40,
tzinfo=<FixedOffset "UTC" ...
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\scrum\sprint\controller.py",
line 573, in build_remaining_time_series_for_interval
Code fragment:
568. # AT: we have to check if the command received tickets or
569. # not. In case there are no tickets we will get the full
570. # backlog
571. backlog = self.tickets or self._get_backlog(env, sprint)
572. stories = self._get_tickets_with_attribute(tc, env,
backlog,
573. Key.ESTIMATED_REMAINING_TIME)
574. orphan_tasks = self._get_orphan_tasks(tc, env, backlog)
575. get_tasks = lambda story=None:
self._get_tasks_for_story(env,
576. sp_controller, sprint.name, story, backlog)
577. story_tasks = [get_tasks(story) for story in stories]
578. all_tasks = orphan_tasks + reduce(lambda x, y: x+y,
Local variables:
Name Value
backlog None
cut_to_today True
end datetime.datetime(2010, 4, 7, 0, 0, tzinfo=<FixedOffset
"UTC" 0:00:00>)
env <trac.env.Environment object at 0x03839630>
self <agilo.scrum.sprint.controller.GetRemainingTimesCommand
object at ...
sp_controller <agilo.scrum.sprint.controller.SprintController
object at 0x03C3CA50>
sprint <spr...@65747120 (Physical Engine Fixes) for u'Physical
Engine v1.0' ...
start datetime.datetime(2010, 3, 30, 15, 52, 40,
tzinfo=<FixedOffset "UTC" ...
tc <agilo.ticket.controller.TicketController object at
0x03FDE870>
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\scrum\sprint\controller.py",
line 460, in _get_tickets_with_attribute
Code fragment:
455.
456. def _get_tickets_with_attribute(self, tc, env, backlog,
attribute):
457. cmd = TicketController.FilterTicketsWithAttribute(env,
458. tickets=backlog, attribute_name=attribute)
459. cmd.native = True
460. return tc.process_command(cmd)
461.
462. def _get_orphan_tasks(self, tc, env, backlog):
463. cmd = TicketController.FindOrphanTasks(env,
464. tickets=backlog)
465. cmd.native = True
Local variables:
Name Value
attribute 'estimated_remaining_time'
backlog None
cmd <agilo.ticket.controller.FilterTicketsWithAttribute object
at 0x024E0330>
env <trac.env.Environment object at 0x03839630>
self <agilo.scrum.sprint.controller.GetRemainingTimesCommand
object at ...
tc <agilo.ticket.controller.TicketController object at
0x03FDE870>
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\api\controller.py", line 333,
in process_command
Code fragment:
328. if not
self._check_command_is_for_this_controller(command):
329. raise self.CommandNotFoundError("The command (%s) was " \
330. "not found on this " \
331. "controller" % command)
332. try:
333. return command.execute(self, date_converter, as_key)
334. except Exception, e:
335. if not isinstance(e, ICommand.CommandError):
336. e = ICommand.CommandError(to_unicode(e))
337. #raise e
338. raise
Local variables:
Name Value
as_key None
command <agilo.ticket.controller.FilterTicketsWithAttribute
object at 0x024E0330>
date_converter None
e CommandError(u"'NoneType' object is not iterable",)
self <agilo.ticket.controller.TicketController object at
0x03FDE870>
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\api\controller.py", line 286,
in execute
Code fragment:
281. command can be executed, normally called by the controller
282. """
283. if self._errors and len(self._errors) > 0:
284. self._raise_errors()
285. else:
286. return self._execute(controller, date_converter, as_key)
287.
288. def _execute(self, controller, date_converter=None,
as_key=None):
289. """
290. Execute the command, needs to have a controller reference
to
291. access the environment and other members specific to the
Local variables:
Name Value
as_key None
controller <agilo.ticket.controller.TicketController object at
0x03FDE870>
date_converter None
self <agilo.ticket.controller.FilterTicketsWithAttribute object
at 0x024E0330>
* File "c:\program files\python25\lib\site-packages
\binary_agilo-1.2.1_PRO-py2.5.egg\agilo\ticket\controller.py", line
118, in _execute
Code fragment:
113.
114. def _execute(self, controller, date_converter, as_key):
115. # avoid circular imports
116. from agilo.scrum.backlog import Backlog
117. result_tickets = []
118. for ticket_or_bi in self.tickets:
119. if isinstance(ticket_or_bi, Backlog.BacklogItem):
120. if not ticket_or_bi.is_visible:
121. continue
122. ticket_or_bi = ticket_or_bi.ticket
123. if ticket_or_bi.is_readable_field(self._attribute_name):
Local variables:
Name Value
Backlog <class 'agilo.scrum.backlog.model.Backlog'>
as_key None
controller <agilo.ticket.controller.TicketController object at
0x03FDE870>
date_converter None
result_tickets []
self <agilo.ticket.controller.FilterTicketsWithAttribute object
at 0x024E0330>
Trac: 0.11.7
Python: 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit
(Intel)]
setuptools: 0.6c11
MySQL: server: "5.0.51a-community-nt", client: "5.0.27", thread-safe:
1
MySQLdb: 1.2.2
Genshi: 0.5.1
mod_python: 3.3.1
Agilo: 1.2.1-pro
Subversion: 1.6.5 (r38866)
jQuery:1.2.6
--
Follow Agilo on Twitter: http://twitter.com/agiloforscrum
-----
You received this message because you are subscribed to the Google
Groups "Agilo for Scrum" group. This group is moderated by agile42 GmbH
http://www.agile42.com and is focused in supporting Agilo for Scrum users.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/agilo?hl=en
To unsubscribe, reply using "remove me" as the subject.