#12180 closed defect (fixed)
AttributeError: NoneType object has no attribute split
| Reported by: | Owned by: | Ryan J Ollos | |
|---|---|---|---|
| Priority: | normal | Component: | MasterTicketsPlugin |
| Severity: | normal | Keywords: | |
| Cc: | Trac Release: | 1.0 |
Description (last modified by )
While testing TracMasterTickets-3.0.5dev_r14323-py2.7.egg. I got this error message.
I had created a new ticket with number #5. Then I created another ticket and set "Blocks: 5".
How to Reproduce: While doing a POST operation on /newticket, Trac issued an internal error. please provide additional details here
Request parameters:
{ __FORM_TOKEN : u 7d94f1474416685013961c3c,
field_billable : u 1,
field_blockedby : u,
field_blocking : u 5,
field_cc : u,
field_checkbox_billable : u 1,
field_component : u component1,
field_description : u Testing ticket hierarchy 1.2,
field_estimatedhours : u 0,
field_hours : u 0,
field_keywords : u,
field_milestone : u,
field_owner : u Mo,
field_priority : u blocker,
field_project : u main,
field_reporter : u Mo,
field_summary : u Testing ticket hierarchy 1.2,
field_type : u defect,
field_version : u,
submit : u Create ticket }
User agent: Mozilla/5.0 X11; Linux x86_64; rv:35.0 Gecko/20100101 Firefox/35.0
System Information
Trac | 1.0.3
|
Docutils | 0.12
|
FullBlog | 0.1.1-r0
|
Genshi | 0.7 with speedups
|
GIT | 2.0.5
|
psycopg2 | 2.5.3
|
Pygments | 2.0predev-20150123
|
Python | 2.7.9 default, Jan 23 2015, 15:27:02 \\ GCC 4.8.3
|
pytz | 2014.10
|
setuptools | 7.0
|
JQUERY | 1.7.2
|
| JQUERY UI | 1.8.21
|
| JQUERY Timepicker | 1.0.1
|
Enabled Plugins
acct-mgr.admin | N/A
|
acct-mgr.api | N/A
|
acct-mgr.db | N/A
|
acct-mgr.htfile | N/A
|
acct-mgr.http | N/A
|
acct-mgr.macros | N/A
|
acct-mgr.notification | N/A
|
acct-mgr.pwhash | N/A
|
acct-mgr.register | N/A
|
acct-mgr.svnserve | N/A
|
acct-mgr.web-ui | N/A
|
RoadmapHours | 0.5
|
SimpleMultiProject | 0.0.4dev-r14359
|
timingandestimationplugin | 1.3.7
|
TracAnnouncer | 1.0dev-r13984
|
TracAutocompleteUsersPlugin | 0.4.3dev-r14213
|
TracFullBlogPlugin | 0.1.1-r0
|
TracGanttCalendarPlugin | 0.6.4-r859
|
TracMasterTickets | 3.0.5dev-r14323
|
TracWatchlistPlugin | 1.0.1
|
TracWorkflowAdmin | 0.12.0.2
|
WikiAutoComplete | 1.0
|
WorkLog | 0.4dev-r13835
|
Python Traceback
Traceback most recent call last:
File /usr/lib64/python2.7/site-packages/trac/web/main.py , line 513, in _dispatch_request
dispatcher.dispatch req
File /usr/lib64/python2.7/site-packages/trac/web/main.py , line 222, in dispatch
resp chosen_handler.process_request req
File /usr/lib64/python2.7/site-packages/trac/ticket/web_ui.py , line 183, in process_request
return self._process_newticket_request req
File /usr/lib64/python2.7/site-packages/trac/ticket/web_ui.py , line 468, in _process_newticket_request
self._do_create req, ticket # redirected if successful
File /usr/lib64/python2.7/site-packages/trac/ticket/web_ui.py , line 1303, in _do_create
ticket.insert
File /usr/lib64/python2.7/site-packages/trac/ticket/model.py , line 256, in insert
listener.ticket_created self
File build/bdist.linux-x86_64/egg/mastertickets/api.py , line 114, in ticket_created
self.ticket_changed tkt, , tkt reporter , {}
File build/bdist.linux-x86_64/egg/mastertickets/api.py , line 119, in ticket_changed
links.save author, comment, tkt.time_changed, db
File build/bdist.linux-x86_64/egg/mastertickets/model.py , line 76, in save new_value
x.strip for x in old_value.split , if x.strip
AttributeError: NoneType object has no attribute split
Attachments (1)
Change History (14)
comment:2 Changed 11 years ago by
| Description: | modified (diff) |
|---|---|
| Trac Release: | → 1.0 |
Changed 11 years ago by
| Attachment: | Screen Shot 2015-02-13 at 12.06.41 PM.png added |
|---|
comment:3 Changed 11 years ago by
Experienced the same issue on the same version of TracTicketMaster. I have attached screenshot with all the details I get on this error.
comment:4 Changed 11 years ago by
my patch for model.py r14323
@@ -2275,32 +2275,34 @@
+ #
update_field =
@@ -2334,32 +2334,149 @@
r(self.tkt.id))%0A
+ update_field = lambda lst: lst.append(str(self.tkt.id)) if str(self.tkt.id) not in lst else lst%0A%0A
@@ -2686,32 +2686,34 @@
+ #
update_field =
@@ -2752,16 +2752,128 @@
tkt.id))
+%0A update_field = lambda lst: lst.remove(str(self.tkt.id)) if str(self.tkt.id) in lst else lst
%0A%0A
@@ -3115,21 +3115,18 @@
ne()
+%5B0%5D
or
-(
''
-,))%5B0%5D
+)
%0A
comment:5 follow-up: 6 Changed 11 years ago by
This patch works for us (CentOS 6.6, Python-2.6.6, Trac-1.0.4, sqlite-3.6.20):
--- model.py.orig 2015-03-28 14:16:29.158066874 -0400
+++ model.py 2015-03-28 14:04:20.454539832 -0400
@@ -73,7 +73,10 @@
cursor.execute('SELECT value FROM ticket_custom WHERE ticket=%s AND name=%s',
(n, str(field)))
old_value = (cursor.fetchone() or ('',))[0]
- new_value = [x.strip() for x in old_value.split(',') if x.strip()]
+ if old_value != None:
+ new_value = [x.strip() for x in old_value.split(',') if x.strip()]
+ else:
+ new_value = []
update_field(new_value)
new_value = ', '.join(sorted(new_value, key=lambda x: int(x)))
comment:6 Changed 11 years ago by
The latest patch by "leerw" didn't worked for me (Windows 7, python 2.7, sqllite 3.6.21).
When I try to delete the ticket, it issues the same error when deleting ticket blocked by another:
2015-04-01 17:12:44,752 Trac[main] ERROR: Internal Server Error:
Traceback (most recent call last):
File "c:\users\ammall~1\appdata\local\temp\easy_install-4unthi\Trac-1.0.5-py2.7-win32.egg.tmp\trac\web\main.py", line 513, in _dispatch_request
dispatcher.dispatch(req)
File "c:\users\ammall~1\appdata\local\temp\easy_install-4unthi\Trac-1.0.5-py2.7-win32.egg.tmp\trac\web\main.py", line 222, in dispatch
resp = chosen_handler.process_request(req)
File "c:\users\ammall~1\appdata\local\temp\easy_install-4unthi\Trac-1.0.5-py2.7-win32.egg.tmp\tracopt\ticket\deleter.py", line 139, in process_request
ticket.delete()
File "c:\users\ammall~1\appdata\local\temp\easy_install-4unthi\Trac-1.0.5-py2.7-win32.egg.tmp\trac\ticket\model.py", line 442, in delete
listener.ticket_deleted(self)
File "build\bdist.win32\egg\mastertickets\api.py", line 128, in ticket_deleted
links.save('trac', 'Ticket #%s deleted' % tkt.id, when=None, db=db)
File "build\bdist.win32\egg\mastertickets\model.py", line 76, in save
new_value = [x.strip() for x in old_value.split(',') if x.strip()]
AttributeError: 'NoneType' object has no attribute 'split'
comment:8 Changed 11 years ago by
I think, is not good idea to remove check - if SELECT is return nothing.
And after call update_field lambda, if lambda is append to list, you can see not unique list.
comment:9 Changed 11 years ago by
Feel free to propose an additional patch. I'm not going to spend a lot of time to understand and refactor the code of this plugin since I'm more interested in adding the features to Trac.
comment:10 follow-up: 11 Changed 11 years ago by
| Resolution: | fixed |
|---|---|
| Status: | closed → reopened |
I think, is not good idea to remove check - if SELECT is return nothing. And after call update_field lambda, if lambda is append to list, you can see not unique list.
my patch:
-
model.py
63 63 # New ticket added 64 64 cursor.execute('INSERT INTO mastertickets (%s, %s) VALUES (%%s, %%s)' % sourcedest, 65 65 (self.tkt.id, n)) 66 update_field = lambda lst: lst.append(str(self.tkt.id))66 update_field = lambda x: x.add(str(self.tkt.id)) 67 67 elif n not in new_ids and n in old_ids: 68 68 # Old ticket removed 69 69 cursor.execute('DELETE FROM mastertickets WHERE %s=%%s AND %s=%%s' % sourcedest, (self.tkt.id, n)) 70 update_field = lambda lst: lst.remove(str(self.tkt.id))70 update_field = lambda x: x.discard(str(self.tkt.id)) 71 71 72 72 if update_field is not None: 73 old_value = self.env.db_query(""" 74 SELECT value FROM ticket_custom WHERE ticket=%s AND name=%s 75 """, (n, field))[0][0] 76 if old_value: 77 new_value = [x.strip() for x in old_value.split(',') if x.strip()] 78 else: 79 new_value = [] 73 cursor.execute('SELECT value FROM ticket_custom WHERE ticket=%s AND name=%s', 74 (n, str(field))) 75 old_value = cursor.fetchone()[0] or '' 76 new_value = set([x.strip() for x in old_value.split(',') if x.strip()]) 80 77 update_field(new_value) 81 78 new_value = ', '.join(sorted(new_value, key=lambda x: int(x))) 82 79
comment:12 Changed 10 years ago by
| Resolution: | → fixed |
|---|---|
| Status: | reopened → closed |



However that new ticket
#6was being created and now also has the field Blocks set to#5.