Opened 10 years ago
Last modified 2 years ago
#12458 new defect
TypeError: coercing to Unicode: need string or buffer, NoneType found
| Reported by: | Jun Omae | Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | next-stable-1.6.x |
| Component: | ticket system | Version: | 1.0.10 |
| Severity: | normal | Keywords: | |
| Cc: | Branch: | ||
| Release Notes: | |||
| API Changes: | |||
| Internal Changes: | |||
Description
It seems that this issue occurs when timeline view shows th:#12742 which has blank summary.
How to Reproduce
While doing a GET operation on /timeline, Trac issued an internal error.
Request parameters:
{}
User agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0
System Information
Trac | 1.0.10
|
Babel | 2.1.1
|
dnspython | 1.12.0
|
Docutils | 0.12
|
FullBlog | 0.1.5
|
Genshi | 0.6 (without speedups)
|
httplib2 | 0.9.2
|
mod_wsgi | 4.3.0 (WSGIProcessGroup /srv/trac-hacks.org WSGIApplicationGroup %{GLOBAL})
|
Pillow | 3.0.0
|
psycopg2 | 2.6.1
|
Pygments | 2.1
|
Python | 2.7.9 (default, Mar 1 2015, 13:01:26) [GCC 4.9.2]
|
python-oauth2 | 1.9.0.post1
|
pytz | 2015.7
|
RPC | 1.1.5
|
setuptools | 20.2.2
|
SpamBayes | 1.1b2
|
Subversion | 1.8.10 (r1615264)
|
jQuery | 1.7.2
|
jQuery UI | 1.8.21
|
jQuery Timepicker | 1.0.1
|
Enabled Plugins
BlogDraftPlugin | N/A
|
ChangeLogMacro | 0.4.dev0
|
EmailProcessor | r10962
|
FootNoteMacro | 1.5
|
SvnAuthzAdminPlugin | 1.0.dev0
|
TracAccountManager | 0.5.dev0
|
TracAcronyms | 0.2
|
TracAutoWikify | 0.2
|
TracExtractUrl | 0.3
|
TracFullBlogPlugin | 0.1.5
|
TracHacks | 3.0.1.dev0
|
TracIncludeMacro | 3.0.0.dev0
|
TracIniAdminPanel | 1.0.1
|
TracNewsFlash | 1.0.2
|
TracPoll | 0.3.0.dev0
|
TracServerSideRedirectPlugin | 1.0.0
|
TracSpamFilter | 1.0.9.dev0
|
TracTags | 0.9.dev0
|
TracTocMacro | 11.0.0.5
|
TracVote | 0.5.1.dev0
|
TracWikiExtras | 1.0.dev0
|
TracXMLRPC | 1.1.5
|
Python Traceback
Traceback (most recent call last):
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/trac/web/main.py", line 554, in _dispatch_request
dispatcher.dispatch(req)
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/trac/web/main.py", line 267, in dispatch
iterable=chrome.use_chunked_encoding)
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/trac/web/chrome.py", line 1114, in render_template
encoding='utf-8')
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/core.py", line 183, in render
return encode(generator, method=method, encoding=encoding, out=out)
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/output.py", line 58, in encode
for chunk in iterator:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/output.py", line 339, in __call__
for kind, data, pos in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/output.py", line 826, in __call__
for kind, data, pos in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/output.py", line 670, in __call__
for kind, data, pos in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/output.py", line 771, in __call__
for kind, data, pos in chain(stream, [(None, None, None)]):
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/output.py", line 586, in __call__
for ev in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/core.py", line 288, in _ensure
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/core.py", line 288, in _ensure
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/trac/web/chrome.py", line 1309, in _generate
for kind, data, pos in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/core.py", line 288, in _ensure
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/core.py", line 288, in _ensure
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/filters/transform.py", line 686, in _unmark
for mark, event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/filters/transform.py", line 1145, in __call__
for mark, event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/filters/transform.py", line 714, in __call__
for mark, event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/filters/transform.py", line 682, in _mark
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/core.py", line 288, in _ensure
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/filters/transform.py", line 686, in _unmark
for mark, event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/filters/transform.py", line 1081, in __call__
for mark, event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/filters/transform.py", line 117, in __iter__
event = self.stream.next()
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/filters/transform.py", line 714, in __call__
for mark, event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/filters/transform.py", line 682, in _mark
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/base.py", line 605, in _include
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/markup.py", line 378, in _match
ctxt, start=idx + 1, **vars):
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/markup.py", line 378, in _match
ctxt, start=idx + 1, **vars):
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/markup.py", line 327, in _match
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/base.py", line 545, in _flatten
for kind, data, pos in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/core.py", line 288, in _ensure
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/path.py", line 588, in _generate
subevent = next()
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/base.py", line 605, in _include
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/markup.py", line 316, in _strip
event = next()
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/base.py", line 545, in _flatten
for kind, data, pos in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/core.py", line 288, in _ensure
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/path.py", line 588, in _generate
subevent = next()
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/base.py", line 605, in _include
for event in stream:
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/markup.py", line 316, in _strip
event = next()
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/base.py", line 565, in _flatten
result = _eval_expr(data, ctxt, vars)
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/base.py", line 277, in _eval_expr
retval = expr.evaluate(ctxt)
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/genshi/template/eval.py", line 178, in evaluate
return eval(self.code, _globals, {'__data__': data})
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/trac/timeline/templates/timeline.html", line 59, in <Expression u"event.render('title', context)">
<span class="time">${format_time(event.date, 'short')}</span> ${event.render('title', context)}
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/trac/timeline/web_ui.py", line 366, in <lambda>
provider.render_timeline_event(context, field, event)
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/trac/ticket/web_ui.py", line 394, in render_timeline_event
resolution, type)
File "/srv/trac-hacks.org/pve/lib/python2.7/site-packages/trac/ticket/api.py", line 576, in format_summary
summary = type + ': ' + summary
TypeError: coercing to Unicode: need string or buffer, NoneType found
Attachments (0)
Change History (10)
comment:1 by , 10 years ago
| Reporter: | changed from to |
|---|
comment:2 by , 10 years ago
comment:3 by , 10 years ago
Ticket without a summary can be created using ticket.create via https://trac-hacks.org/jsonrpc.
The validation for summary field is implemented in source:/tags/trac-1.0.10/trac/ticket/web_ui.py@:1250-1253#L1250. Ticket model doesn't have the same validation.
comment:4 by , 10 years ago
I was thinking that we only allowed authenticated users to create tickets through xml-rpc on trac-hacks.org, but that's not the case. I created th:#12749.
follow-up: 6 comment:5 by , 9 years ago
Is there any reason the summary column is nullable if the code actually expects the summary to be non-null?
comment:6 by , 9 years ago
Replying to Rick van Hattem <wolph@…>:
Is there any reason the summary column is nullable if the code actually expects the summary to be non-null?
It appears all 3 database backends support NOT NULL for columns in the schema. I've heard differing opinions on whether such enforcement should be done in the model or schema. Making a change at this time might break a lot of unit tests in plugins, and we can just as well fix this particular issue in XmlRpcPlugin.
I think any change to the model or schema would best be done in the scope of a major refactoring of the application, like suggested in comment:15:ticket:10125. I've documented this particular issue in TracDev/ScratchPad/DataModels@3#NOTNULLcolumns.
comment:7 by , 9 years ago
| Milestone: | next-stable-1.0.x → next-stable-1.2.x |
|---|
Moved ticket assigned to next-stable-1.0.x since maintenance of 1.0.x is coming to a close. Please move the ticket back if it's critical to fix on 1.0.x.
comment:8 by , 6 years ago
I just encountered the same issue via th:TicketImportPlugin on Trac 1.0.x.
comment:9 by , 5 years ago
| Milestone: | next-stable-1.2.x → next-stable-1.4.x |
|---|



I deleted the ticket using
trac-admin. I wonder how it was possible to create the ticket without a summary.