)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a5bb2d2961947537e461a5be61cad3334c42ebb","unresolved":false,"context_lines":[{"line_number":12,"context_line":"SDK normalizes property names, while OSC uses server side names. In"},{"line_number":13,"context_line":"order not to break OSC users continue using server-side names."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Fix \u0027-f json\u0027 to return valid json object for flavor properties instead"},{"line_number":16,"context_line":"of stringifying it."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Depends-On: https://review.opendev.org/#/c/750072/"},{"line_number":19,"context_line":"Change-Id: I62b2ed8488ee4ac9c42051311bcfb455506ddd90"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"9f560f44_8c923c57","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":19},"updated":"2020-10-08 16:29:03.000000000","message":"This could be a separate pre-cursor patch. Do we have stable branches here? We could backport the fix.","commit_id":"38b1080cb4e946a4b82448ed8dd1dc990f172f52"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8e136cead32540e324fe54276f2ba8d135183017","unresolved":false,"context_lines":[{"line_number":12,"context_line":"SDK normalizes property names, while OSC uses server side names. In"},{"line_number":13,"context_line":"order not to break OSC users continue using server-side names."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Fix \u0027-f json\u0027 to return valid json object for flavor properties instead"},{"line_number":16,"context_line":"of stringifying it."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Depends-On: https://review.opendev.org/#/c/750072/"},{"line_number":19,"context_line":"Change-Id: I62b2ed8488ee4ac9c42051311bcfb455506ddd90"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3f65232a_ad1aea79","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":19},"updated":"2020-10-27 16:11:34.000000000","message":"Same comment as previously\n\nhttps://review.opendev.org/#/c/750151/14//COMMIT_MSG@15","commit_id":"f813f6503d39d0b1320026dc703956a643f91e06"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"98ab04546e22afe0506eb10542818485ee82d8dc","unresolved":false,"context_lines":[{"line_number":12,"context_line":"SDK normalizes property names, while OSC uses server side names. In"},{"line_number":13,"context_line":"order not to break OSC users continue using server-side names."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Fix \u0027-f json\u0027 to return valid json object for flavor properties instead"},{"line_number":16,"context_line":"of stringifying it."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Depends-On: https://review.opendev.org/#/c/750072/"},{"line_number":19,"context_line":"Change-Id: I62b2ed8488ee4ac9c42051311bcfb455506ddd90"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"1f621f24_a1b962ea","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":19},"in_reply_to":"3f65232a_ad1aea79","updated":"2020-11-02 14:34:43.000000000","message":"Done","commit_id":"f813f6503d39d0b1320026dc703956a643f91e06"}],"lower-constraints.txt":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e65f1513a98b3b0b3e4cb8a53d88a482f9106bf8","unresolved":true,"context_lines":[{"line_number":45,"context_line":"munch\u003d\u003d2.1.0"},{"line_number":46,"context_line":"netaddr\u003d\u003d0.7.18"},{"line_number":47,"context_line":"netifaces\u003d\u003d0.10.4"},{"line_number":48,"context_line":"openstacksdk\u003d\u003d0.51.0"},{"line_number":49,"context_line":"os-service-types\u003d\u003d1.7.0"},{"line_number":50,"context_line":"os-testr\u003d\u003d1.0.0"},{"line_number":51,"context_line":"osc-lib\u003d\u003d2.2.0"}],"source_content_type":"text/plain","patch_set":21,"id":"7742f035_781e2686","line":48,"range":{"start_line":48,"start_character":14,"end_line":48,"end_character":20},"updated":"2020-12-01 12:07:46.000000000","message":"0.52.0\n\n  $ git tag --contains 8cd14bbe4abcb0f8c869f77e8acb48355f9d71e6\n  0.52.0","commit_id":"30a85418b32428bbe98b9577e43bc2489e885dda"}],"openstackclient/compute/v2/flavor.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if parsed_args.description:"},{"line_number":158,"context_line":"            if not sdk_utils.supports_microversion(compute_client, \u00272.55\u0027):"},{"line_number":159,"context_line":"                msg \u003d _(\"Server side does not support setting description\")"},{"line_number":160,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        args \u003d {"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_09f4b0ce","line":159,"range":{"start_line":159,"start_character":16,"end_line":159,"end_character":75},"updated":"2020-11-03 10:25:27.000000000","message":"Could we give a more informative message that this? Would something like\n\n  msg \u003d _(\n      \u0027The --description parameter requires server support for \u0027\n      \u0027API microversion 2.55\u0027\n  )\n\nmake sense? (It would be nice to state the max version actually supported but we can manage without it)","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if parsed_args.description:"},{"line_number":158,"context_line":"            if not sdk_utils.supports_microversion(compute_client, \u00272.55\u0027):"},{"line_number":159,"context_line":"                msg \u003d _(\"Server side does not support setting description\")"},{"line_number":160,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        args \u003d {"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_9bee01b2","line":159,"range":{"start_line":159,"start_character":16,"end_line":159,"end_character":75},"in_reply_to":"1f621f24_09f4b0ce","updated":"2020-11-09 12:42:34.000000000","message":"Done","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            \u0027swap\u0027: parsed_args.swap,"},{"line_number":170,"context_line":"            \u0027rxtx_factor\u0027: parsed_args.rxtx_factor,"},{"line_number":171,"context_line":"            \u0027is_public\u0027: parsed_args.public,"},{"line_number":172,"context_line":"            \u0027description\u0027: parsed_args.description"},{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        flavor \u003d compute_client.create_flavor(**args)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_c9eab8aa","line":172,"range":{"start_line":172,"start_character":0,"end_line":172,"end_character":50},"updated":"2020-11-03 10:25:27.000000000","message":"This is passing because the API doesn\u0027t reject these invalid requests, however, it still feels wrong to pass this in for cases where it\u0027s not actually supported. Can we make this contingent on the parameter being set?\n\n  args \u003d {\n      ...\n  }\n\n  if parsed_args.description:\n      if not sdk_utils.supports_microversion(compute_client, \u00272.55\u0027):\n          ...\n\n      args[\u0027description\u0027] \u003d parsed_args.description","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            \u0027swap\u0027: parsed_args.swap,"},{"line_number":170,"context_line":"            \u0027rxtx_factor\u0027: parsed_args.rxtx_factor,"},{"line_number":171,"context_line":"            \u0027is_public\u0027: parsed_args.public,"},{"line_number":172,"context_line":"            \u0027description\u0027: parsed_args.description"},{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        flavor \u003d compute_client.create_flavor(**args)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_fb2c5503","line":172,"range":{"start_line":172,"start_character":0,"end_line":172,"end_character":50},"in_reply_to":"1f621f24_c9eab8aa","updated":"2020-11-09 12:42:34.000000000","message":"Done","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        query_attrs \u003d {"},{"line_number":290,"context_line":"            \u0027is_public\u0027: is_public"},{"line_number":291,"context_line":"        }"},{"line_number":292,"context_line":"        if parsed_args.marker:"},{"line_number":293,"context_line":"            query_attrs[\u0027marker\u0027] \u003d parsed_args.marker"},{"line_number":294,"context_line":"        if parsed_args.limit:"},{"line_number":295,"context_line":"            query_attrs[\u0027limit\u0027] \u003d parsed_args.limit"},{"line_number":296,"context_line":"        if parsed_args.limit or parsed_args.marker:"},{"line_number":297,"context_line":"            # User passed explicit pagination request, switch off SDK"},{"line_number":298,"context_line":"            # pagination"},{"line_number":299,"context_line":"            query_attrs[\u0027paginated\u0027] \u003d False"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        data \u003d list(compute_client.flavors(**query_attrs))"},{"line_number":302,"context_line":"        # Even if server supports 2.61 some policy might stop it sending us"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_e90e948b","line":299,"range":{"start_line":292,"start_character":0,"end_line":299,"end_character":44},"updated":"2020-11-03 10:25:27.000000000","message":"We could/should drag this out to a common helper in the future, since we\u0027re going to want to do this in loads of places","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        query_attrs \u003d {"},{"line_number":290,"context_line":"            \u0027is_public\u0027: is_public"},{"line_number":291,"context_line":"        }"},{"line_number":292,"context_line":"        if parsed_args.marker:"},{"line_number":293,"context_line":"            query_attrs[\u0027marker\u0027] \u003d parsed_args.marker"},{"line_number":294,"context_line":"        if parsed_args.limit:"},{"line_number":295,"context_line":"            query_attrs[\u0027limit\u0027] \u003d parsed_args.limit"},{"line_number":296,"context_line":"        if parsed_args.limit or parsed_args.marker:"},{"line_number":297,"context_line":"            # User passed explicit pagination request, switch off SDK"},{"line_number":298,"context_line":"            # pagination"},{"line_number":299,"context_line":"            query_attrs[\u0027paginated\u0027] \u003d False"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        data \u003d list(compute_client.flavors(**query_attrs))"},{"line_number":302,"context_line":"        # Even if server supports 2.61 some policy might stop it sending us"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_db31995c","line":299,"range":{"start_line":292,"start_character":0,"end_line":299,"end_character":44},"in_reply_to":"1f621f24_e90e948b","updated":"2020-11-09 12:42:34.000000000","message":"Might make sense. Let\u0027s do this separately","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"5770eddb96ec37172004715d6ebc0d12d90c1a88","unresolved":false,"context_lines":[{"line_number":299,"context_line":"            query_attrs[\u0027paginated\u0027] \u003d False"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        data \u003d list(compute_client.flavors(**query_attrs))"},{"line_number":302,"context_line":"        # Even if server supports 2.61 some policy might stop it sending us"},{"line_number":303,"context_line":"        # extra_specs. So try to fetch them if they are absent"},{"line_number":304,"context_line":"        for f in data:"},{"line_number":305,"context_line":"            if not f.extra_specs:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_a4b5f0cf","line":302,"range":{"start_line":302,"start_character":39,"end_line":302,"end_character":72},"updated":"2020-11-02 15:17:54.000000000","message":":)","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                \"vcpus\","},{"line_number":316,"context_line":"                \"is_public\","},{"line_number":317,"context_line":"                \"swap\","},{"line_number":318,"context_line":"                \"rxtx_factor\","},{"line_number":319,"context_line":"                \"extra_specs\","},{"line_number":320,"context_line":"            )"},{"line_number":321,"context_line":"            column_headers \u003d ("}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_09f5d083","line":318,"range":{"start_line":318,"start_character":0,"end_line":318,"end_character":30},"updated":"2020-11-03 10:25:27.000000000","message":"As an aside, we might want to drop this in a future change. It was only supported by the XenAPI driver, which is now removed, meaning it\u0027s useless now and really needs to be removed from the API entirely","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                \"vcpus\","},{"line_number":316,"context_line":"                \"is_public\","},{"line_number":317,"context_line":"                \"swap\","},{"line_number":318,"context_line":"                \"rxtx_factor\","},{"line_number":319,"context_line":"                \"extra_specs\","},{"line_number":320,"context_line":"            )"},{"line_number":321,"context_line":"            column_headers \u003d ("}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_5b3d8929","line":318,"range":{"start_line":318,"start_character":0,"end_line":318,"end_character":30},"in_reply_to":"1f621f24_09f5d083","updated":"2020-11-09 12:42:34.000000000","message":"Nice to know. Let\u0027s leave it for now since there are definitely clouds still using Xen on older releases","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                \"Properties\","},{"line_number":332,"context_line":"            )"},{"line_number":333,"context_line":"        else:"},{"line_number":334,"context_line":"            columns \u003d ("},{"line_number":335,"context_line":"                \"id\","},{"line_number":336,"context_line":"                \"name\","},{"line_number":337,"context_line":"                \"ram\","},{"line_number":338,"context_line":"                \"disk\","},{"line_number":339,"context_line":"                \"ephemeral\","},{"line_number":340,"context_line":"                \"vcpus\","},{"line_number":341,"context_line":"                \"is_public\""},{"line_number":342,"context_line":"            )"},{"line_number":343,"context_line":"            column_headers \u003d ("},{"line_number":344,"context_line":"                \"ID\","},{"line_number":345,"context_line":"                \"Name\","},{"line_number":346,"context_line":"                \"RAM\","},{"line_number":347,"context_line":"                \"Disk\","},{"line_number":348,"context_line":"                \"Ephemeral\","},{"line_number":349,"context_line":"                \"VCPUs\","},{"line_number":350,"context_line":"                \"Is Public\""},{"line_number":351,"context_line":"            )"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        return (column_headers,"},{"line_number":354,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_6949e4ce","line":351,"range":{"start_line":334,"start_character":0,"end_line":351,"end_character":13},"updated":"2020-11-03 10:25:27.000000000","message":"This is fairly long winded :D Why not:\n\n    columns \u003d (\n        \"id\",\n        \"name\",\n        \"ram\",\n        \"disk\",\n        \"ephemeral\",\n        \"vcpus\",\n        \"is_public\"\n    )\n    if parsed_args.long:\n        columns +\u003d (\n            \"swap\",\n            \"rxtx_factor\",\n            \"extra_specs\",\n        )\n\n    column_headers \u003d (\n        \"ID\",\n        \"Name\",\n        \"RAM\",\n        \"Disk\",\n        \"Ephemeral\",\n        \"VCPUs\",\n        \"Is Public\"\n    )\n    if parsed_args.long:\n        column_headers +\u003d (\n            \"Swap\",\n            \"RXTX Factor\",\n            \"Properties\",\n        )","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                \"Properties\","},{"line_number":332,"context_line":"            )"},{"line_number":333,"context_line":"        else:"},{"line_number":334,"context_line":"            columns \u003d ("},{"line_number":335,"context_line":"                \"id\","},{"line_number":336,"context_line":"                \"name\","},{"line_number":337,"context_line":"                \"ram\","},{"line_number":338,"context_line":"                \"disk\","},{"line_number":339,"context_line":"                \"ephemeral\","},{"line_number":340,"context_line":"                \"vcpus\","},{"line_number":341,"context_line":"                \"is_public\""},{"line_number":342,"context_line":"            )"},{"line_number":343,"context_line":"            column_headers \u003d ("},{"line_number":344,"context_line":"                \"ID\","},{"line_number":345,"context_line":"                \"Name\","},{"line_number":346,"context_line":"                \"RAM\","},{"line_number":347,"context_line":"                \"Disk\","},{"line_number":348,"context_line":"                \"Ephemeral\","},{"line_number":349,"context_line":"                \"VCPUs\","},{"line_number":350,"context_line":"                \"Is Public\""},{"line_number":351,"context_line":"            )"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        return (column_headers,"},{"line_number":354,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_9b43a1af","line":351,"range":{"start_line":334,"start_character":0,"end_line":351,"end_character":13},"in_reply_to":"1f621f24_6949e4ce","updated":"2020-11-09 12:42:34.000000000","message":"totally right, copied from somewhere (facepalm)","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                get_extra_specs\u003dTrue,"},{"line_number":408,"context_line":"                ignore_missing\u003dFalse)"},{"line_number":409,"context_line":"        except sdk_exception.ResourceNotFound as e:"},{"line_number":410,"context_line":"            raise exceptions.CommandError(_(e.message))"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        result \u003d 0"},{"line_number":413,"context_line":"        if parsed_args.no_property:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_69228402","line":410,"range":{"start_line":410,"start_character":42,"end_line":410,"end_character":54},"updated":"2020-11-03 10:25:27.000000000","message":"Does this make sense (translating the exception message?). Surely it should already have been translated at source?","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                get_extra_specs\u003dTrue,"},{"line_number":408,"context_line":"                ignore_missing\u003dFalse)"},{"line_number":409,"context_line":"        except sdk_exception.ResourceNotFound as e:"},{"line_number":410,"context_line":"            raise exceptions.CommandError(_(e.message))"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        result \u003d 0"},{"line_number":413,"context_line":"        if parsed_args.no_property:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_fb15759d","line":410,"range":{"start_line":410,"start_character":42,"end_line":410,"end_character":54},"in_reply_to":"1f621f24_69228402","updated":"2020-11-09 12:42:34.000000000","message":"Done","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                        parsed_args.project,"},{"line_number":438,"context_line":"                        parsed_args.project_domain,"},{"line_number":439,"context_line":"                    ).id"},{"line_number":440,"context_line":"                    compute_client.flavor_add_tenant_access(flavor.id,"},{"line_number":441,"context_line":"                                                            project_id)"},{"line_number":442,"context_line":"            except Exception as e:"},{"line_number":443,"context_line":"                LOG.error(_(\"Failed to set flavor access to project: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_491d08bc","line":440,"range":{"start_line":440,"start_character":60,"end_line":440,"end_character":70},"updated":"2020-11-03 10:25:27.000000000","message":"style nit: could you put this down on the previous line as before? These huge hanging indents are awful to read, heh /o\\","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                        parsed_args.project,"},{"line_number":438,"context_line":"                        parsed_args.project_domain,"},{"line_number":439,"context_line":"                    ).id"},{"line_number":440,"context_line":"                    compute_client.flavor_add_tenant_access(flavor.id,"},{"line_number":441,"context_line":"                                                            project_id)"},{"line_number":442,"context_line":"            except Exception as e:"},{"line_number":443,"context_line":"                LOG.error(_(\"Failed to set flavor access to project: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_7b2965e4","line":440,"range":{"start_line":440,"start_character":60,"end_line":440,"end_character":70},"in_reply_to":"1f621f24_491d08bc","updated":"2020-11-09 12:42:34.000000000","message":"agree with you, sadly vim suggests me that by default. Need to find config for that. I do not like it either.","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        if parsed_args.description:"},{"line_number":451,"context_line":"            if not sdk_utils.supports_microversion(compute_client, \u00272.55\u0027):"},{"line_number":452,"context_line":"                msg \u003d _(\"Server side does not support setting description\")"},{"line_number":453,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":454,"context_line":"            compute_client.update_flavor(flavor\u003dflavor.id,"},{"line_number":455,"context_line":"                                         description\u003dparsed_args.description)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_e98334cb","line":452,"updated":"2020-11-03 10:25:27.000000000","message":"Same comment as above.\n\nAlso, this isn\u0027t on you, but shouldn\u0027t we do this kind of validation before we start settings things? As things stand, if you provided:\n\n  --property foo\u003dbar --description \"foo\"\n\nThen the property will get set, the description request will fail, and the former won\u0027t be rolled back so you\u0027ll end up half way between two \"states\". That seems wrong","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        if parsed_args.description:"},{"line_number":451,"context_line":"            if not sdk_utils.supports_microversion(compute_client, \u00272.55\u0027):"},{"line_number":452,"context_line":"                msg \u003d _(\"Server side does not support setting description\")"},{"line_number":453,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":454,"context_line":"            compute_client.update_flavor(flavor\u003dflavor.id,"},{"line_number":455,"context_line":"                                         description\u003dparsed_args.description)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_5b262917","line":452,"in_reply_to":"1f621f24_e98334cb","updated":"2020-11-09 12:42:34.000000000","message":"Done","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":470,"context_line":"    def take_action(self, parsed_args):"},{"line_number":471,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":472,"context_line":"        flavor \u003d compute_client.find_flavor(parsed_args.flavor,"},{"line_number":473,"context_line":"                                            get_extra_specs\u003dTrue)"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"        access_projects \u003d None"},{"line_number":476,"context_line":"        # get access projects list of this flavor"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_c98638dc","line":473,"updated":"2020-11-03 10:25:27.000000000","message":"style nit:\n\n  flavor \u003d compute_client.find_flavor(\n      parsed_args.flavor, get_extra_specs\u003dTrue)\n\npretty please? :)","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":470,"context_line":"    def take_action(self, parsed_args):"},{"line_number":471,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":472,"context_line":"        flavor \u003d compute_client.find_flavor(parsed_args.flavor,"},{"line_number":473,"context_line":"                                            get_extra_specs\u003dTrue)"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"        access_projects \u003d None"},{"line_number":476,"context_line":"        # get access projects list of this flavor"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_bb1f7db5","line":473,"in_reply_to":"1f621f24_c98638dc","updated":"2020-11-09 12:42:34.000000000","message":"Done","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        # get access projects list of this flavor"},{"line_number":477,"context_line":"        if not flavor.is_public:"},{"line_number":478,"context_line":"            try:"},{"line_number":479,"context_line":"                flavor_access \u003d compute_client.get_flavor_access("},{"line_number":480,"context_line":"                    flavor\u003dflavor.id)"},{"line_number":481,"context_line":"                access_projects \u003d ["},{"line_number":482,"context_line":"                    utils.get_field(access, \u0027tenant_id\u0027)"},{"line_number":483,"context_line":"                    for access in flavor_access]"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_296d2c32","line":480,"range":{"start_line":479,"start_character":16,"end_line":480,"end_character":37},"updated":"2020-11-03 10:25:27.000000000","message":"nit:\n\n  flavor_access \u003d compute_client.get_flavor_access(flavor.id)\n\n(you don\u0027t need the kwarg)","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        # get access projects list of this flavor"},{"line_number":477,"context_line":"        if not flavor.is_public:"},{"line_number":478,"context_line":"            try:"},{"line_number":479,"context_line":"                flavor_access \u003d compute_client.get_flavor_access("},{"line_number":480,"context_line":"                    flavor\u003dflavor.id)"},{"line_number":481,"context_line":"                access_projects \u003d ["},{"line_number":482,"context_line":"                    utils.get_field(access, \u0027tenant_id\u0027)"},{"line_number":483,"context_line":"                    for access in flavor_access]"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_fb7a95ee","line":480,"range":{"start_line":479,"start_character":16,"end_line":480,"end_character":37},"in_reply_to":"1f621f24_296d2c32","updated":"2020-11-09 12:42:34.000000000","message":"doesn\u0027t fit (82 chars)","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"5770eddb96ec37172004715d6ebc0d12d90c1a88","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                        \"for flavor \u0027%(flavor)s\u0027: %(e)s\")"},{"line_number":487,"context_line":"                LOG.error(msg, {\u0027flavor\u0027: parsed_args.flavor, \u0027e\u0027: e})"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        # Since we need to inject \"access_project_id\" into resource - convert"},{"line_number":490,"context_line":"        # it to dict and treat it respectively"},{"line_number":491,"context_line":"        flavor \u003d flavor.to_dict()"},{"line_number":492,"context_line":"        flavor.update({"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_c400ec6a","line":489,"range":{"start_line":489,"start_character":27,"end_line":489,"end_character":33},"updated":"2020-11-02 15:17:54.000000000","message":"Seems like SDK flavor resource should maybe do this for us? Or, rather, have an API call on the Flavor resource that will fill it in - because we know always defaulting to filling in extra data sucks.","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"03e3e5fb4ce4e818325fd1303d82b425b6ec0a1c","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                        \"for flavor \u0027%(flavor)s\u0027: %(e)s\")"},{"line_number":487,"context_line":"                LOG.error(msg, {\u0027flavor\u0027: parsed_args.flavor, \u0027e\u0027: e})"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        # Since we need to inject \"access_project_id\" into resource - convert"},{"line_number":490,"context_line":"        # it to dict and treat it respectively"},{"line_number":491,"context_line":"        flavor \u003d flavor.to_dict()"},{"line_number":492,"context_line":"        flavor.update({"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_af030973","line":489,"range":{"start_line":489,"start_character":27,"end_line":489,"end_character":33},"in_reply_to":"1f621f24_c400ec6a","updated":"2020-11-02 16:25:45.000000000","message":"You are right. Will do this in a follow-up.","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        display_columns, columns \u003d _get_flavor_columns(flavor)"},{"line_number":497,"context_line":"        data \u003d utils.get_dict_properties(flavor, columns,"},{"line_number":498,"context_line":"                                         formatters\u003d_formatters)"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"        return (display_columns, data)"},{"line_number":501,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_0968301f","line":498,"range":{"start_line":498,"start_character":40,"end_line":498,"end_character":41},"updated":"2020-11-03 10:25:27.000000000","message":"style nit: hanging indent","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        display_columns, columns \u003d _get_flavor_columns(flavor)"},{"line_number":497,"context_line":"        data \u003d utils.get_dict_properties(flavor, columns,"},{"line_number":498,"context_line":"                                         formatters\u003d_formatters)"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"        return (display_columns, data)"},{"line_number":501,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_db7fd9dd","line":498,"range":{"start_line":498,"start_character":40,"end_line":498,"end_character":41},"in_reply_to":"1f621f24_0968301f","updated":"2020-11-09 12:42:34.000000000","message":"Done","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        result \u003d 0"},{"line_number":543,"context_line":"        if parsed_args.property:"},{"line_number":544,"context_line":"            try:"},{"line_number":545,"context_line":"                for key in flavor.extra_specs.keys():"},{"line_number":546,"context_line":"                    compute_client.delete_flavor_extra_specs_property("},{"line_number":547,"context_line":"                        flavor.id, key)"},{"line_number":548,"context_line":"            except Exception as e:"},{"line_number":549,"context_line":"                LOG.error(_(\"Failed to unset flavor property: %s\"), e)"},{"line_number":550,"context_line":"                result +\u003d 1"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        if parsed_args.project:"},{"line_number":553,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_09515063","line":550,"range":{"start_line":544,"start_character":0,"end_line":550,"end_character":27},"updated":"2020-11-03 10:25:27.000000000","message":"Can you invert this?\n\n  for key in flavor.extra_specs.keys():\n      try:\n          # ...\n      except Exception as e:\n          # ...\n\nAt the moment, this will catch logic errors in the call to \u0027flavor.extra_specs\u0027 which I don\u0027t think we want to do (those should bubble up).\n\nAlso, could we make the exception less broad?\n\nFinally, I note that \u0027delete_flavor_extra_specs_property\u0027 retrieves the flavor each time. That means to unset N flavors you need to make N * 2 requests to the API (one to retrieve the flavor, one to unset the extra spec property)? It seems more efficient to call \u0027delete_extra_specs_property\u0027 on the flavor you\u0027ve already retrieved above?","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        result \u003d 0"},{"line_number":543,"context_line":"        if parsed_args.property:"},{"line_number":544,"context_line":"            try:"},{"line_number":545,"context_line":"                for key in flavor.extra_specs.keys():"},{"line_number":546,"context_line":"                    compute_client.delete_flavor_extra_specs_property("},{"line_number":547,"context_line":"                        flavor.id, key)"},{"line_number":548,"context_line":"            except Exception as e:"},{"line_number":549,"context_line":"                LOG.error(_(\"Failed to unset flavor property: %s\"), e)"},{"line_number":550,"context_line":"                result +\u003d 1"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        if parsed_args.project:"},{"line_number":553,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_3b81adc4","line":550,"range":{"start_line":544,"start_character":0,"end_line":550,"end_character":27},"in_reply_to":"1f621f24_09515063","updated":"2020-11-09 12:42:34.000000000","message":"Done","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                if flavor.is_public:"},{"line_number":555,"context_line":"                    msg \u003d _(\"Cannot remove access for a public flavor\")"},{"line_number":556,"context_line":"                    raise exceptions.CommandError(msg)"},{"line_number":557,"context_line":"                else:"},{"line_number":558,"context_line":"                    project_id \u003d identity_common.find_project("},{"line_number":559,"context_line":"                        identity_client,"},{"line_number":560,"context_line":"                        parsed_args.project,"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_494b48af","line":557,"range":{"start_line":557,"start_character":16,"end_line":557,"end_character":21},"updated":"2020-11-03 10:25:27.000000000","message":"nit: not you, but this else is unnecessary since the above \u0027if\u0027 conditional will early return","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c1a4cb89e52d35ea58752323db8b5eadcda1438a","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                if flavor.is_public:"},{"line_number":555,"context_line":"                    msg \u003d _(\"Cannot remove access for a public flavor\")"},{"line_number":556,"context_line":"                    raise exceptions.CommandError(msg)"},{"line_number":557,"context_line":"                else:"},{"line_number":558,"context_line":"                    project_id \u003d identity_common.find_project("},{"line_number":559,"context_line":"                        identity_client,"},{"line_number":560,"context_line":"                        parsed_args.project,"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_7b6e852f","line":557,"range":{"start_line":557,"start_character":16,"end_line":557,"end_character":21},"in_reply_to":"1f621f24_494b48af","updated":"2020-11-09 12:42:34.000000000","message":"not sure what you actually mean, but ok. Let\u0027s do this separately - hate myself huge patches","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"68ba08bf2d9538c147f111779e88bc7b4be97bbd","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                if flavor.is_public:"},{"line_number":555,"context_line":"                    msg \u003d _(\"Cannot remove access for a public flavor\")"},{"line_number":556,"context_line":"                    raise exceptions.CommandError(msg)"},{"line_number":557,"context_line":"                else:"},{"line_number":558,"context_line":"                    project_id \u003d identity_common.find_project("},{"line_number":559,"context_line":"                        identity_client,"},{"line_number":560,"context_line":"                        parsed_args.project,"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_9a1529e8","line":557,"range":{"start_line":557,"start_character":16,"end_line":557,"end_character":21},"in_reply_to":"1f621f24_7b6e852f","updated":"2020-11-12 14:55:27.000000000","message":"Fair. What I mean is instead of:\n\n  if foo:\n      raise Exception(\u0027foo\u0027)\n  else:\n      bar()\n\nYou can do:\n\n  if foo:\n      raise Exception(\u0027foo\u0027)\n\n  bar()\n\nand recover some indentation, since a raise or return will ensure we return from the function","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"41c28547a433660623d19b469e120e093355e127","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                if flavor.is_public:"},{"line_number":555,"context_line":"                    msg \u003d _(\"Cannot remove access for a public flavor\")"},{"line_number":556,"context_line":"                    raise exceptions.CommandError(msg)"},{"line_number":557,"context_line":"                else:"},{"line_number":558,"context_line":"                    project_id \u003d identity_common.find_project("},{"line_number":559,"context_line":"                        identity_client,"},{"line_number":560,"context_line":"                        parsed_args.project,"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f621f24_c01b3470","line":557,"range":{"start_line":557,"start_character":16,"end_line":557,"end_character":21},"in_reply_to":"1f621f24_9a1529e8","updated":"2020-11-12 16:14:51.000000000","message":"same as above - Done","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"20be5a3f465023fd3c649ec90a7f445a607b310f","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                    \u0027API microversion 2.55\u0027"},{"line_number":174,"context_line":"                )"},{"line_number":175,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":176,"context_line":"            else:"},{"line_number":177,"context_line":"                args[\u0027description\u0027] \u003d parsed_args.description"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        flavor \u003d compute_client.create_flavor(**args)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1f621f24_5e20d748","line":176,"range":{"start_line":176,"start_character":12,"end_line":176,"end_character":17},"updated":"2020-11-12 14:52:43.000000000","message":"nit: don\u0027t need the else (early return above)","commit_id":"6ab742decffea17a555b8e032bf7d1d48ca0f42d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"41c28547a433660623d19b469e120e093355e127","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                    \u0027API microversion 2.55\u0027"},{"line_number":174,"context_line":"                )"},{"line_number":175,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":176,"context_line":"            else:"},{"line_number":177,"context_line":"                args[\u0027description\u0027] \u003d parsed_args.description"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        flavor \u003d compute_client.create_flavor(**args)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1f621f24_4513b666","line":176,"range":{"start_line":176,"start_character":12,"end_line":176,"end_character":17},"in_reply_to":"1f621f24_5e20d748","updated":"2020-11-12 16:14:51.000000000","message":"Done. I generally prefer to have explicit logic (so that any reader immediately understands). Agree with you that it is not necessary, will try to change my habits ;-)","commit_id":"6ab742decffea17a555b8e032bf7d1d48ca0f42d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"20be5a3f465023fd3c649ec90a7f445a607b310f","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        if parsed_args.description:"},{"line_number":450,"context_line":"            compute_client.update_flavor(flavor\u003dflavor.id,"},{"line_number":451,"context_line":"                                         description\u003dparsed_args.description)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"class ShowFlavor(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1f621f24_fa07fdc8","line":451,"updated":"2020-11-12 14:52:43.000000000","message":"nit: as a follow-up, we should move this above the block above, so that we at least attempt this. As things stand, if clearing properties fails, we will still attempt to set new properties and/or add access to a project, but we will not attempt to set the description. That feels wrong","commit_id":"6ab742decffea17a555b8e032bf7d1d48ca0f42d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"41c28547a433660623d19b469e120e093355e127","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        if parsed_args.description:"},{"line_number":450,"context_line":"            compute_client.update_flavor(flavor\u003dflavor.id,"},{"line_number":451,"context_line":"                                         description\u003dparsed_args.description)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"class ShowFlavor(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1f621f24_25167a56","line":451,"in_reply_to":"1f621f24_fa07fdc8","updated":"2020-11-12 16:14:51.000000000","message":"Done","commit_id":"6ab742decffea17a555b8e032bf7d1d48ca0f42d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"20be5a3f465023fd3c649ec90a7f445a607b310f","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        # Since we need to inject \"access_project_id\" into resource - convert"},{"line_number":486,"context_line":"        # it to dict and treat it respectively"},{"line_number":487,"context_line":"        flavor \u003d flavor.to_dict()"},{"line_number":488,"context_line":"        flavor.update({"},{"line_number":489,"context_line":"            \u0027access_project_ids\u0027: access_projects,"},{"line_number":490,"context_line":"        })"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        display_columns, columns \u003d _get_flavor_columns(flavor)"},{"line_number":493,"context_line":"        data \u003d utils.get_dict_properties("}],"source_content_type":"text/x-python","patch_set":18,"id":"1f621f24_7afbedbf","line":490,"range":{"start_line":488,"start_character":0,"end_line":490,"end_character":10},"updated":"2020-11-12 14:52:43.000000000","message":"nit:\n\n  flavor[\u0027access_project_ids\u0027] \u003d access_projects\n\nis much simpler for this case","commit_id":"6ab742decffea17a555b8e032bf7d1d48ca0f42d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"41c28547a433660623d19b469e120e093355e127","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        # Since we need to inject \"access_project_id\" into resource - convert"},{"line_number":486,"context_line":"        # it to dict and treat it respectively"},{"line_number":487,"context_line":"        flavor \u003d flavor.to_dict()"},{"line_number":488,"context_line":"        flavor.update({"},{"line_number":489,"context_line":"            \u0027access_project_ids\u0027: access_projects,"},{"line_number":490,"context_line":"        })"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        display_columns, columns \u003d _get_flavor_columns(flavor)"},{"line_number":493,"context_line":"        data \u003d utils.get_dict_properties("}],"source_content_type":"text/x-python","patch_set":18,"id":"1f621f24_a501ea08","line":490,"range":{"start_line":488,"start_character":0,"end_line":490,"end_character":10},"in_reply_to":"1f621f24_7afbedbf","updated":"2020-11-12 16:14:51.000000000","message":"Done","commit_id":"6ab742decffea17a555b8e032bf7d1d48ca0f42d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"32d4b957ebe18b33b137f9d92dc21001e8810452","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                )"},{"line_number":409,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            compute_client.update_flavor("},{"line_number":412,"context_line":"                flavor\u003dflavor.id, description\u003dparsed_args.description)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        result \u003d 0"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f621f24_4ecc5234","line":411,"range":{"start_line":411,"start_character":27,"end_line":411,"end_character":40},"updated":"2020-11-16 18:04:48.000000000","message":"This doesn\u0027t exist?\n\n  $ openstack flavor set --description \u0027A flavor\u0027 test-flavor\n  \u0027Proxy\u0027 object has no attribute \u0027update_flavor","commit_id":"cc0c762e408bf72c1948c5ef4a4e459ed92d930d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d2a9eebc72da01328e384d25679cae75e1d2b5ef","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                )"},{"line_number":409,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            compute_client.update_flavor("},{"line_number":412,"context_line":"                flavor\u003dflavor.id, description\u003dparsed_args.description)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        result \u003d 0"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f621f24_5bd40548","line":411,"range":{"start_line":411,"start_character":27,"end_line":411,"end_character":40},"in_reply_to":"1f621f24_4ecc5234","updated":"2020-11-17 11:33:52.000000000","message":"ups. Added as a dependency","commit_id":"cc0c762e408bf72c1948c5ef4a4e459ed92d930d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"32d4b957ebe18b33b137f9d92dc21001e8810452","unresolved":false,"context_lines":[{"line_number":420,"context_line":"            except Exception as e:"},{"line_number":421,"context_line":"                LOG.error(_(\"Failed to clear flavor property: %s\"), e)"},{"line_number":422,"context_line":"                result +\u003d 1"},{"line_number":423,"context_line":"        if parsed_args.property:"},{"line_number":424,"context_line":"            try:"},{"line_number":425,"context_line":"                compute_client.create_flavor_extra_specs("},{"line_number":426,"context_line":"                    flavor.id, parsed_args.property)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f621f24_4e67324e","line":423,"updated":"2020-11-16 18:04:48.000000000","message":"nit: not you, but a newline before this would be lovely","commit_id":"cc0c762e408bf72c1948c5ef4a4e459ed92d930d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d2a9eebc72da01328e384d25679cae75e1d2b5ef","unresolved":false,"context_lines":[{"line_number":420,"context_line":"            except Exception as e:"},{"line_number":421,"context_line":"                LOG.error(_(\"Failed to clear flavor property: %s\"), e)"},{"line_number":422,"context_line":"                result +\u003d 1"},{"line_number":423,"context_line":"        if parsed_args.property:"},{"line_number":424,"context_line":"            try:"},{"line_number":425,"context_line":"                compute_client.create_flavor_extra_specs("},{"line_number":426,"context_line":"                    flavor.id, parsed_args.property)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f621f24_5bc085e1","line":423,"in_reply_to":"1f621f24_4e67324e","updated":"2020-11-17 11:33:52.000000000","message":"Done","commit_id":"cc0c762e408bf72c1948c5ef4a4e459ed92d930d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"32d4b957ebe18b33b137f9d92dc21001e8810452","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def take_action(self, parsed_args):"},{"line_number":466,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":467,"context_line":"        flavor \u003d compute_client.find_flavor("},{"line_number":468,"context_line":"            parsed_args.flavor, get_extra_specs\u003dTrue)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        access_projects \u003d None"},{"line_number":471,"context_line":"        # get access projects list of this flavor"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f621f24_ae0c0694","line":468,"range":{"start_line":467,"start_character":0,"end_line":468,"end_character":53},"updated":"2020-11-16 18:04:48.000000000","message":"This needs to error out if it can\u0027t find the flavor:\n\n  $ openstack flavor show blahblahblah -f yaml\n  \u0027NoneType\u0027 object has no attribute \u0027is_public\u0027\n\nYou do this alread for the SetFlavor below","commit_id":"cc0c762e408bf72c1948c5ef4a4e459ed92d930d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d2a9eebc72da01328e384d25679cae75e1d2b5ef","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def take_action(self, parsed_args):"},{"line_number":466,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":467,"context_line":"        flavor \u003d compute_client.find_flavor("},{"line_number":468,"context_line":"            parsed_args.flavor, get_extra_specs\u003dTrue)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        access_projects \u003d None"},{"line_number":471,"context_line":"        # get access projects list of this flavor"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f621f24_dbb3f596","line":468,"range":{"start_line":467,"start_character":0,"end_line":468,"end_character":53},"in_reply_to":"1f621f24_ae0c0694","updated":"2020-11-17 11:33:52.000000000","message":"Done","commit_id":"cc0c762e408bf72c1948c5ef4a4e459ed92d930d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"32d4b957ebe18b33b137f9d92dc21001e8810452","unresolved":false,"context_lines":[{"line_number":534,"context_line":""},{"line_number":535,"context_line":"        result \u003d 0"},{"line_number":536,"context_line":"        if parsed_args.property:"},{"line_number":537,"context_line":"            for key in flavor.extra_specs.keys():"},{"line_number":538,"context_line":"                try:"},{"line_number":539,"context_line":"                    compute_client.delete_flavor_extra_specs_property("},{"line_number":540,"context_line":"                        flavor.id, key)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f621f24_0e709a07","line":537,"range":{"start_line":537,"start_character":23,"end_line":537,"end_character":48},"updated":"2020-11-16 18:04:48.000000000","message":"Wait, what? You\u0027re deleting all the flavor extra specs? Shouldn\u0027t this be:\n\n  for property in parsed_args.property:\n      ...\n\nI suspect this is copy-pasta from [1].\n\nCan you add a test when you fix this to prevent it regressing, please\n\n[1] https://review.opendev.org/#/c/750151/20/openstackclient/compute/v2/flavor.py@415","commit_id":"cc0c762e408bf72c1948c5ef4a4e459ed92d930d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d2a9eebc72da01328e384d25679cae75e1d2b5ef","unresolved":false,"context_lines":[{"line_number":534,"context_line":""},{"line_number":535,"context_line":"        result \u003d 0"},{"line_number":536,"context_line":"        if parsed_args.property:"},{"line_number":537,"context_line":"            for key in flavor.extra_specs.keys():"},{"line_number":538,"context_line":"                try:"},{"line_number":539,"context_line":"                    compute_client.delete_flavor_extra_specs_property("},{"line_number":540,"context_line":"                        flavor.id, key)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f621f24_db7815c5","line":537,"range":{"start_line":537,"start_character":23,"end_line":537,"end_character":48},"in_reply_to":"1f621f24_0e709a07","updated":"2020-11-17 11:33:52.000000000","message":"Nice catch ;-)\nThe test is tricky, but done","commit_id":"cc0c762e408bf72c1948c5ef4a4e459ed92d930d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"702870b8d537d8435379c94439f4f6ab361403c5","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"_formatters \u003d {"},{"line_number":36,"context_line":"    \u0027extra_specs\u0027: format_columns.DictColumn,"},{"line_number":37,"context_line":"    \u0027properties\u0027: format_columns.DictColumn"},{"line_number":38,"context_line":"}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1f621f24_549a0f61","line":37,"updated":"2020-11-17 18:35:43.000000000","message":"nit: trailing comma would be nice","commit_id":"30a85418b32428bbe98b9577e43bc2489e885dda"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"702870b8d537d8435379c94439f4f6ab361403c5","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            compute_client.update_flavor("},{"line_number":412,"context_line":"                flavor\u003dflavor.id, description\u003dparsed_args.description)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        result \u003d 0"},{"line_number":415,"context_line":"        if parsed_args.no_property:"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f621f24_34be73d4","line":412,"updated":"2020-11-17 18:35:43.000000000","message":"This is failing. Am I doing something wrong?\n\n  $ openstack flavor set --description \u0027hello, world\u0027 foo\n  The commit method is not supported for openstack.compute.v2.flavor.Flavor\n\nLater: okay, you need to change [1]\n\n[1] https://review.opendev.org/#/c/762989/","commit_id":"30a85418b32428bbe98b9577e43bc2489e885dda"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"702870b8d537d8435379c94439f4f6ab361403c5","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        if result \u003e 0:"},{"line_number":450,"context_line":"            raise exceptions.CommandError(_(\"Command Failed: One or more of\""},{"line_number":451,"context_line":"                                            \" the operations failed\"))"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"class ShowFlavor(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f621f24_3430339f","line":451,"updated":"2020-11-17 18:35:43.000000000","message":"As a follow-up, could you output the updated flavor? This is what we do for e.g. \u0027openstack aggregate set\u0027.\n\nLater: wait, no we don\u0027t. I was confusing this with the \u0027aggregate add host\u0027 command. It\u0027s weird that we don\u0027t but at least we\u0027re consistent.","commit_id":"30a85418b32428bbe98b9577e43bc2489e885dda"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"702870b8d537d8435379c94439f4f6ab361403c5","unresolved":false,"context_lines":[{"line_number":532,"context_line":"                ignore_missing\u003dFalse)"},{"line_number":533,"context_line":"        except sdk_exceptions.ResourceNotFound as e:"},{"line_number":534,"context_line":"            raise exceptions.CommandError(_(e.message))"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        result \u003d 0"},{"line_number":537,"context_line":"        if parsed_args.property:"},{"line_number":538,"context_line":"            for key in parsed_args.property:"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f621f24_140b778d","line":535,"updated":"2020-11-17 18:35:43.000000000","message":"We now have the extra specs to hand because of the flavor, right? If so, it would be a nice usability improvement to quickly compare what the user has provided and validate them against the flavor. That would prevent ugly errors from the below like:\n\n  $ openstack flavor unset foo --property demo\n  Failed to unset flavor property: ResourceNotFound: 404: Client Error for url: http://172.20.4.87/compute/v2.1/flavors/05fea83d-ef61-4b6a-8015-87f1331c16a9/os-extra_specs/demo, Flavor 05fea83d-ef61-4b6a-8015-87f1331c16a9 has no extra specs with key demo.\n  Command Failed: One or more of the operations failed\n\nOn the flipside, it does open us up to TOCTOU bugs...","commit_id":"30a85418b32428bbe98b9577e43bc2489e885dda"}],"openstackclient/tests/unit/compute/v2/fakes.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8e136cead32540e324fe54276f2ba8d135183017","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        self.extensions \u003d mock.Mock()"},{"line_number":165,"context_line":"        self.extensions.resource_class \u003d fakes.FakeResource(None, {})"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        self.flavors \u003d mock.Mock()"},{"line_number":168,"context_line":"#        self.flavors.resource_class \u003d fakes.FakeResource(None, {})"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        self.flavor_access \u003d mock.Mock()"},{"line_number":171,"context_line":"        self.flavor_access.resource_class \u003d fakes.FakeResource(None, {})"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f65232a_a84db873","line":168,"range":{"start_line":167,"start_character":0,"end_line":168,"end_character":67},"updated":"2020-10-27 16:11:34.000000000","message":"Can you just remove these now?","commit_id":"f813f6503d39d0b1320026dc703956a643f91e06"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"98ab04546e22afe0506eb10542818485ee82d8dc","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        self.extensions \u003d mock.Mock()"},{"line_number":165,"context_line":"        self.extensions.resource_class \u003d fakes.FakeResource(None, {})"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        self.flavors \u003d mock.Mock()"},{"line_number":168,"context_line":"#        self.flavors.resource_class \u003d fakes.FakeResource(None, {})"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        self.flavor_access \u003d mock.Mock()"},{"line_number":171,"context_line":"        self.flavor_access.resource_class \u003d fakes.FakeResource(None, {})"}],"source_content_type":"text/x-python","patch_set":15,"id":"1f621f24_41ca0e6d","line":168,"range":{"start_line":167,"start_character":0,"end_line":168,"end_character":67},"in_reply_to":"3f65232a_a84db873","updated":"2020-11-02 14:34:43.000000000","message":"Done","commit_id":"f813f6503d39d0b1320026dc703956a643f91e06"}],"releasenotes/notes/switch-flavor-to-sdk-b874a3c39559815e.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8e136cead32540e324fe54276f2ba8d135183017","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Switches compute.flavor operations from direct API calls (novaclient) to OpenStackSDK."},{"line_number":4,"context_line":"fixes:"},{"line_number":5,"context_line":"    Fix \u0027-f json\u0027 output of the flavor properties to return valid json object"},{"line_number":6,"context_line":"    instead of stringying it."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3f65232a_681d6065","line":6,"range":{"start_line":4,"start_character":0,"end_line":6,"end_character":29},"updated":"2020-10-27 16:11:34.000000000","message":"This should be a separate, backportable precursor patch","commit_id":"f813f6503d39d0b1320026dc703956a643f91e06"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"98ab04546e22afe0506eb10542818485ee82d8dc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Switches compute.flavor operations from direct API calls (novaclient) to OpenStackSDK."},{"line_number":4,"context_line":"fixes:"},{"line_number":5,"context_line":"    Fix \u0027-f json\u0027 output of the flavor properties to return valid json object"},{"line_number":6,"context_line":"    instead of stringying it."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"1f621f24_e18fda2b","line":6,"range":{"start_line":4,"start_character":0,"end_line":6,"end_character":29},"in_reply_to":"3f65232a_681d6065","updated":"2020-11-02 14:34:43.000000000","message":"Done","commit_id":"f813f6503d39d0b1320026dc703956a643f91e06"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8e136cead32540e324fe54276f2ba8d135183017","unresolved":false,"context_lines":[{"line_number":4,"context_line":"fixes:"},{"line_number":5,"context_line":"    Fix \u0027-f json\u0027 output of the flavor properties to return valid json object"},{"line_number":6,"context_line":"    instead of stringying it."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3f65232a_4d035610","line":7,"updated":"2020-10-27 16:11:34.000000000","message":"extra newline","commit_id":"f813f6503d39d0b1320026dc703956a643f91e06"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"98ab04546e22afe0506eb10542818485ee82d8dc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"fixes:"},{"line_number":5,"context_line":"    Fix \u0027-f json\u0027 output of the flavor properties to return valid json object"},{"line_number":6,"context_line":"    instead of stringying it."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"1f621f24_a1ae8295","line":7,"in_reply_to":"3f65232a_4d035610","updated":"2020-11-02 14:34:43.000000000","message":"Done","commit_id":"f813f6503d39d0b1320026dc703956a643f91e06"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"5770eddb96ec37172004715d6ebc0d12d90c1a88","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Switches compute.flavor operations from direct API calls (novaclient) to OpenStackSDK."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"1f621f24_6492b84d","line":3,"range":{"start_line":3,"start_character":44,"end_line":3,"end_character":73},"updated":"2020-11-02 15:17:54.000000000","message":"I\u0027d just say novaclient - both make direct REST api calls.","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44c1d1d34891d26309582f4e6b751867a41e520d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Switches compute.flavor operations from direct API calls (novaclient) to OpenStackSDK."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"1f621f24_29db6ced","line":3,"range":{"start_line":3,"start_character":44,"end_line":3,"end_character":73},"in_reply_to":"1f621f24_6492b84d","updated":"2020-11-03 10:25:27.000000000","message":"+1","commit_id":"5a06590ea576425c77f729fe1015319b2541585d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"20be5a3f465023fd3c649ec90a7f445a607b310f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Switches compute.flavor operations from direct API calls (novaclient) to OpenStackSDK."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"1f621f24_da3321aa","line":3,"range":{"start_line":3,"start_character":76,"end_line":3,"end_character":90},"updated":"2020-11-12 14:52:43.000000000","message":"nit: \u003c 80 chars","commit_id":"6ab742decffea17a555b8e032bf7d1d48ca0f42d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"41c28547a433660623d19b469e120e093355e127","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    Switches compute.flavor operations from direct API calls (novaclient) to OpenStackSDK."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"1f621f24_e0047017","line":3,"range":{"start_line":3,"start_character":76,"end_line":3,"end_character":90},"in_reply_to":"1f621f24_da3321aa","updated":"2020-11-12 16:14:51.000000000","message":"Done","commit_id":"6ab742decffea17a555b8e032bf7d1d48ca0f42d"}]}
