From: Mario Frasca Date: Mon, 27 May 2019 17:35:28 +0000 (-0500) Subject: attempt partial sorting at least X-Git-Tag: v2.8.0~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38dfc8dc87f869d4837cbe8338db53ae9e293f8f;p=thirdparty%2Fbabel.git attempt partial sorting at least see issue #606. if one object has anything that doesn't compare to `int`, bring it to the top, and correctly sort the rest. --- diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py index bbcf7f76..93b0697c 100644 --- a/babel/messages/pofile.py +++ b/babel/messages/pofile.py @@ -582,11 +582,13 @@ def write_po(fileobj, catalog, width=76, no_location=False, omit_header=False, if not no_location: locs = [] - # Attempt to sort the locations. If we can't do that, for instance - # because there are mixed integers and Nones or whatnot (see issue #606) - # then give up, but also don't just crash. + # sort locations by filename and lineno. + # if there's no as lineno, use `-1`. + # if no sorting possible, leave unsorted. + # (see issue #606) try: - locations = sorted(message.locations) + locations = sorted(message.locations, + key=lambda x: (x[0], isinstance(x[1], int) and x[1] or -1)) except TypeError: # e.g. "TypeError: unorderable types: NoneType() < int()" locations = message.locations