)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"714bc22c004f10cbaacb490c5db1d3b69b6bc884","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Extends cli for v1/v2 with comma separated sort keys"},{"line_number":11,"context_line":"Example:"},{"line_number":12,"context_line":"glance image-list --sort-key name,id"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: If79779a4c52c8dc5c4f39192d3d247335a76ba24"},{"line_number":15,"context_line":"Closes-Bug: 1221274"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa98f980_f497d737","line":13,"updated":"2014-09-15 09:42:53.000000000","message":"Add DocImpact here as you\u0027re changing the clients help.","commit_id":"1d0dc5d27d3b8e220ce071e410c68a7b57158c57"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"cc0d57c57f0f91ee588b06d324eb0b9cb5ff90cb","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Extends cli for v1/v2 with comma separated sort keys"},{"line_number":11,"context_line":"Example:"},{"line_number":12,"context_line":"glance image-list --sort-key name,id"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: If79779a4c52c8dc5c4f39192d3d247335a76ba24"},{"line_number":15,"context_line":"Closes-Bug: 1221274"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa98f980_fcdedd6b","line":13,"in_reply_to":"fa98f980_f497d737","updated":"2014-09-18 15:02:29.000000000","message":"Done","commit_id":"1d0dc5d27d3b8e220ce071e410c68a7b57158c57"}],"glanceclient/v1/images.py":[{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"5aa9bedf63613f88619e4ffbaa1455c8230f579c","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        sort_key \u003d kwargs.get(\u0027sort_key\u0027)"},{"line_number":222,"context_line":"        if sort_key is not None:"},{"line_number":223,"context_line":"            for key in sort_key.split(\u0027,\u0027):"},{"line_number":224,"context_line":"                if key not in SORT_KEY_VALUES:"},{"line_number":225,"context_line":"                    raise ValueError(\u0027sort_key must be one\u0027"},{"line_number":226,"context_line":"                                     \u0027 of the following: %s.\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_3907e519","line":223,"updated":"2014-09-11 14:38:06.000000000","message":"I don\u0027t like that we get the sort_key as a comma-separated string here: I\u0027d rather prefer it to be the list as in input (and be joined before doing the actual call). The list may be split in CLI shell which gets it as comma-separated string","commit_id":"972e093fce9b5c8868486fd20f91f7907e8516cf"}],"glanceclient/v1/shell.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"714bc22c004f10cbaacb490c5db1d3b69b6bc884","unresolved":false,"context_lines":[{"line_number":52,"context_line":"           help\u003d\u0027Number of images to request in each paginated request.\u0027)"},{"line_number":53,"context_line":"@utils.arg(\u0027--human-readable\u0027, action\u003d\u0027store_true\u0027, default\u003dFalse,"},{"line_number":54,"context_line":"           help\u003d\u0027Print image size in a human-friendly format.\u0027)"},{"line_number":55,"context_line":"@utils.arg(\u0027--sort-key\u0027, default\u003d\u0027name\u0027,"},{"line_number":56,"context_line":"           help\u003d\u0027Sort image list by specified fields.\u0027)"},{"line_number":57,"context_line":"@utils.arg(\u0027--sort-dir\u0027, default\u003d\u0027asc\u0027,"},{"line_number":58,"context_line":"           choices\u003dglanceclient.v1.images.SORT_DIR_VALUES,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_34a5dfa1","line":55,"updated":"2014-09-15 09:42:53.000000000","message":"In my opinion choices should still be here for validation and you should use:\n\n  action\u003d\u0027append\u0027\n\nto support multiple keys. This will produce an array as this option.\nSee line 419 of v2/shell.py as an example.","commit_id":"1d0dc5d27d3b8e220ce071e410c68a7b57158c57"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"cc0d57c57f0f91ee588b06d324eb0b9cb5ff90cb","unresolved":false,"context_lines":[{"line_number":52,"context_line":"           help\u003d\u0027Number of images to request in each paginated request.\u0027)"},{"line_number":53,"context_line":"@utils.arg(\u0027--human-readable\u0027, action\u003d\u0027store_true\u0027, default\u003dFalse,"},{"line_number":54,"context_line":"           help\u003d\u0027Print image size in a human-friendly format.\u0027)"},{"line_number":55,"context_line":"@utils.arg(\u0027--sort-key\u0027, default\u003d\u0027name\u0027,"},{"line_number":56,"context_line":"           help\u003d\u0027Sort image list by specified fields.\u0027)"},{"line_number":57,"context_line":"@utils.arg(\u0027--sort-dir\u0027, default\u003d\u0027asc\u0027,"},{"line_number":58,"context_line":"           choices\u003dglanceclient.v1.images.SORT_DIR_VALUES,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_dcf4b9f2","line":55,"in_reply_to":"fa98f980_34a5dfa1","updated":"2014-09-18 15:02:29.000000000","message":"Done","commit_id":"1d0dc5d27d3b8e220ce071e410c68a7b57158c57"}],"glanceclient/v2/images.py":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"9a48fe81763a32296e752026e04a500f1a750ebf","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        filters \u003d kwargs.get(\u0027filters\u0027, {})"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        sort_key \u003d kwargs.get(\u0027sort_key\u0027)"},{"line_number":75,"context_line":"        if sort_key is not None:"},{"line_number":76,"context_line":"            for key in sort_key:"},{"line_number":77,"context_line":"                if key not in SORT_KEY_VALUES:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aa7fdbe_7a15c447","line":74,"updated":"2014-10-24 16:02:23.000000000","message":"Could you please add here something like?\n\n  if not isinstance(sort_key, list):\n    sort_key \u003d [sort_key]\n\nOtherwise we would have problems in Horizon because openstack_dashboard.api.glance code that worked with keystoneclient v1 won\u0027t work with keystoneclient v2: an atomic string value (this is how Horizon passes sort_key now) is also a sequence and will be taken to pieces - thus resulting in ValueError despite a key from the existing set was passed.","commit_id":"74c74c946ef6cb5dc947e9966c86f3c6c70c4ee9"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"40692040f8fd27b1ff7359469f023f01bceaeaa6","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        filters \u003d kwargs.get(\u0027filters\u0027, {})"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        sort_key \u003d kwargs.get(\u0027sort_key\u0027)"},{"line_number":75,"context_line":"        if sort_key is not None:"},{"line_number":76,"context_line":"            for key in sort_key:"},{"line_number":77,"context_line":"                if key not in SORT_KEY_VALUES:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aa7fdbe_522360bc","line":74,"in_reply_to":"9aa7fdbe_7a15c447","updated":"2014-10-27 16:34:13.000000000","message":"Done","commit_id":"74c74c946ef6cb5dc947e9966c86f3c6c70c4ee9"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"d130666741a7438e7fff4934641f528a5f8cfaa7","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        sort_key \u003d kwargs.get(\u0027sort_key\u0027)"},{"line_number":75,"context_line":"        if sort_key is not None:"},{"line_number":76,"context_line":"            if not isinstance(sort_key, list):"},{"line_number":77,"context_line":"                sort_key \u003d [sort_key]"},{"line_number":78,"context_line":"            for key in sort_key:"},{"line_number":79,"context_line":"                if key not in SORT_KEY_VALUES:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_788da3d2","line":76,"updated":"2014-10-27 17:35:59.000000000","message":"I might be paranoic, but what if sort_key is a tuple (well, it didn\u0027t come into my head when I suggested you the original change idea)? The above code will wrap it within additional list which is definitely wrong.\n\nThe safer approach here would be:\n \n  if isinstance(sort_key, basestring):\n    sort_key \u003d [sort_key]\n\nWell, guess I\u0027m nitpicking here :)","commit_id":"937ab70c3e80cf1aec48d12304d7156db82c45b1"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"b150ccf4622c8d3b82b7536dfca4a7cf28c3aac5","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        sort_dir \u003d kwargs.get(\u0027sort_dir\u0027)"},{"line_number":86,"context_line":"        if sort_dir is not None:"},{"line_number":87,"context_line":"            if sort_dir not in SORT_DIR_VALUES:"},{"line_number":88,"context_line":"                raise ValueError(\u0027sort_dir must be one of the following: %s.\u0027"},{"line_number":89,"context_line":"                                 % \u0027, \u0027.join(SORT_DIR_VALUES))"},{"line_number":90,"context_line":"            filters[\u0027sort_dir\u0027] \u003d sort_dir"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_4b6def03","line":87,"updated":"2014-12-17 22:34:35.000000000","message":"It would be  nice if we can avoid the duplicate check at client side.","commit_id":"4fd7edc674ab154ff62df2d0c397b329fd0f1d8e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"b59a7508c1350ae267c932ed5fbcb13e5b35b656","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        sort_dir \u003d kwargs.get(\u0027sort_dir\u0027)"},{"line_number":86,"context_line":"        if sort_dir is not None:"},{"line_number":87,"context_line":"            if sort_dir not in SORT_DIR_VALUES:"},{"line_number":88,"context_line":"                raise ValueError(\u0027sort_dir must be one of the following: %s.\u0027"},{"line_number":89,"context_line":"                                 % \u0027, \u0027.join(SORT_DIR_VALUES))"},{"line_number":90,"context_line":"            filters[\u0027sort_dir\u0027] \u003d sort_dir"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_ef99276f","line":87,"in_reply_to":"3a961159_4b6def03","updated":"2014-12-18 16:26:07.000000000","message":"Done","commit_id":"4fd7edc674ab154ff62df2d0c397b329fd0f1d8e"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"4f5e799c50383fdf8a6a66a7a08f4e86ec62a643","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        sort_key \u003d kwargs.get(\u0027sort_key\u0027)"},{"line_number":109,"context_line":"        if sort_key is not None:"},{"line_number":110,"context_line":"            if isinstance(sort_key, six.string_types):"},{"line_number":111,"context_line":"                sort_key \u003d [sort_key]"},{"line_number":112,"context_line":"            for key in sort_key:"},{"line_number":113,"context_line":"                if key not in SORT_KEY_VALUES:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_071b89ca","line":110,"updated":"2014-12-11 20:06:31.000000000","message":"Is this required since we always get a list (even if there is one sort key)?","commit_id":"4fd7edc674ab154ff62df2d0c397b329fd0f1d8e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"267820ee970822b8aa371ab3e4a55a581fcfb19c","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        sort_key \u003d kwargs.get(\u0027sort_key\u0027)"},{"line_number":109,"context_line":"        if sort_key is not None:"},{"line_number":110,"context_line":"            if isinstance(sort_key, six.string_types):"},{"line_number":111,"context_line":"                sort_key \u003d [sort_key]"},{"line_number":112,"context_line":"            for key in sort_key:"},{"line_number":113,"context_line":"                if key not in SORT_KEY_VALUES:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_fe15629b","line":110,"in_reply_to":"3a961159_071b89ca","updated":"2014-12-18 12:51:50.000000000","message":"Unfortunately it not always... It\u0027s done for back compatibility with Horizon. For the reason Horizon uses this api, it sends sort_key as a string, not a list. See Timur\u0027s comment https://review.openstack.org/#/c/120777/6/glanceclient/v2/images.py","commit_id":"4fd7edc674ab154ff62df2d0c397b329fd0f1d8e"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"b150ccf4622c8d3b82b7536dfca4a7cf28c3aac5","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            if isinstance(sort_key, six.string_types):"},{"line_number":111,"context_line":"                sort_key \u003d [sort_key]"},{"line_number":112,"context_line":"            for key in sort_key:"},{"line_number":113,"context_line":"                if key not in SORT_KEY_VALUES:"},{"line_number":114,"context_line":"                    raise ValueError(\u0027sort_key must be one\u0027"},{"line_number":115,"context_line":"                                     \u0027 of the following: %s.\u0027"},{"line_number":116,"context_line":"                                     % \u0027, \u0027.join(SORT_KEY_VALUES))"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_eb521b34","line":113,"updated":"2014-12-17 22:34:35.000000000","message":"ditto","commit_id":"4fd7edc674ab154ff62df2d0c397b329fd0f1d8e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"b59a7508c1350ae267c932ed5fbcb13e5b35b656","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            if isinstance(sort_key, six.string_types):"},{"line_number":111,"context_line":"                sort_key \u003d [sort_key]"},{"line_number":112,"context_line":"            for key in sort_key:"},{"line_number":113,"context_line":"                if key not in SORT_KEY_VALUES:"},{"line_number":114,"context_line":"                    raise ValueError(\u0027sort_key must be one\u0027"},{"line_number":115,"context_line":"                                     \u0027 of the following: %s.\u0027"},{"line_number":116,"context_line":"                                     % \u0027, \u0027.join(SORT_KEY_VALUES))"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_cf92ab4a","line":113,"in_reply_to":"3a961159_eb521b34","updated":"2014-12-18 16:26:07.000000000","message":"Done","commit_id":"4fd7edc674ab154ff62df2d0c397b329fd0f1d8e"}],"glanceclient/v2/shell.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"714bc22c004f10cbaacb490c5db1d3b69b6bc884","unresolved":false,"context_lines":[{"line_number":98,"context_line":"           help\u003d\u0027Displays images that match the checksum.\u0027)"},{"line_number":99,"context_line":"@utils.arg(\u0027--tag\u0027, metavar\u003d\u0027\u003cTAG\u003e\u0027, action\u003d\u0027append\u0027,"},{"line_number":100,"context_line":"           help\u003d\"Filter images by a user-defined tag.\")"},{"line_number":101,"context_line":"@utils.arg(\u0027--sort-key\u0027, default\u003d\u0027name\u0027,"},{"line_number":102,"context_line":"           help\u003d\u0027Sort image list by specified fields.\u0027)"},{"line_number":103,"context_line":"@utils.arg(\u0027--sort-dir\u0027, default\u003d\u0027asc\u0027,"},{"line_number":104,"context_line":"           choices\u003dglanceclient.v2.images.SORT_DIR_VALUES,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_54a0a38f","line":101,"updated":"2014-09-15 09:42:53.000000000","message":"Same issue like in v1/shell.py.","commit_id":"1d0dc5d27d3b8e220ce071e410c68a7b57158c57"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"cc0d57c57f0f91ee588b06d324eb0b9cb5ff90cb","unresolved":false,"context_lines":[{"line_number":98,"context_line":"           help\u003d\u0027Displays images that match the checksum.\u0027)"},{"line_number":99,"context_line":"@utils.arg(\u0027--tag\u0027, metavar\u003d\u0027\u003cTAG\u003e\u0027, action\u003d\u0027append\u0027,"},{"line_number":100,"context_line":"           help\u003d\"Filter images by a user-defined tag.\")"},{"line_number":101,"context_line":"@utils.arg(\u0027--sort-key\u0027, default\u003d\u0027name\u0027,"},{"line_number":102,"context_line":"           help\u003d\u0027Sort image list by specified fields.\u0027)"},{"line_number":103,"context_line":"@utils.arg(\u0027--sort-dir\u0027, default\u003d\u0027asc\u0027,"},{"line_number":104,"context_line":"           choices\u003dglanceclient.v2.images.SORT_DIR_VALUES,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_9ceeb120","line":101,"in_reply_to":"fa98f980_54a0a38f","updated":"2014-09-18 15:02:29.000000000","message":"Done","commit_id":"1d0dc5d27d3b8e220ce071e410c68a7b57158c57"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"4063ee7a18d4693efce00e81c7a01825314d4aa3","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    kwargs \u003d {\u0027filters\u0027: filters}"},{"line_number":114,"context_line":"    if args.page_size is not None:"},{"line_number":115,"context_line":"        kwargs[\u0027page_size\u0027] \u003d args.page_size"},{"line_number":116,"context_line":"    if args.sort_key:"},{"line_number":117,"context_line":"        kwargs[\u0027sort_key\u0027] \u003d args.sort_key"},{"line_number":118,"context_line":"    else:"},{"line_number":119,"context_line":"        kwargs[\u0027sort_key\u0027] \u003d [\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_57d0f1c8","line":116,"updated":"2014-11-14 11:01:40.000000000","message":"Nit: you can make it a oneliner \n\nkwargs[\u0027sort_key\u0027] \u003d args.sort_key if args.sort_key else [\u0027name\u0027]","commit_id":"6b65ff7038bd10077c2c9d6fc3170b69e27873b8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"ddab6ad530f837dfda519f58bef2815b18d8096b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    kwargs \u003d {\u0027filters\u0027: filters}"},{"line_number":114,"context_line":"    if args.page_size is not None:"},{"line_number":115,"context_line":"        kwargs[\u0027page_size\u0027] \u003d args.page_size"},{"line_number":116,"context_line":"    if args.sort_key:"},{"line_number":117,"context_line":"        kwargs[\u0027sort_key\u0027] \u003d args.sort_key"},{"line_number":118,"context_line":"    else:"},{"line_number":119,"context_line":"        kwargs[\u0027sort_key\u0027] \u003d [\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_aa40c834","line":116,"in_reply_to":"5a890539_57d0f1c8","updated":"2014-11-14 11:16:17.000000000","message":"I prefer the oneliner, but the version on two lines is arguably clearer to read.","commit_id":"6b65ff7038bd10077c2c9d6fc3170b69e27873b8"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"29a38ef15f81c979102ab7f32093f4ea6a9667d9","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    kwargs \u003d {\u0027filters\u0027: filters}"},{"line_number":114,"context_line":"    if args.page_size is not None:"},{"line_number":115,"context_line":"        kwargs[\u0027page_size\u0027] \u003d args.page_size"},{"line_number":116,"context_line":"    if args.sort_key:"},{"line_number":117,"context_line":"        kwargs[\u0027sort_key\u0027] \u003d args.sort_key"},{"line_number":118,"context_line":"    else:"},{"line_number":119,"context_line":"        kwargs[\u0027sort_key\u0027] \u003d [\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_d7d58fe5","line":116,"in_reply_to":"5a890539_57d0f1c8","updated":"2014-11-17 11:52:52.000000000","message":"I\u0027m an old hardcore C programmer and I just don\u0027t use syntactic sugar at all :)\nNevermind, just kidding... \n\nAs for me I don\u0027t see any problem here, so let our core-team members decide.","commit_id":"6b65ff7038bd10077c2c9d6fc3170b69e27873b8"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"80a4b4ef1dbccd82e46ebf6ae06dd48c7cd8f0cf","unresolved":false,"context_lines":[{"line_number":126,"context_line":"           help\u003d\u0027Displays images that match the checksum.\u0027)"},{"line_number":127,"context_line":"@utils.arg(\u0027--tag\u0027, metavar\u003d\u0027\u003cTAG\u003e\u0027, action\u003d\u0027append\u0027,"},{"line_number":128,"context_line":"           help\u003d\"Filter images by a user-defined tag.\")"},{"line_number":129,"context_line":"@utils.arg(\u0027--sort-key\u0027, default\u003d[], action\u003d\u0027append\u0027,"},{"line_number":130,"context_line":"           choices\u003dglanceclient.v2.images.SORT_KEY_VALUES,"},{"line_number":131,"context_line":"           help\u003d\u0027Sort image list by specified fields.\u0027)"},{"line_number":132,"context_line":"@utils.arg(\u0027--sort-dir\u0027, default\u003d\u0027asc\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba7be1f8_e7c3e754","line":129,"updated":"2015-02-24 21:03:24.000000000","message":"The CLI sorting argument cross project spec has merged [1]. Can you consider changing this syntax to reflect it?\n\n[1] https://github.com/openstack/openstack-specs/blob/master/specs/cli-sorting-args.rst","commit_id":"f0b7dde35b6da61931cf00de49c85aa051b39ff1"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"64064755b82d9983aefd5d34b54142d7518c8498","unresolved":false,"context_lines":[{"line_number":126,"context_line":"           help\u003d\u0027Displays images that match the checksum.\u0027)"},{"line_number":127,"context_line":"@utils.arg(\u0027--tag\u0027, metavar\u003d\u0027\u003cTAG\u003e\u0027, action\u003d\u0027append\u0027,"},{"line_number":128,"context_line":"           help\u003d\"Filter images by a user-defined tag.\")"},{"line_number":129,"context_line":"@utils.arg(\u0027--sort-key\u0027, default\u003d[], action\u003d\u0027append\u0027,"},{"line_number":130,"context_line":"           choices\u003dglanceclient.v2.images.SORT_KEY_VALUES,"},{"line_number":131,"context_line":"           help\u003d\u0027Sort image list by specified fields.\u0027)"},{"line_number":132,"context_line":"@utils.arg(\u0027--sort-dir\u0027, default\u003d\u0027asc\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba7be1f8_374989b7","line":129,"in_reply_to":"ba7be1f8_770ce1ed","updated":"2015-02-25 15:58:13.000000000","message":"I guess I\u0027m a bit confused at why there is even a need to support --sort-key and --sort-dir.  Why not just support --sort?","commit_id":"f0b7dde35b6da61931cf00de49c85aa051b39ff1"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"29fbb8a45f376112e472f942cb2e2389ac254041","unresolved":false,"context_lines":[{"line_number":126,"context_line":"           help\u003d\u0027Displays images that match the checksum.\u0027)"},{"line_number":127,"context_line":"@utils.arg(\u0027--tag\u0027, metavar\u003d\u0027\u003cTAG\u003e\u0027, action\u003d\u0027append\u0027,"},{"line_number":128,"context_line":"           help\u003d\"Filter images by a user-defined tag.\")"},{"line_number":129,"context_line":"@utils.arg(\u0027--sort-key\u0027, default\u003d[], action\u003d\u0027append\u0027,"},{"line_number":130,"context_line":"           choices\u003dglanceclient.v2.images.SORT_KEY_VALUES,"},{"line_number":131,"context_line":"           help\u003d\u0027Sort image list by specified fields.\u0027)"},{"line_number":132,"context_line":"@utils.arg(\u0027--sort-dir\u0027, default\u003d\u0027asc\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba7be1f8_770ce1ed","line":129,"in_reply_to":"ba7be1f8_e7c3e754","updated":"2015-02-25 14:50:23.000000000","message":"Steven that\u0027s what https://review.openstack.org/#/c/148981/ is for","commit_id":"f0b7dde35b6da61931cf00de49c85aa051b39ff1"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"580c5ad06b379ca58534f6eac1eaf323ac03805a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"from os.path import expanduser"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import glanceclient.v2.images"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"IMAGE_SCHEMA \u003d None"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a80dd14_68325ba8","line":24,"updated":"2015-03-13 12:41:59.000000000","message":"nit: Shouldn\u0027t it be imported as\n\nfrom glanceclient.v2 import images\n\nto match the pattern used for tasks in line 19 and put it before this line?","commit_id":"52ebae2d7281d9b2241efec519bc55883d8ba3db"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"3da89996846a3f2784fb694ddad08ff5175df0d2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"from os.path import expanduser"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import glanceclient.v2.images"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"IMAGE_SCHEMA \u003d None"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a80dd14_0555404f","line":24,"in_reply_to":"9a80dd14_68325ba8","updated":"2015-03-13 15:48:45.000000000","message":"Yep, I agree. It will be looked better.","commit_id":"52ebae2d7281d9b2241efec519bc55883d8ba3db"}],"tests/v2/test_images.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"691ba3500641aec43561a3bc589a343ca5ef80c9","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        filters \u003d {\u0027filters\u0027: {\u0027tag\u0027: [\u0027fake\u0027]}}"},{"line_number":538,"context_line":"        images \u003d list(self.controller.list(**filters))"},{"line_number":539,"context_line":"        self.assertEqual(0, len(images))"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def test_list_with_multiple_sort_keys(self):"},{"line_number":542,"context_line":"        list(self.controller.list(sort_key\u003d[\u0027name\u0027, \u0027id\u0027]))"},{"line_number":543,"context_line":"        url \u003d \u0027/v2/images?limit\u003d20\u0026sort_key\u003dname%2Cid\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_b39d0e69","line":540,"updated":"2014-11-28 11:44:58.000000000","message":"You should also add tests covering case with single sort_key (as you\u0027re treating it differently) and negative tests with wrong key name (to test if ValueError is raised correctly). Also you have no test for sort_dir.","commit_id":"0a96b8076a4cab4267bad5c50452b44f40fafc26"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"4757e014ce0395d9333f8f82f1128106cb649e11","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        filters \u003d {\u0027filters\u0027: {\u0027tag\u0027: [\u0027fake\u0027]}}"},{"line_number":538,"context_line":"        images \u003d list(self.controller.list(**filters))"},{"line_number":539,"context_line":"        self.assertEqual(0, len(images))"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def test_list_with_multiple_sort_keys(self):"},{"line_number":542,"context_line":"        list(self.controller.list(sort_key\u003d[\u0027name\u0027, \u0027id\u0027]))"},{"line_number":543,"context_line":"        url \u003d \u0027/v2/images?limit\u003d20\u0026sort_key\u003dname%2Cid\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_febd96d8","line":540,"in_reply_to":"5a890539_b39d0e69","updated":"2014-11-28 15:54:02.000000000","message":"Done","commit_id":"0a96b8076a4cab4267bad5c50452b44f40fafc26"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"80f56ecebbeb46adc1a6b73a537d21074548b35c","unresolved":false,"context_lines":[{"line_number":589,"context_line":"    def test_list_images_with_asc_sort_dir(self):"},{"line_number":590,"context_line":"        img_id1 \u003d \u00272a4560b2-e585-443e-9b39-553b46ec92d1\u0027"},{"line_number":591,"context_line":"        sort_key \u003d \u0027name\u0027"},{"line_number":592,"context_line":"        sort_dir \u003d \u0027asc\u0027"},{"line_number":593,"context_line":"        images \u003d list(self.controller.list(sort_key\u003dsort_key,"},{"line_number":594,"context_line":"                                           sort_dir\u003dsort_dir))"},{"line_number":595,"context_line":"        self.assertEqual(2, len(images))"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_dfd6f852","line":592,"updated":"2014-12-01 14:58:51.000000000","message":"asc is the default one. Haven\u0027t you meant desc? Right now this test will pass even if URL called is /v2/images?limit\u003d%d\u0026sort_key\u003dname (without sort_dir). So basically you can remove #96 in images.py and tests will still pass.","commit_id":"e8e957b79d7d569f51cb6c29403dccf755813dce"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9ad4de0a4b8691234ac37cab4aebf6dea7a1dfa4","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        self.assertRaises(ValueError, list,"},{"line_number":587,"context_line":"                          self.controller.list(sort_key\u003dsort_key))"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def test_list_images_with_asc_sort_dir(self):"},{"line_number":590,"context_line":"        img_id1 \u003d \u00272a4560b2-e585-443e-9b39-553b46ec92d1\u0027"},{"line_number":591,"context_line":"        sort_key \u003d \u0027id\u0027"},{"line_number":592,"context_line":"        sort_dir \u003d \u0027desc\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_95ea9172","line":589,"updated":"2014-12-01 15:48:45.000000000","message":"I think you should change the name of the test also (asc to desc).","commit_id":"842ae902c578ad0e9751cd649e3667a245e2d028"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"1784825eacb46dd518c17a50a31502d5f462685f","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        self.assertRaises(ValueError, list,"},{"line_number":587,"context_line":"                          self.controller.list(sort_key\u003dsort_key))"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def test_list_images_with_asc_sort_dir(self):"},{"line_number":590,"context_line":"        img_id1 \u003d \u00272a4560b2-e585-443e-9b39-553b46ec92d1\u0027"},{"line_number":591,"context_line":"        sort_key \u003d \u0027id\u0027"},{"line_number":592,"context_line":"        sort_dir \u003d \u0027desc\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_8b0b4e23","line":589,"in_reply_to":"5a890539_95ea9172","updated":"2014-12-01 16:03:15.000000000","message":"Done","commit_id":"842ae902c578ad0e9751cd649e3667a245e2d028"}],"tests/v2/test_shell_v2.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9ad4de0a4b8691234ac37cab4aebf6dea7a1dfa4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            \u0027checksum\u0027: \u0027fake_checksum\u0027,"},{"line_number":67,"context_line":"            \u0027tag\u0027: \u0027fake tag\u0027,"},{"line_number":68,"context_line":"            \u0027properties\u0027: [],"},{"line_number":69,"context_line":"            \u0027sort_key\u0027: \u0027name\u0027,"},{"line_number":70,"context_line":"            \u0027sort_dir\u0027: \u0027asc\u0027"},{"line_number":71,"context_line":"        }"},{"line_number":72,"context_line":"        args \u003d self._make_args(input)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_90f53fef","line":69,"updated":"2014-12-01 15:48:45.000000000","message":"A test where you pass default value ([]) as sort_key would be beneficial. I think is should be done in this one, and you should add another test with single sort_key.","commit_id":"842ae902c578ad0e9751cd649e3667a245e2d028"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"1784825eacb46dd518c17a50a31502d5f462685f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            \u0027checksum\u0027: \u0027fake_checksum\u0027,"},{"line_number":67,"context_line":"            \u0027tag\u0027: \u0027fake tag\u0027,"},{"line_number":68,"context_line":"            \u0027properties\u0027: [],"},{"line_number":69,"context_line":"            \u0027sort_key\u0027: \u0027name\u0027,"},{"line_number":70,"context_line":"            \u0027sort_dir\u0027: \u0027asc\u0027"},{"line_number":71,"context_line":"        }"},{"line_number":72,"context_line":"        args \u003d self._make_args(input)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_ab11ea54","line":69,"in_reply_to":"5a890539_90f53fef","updated":"2014-12-01 16:03:15.000000000","message":"Done","commit_id":"842ae902c578ad0e9751cd649e3667a245e2d028"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9ad4de0a4b8691234ac37cab4aebf6dea7a1dfa4","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                \u0027tag\u0027: \u0027fake tag\u0027"},{"line_number":84,"context_line":"            }"},{"line_number":85,"context_line":"            mocked_list.assert_called_once_with(page_size\u003d18,"},{"line_number":86,"context_line":"                                                sort_key\u003d\u0027name\u0027,"},{"line_number":87,"context_line":"                                                sort_dir\u003d\u0027asc\u0027,"},{"line_number":88,"context_line":"                                                filters\u003dexp_img_filters)"},{"line_number":89,"context_line":"            utils.print_list.assert_called_once_with({}, [\u0027ID\u0027, \u0027Name\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_70f29307","line":86,"updated":"2014-12-01 15:48:45.000000000","message":"I haven\u0027t noticed it earlier, but sort_key passed from do_image_list is always a list, so this should be [\u0027name\u0027] instead.","commit_id":"842ae902c578ad0e9751cd649e3667a245e2d028"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"1784825eacb46dd518c17a50a31502d5f462685f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                \u0027tag\u0027: \u0027fake tag\u0027"},{"line_number":84,"context_line":"            }"},{"line_number":85,"context_line":"            mocked_list.assert_called_once_with(page_size\u003d18,"},{"line_number":86,"context_line":"                                                sort_key\u003d\u0027name\u0027,"},{"line_number":87,"context_line":"                                                sort_dir\u003d\u0027asc\u0027,"},{"line_number":88,"context_line":"                                                filters\u003dexp_img_filters)"},{"line_number":89,"context_line":"            utils.print_list.assert_called_once_with({}, [\u0027ID\u0027, \u0027Name\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_eb1bf270","line":86,"in_reply_to":"5a890539_70f29307","updated":"2014-12-01 16:03:15.000000000","message":"Done","commit_id":"842ae902c578ad0e9751cd649e3667a245e2d028"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9ad4de0a4b8691234ac37cab4aebf6dea7a1dfa4","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            }"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"            mocked_list.assert_called_once_with(page_size\u003d1,"},{"line_number":151,"context_line":"                                                sort_key\u003d\u0027name\u0027,"},{"line_number":152,"context_line":"                                                sort_dir\u003d\u0027asc\u0027,"},{"line_number":153,"context_line":"                                                filters\u003dexp_img_filters)"},{"line_number":154,"context_line":"            utils.print_list.assert_called_once_with({}, [\u0027ID\u0027, \u0027Name\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_50ebd711","line":151,"updated":"2014-12-01 15:48:45.000000000","message":"Same thing as in #86.","commit_id":"842ae902c578ad0e9751cd649e3667a245e2d028"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"1784825eacb46dd518c17a50a31502d5f462685f","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            }"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"            mocked_list.assert_called_once_with(page_size\u003d1,"},{"line_number":151,"context_line":"                                                sort_key\u003d\u0027name\u0027,"},{"line_number":152,"context_line":"                                                sort_dir\u003d\u0027asc\u0027,"},{"line_number":153,"context_line":"                                                filters\u003dexp_img_filters)"},{"line_number":154,"context_line":"            utils.print_list.assert_called_once_with({}, [\u0027ID\u0027, \u0027Name\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_2b25faad","line":151,"in_reply_to":"5a890539_50ebd711","updated":"2014-12-01 16:03:15.000000000","message":"Done","commit_id":"842ae902c578ad0e9751cd649e3667a245e2d028"}]}
