<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On 10 November 2016 at 12:18, Maciej Borzecki <span dir="ltr"><<a href="mailto:maciej.borzecki@rndity.com" target="_blank">maciej.borzecki@rndity.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div id="gmail-:37c" class="gmail-a3s gmail-aXjCH gmail-m1584e36ab07531d6">- ts = sorted([ (tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule) for tc in get_testsuite_by(criteria, keyword) ])<br>
-<br>
- print('%-4s\t%-20s\t%-60s\t%-<wbr>25s\t%-20s' % ('id', 'tag', 'name', 'class', 'module'))<br>
+ def tc_key(t):<br>
+ if t[0] is None:<br>
+ return (0,) + t[1:]<br>
+ return t<br>
+ # tcid may be None if no ID was assigned, in which case sorted() will throw<br>
+ # a TypeError as Python 3 does not allow comparison (<,<=,>=,>) of<br>
+ # heterogeneous types, handle this by using a custom key generator<br>
+ ts = sorted([ (tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule) \<br>
+ for tc in get_testsuite_by(criteria, keyword) ], key=tc_key)</div></blockquote></div><br>Wouldn't a shorter (but untested!) form alternative be just?</div><div class="gmail_extra"><br></div><div class="gmail_extra"><span style="font-size:12.800000190734863px">- ts = sorted([ (tc.tcid, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule) for tc in get_testsuite_by(criteria, keyword) ])</span><br style="font-size:12.800000190734863px"></div><div class="gmail_extra"><span style="font-size:12.800000190734863px">+ ts = sorted([ (tc.tcid or 0, tc.tctag, tc.tcname, tc.tcclass, tc.tcmodule) for tc in get_testsuite_by(criteria, keyword) ])</span><br style="font-size:12.800000190734863px"></div><div class="gmail_extra"><span style="font-size:12.800000190734863px"><br></span></div><div class="gmail_extra"><span style="font-size:12.800000190734863px">Ross</span></div></div>