)]}'
{"glance/api/v3/artifacts.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"303dfaefbe7ce4dd272b8a8b27517de9dac5d0bc","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        if response.request.urlvars.get(\u0027state\u0027) \u003d\u003d \u0027creating\u0027:"},{"line_number":854,"context_line":"            drafts \u003d \"/drafts\""},{"line_number":855,"context_line":"        else:"},{"line_number":856,"context_line":"            drafts \u003d \"\""},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        artifacts_list \u003d ["},{"line_number":859,"context_line":"            serialization.serialize_for_client(a, show_level\u003dShowlevel.NONE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_984f03be","line":856,"updated":"2015-09-22 08:25:00.000000000","message":"Can be written as,\n\ndrafts \u003d \"\"\nif response.request.urlvars.get(\u0027state\u0027) \u003d\u003d \u0027creating\u0027:\n    drafts \u003d \"/drafts\"","commit_id":"67d70009301f1200c193e346c91444f1960876d6"}],"glance/db/sqlalchemy/artifacts.py":[{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"ebea0f010656ccfeb9041abcaccafce6630ce2ad","unresolved":false,"context_lines":[{"line_number":363,"context_line":"                                               prop_type))))"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    # Add pagination"},{"line_number":366,"context_line":"    if marker is not None:"},{"line_number":367,"context_line":"        marker_values \u003d []"},{"line_number":368,"context_line":"        for sort_key in sort_keys:"},{"line_number":369,"context_line":"            v \u003d getattr(marker, sort_key[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_cc8fd6ca","line":366,"updated":"2015-08-19 13:54:32.000000000","message":"You need this condition with the following:\ndefault \u003d \u0027\u0027\n\n    # Add pagination\n    if marker is not None:\n        marker_values \u003d []\n        for sort_key in sort_keys:\n            v \u003d getattr(marker, sort_key[0])\n            if v is None:\n                v \u003d default\n            marker_values.append(v)\nbecause it is not the case to ignore marker is marker value is NULL. The sorting has to be stable.","commit_id":"b3b32cc1eab6ff33bf4e3607a3913132db3bf1f6"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"ebea0f010656ccfeb9041abcaccafce6630ce2ad","unresolved":false,"context_lines":[{"line_number":381,"context_line":"                else:"},{"line_number":382,"context_line":"                    model_attr \u003d getattr(models.ArtifactProperty,"},{"line_number":383,"context_line":"                                         sort_keys[j][1] + \"_value\")"},{"line_number":384,"context_line":"                crit_attrs.append((model_attr \u003d\u003d marker_values[j]))"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"            if sort_keys[i][1] is None:"},{"line_number":387,"context_line":"                model_attr \u003d getattr(models.Artifact, sort_keys[i][0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_2c6e9201","line":384,"updated":"2015-08-19 13:54:32.000000000","message":"You need replace this with the following:\ndefault \u003d None if isinstance(\n                    model_attr.property.columns[0].type,\n                    sqlalchemy.DateTime) else \u0027\u0027\n                attr \u003d case([(model_attr !\u003d None,\n                              model_attr), ],\n                             else_\u003ddefault)\n                crit_attrs.append((attr \u003d\u003d marker_values[j]))\nIt allows to consider None values in sorting.","commit_id":"b3b32cc1eab6ff33bf4e3607a3913132db3bf1f6"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"ebea0f010656ccfeb9041abcaccafce6630ce2ad","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            else:"},{"line_number":389,"context_line":"                model_attr \u003d getattr(models.ArtifactProperty,"},{"line_number":390,"context_line":"                                     sort_keys[i][1] + \"_value\")"},{"line_number":391,"context_line":"            if sort_dirs[i] \u003d\u003d \u0027desc\u0027:"},{"line_number":392,"context_line":"                crit_attrs.append((model_attr \u003c marker_values[i]))"},{"line_number":393,"context_line":"            else:"},{"line_number":394,"context_line":"                crit_attrs.append((model_attr \u003e marker_values[i]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_cc54b622","line":391,"updated":"2015-08-19 13:54:32.000000000","message":"You need to replace this with the following:\ndefault \u003d None if isinstance(model_attr.property.columns[0].type,\n                                         sqlalchemy.DateTime) else \u0027\u0027\n            attr \u003d case([(model_attr !\u003d None,\n                          model_attr), ],\n                         else_\u003ddefault)\n\n            if sort_dirs[i] \u003d\u003d \u0027desc\u0027:\n                crit_attrs.append((attr \u003c marker_values[i]))\n            else:\n                crit_attrs.append((attr \u003e marker_values[i]))\nIt allows to handle the case when value is NULL and make the sorting stable.","commit_id":"b3b32cc1eab6ff33bf4e3607a3913132db3bf1f6"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"ebea0f010656ccfeb9041abcaccafce6630ce2ad","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            criteria \u003d and_(*crit_attrs)"},{"line_number":397,"context_line":"            criteria_list.append(criteria)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        f \u003d and_(or_(*criteria_list), models.Artifact.id !\u003d marker.id)"},{"line_number":400,"context_line":"        query \u003d query.filter(f)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    if limit is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_0c22aeb9","line":399,"updated":"2015-08-19 13:54:32.000000000","message":"When you apply the comments above you don\u0027t need this condition.","commit_id":"b3b32cc1eab6ff33bf4e3607a3913132db3bf1f6"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"6e9718092f3d285d42608d89ed47c842356f6715","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            criteria \u003d and_(*crit_attrs)"},{"line_number":415,"context_line":"            criteria_list.append(criteria)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        f \u003d and_(or_(*criteria_list), models.Artifact.id !\u003d marker.id)"},{"line_number":418,"context_line":"        query \u003d query.filter(f)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    if limit is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_ddfa22bd","line":417,"updated":"2015-08-19 14:35:33.000000000","message":"Ooops, I forgot to delete that. Please, delete that in next patch.","commit_id":"6ae7768901c1d5e9f3e5ce6f8586c5c10237df43"}]}
