)]}'
{"openstackclient/image/v2/image.py":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"775797a53a3a367279b88a45a320a5d4e88c6640","unresolved":false,"context_lines":[{"line_number":533,"context_line":"            # No pages received yet, so start the page marker at None."},{"line_number":534,"context_line":"            marker \u003d None"},{"line_number":535,"context_line":"            while True:"},{"line_number":536,"context_line":"                page \u003d image_client.api.image_list(marker\u003dmarker, **kwargs)"},{"line_number":537,"context_line":"                if not page:"},{"line_number":538,"context_line":"                    break"},{"line_number":539,"context_line":"                data.extend(page)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf091321_e5050f7c","line":536,"range":{"start_line":536,"start_character":36,"end_line":536,"end_character":50},"updated":"2017-06-08 12:19:36.000000000","message":"Now we use low-level REST API to talk with image server, so I think the paging logic is not necessary, we can put these filters(marker, limit, sort) to image server directly.\n\nhttps://developer.openstack.org/api-ref/image/v2/index.html#show-images","commit_id":"3e6e904b38bfebe38783ef3076af5648051ae1fe"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"b7b8620b77974762f972d948dfe04344fc9aafa9","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                         \u0027 It must be one of the following: %(available)s.\u0027"},{"line_number":494,"context_line":"                         ) % {\u0027sort_dir\u0027: dir,"},{"line_number":495,"context_line":"                              \u0027available\u0027: \u0027, \u0027.join(SORT_DIR_VALUES)})"},{"line_number":496,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":497,"context_line":"            if key not in SORT_KEY_VALUES:"},{"line_number":498,"context_line":"                msg \u003d (_(\u0027Invalid sort key: %(sort_key)s.\u0027"},{"line_number":499,"context_line":"                         \u0027 It must be one of the following: %(available)s.\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_703a7b34","line":496,"range":{"start_line":496,"start_character":33,"end_line":496,"end_character":45},"updated":"2017-06-14 11:09:42.000000000","message":"I don\u0027t think we should add hard check at here, that break the usage \"image list --sort checksum\", even if that looks impossible, but we should keep backwards compatible, the alternative is adding the keys list into help message of \u0027--sort\u0027 option, then pass the arguments to glance API directly, like we do in current master. Not prefect, but smooth.","commit_id":"710133ceb4ee79eb1719b795c6a4382d11780a7b"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"e6e74475b4c5248895412265016eb22eef6565de","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                         \u0027 It must be one of the following: %(available)s.\u0027"},{"line_number":494,"context_line":"                         ) % {\u0027sort_dir\u0027: dir,"},{"line_number":495,"context_line":"                              \u0027available\u0027: \u0027, \u0027.join(SORT_DIR_VALUES)})"},{"line_number":496,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":497,"context_line":"            if key not in SORT_KEY_VALUES:"},{"line_number":498,"context_line":"                msg \u003d (_(\u0027Invalid sort key: %(sort_key)s.\u0027"},{"line_number":499,"context_line":"                         \u0027 It must be one of the following: %(available)s.\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_be0c4841","line":496,"range":{"start_line":496,"start_character":33,"end_line":496,"end_character":45},"in_reply_to":"7f231b9d_63485a5b","updated":"2017-06-15 06:45:47.000000000","message":"The example of backward incompatibility is \"image list --sort checksum\", it works in master, but breaks in PS4, because \"checksum\" is not in SORT_KEY_VALUES. Actually \"--sort\" option is not ignored in master code, we sort the result in client side, sorting by \"checksum\" is supported, don\u0027t break it.\n\nPS5 looks good to me, expose the capability of Glance API directly, and no limitation, if Glance support more sort key in the future, we don\u0027t have to change osc code, help message is just weak dependence.","commit_id":"710133ceb4ee79eb1719b795c6a4382d11780a7b"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"5e4ebcc5c161a68af2745731874995b815f95d3e","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                         \u0027 It must be one of the following: %(available)s.\u0027"},{"line_number":494,"context_line":"                         ) % {\u0027sort_dir\u0027: dir,"},{"line_number":495,"context_line":"                              \u0027available\u0027: \u0027, \u0027.join(SORT_DIR_VALUES)})"},{"line_number":496,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":497,"context_line":"            if key not in SORT_KEY_VALUES:"},{"line_number":498,"context_line":"                msg \u003d (_(\u0027Invalid sort key: %(sort_key)s.\u0027"},{"line_number":499,"context_line":"                         \u0027 It must be one of the following: %(available)s.\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_63485a5b","line":496,"range":{"start_line":496,"start_character":33,"end_line":496,"end_character":45},"in_reply_to":"7f231b9d_703a7b34","updated":"2017-06-15 01:48:09.000000000","message":"Thanks for review :)\nnot sure the backward compatibility if for what, this is borrowed from glanceclient, actually, in master, we don\u0027t pass the sort arguments to glance API directly, we just ignore that and sort the result in client side. and in glance API side, the supported sort keys are also SORT_KEY_VALUES, I am OK to change this to pass the arguments directly to glance api, but that may cause a unnecessary api call if we specified a invalid sort key.","commit_id":"710133ceb4ee79eb1719b795c6a4382d11780a7b"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"b7b8620b77974762f972d948dfe04344fc9aafa9","unresolved":false,"context_lines":[{"line_number":499,"context_line":"                         \u0027 It must be one of the following: %(available)s.\u0027"},{"line_number":500,"context_line":"                         ) % {\u0027sort_key\u0027: key,"},{"line_number":501,"context_line":"                              \u0027available\u0027: \u0027, \u0027.join(SORT_KEY_VALUES)})"},{"line_number":502,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":503,"context_line":"        return sort"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_30ec03f2","line":502,"range":{"start_line":502,"start_character":33,"end_line":502,"end_character":45},"updated":"2017-06-14 11:09:42.000000000","message":"ditto","commit_id":"710133ceb4ee79eb1719b795c6a4382d11780a7b"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"b7b8620b77974762f972d948dfe04344fc9aafa9","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            columns \u003d (\"ID\", \"Name\", \"Status\")"},{"line_number":551,"context_line":"            column_headers \u003d columns"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"        data \u003d image_client.api.image_list(**kwargs)"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"        if parsed_args.property:"},{"line_number":556,"context_line":"            # NOTE(dtroyer): coerce to a list to subscript it in py3"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_9074f769","line":553,"updated":"2017-06-14 11:09:42.000000000","message":"nice clean","commit_id":"710133ceb4ee79eb1719b795c6a4382d11780a7b"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ac5a5b79b7b3115bde5afdc4c9a7c041d86b9bf1","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            default\u003d\u0027name:asc\u0027,"},{"line_number":460,"context_line":"            help\u003d_(\"Sort output by selected keys and directions(asc or desc) \""},{"line_number":461,"context_line":"                   \"(default: name:asc), multiple keys and directions can be \""},{"line_number":462,"context_line":"                   \"specified separated by comma. The supported sort keys \""},{"line_number":463,"context_line":"                   \"are: name, status, container_format, disk_format, size, \""},{"line_number":464,"context_line":"                   \"id, created_at, updated_at. And the supported sort \""},{"line_number":465,"context_line":"                   \"directions are: asc, desc.\"),"},{"line_number":466,"context_line":"        )"},{"line_number":467,"context_line":"        parser.add_argument("},{"line_number":468,"context_line":"            \"--limit\","}],"source_content_type":"text/x-python","patch_set":8,"id":"7f231b9d_8cd237d0","line":465,"range":{"start_line":462,"start_character":50,"end_line":465,"end_character":48},"updated":"2017-06-19 03:03:23.000000000","message":"Please update doc for that.","commit_id":"665a4b9fe1dbdc8bbca7a91aa8dfacb61559d58c"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"4a4b364f6b23955587ca11882cd54a2caa9ae3c1","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            default\u003d\u0027name:asc\u0027,"},{"line_number":460,"context_line":"            help\u003d_(\"Sort output by selected keys and directions(asc or desc) \""},{"line_number":461,"context_line":"                   \"(default: name:asc), multiple keys and directions can be \""},{"line_number":462,"context_line":"                   \"specified separated by comma. The supported sort keys \""},{"line_number":463,"context_line":"                   \"are: name, status, container_format, disk_format, size, \""},{"line_number":464,"context_line":"                   \"id, created_at, updated_at. And the supported sort \""},{"line_number":465,"context_line":"                   \"directions are: asc, desc.\"),"},{"line_number":466,"context_line":"        )"},{"line_number":467,"context_line":"        parser.add_argument("},{"line_number":468,"context_line":"            \"--limit\","}],"source_content_type":"text/x-python","patch_set":8,"id":"7f231b9d_0c286794","line":465,"range":{"start_line":462,"start_character":50,"end_line":465,"end_character":48},"in_reply_to":"7f231b9d_8cd237d0","updated":"2017-06-19 03:17:26.000000000","message":"Done","commit_id":"665a4b9fe1dbdc8bbca7a91aa8dfacb61559d58c"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"46cdf0b4ebcfe12b04bb3bed603565dcad3fe881","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                property_field\u003d\u0027properties\u0027,"},{"line_number":565,"context_line":"            )"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        data \u003d utils.sort_items(data, parsed_args.sort)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        return ("},{"line_number":570,"context_line":"            column_headers,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_7eddcc6e","line":567,"updated":"2017-07-26 09:40:22.000000000","message":"Now, we make --limit work with or without --marker option, and sort and filter images in client side, the code looks good to me, thank you.","commit_id":"3d8343774374328a5bb6bfa8ac81eb83587fd3c7"}],"releasenotes/notes/bug-1689549-a2c4e8f887ba50ae.yaml":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"75a71dde49eac253863fb36d28ee214c8de50964","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Make the --limit option work in \"image list\" command, and clean the"},{"line_number":5,"context_line":"    implementation of \"image list\" command action, leverage the"},{"line_number":6,"context_line":"    pagination of functionality of glance-api to keep the OSC side function"},{"line_number":7,"context_line":"    simple."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7f231b9d_646a79ed","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":37},"updated":"2017-06-16 07:19:03.000000000","message":"s/\"/``/","commit_id":"192d91e90a7a451e76a993ec9b61ec38cd58194e"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"e006e960f91a39c8a5a13c7b1fa753833eb0d293","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Make the --limit option work in \"image list\" command, and clean the"},{"line_number":5,"context_line":"    implementation of \"image list\" command action, leverage the"},{"line_number":6,"context_line":"    pagination of functionality of glance-api to keep the OSC side function"},{"line_number":7,"context_line":"    simple."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7f231b9d_cc7b8f89","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":37},"in_reply_to":"7f231b9d_646a79ed","updated":"2017-06-19 01:38:19.000000000","message":"Done","commit_id":"192d91e90a7a451e76a993ec9b61ec38cd58194e"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"75a71dde49eac253863fb36d28ee214c8de50964","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Make the --limit option work in \"image list\" command, and clean the"},{"line_number":5,"context_line":"    implementation of \"image list\" command action, leverage the"},{"line_number":6,"context_line":"    pagination of functionality of glance-api to keep the OSC side function"},{"line_number":7,"context_line":"    simple."},{"line_number":8,"context_line":"    [Bug `1689549 \u003chttps://bugs.launchpad.net/bugs/1689549\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7f231b9d_a44d319b","line":7,"range":{"start_line":5,"start_character":51,"end_line":7,"end_character":11},"updated":"2017-06-16 07:19:03.000000000","message":"I think we don\u0027t need to show the internal implement to end user in release notes.","commit_id":"192d91e90a7a451e76a993ec9b61ec38cd58194e"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"e006e960f91a39c8a5a13c7b1fa753833eb0d293","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Make the --limit option work in \"image list\" command, and clean the"},{"line_number":5,"context_line":"    implementation of \"image list\" command action, leverage the"},{"line_number":6,"context_line":"    pagination of functionality of glance-api to keep the OSC side function"},{"line_number":7,"context_line":"    simple."},{"line_number":8,"context_line":"    [Bug `1689549 \u003chttps://bugs.launchpad.net/bugs/1689549\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7f231b9d_ec788b90","line":7,"range":{"start_line":5,"start_character":51,"end_line":7,"end_character":11},"in_reply_to":"7f231b9d_a44d319b","updated":"2017-06-19 01:38:19.000000000","message":"Done","commit_id":"192d91e90a7a451e76a993ec9b61ec38cd58194e"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ac5a5b79b7b3115bde5afdc4c9a7c041d86b9bf1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Make the --limit option work in ``image list`` command, and clean the"},{"line_number":5,"context_line":"    implementation of \"image list\" command action."},{"line_number":6,"context_line":"    [Bug `1689549 \u003chttps://bugs.launchpad.net/bugs/1689549\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7f231b9d_ec640b4c","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":5},"updated":"2017-06-19 03:03:23.000000000","message":"It\u0027s not necessary!","commit_id":"665a4b9fe1dbdc8bbca7a91aa8dfacb61559d58c"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"57ab125da322cc4b440a77d0f85cb81f2664479b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Make the --limit option work in ``image list`` command, and clean the"},{"line_number":5,"context_line":"    implementation of \"image list\" command action."},{"line_number":6,"context_line":"    [Bug `1689549 \u003chttps://bugs.launchpad.net/bugs/1689549\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7f231b9d_47dab877","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":5},"in_reply_to":"7f231b9d_c7048817","updated":"2017-06-19 03:30:08.000000000","message":"I mean \"|\" is not necessary in my opinion. But I\u0027m OK with that.","commit_id":"665a4b9fe1dbdc8bbca7a91aa8dfacb61559d58c"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"4a4b364f6b23955587ca11882cd54a2caa9ae3c1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Make the --limit option work in ``image list`` command, and clean the"},{"line_number":5,"context_line":"    implementation of \"image list\" command action."},{"line_number":6,"context_line":"    [Bug `1689549 \u003chttps://bugs.launchpad.net/bugs/1689549\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7f231b9d_c7048817","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":5},"in_reply_to":"7f231b9d_ec640b4c","updated":"2017-06-19 03:17:26.000000000","message":"thanks for review, sorry what you said is not necessary, the \"|\" or this whole note ? Added this note because Rui Chen suggested adding this. the \"|\" in all the other bug fix notes :D","commit_id":"665a4b9fe1dbdc8bbca7a91aa8dfacb61559d58c"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"50e1f480c2295587fd4d2f28e2705b7f77f39798","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fix the ``--limit`` option work in the ``image list`` command to"},{"line_number":5,"context_line":"    work without the ``--marker`` option."},{"line_number":6,"context_line":"    [Bug `1689549 \u003chttps://bugs.launchpad.net/bugs/1689549\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7f515b1d_e041140d","line":5,"updated":"2017-09-26 15:42:37.000000000","message":"It may be worth mentioning why the ``--marker`` option is no longer needed.","commit_id":"59240c2e02771118dda98b2790f4e0b503fea833"}]}
