)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3affa89ed3a3a0be098a8884a14c1621104ba0d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Extend images api v2 with new sorting syntax"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This code enables new syntax for sorting output with multiple"},{"line_number":10,"context_line":"keys and directions."},{"line_number":11,"context_line":"Example:"},{"line_number":12,"context_line":"/v2/images/detail?sort\u003dname:desc,size:asc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_e9b8847a","line":9,"updated":"2015-01-20 17:41:39.000000000","message":"Maybe add a link to the new proposed syntax? (Here it is https://review.openstack.org/#/c/145579/5 in case you don\u0027t want to go looking for it :))","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"0be9283f6b4a9ec600d27e4ef4491040e5f94575","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"python-glanceclient support will be added in separate commit."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"DocImpact"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ie4ccfefa0492a3ac94cc7e22201f2f2be5c1cdbb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a930d6b_d8be17ff","line":16,"updated":"2015-01-22 18:04:11.000000000","message":"Please also add the APIImpact flag.","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"0d400ca359006004befbbec7079cee231cffc162","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Extend images api v2 with new sorting syntax"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This code enables new syntax for sorting output with multiple"},{"line_number":10,"context_line":"keys and directions (https://review.openstack.org/#/c/145579/)."},{"line_number":11,"context_line":"Example:"},{"line_number":12,"context_line":"/v2/images/detail?sort\u003dname:desc,size:asc"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a930d6b_6df3839e","line":10,"updated":"2015-01-23 14:47:53.000000000","message":"Might be worthwhile to explicitly tell that the review link here is the api-wg spec for sorting","commit_id":"ca5789417199fc7dd952cb4eaa327ce85c534bff"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"4edca5bc7f0b41fdb3aeeffc8c54b6b23e0bdbf0","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"python-glanceclient support will be added in separate commit."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Implements-blueprint: glance-sorting-enhancements"},{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":"APIImpact"},{"line_number":21,"context_line":"Change-Id: Ie4ccfefa0492a3ac94cc7e22201f2f2be5c1cdbb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a80dd14_2977e903","line":18,"updated":"2015-03-11 18:21:27.000000000","message":"The hyphen here isn\u0027t needed, and seems to confuse the auto-linker to the blueprint.","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"f77245aacdee8ba3e7ab62307949fa73b104af6d","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"python-glanceclient support will be added in separate commit."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Implements-blueprint: glance-sorting-enhancements"},{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":"APIImpact"},{"line_number":21,"context_line":"Change-Id: Ie4ccfefa0492a3ac94cc7e22201f2f2be5c1cdbb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a80dd14_115e9e76","line":18,"in_reply_to":"9a80dd14_2977e903","updated":"2015-03-12 15:05:42.000000000","message":"Did how it said in official guide. Still bad. https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"}],"glance/api/v2/images.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3affa89ed3a3a0be098a8884a14c1621104ba0d","unresolved":false,"context_lines":[{"line_number":601,"context_line":"        if \u0027sort\u0027 in params:"},{"line_number":602,"context_line":"            if \u0027sort_key\u0027 in params or \u0027sort_dir\u0027 in params:"},{"line_number":603,"context_line":"                msg \u003d _(\u0027Old and new sorting syntax cannot be combined\u0027)"},{"line_number":604,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":605,"context_line":"            for sort_param in params.pop(\u0027sort\u0027).strip().split(\u0027,\u0027):"},{"line_number":606,"context_line":"                try:"},{"line_number":607,"context_line":"                    key, dir \u003d sort_param.split(\u0027:\u0027, 1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_a9683c89","line":604,"updated":"2015-01-20 17:41:39.000000000","message":"+1","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3affa89ed3a3a0be098a8884a14c1621104ba0d","unresolved":false,"context_lines":[{"line_number":602,"context_line":"            if \u0027sort_key\u0027 in params or \u0027sort_dir\u0027 in params:"},{"line_number":603,"context_line":"                msg \u003d _(\u0027Old and new sorting syntax cannot be combined\u0027)"},{"line_number":604,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":605,"context_line":"            for sort_param in params.pop(\u0027sort\u0027).strip().split(\u0027,\u0027):"},{"line_number":606,"context_line":"                try:"},{"line_number":607,"context_line":"                    key, dir \u003d sort_param.split(\u0027:\u0027, 1)"},{"line_number":608,"context_line":"                    sort_keys.append(self._validate_sort_key(key.strip()))"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_297fec18","line":605,"updated":"2015-01-20 17:41:39.000000000","message":"Could this perhaps be a separate method that returns the sort_keys and sort_dirs lists?\n\nThis also handles the case of\n\n    sort\u003dkey1:dir1,key2,key3:dir3\n\nvery nicely.\n\nOverall, this is a really good implementation. Good job.","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"6572e71104ce3bf0d8c57efe80996afe9c93f72f","unresolved":false,"context_lines":[{"line_number":602,"context_line":"            if \u0027sort_key\u0027 in params or \u0027sort_dir\u0027 in params:"},{"line_number":603,"context_line":"                msg \u003d _(\u0027Old and new sorting syntax cannot be combined\u0027)"},{"line_number":604,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":605,"context_line":"            for sort_param in params.pop(\u0027sort\u0027).strip().split(\u0027,\u0027):"},{"line_number":606,"context_line":"                try:"},{"line_number":607,"context_line":"                    key, dir \u003d sort_param.split(\u0027:\u0027, 1)"},{"line_number":608,"context_line":"                    sort_keys.append(self._validate_sort_key(key.strip()))"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_6cd90284","line":605,"in_reply_to":"3a961159_297fec18","updated":"2015-01-20 17:48:16.000000000","message":"+1 this is turning into a pretty large function","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"e15d75bedd589d332e44db6e53410f68988f1d50","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        return filters"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def _get_sorting_params(self, params):"},{"line_number":583,"context_line":"        sort_keys \u003d []"},{"line_number":584,"context_line":"        sort_dirs \u003d []"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if \u0027sort\u0027 in params:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_3bf39a9f","line":583,"updated":"2015-01-22 16:54:32.000000000","message":"Could you add a doc string that explains about the new and old sorting syntax as well as some examples?  I think that you also want to include a statement about \u0027sort_key\u0027 and \u0027sort_dir\u0027 being deprecated in kilo.","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"474660190bf26e332d5d6d8b066f485f9a15fca8","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        return filters"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def _get_sorting_params(self, params):"},{"line_number":583,"context_line":"        sort_keys \u003d []"},{"line_number":584,"context_line":"        sort_dirs \u003d []"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if \u0027sort\u0027 in params:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_15ea0b75","line":583,"in_reply_to":"1a930d6b_3bf39a9f","updated":"2015-01-23 14:31:23.000000000","message":"Done","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"e15d75bedd589d332e44db6e53410f68988f1d50","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":590,"context_line":"            for sort_param in params.pop(\u0027sort\u0027).strip().split(\u0027,\u0027):"},{"line_number":591,"context_line":"                try:"},{"line_number":592,"context_line":"                    key, dir \u003d sort_param.split(\u0027:\u0027, 1)"},{"line_number":593,"context_line":"                    sort_keys.append(self._validate_sort_key(key.strip()))"},{"line_number":594,"context_line":"                    sort_dirs.append(self._validate_sort_dir(dir.strip()))"},{"line_number":595,"context_line":"                except ValueError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_9b1c8e79","line":592,"updated":"2015-01-22 16:54:32.000000000","message":"Did you consider using the partition function instead of the split function?\n\nThis would simplify the logic to something like the following and eliminate the need for an except block:\n\n    key, _sep, dir \u003d sort_param.partition(\u0027:\u0027)\n    if not dir:\n        dir \u003d self._default_sort_dir\n    sort_keys.append(self._validate_sort_key(key.strip()))\n    sort_dirs.append(self._validate_sort_dir(dir.strip()))","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"474660190bf26e332d5d6d8b066f485f9a15fca8","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":590,"context_line":"            for sort_param in params.pop(\u0027sort\u0027).strip().split(\u0027,\u0027):"},{"line_number":591,"context_line":"                try:"},{"line_number":592,"context_line":"                    key, dir \u003d sort_param.split(\u0027:\u0027, 1)"},{"line_number":593,"context_line":"                    sort_keys.append(self._validate_sort_key(key.strip()))"},{"line_number":594,"context_line":"                    sort_dirs.append(self._validate_sort_dir(dir.strip()))"},{"line_number":595,"context_line":"                except ValueError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_75ac2f36","line":592,"in_reply_to":"1a930d6b_9b1c8e79","updated":"2015-01-23 14:31:23.000000000","message":"Done","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"e15d75bedd589d332e44db6e53410f68988f1d50","unresolved":false,"context_lines":[{"line_number":645,"context_line":"            query_params[\u0027sort_key\u0027] \u003d [\u0027created_at\u0027]"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"        # NOTE(mfedosin): we have 3 options here:"},{"line_number":648,"context_line":"        # 1. sort_dir wasn\u0027t passed: we use default one - \u0027desc\u0027."},{"line_number":649,"context_line":"        # 2. Only one sort_dir was passed: use it for every sort_key"},{"line_number":650,"context_line":"        # in the list."},{"line_number":651,"context_line":"        # 3. Multiple sort_dirs were passed: consistently apply each one to"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_f6c4c993","line":648,"updated":"2015-01-22 16:54:32.000000000","message":"Isn\u0027t the _default_sort_dir \u0027asc\u0027?","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"474660190bf26e332d5d6d8b066f485f9a15fca8","unresolved":false,"context_lines":[{"line_number":645,"context_line":"            query_params[\u0027sort_key\u0027] \u003d [\u0027created_at\u0027]"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"        # NOTE(mfedosin): we have 3 options here:"},{"line_number":648,"context_line":"        # 1. sort_dir wasn\u0027t passed: we use default one - \u0027desc\u0027."},{"line_number":649,"context_line":"        # 2. Only one sort_dir was passed: use it for every sort_key"},{"line_number":650,"context_line":"        # in the list."},{"line_number":651,"context_line":"        # 3. Multiple sort_dirs were passed: consistently apply each one to"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_3540e755","line":648,"in_reply_to":"1a930d6b_f6c4c993","updated":"2015-01-23 14:31:23.000000000","message":"No, it\u0027s not. Historically the default direction in glance is \u0027desc\u0027","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"e15d75bedd589d332e44db6e53410f68988f1d50","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                            \u0027of sort keys\u0027)"},{"line_number":663,"context_line":"                    raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":664,"context_line":"                query_params[\u0027sort_dir\u0027] \u003d sort_dirs"},{"line_number":665,"context_line":"        else:"},{"line_number":666,"context_line":"            query_params[\u0027sort_dir\u0027] \u003d \u0027desc\u0027"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        return query_params"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_b642410e","line":665,"updated":"2015-01-22 16:54:32.000000000","message":"Shouldn\u0027t this be \u0027self._default_sort_dir\u0027 instead of \u0027desc\u0027?","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"eb37235cd3f82944dcf4dcfdfb962148966f802e","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                            \u0027of sort keys\u0027)"},{"line_number":663,"context_line":"                    raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":664,"context_line":"                query_params[\u0027sort_dir\u0027] \u003d sort_dirs"},{"line_number":665,"context_line":"        else:"},{"line_number":666,"context_line":"            query_params[\u0027sort_dir\u0027] \u003d \u0027desc\u0027"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        return query_params"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_5fabcdd5","line":665,"in_reply_to":"1a930d6b_29409855","updated":"2015-01-23 13:52:28.000000000","message":"++","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"474660190bf26e332d5d6d8b066f485f9a15fca8","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                            \u0027of sort keys\u0027)"},{"line_number":663,"context_line":"                    raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":664,"context_line":"                query_params[\u0027sort_dir\u0027] \u003d sort_dirs"},{"line_number":665,"context_line":"        else:"},{"line_number":666,"context_line":"            query_params[\u0027sort_dir\u0027] \u003d \u0027desc\u0027"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        return query_params"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_392621cf","line":665,"in_reply_to":"1a930d6b_29409855","updated":"2015-01-23 14:31:23.000000000","message":"I thought about it and decided to agree with Zhi Yan and Erno - let\u0027s make glance default sort dir is desc as it was before. This can save us from headaches in the future.","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"7ca74d2167dfc3fad4661040ff4661196d7b7ff3","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                            \u0027of sort keys\u0027)"},{"line_number":663,"context_line":"                    raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":664,"context_line":"                query_params[\u0027sort_dir\u0027] \u003d sort_dirs"},{"line_number":665,"context_line":"        else:"},{"line_number":666,"context_line":"            query_params[\u0027sort_dir\u0027] \u003d \u0027desc\u0027"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        return query_params"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_29409855","line":665,"in_reply_to":"1a930d6b_b642410e","updated":"2015-01-23 10:58:57.000000000","message":"I\u0027m a little worried on backward-compatibility issue on default order: desc \u003d\u003e asc. So I trend to believe we\u0027d better keep \u0027desc\u0027 order for old sorting syntax.","commit_id":"323dcbd7c9224820c93cd635f2fb38d57d0ffc0c"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"1f14efa3b7efcf6248db0fcf00c581e964e2c3db","unresolved":false,"context_lines":[{"line_number":582,"context_line":"    def _get_sorting_params(self, params):"},{"line_number":583,"context_line":"        \"\"\""},{"line_number":584,"context_line":"        Process sorting params."},{"line_number":585,"context_line":"        Currently glance supports two sorting syntax: classic and new, that is"},{"line_number":586,"context_line":"        uniform for all Openstack projects."},{"line_number":587,"context_line":"        https://review.openstack.org/#/c/145579/"},{"line_number":588,"context_line":"        Classic syntax: sort_key\u003dname\u0026sort_dir\u003dasc\u0026sort_key\u003dsize\u0026sort_dir\u003ddesc"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_4847951d","line":585,"updated":"2015-01-23 15:02:52.000000000","message":"Do we need some doc noting that the classic syntax is being deprecated in kilo?","commit_id":"ca5789417199fc7dd952cb4eaa327ce85c534bff"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"0d400ca359006004befbbec7079cee231cffc162","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        Process sorting params."},{"line_number":585,"context_line":"        Currently glance supports two sorting syntax: classic and new, that is"},{"line_number":586,"context_line":"        uniform for all Openstack projects."},{"line_number":587,"context_line":"        https://review.openstack.org/#/c/145579/"},{"line_number":588,"context_line":"        Classic syntax: sort_key\u003dname\u0026sort_dir\u003dasc\u0026sort_key\u003dsize\u0026sort_dir\u003ddesc"},{"line_number":589,"context_line":"        New syntax: sort\u003dname:asc,size:desc"},{"line_number":590,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_2d27bb13","line":587,"updated":"2015-01-23 14:47:53.000000000","message":"Might be worthwhile to add here too, that this is a api wg spec. E.g.\n\n  API WG spec: https://review.openstack....","commit_id":"ca5789417199fc7dd952cb4eaa327ce85c534bff"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"1f14efa3b7efcf6248db0fcf00c581e964e2c3db","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        Process sorting params."},{"line_number":585,"context_line":"        Currently glance supports two sorting syntax: classic and new, that is"},{"line_number":586,"context_line":"        uniform for all Openstack projects."},{"line_number":587,"context_line":"        https://review.openstack.org/#/c/145579/"},{"line_number":588,"context_line":"        Classic syntax: sort_key\u003dname\u0026sort_dir\u003dasc\u0026sort_key\u003dsize\u0026sort_dir\u003ddesc"},{"line_number":589,"context_line":"        New syntax: sort\u003dname:asc,size:desc"},{"line_number":590,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_a84e396d","line":587,"in_reply_to":"1a930d6b_2d27bb13","updated":"2015-01-23 15:02:52.000000000","message":"Also, something about including a review link in the source seems odd to me.  Maybe after the guideline is merged you can instead link directly to the document on github mirror [1]?\n\n[1] https://github.com/openstack/api-wg/tree/master/guidelines","commit_id":"ca5789417199fc7dd952cb4eaa327ce85c534bff"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"4edca5bc7f0b41fdb3aeeffc8c54b6b23e0bdbf0","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        # 3. Multiple sort_dirs were passed: consistently apply each one to"},{"line_number":623,"context_line":"        # the corresponding sort_key."},{"line_number":624,"context_line":"        # If number of sort_dirs and sort_keys doesn\u0027t match then raise an"},{"line_number":625,"context_line":"        # exception."},{"line_number":626,"context_line":"        if sort_dirs:"},{"line_number":627,"context_line":"            dir_len \u003d len(sort_dirs)"},{"line_number":628,"context_line":"            if dir_len \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_e90b1129","line":625,"updated":"2015-03-11 18:21:27.000000000","message":"This is true for old-style sorting parameters, but not for new-style params. In new params, there\u0027s only one option: The default direction is used for every sort key that doesn\u0027t have an explicit direction specified. The comment should be clarified to reflect that.","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"f77245aacdee8ba3e7ab62307949fa73b104af6d","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        # 3. Multiple sort_dirs were passed: consistently apply each one to"},{"line_number":623,"context_line":"        # the corresponding sort_key."},{"line_number":624,"context_line":"        # If number of sort_dirs and sort_keys doesn\u0027t match then raise an"},{"line_number":625,"context_line":"        # exception."},{"line_number":626,"context_line":"        if sort_dirs:"},{"line_number":627,"context_line":"            dir_len \u003d len(sort_dirs)"},{"line_number":628,"context_line":"            if dir_len \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_066e6601","line":625,"in_reply_to":"9a80dd14_e90b1129","updated":"2015-03-12 15:05:42.000000000","message":"Done","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"4edca5bc7f0b41fdb3aeeffc8c54b6b23e0bdbf0","unresolved":false,"context_lines":[{"line_number":632,"context_line":"                        \u0027of sort keys\u0027)"},{"line_number":633,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":634,"context_line":"        else:"},{"line_number":635,"context_line":"            sort_dirs \u003d self._default_sort_dir"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"        return sort_keys, sort_dirs"},{"line_number":638,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_8450bc0b","line":635,"updated":"2015-03-11 18:21:27.000000000","message":"In fact, this whole block can likely be moved inside the ``else:`` above, since it\u0027s only necessary for old-style sort params. In the new-style, every sort key is guaranteed to have a direction assigned either explicitly or by default (lines 601 and 602 above).","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"f77245aacdee8ba3e7ab62307949fa73b104af6d","unresolved":false,"context_lines":[{"line_number":632,"context_line":"                        \u0027of sort keys\u0027)"},{"line_number":633,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":634,"context_line":"        else:"},{"line_number":635,"context_line":"            sort_dirs \u003d self._default_sort_dir"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"        return sort_keys, sort_dirs"},{"line_number":638,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_2671aae0","line":635,"in_reply_to":"9a80dd14_8450bc0b","updated":"2015-03-12 15:05:42.000000000","message":"Done","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"}],"glance/tests/unit/v2/test_images_resource.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3affa89ed3a3a0be098a8884a14c1621104ba0d","unresolved":false,"context_lines":[{"line_number":2645,"context_line":""},{"line_number":2646,"context_line":"    def test_index_new_sorting_syntax_multiple_keys_optional_dir(self):"},{"line_number":2647,"context_line":"        req_string \u003d \u0027/images?sort\u003dname:desc,size\u0027"},{"line_number":2648,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"},{"line_number":2649,"context_line":"        output \u003d self.deserializer.index(request)"},{"line_number":2650,"context_line":"        expected \u003d {"},{"line_number":2651,"context_line":"            \u0027sort_key\u0027: [\u0027name\u0027, \u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_29328c5e","line":2648,"updated":"2015-01-20 17:41:39.000000000","message":"Can you add some more cases to this test, specifically cases for\n\n    sort\u003dname,size:asc\n    sort\u003dname,id:asc,size\n\nThis should help prevent any regressions caused by refactoring that I can think of.","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"6572e71104ce3bf0d8c57efe80996afe9c93f72f","unresolved":false,"context_lines":[{"line_number":2645,"context_line":""},{"line_number":2646,"context_line":"    def test_index_new_sorting_syntax_multiple_keys_optional_dir(self):"},{"line_number":2647,"context_line":"        req_string \u003d \u0027/images?sort\u003dname:desc,size\u0027"},{"line_number":2648,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"},{"line_number":2649,"context_line":"        output \u003d self.deserializer.index(request)"},{"line_number":2650,"context_line":"        expected \u003d {"},{"line_number":2651,"context_line":"            \u0027sort_key\u0027: [\u0027name\u0027, \u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_ecfb3213","line":2648,"in_reply_to":"3a961159_29328c5e","updated":"2015-01-20 17:48:16.000000000","message":"+1","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3affa89ed3a3a0be098a8884a14c1621104ba0d","unresolved":false,"context_lines":[{"line_number":2682,"context_line":"                          self.deserializer.index, request)"},{"line_number":2683,"context_line":""},{"line_number":2684,"context_line":"    def test_index_new_sorting_syntax_bad_request(self):"},{"line_number":2685,"context_line":"        req_string \u003d \u0027/images?sort\u003dblah\u0027"},{"line_number":2686,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"},{"line_number":2687,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2688,"context_line":"                          self.deserializer.index, request)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_6922d403","line":2685,"updated":"2015-01-20 17:41:39.000000000","message":"Might be helpful to have a comment here explaining that \u0027blah\u0027 is not a valid sort key","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"c542505efc0f41d52a106c70866e32b406a40a4a","unresolved":false,"context_lines":[{"line_number":2682,"context_line":"                          self.deserializer.index, request)"},{"line_number":2683,"context_line":""},{"line_number":2684,"context_line":"    def test_index_new_sorting_syntax_bad_request(self):"},{"line_number":2685,"context_line":"        req_string \u003d \u0027/images?sort\u003dblah\u0027"},{"line_number":2686,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"},{"line_number":2687,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2688,"context_line":"                          self.deserializer.index, request)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_ff2cb203","line":2685,"in_reply_to":"3a961159_2c545afd","updated":"2015-01-20 18:21:03.000000000","message":"The name is obvious, I think the reason why is not, that\u0027s why I think comments would be helpful. I can imagine someone trying to do something with sorting in the future without knowing the valid sort keys off the top of their head and being confused as to why valid syntax raises a BadRequest exception.","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"6572e71104ce3bf0d8c57efe80996afe9c93f72f","unresolved":false,"context_lines":[{"line_number":2682,"context_line":"                          self.deserializer.index, request)"},{"line_number":2683,"context_line":""},{"line_number":2684,"context_line":"    def test_index_new_sorting_syntax_bad_request(self):"},{"line_number":2685,"context_line":"        req_string \u003d \u0027/images?sort\u003dblah\u0027"},{"line_number":2686,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"},{"line_number":2687,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2688,"context_line":"                          self.deserializer.index, request)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2c545afd","line":2685,"in_reply_to":"3a961159_6922d403","updated":"2015-01-20 17:48:16.000000000","message":"Isn\u0027t test_index_new_sorting_syntax_bad_request an indication all the requests in this test are invalid? A comment wouldn\u0027t hurt, anyway.\n\nMaybe change test_index_new_sorting_syntax_bad_request to test_index_new_sorting_syntax_invalid_request","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3affa89ed3a3a0be098a8884a14c1621104ba0d","unresolved":false,"context_lines":[{"line_number":2692,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2693,"context_line":"                          self.deserializer.index, request)"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"        req_string \u003d \u0027/images?sort\u003dname:foo\u0027"},{"line_number":2696,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"},{"line_number":2697,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2698,"context_line":"                          self.deserializer.index, request)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_097b10f5","line":2695,"updated":"2015-01-20 17:41:39.000000000","message":"Also a comment here for \u0027foo\u0027 not being a valid sort direction","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3affa89ed3a3a0be098a8884a14c1621104ba0d","unresolved":false,"context_lines":[{"line_number":2697,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2698,"context_line":"                          self.deserializer.index, request)"},{"line_number":2699,"context_line":""},{"line_number":2700,"context_line":"        req_string \u003d \u0027/images?sort\u003dname:asc:desc\u0027"},{"line_number":2701,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"},{"line_number":2702,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2703,"context_line":"                          self.deserializer.index, request)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_09c95025","line":2700,"updated":"2015-01-20 17:41:39.000000000","message":"And a comment here explaining that \u0027asc:desc\u0027 isn\u0027t a valid sort direction, simply because it might be hard to catch for some people.","commit_id":"a30921c69f346ace5fee49547cc626971e5e08d1"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"32eff91c46a5b2310ab54c6524164f2a53567fb5","unresolved":false,"context_lines":[{"line_number":2622,"context_line":"            \u0027filters\u0027: {}}"},{"line_number":2623,"context_line":"        self.assertEqual(expected, output)"},{"line_number":2624,"context_line":""},{"line_number":2625,"context_line":"    def test_index_new_sorting_syntax_multiple_keys_desc_dir(self):"},{"line_number":2626,"context_line":"        req_string \u003d \u0027/images?sort\u003dname:asc,size:asc\u0027"},{"line_number":2627,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"},{"line_number":2628,"context_line":"        output \u003d self.deserializer.index(request)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_e0117f5e","line":2625,"updated":"2015-03-11 10:44:55.000000000","message":"test_index_new_sorting_syntax_multiple_keys_desc_dir \u003e\u003e\u003e test_index_new_sorting_syntax_multiple_keys_asc_dir","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"f77245aacdee8ba3e7ab62307949fa73b104af6d","unresolved":false,"context_lines":[{"line_number":2622,"context_line":"            \u0027filters\u0027: {}}"},{"line_number":2623,"context_line":"        self.assertEqual(expected, output)"},{"line_number":2624,"context_line":""},{"line_number":2625,"context_line":"    def test_index_new_sorting_syntax_multiple_keys_desc_dir(self):"},{"line_number":2626,"context_line":"        req_string \u003d \u0027/images?sort\u003dname:asc,size:asc\u0027"},{"line_number":2627,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"},{"line_number":2628,"context_line":"        output \u003d self.deserializer.index(request)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_66aba21e","line":2625,"in_reply_to":"9a80dd14_e0117f5e","updated":"2015-03-12 15:05:42.000000000","message":"Done","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"32eff91c46a5b2310ab54c6524164f2a53567fb5","unresolved":false,"context_lines":[{"line_number":2684,"context_line":"            \u0027member_status\u0027: \u0027accepted\u0027,"},{"line_number":2685,"context_line":"            \u0027filters\u0027: {}}"},{"line_number":2686,"context_line":"        self.assertEqual(expected, output)"},{"line_number":2687,"context_line":""},{"line_number":2688,"context_line":"    def test_index_sort_wrong_sort_dirs_number(self):"},{"line_number":2689,"context_line":"        req_string \u003d \u0027/images?sort_key\u003dname\u0026sort_dir\u003dasc\u0026sort_dir\u003ddesc\u0027"},{"line_number":2690,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_164a5927","line":2687,"updated":"2015-03-11 10:44:55.000000000","message":"IMO, test case to check exception is raised number of sort_dirs and sort_keys will be beneficial.","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"f77245aacdee8ba3e7ab62307949fa73b104af6d","unresolved":false,"context_lines":[{"line_number":2684,"context_line":"            \u0027member_status\u0027: \u0027accepted\u0027,"},{"line_number":2685,"context_line":"            \u0027filters\u0027: {}}"},{"line_number":2686,"context_line":"        self.assertEqual(expected, output)"},{"line_number":2687,"context_line":""},{"line_number":2688,"context_line":"    def test_index_sort_wrong_sort_dirs_number(self):"},{"line_number":2689,"context_line":"        req_string \u003d \u0027/images?sort_key\u003dname\u0026sort_dir\u003dasc\u0026sort_dir\u003ddesc\u0027"},{"line_number":2690,"context_line":"        request \u003d unit_test_utils.get_fake_request(req_string)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_06b74687","line":2687,"in_reply_to":"9a80dd14_164a5927","updated":"2015-03-12 15:05:42.000000000","message":"Done","commit_id":"eb2a23c807a6cc964440ab001769a473a7ca2c50"}]}
