)]}'
{"oslo_db/sqlalchemy/utils.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"88777d0d748052e3b8cccf03c3a5fa08e7d5c54e","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"_DBURL_REGEX \u003d re.compile(r\"[^:]+://([^:]+):([^@]+)@.+\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"_VALID_SORT_DIR \u003d list(map(lambda x: \"-\".join(x),"},{"line_number":58,"context_line":"                           itertools.product([\"asc\", \"desc\"],"},{"line_number":59,"context_line":"                                             [\"nullsfirst\", \"nullslast\"])))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_d9feaead","line":57,"updated":"2015-08-05 17:24:36.000000000","message":"A List comprehension would probably be more readable :P\n\n_VALID_SORT_DIR \u003d [\n     \"-\".join(x)\n     for x in itertools.product([\u0027asc\u0027, \u0027desc\u0027],\n                                [\u0027nullsfirst\u0027, \u0027nullslast\u0027])\n ]","commit_id":"de9f850fe92e381269e2c1ccddd1184766214aff"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"1d10dd4c524c748d9ba60d21e6a7a5397c4d7c9e","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"_DBURL_REGEX \u003d re.compile(r\"[^:]+://([^:]+):([^@]+)@.+\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"_VALID_SORT_DIR \u003d list(map(lambda x: \"-\".join(x),"},{"line_number":58,"context_line":"                           itertools.product([\"asc\", \"desc\"],"},{"line_number":59,"context_line":"                                             [\"nullsfirst\", \"nullslast\"])))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_ffc6e066","line":57,"in_reply_to":"1a4dcd0f_d9feaead","updated":"2015-08-06 05:47:08.000000000","message":"Done","commit_id":"de9f850fe92e381269e2c1ccddd1184766214aff"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"88777d0d748052e3b8cccf03c3a5fa08e7d5c54e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"# copy from glance/db/sqlalchemy/api.py"},{"line_number":70,"context_line":"def paginate_query(query, model, limit, sort_keys, marker\u003dNone,"},{"line_number":71,"context_line":"                   sort_dir\u003dNone, sort_dirs\u003dNone,"},{"line_number":72,"context_line":"                   sort_nullables\u003dNone):"},{"line_number":73,"context_line":"    \"\"\"Returns a query with sorting / pagination criteria added."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    Pagination works by requiring a unique sort_key, specified by sort_keys."}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_595b7ef6","line":72,"updated":"2015-08-05 17:24:36.000000000","message":"hmm, sort_nullables doesn\u0027t seem to be used anywhere","commit_id":"de9f850fe92e381269e2c1ccddd1184766214aff"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"1d10dd4c524c748d9ba60d21e6a7a5397c4d7c9e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"# copy from glance/db/sqlalchemy/api.py"},{"line_number":70,"context_line":"def paginate_query(query, model, limit, sort_keys, marker\u003dNone,"},{"line_number":71,"context_line":"                   sort_dir\u003dNone, sort_dirs\u003dNone,"},{"line_number":72,"context_line":"                   sort_nullables\u003dNone):"},{"line_number":73,"context_line":"    \"\"\"Returns a query with sorting / pagination criteria added."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    Pagination works by requiring a unique sort_key, specified by sort_keys."}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_5fcef482","line":72,"in_reply_to":"1a4dcd0f_595b7ef6","updated":"2015-08-06 05:47:08.000000000","message":"Removed, was an artefact of a previous idea.","commit_id":"de9f850fe92e381269e2c1ccddd1184766214aff"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ce4d926627d9def95f49ef100310d126461b0ecb","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                \"nullsfirst\": sort_key_attr.is_(None),"},{"line_number":140,"context_line":"                \"nullslast\": sort_key_attr.isnot(None),"},{"line_number":141,"context_line":"            }[null_sort_dir]"},{"line_number":142,"context_line":"        except KeyError:"},{"line_number":143,"context_line":"            raise ValueError(_(\"Unknown sort direction, \""},{"line_number":144,"context_line":"                               \"must be one of: %s\") %"},{"line_number":145,"context_line":"                             \", \".join(_VALID_SORT_DIR))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a4dcd0f_4707f8c9","line":142,"updated":"2015-08-06 10:49:02.000000000","message":"You can en up with ValueError as the first line in that try block if the string does not have enough dash -.","commit_id":"f6a2ab7b2f569e29ddf3fd037da2f3df88d1f181"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"d97653275eeb669a7d036c3a291f6e66f4d78431","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                \"nullsfirst\": sort_key_attr.is_(None),"},{"line_number":140,"context_line":"                \"nullslast\": sort_key_attr.isnot(None),"},{"line_number":141,"context_line":"            }[null_sort_dir]"},{"line_number":142,"context_line":"        except KeyError:"},{"line_number":143,"context_line":"            raise ValueError(_(\"Unknown sort direction, \""},{"line_number":144,"context_line":"                               \"must be one of: %s\") %"},{"line_number":145,"context_line":"                             \", \".join(_VALID_SORT_DIR))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a4dcd0f_4c986b6a","line":142,"in_reply_to":"1a4dcd0f_4707f8c9","updated":"2015-08-06 15:59:51.000000000","message":"partition() doesn\u0027t raise anything. it split thing in 3 parts and that all, addition dash go in null_sort_dir","commit_id":"f6a2ab7b2f569e29ddf3fd037da2f3df88d1f181"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"bc58fc92013acc29ace2fc2cfa264b4f9cb6e4ce","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                \"nullsfirst\": sort_key_attr.is_(None),"},{"line_number":140,"context_line":"                \"nullslast\": sort_key_attr.isnot(None),"},{"line_number":141,"context_line":"            }[null_sort_dir]"},{"line_number":142,"context_line":"        except KeyError:"},{"line_number":143,"context_line":"            raise ValueError(_(\"Unknown sort direction, \""},{"line_number":144,"context_line":"                               \"must be one of: %s\") %"},{"line_number":145,"context_line":"                             \", \".join(_VALID_SORT_DIR))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a4dcd0f_38f8b5c2","line":142,"in_reply_to":"1a4dcd0f_4c986b6a","updated":"2015-08-06 17:06:03.000000000","message":"Wah, I never used partition() so I read split()!","commit_id":"f6a2ab7b2f569e29ddf3fd037da2f3df88d1f181"}]}
