)]}'
{"lower-constraints.txt":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1f71237ff58674dc157d7e1e504a48c5b051f12","unresolved":false,"context_lines":[{"line_number":52,"context_line":"netifaces\u003d\u003d0.10.4"},{"line_number":53,"context_line":"openstacksdk\u003d\u003d0.36.0"},{"line_number":54,"context_line":"os-client-config\u003d\u003d1.28.0"},{"line_number":55,"context_line":"os-service-types\u003d\u003d1.2.0"},{"line_number":56,"context_line":"os-testr\u003d\u003d1.0.0"},{"line_number":57,"context_line":"osc-lib\u003d\u003d2.0.0"},{"line_number":58,"context_line":"osc-placement\u003d\u003d1.7.0"}],"source_content_type":"text/plain","patch_set":20,"id":"df33271e_917db1e9","line":55,"range":{"start_line":55,"start_character":18,"end_line":55,"end_character":23},"updated":"2020-03-23 15:57:41.000000000","message":"Per the job, this needs to be bumped to 1.7.0 to keep things happy with openstacksdk","commit_id":"3a61363a1a6156605c03a7d014f5fa838832ad88"}],"openstackclient/compute/v2/server.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6cf61ddbb396969b2fe20f4a8d19d9d1a4a8a810","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    if image_info:"},{"line_number":144,"context_line":"        image_id \u003d image_info.get(\u0027id\u0027, \u0027\u0027)"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            image \u003d image_client.get_image(image_id)"},{"line_number":147,"context_line":"            info[\u0027image\u0027] \u003d \"%s (%s)\" % (image.name, image_id)"},{"line_number":148,"context_line":"        except Exception:"},{"line_number":149,"context_line":"            info[\u0027image\u0027] \u003d image_id"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f493fa4_22f28c07","line":146,"updated":"2020-05-04 22:29:24.000000000","message":"This should have been `find_image` to match the functionality of `find_resource` (lookup by ID, then name fallback).","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"0397a7f067356e5da84ccd5d4f12f255e0dbe3dc","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    if image_info:"},{"line_number":144,"context_line":"        image_id \u003d image_info.get(\u0027id\u0027, \u0027\u0027)"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            image \u003d image_client.get_image(image_id)"},{"line_number":147,"context_line":"            info[\u0027image\u0027] \u003d \"%s (%s)\" % (image.name, image_id)"},{"line_number":148,"context_line":"        except Exception:"},{"line_number":149,"context_line":"            info[\u0027image\u0027] \u003d image_id"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f493fa4_42c19880","line":146,"in_reply_to":"1f493fa4_22f28c07","updated":"2020-05-04 22:34:55.000000000","message":"Ah, actually maybe this one is OK given it is guaranteed to be an ID?","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":747,"context_line":"                             \u0027chosen_one\u0027: img_uuid_list[0]})"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"            def _match_image(image_api, wanted_properties):"},{"line_number":750,"context_line":"                image_list \u003d image_api.images()"},{"line_number":751,"context_line":"                images_matched \u003d []"},{"line_number":752,"context_line":"                for img in image_list:"},{"line_number":753,"context_line":"                    img_dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_95910b9d","line":750,"updated":"2020-03-24 14:36:49.000000000","message":"nit: It\u0027s not really a list. It doesn\u0027t matter here, but maybe worth renaming?","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6cf61ddbb396969b2fe20f4a8d19d9d1a4a8a810","unresolved":false,"context_lines":[{"line_number":1923,"context_line":"        # If parsed_args.image is not set, default to the currently used one."},{"line_number":1924,"context_line":"        image_id \u003d parsed_args.image or server.to_dict().get("},{"line_number":1925,"context_line":"            \u0027image\u0027, {}).get(\u0027id\u0027)"},{"line_number":1926,"context_line":"        image \u003d image_client.get_image(image_id)"},{"line_number":1927,"context_line":""},{"line_number":1928,"context_line":"        kwargs \u003d {}"},{"line_number":1929,"context_line":"        if parsed_args.property:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f493fa4_c2ec882b","line":1926,"updated":"2020-05-04 22:29:24.000000000","message":"This should have been `find_image` to match the functionality of `find_resource` (lookup by ID, then name fallback).","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"}],"openstackclient/image/client.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        return instance.sdk_connection.image"},{"line_number":48,"context_line":"    else:"},{"line_number":49,"context_line":"        \"\"\"Returns an image service client\"\"\""},{"line_number":50,"context_line":"        image_client \u003d utils.get_client_class("},{"line_number":51,"context_line":"            API_NAME,"},{"line_number":52,"context_line":"            instance._api_version[API_NAME],"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_554ae326","line":49,"updated":"2020-03-24 14:36:49.000000000","message":"misplaced docstring","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"}],"openstackclient/image/v2/image.py":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"37332bf37349eadaf1c0b17966a80e19397ed370","unresolved":false,"context_lines":[{"line_number":754,"context_line":"        )"},{"line_number":755,"context_line":"        data \u003d image_client.images.data(image.id)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        if data.wrapped is None:"},{"line_number":758,"context_line":"            msg \u003d _(\u0027Image %s has no data.\u0027) % image.id"},{"line_number":759,"context_line":"            LOG.error(msg)"},{"line_number":760,"context_line":"            self.app.stdout.write(msg + \u0027\\n\u0027)"},{"line_number":761,"context_line":"            raise SystemExit"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"        gc_utils.save_image(data, parsed_args.file)"},{"line_number":764,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_0b4e0596","side":"PARENT","line":761,"range":{"start_line":757,"start_character":0,"end_line":761,"end_character":28},"updated":"2019-11-07 17:40:44.000000000","message":"Removing this makes it no longer an error to attempt to save an empty image.  I actually agree with the change but it needs to be release-noted.","commit_id":"d17a1c8039807cdac29e77eb5f0724d181bdd831"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"37332bf37349eadaf1c0b17966a80e19397ed370","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            image \u003d sys.stdin"},{"line_number":125,"context_line":"            if hasattr(sys.stdin, \u0027buffer\u0027):"},{"line_number":126,"context_line":"                image \u003d sys.stdin.buffer"},{"line_number":127,"context_line":"            # Open a temp file and hold control of it"},{"line_number":128,"context_line":"            # since it might be reopened by underlying processes"},{"line_number":129,"context_line":"            (tmp_fd, fname) \u003d tempfile.mkstemp(prefix\u003d\u0027osc_image\u0027)"},{"line_number":130,"context_line":"            LOG.debug(\u0027Flusing content of STDIN to tempfile %s\u0027 % fname)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_ab10115b","line":127,"range":{"start_line":127,"start_character":14,"end_line":127,"end_character":53},"updated":"2019-11-07 17:40:44.000000000","message":"I would really like to be able to continue to pipe images to stdin and not locally buffer them whenever possible.  Maybe we need a switch for one or the other behaviours?  It would be OK to throw an error if the back-end can not support that (Swift case).\n\nIf the SDK simply can not do that, nor wants to, I\u0027m OK to carry that code in the openstackclient.api bits.  Can you tell I _really_ don\u0027t want to lose this ability?","commit_id":"3ae61fc0604a0a341917b77b3ad7afd062e61905"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"e8bd2f4738acaed323838f328f03c45cc03be893","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            image \u003d sys.stdin"},{"line_number":125,"context_line":"            if hasattr(sys.stdin, \u0027buffer\u0027):"},{"line_number":126,"context_line":"                image \u003d sys.stdin.buffer"},{"line_number":127,"context_line":"            # Open a temp file and hold control of it"},{"line_number":128,"context_line":"            # since it might be reopened by underlying processes"},{"line_number":129,"context_line":"            (tmp_fd, fname) \u003d tempfile.mkstemp(prefix\u003d\u0027osc_image\u0027)"},{"line_number":130,"context_line":"            LOG.debug(\u0027Flusing content of STDIN to tempfile %s\u0027 % fname)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_b64ae97f","line":127,"range":{"start_line":127,"start_character":14,"end_line":127,"end_character":53},"in_reply_to":"3fa7e38b_ab10115b","updated":"2019-12-12 20:37:29.000000000","message":"Hrm. SO - there\u0027s a few things that might go south here. But I\u0027m not *opposed* to handling this in the SDK.\n\nThings like the swift backend case would need to throw an error like you mention - or, perhaps it\u0027s ok for someone to do single-threaded upload if they\u0027re reading from stdin anyway. Maybe we default to \"raise error\" but provide an sdk flag - and an OSC cli option to say \"yeah, that\u0027s fine, just do a single thread\"\n\nWe\u0027d also not be able to do checksums in the way we are now - but we actually do already accumulate them, so maybe that\u0027s ok too.\n\nIn any case - if someone wants to figure out how to add this to the currently-absurd-pile-of-complicated-image code, I will absolutely not stop them. :)","commit_id":"3ae61fc0604a0a341917b77b3ad7afd062e61905"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"37332bf37349eadaf1c0b17966a80e19397ed370","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            ).id"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        # open the file first to ensure any failures are handled before the"},{"line_number":391,"context_line":"        # image is created. If we got data through stdin - flush it to"},{"line_number":392,"context_line":"        # temporary file to allow image upload through Swift and checksum"},{"line_number":393,"context_line":"        # validation"},{"line_number":394,"context_line":"        (fp, fname) \u003d get_data_file(parsed_args)"},{"line_number":395,"context_line":"        info \u003d {}"},{"line_number":396,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_cba0ed45","line":393,"range":{"start_line":391,"start_character":0,"end_line":393,"end_character":20},"updated":"2019-11-07 17:40:44.000000000","message":"This is a significant change in behaviour and needs to be at a minimum release-noted.  The use case for me was usually needing to decompress an image while uploading it, often due to space issues (20GB+ Windows images are not fun)","commit_id":"3ae61fc0604a0a341917b77b3ad7afd062e61905"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"37332bf37349eadaf1c0b17966a80e19397ed370","unresolved":false,"context_lines":[{"line_number":682,"context_line":"#         data \u003d []"},{"line_number":683,"context_line":"#         limit \u003d None"},{"line_number":684,"context_line":"        if \u0027limit\u0027 in kwargs:"},{"line_number":685,"context_line":"            # Disable automatic pagination in SDK"},{"line_number":686,"context_line":"            kwargs[\u0027paginated\u0027] \u003d False"},{"line_number":687,"context_line":"#             limit \u003d kwargs[\u0027limit\u0027]"},{"line_number":688,"context_line":"        data \u003d list(image_client.images(**kwargs))"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_ab425167","line":685,"range":{"start_line":685,"start_character":14,"end_line":685,"end_character":49},"updated":"2019-11-07 17:40:44.000000000","message":"Woot!!!! \\o/","commit_id":"3ae61fc0604a0a341917b77b3ad7afd062e61905"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                        password\u003dpw)"},{"line_number":432,"context_line":"                except Exception:"},{"line_number":433,"context_line":"                    msg \u003d (_(\"Error during sign operation: private key \""},{"line_number":434,"context_line":"                             \"could not be loaded.\"))"},{"line_number":435,"context_line":"                    raise exceptions.CommandError(msg)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"                signature \u003d signer.generate_signature(fp)"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_956d8b9a","line":434,"updated":"2020-03-24 14:36:49.000000000","message":"nit: unneeded change?","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                kwargs[\u0027img_signature_hash_method\u0027] \u003d signer.hash_method"},{"line_number":442,"context_line":"                if signer.padding_method:"},{"line_number":443,"context_line":"                    kwargs[\u0027img_signature_key_type\u0027] \u003d \\"},{"line_number":444,"context_line":"                        signer.padding_method"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # If a volume is specified."},{"line_number":447,"context_line":"        if parsed_args.volume:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_3570ff72","line":444,"updated":"2020-03-24 14:36:49.000000000","message":"nit: unneeded change?","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":628,"context_line":"        if parsed_args.limit:"},{"line_number":629,"context_line":"            kwargs[\u0027limit\u0027] \u003d parsed_args.limit"},{"line_number":630,"context_line":"        if parsed_args.marker:"},{"line_number":631,"context_line":"            kwargs[\u0027marker\u0027] \u003d image_client.find_image(parsed_args.marker).id"},{"line_number":632,"context_line":"        if parsed_args.name:"},{"line_number":633,"context_line":"            kwargs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":634,"context_line":"        if parsed_args.status:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_d50433c9","line":631,"updated":"2020-03-24 14:36:49.000000000","message":"ignore_missing\u003dFalse?","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":716,"context_line":"            \"Status\""},{"line_number":717,"context_line":"        )"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        image_id \u003d image_client.find_image(parsed_args.image).id"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":"        data \u003d image_client.members(image\u003dimage_id)"},{"line_number":722,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_f513370c","line":719,"updated":"2020-03-24 14:36:49.000000000","message":"ditto?","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":779,"context_line":""},{"line_number":780,"context_line":"    def take_action(self, parsed_args):"},{"line_number":781,"context_line":"        image_client \u003d self.app.client_manager.image"},{"line_number":782,"context_line":"        image \u003d image_client.find_image(parsed_args.image)"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        image_client.download_image(image.id, output\u003dparsed_args.file)"},{"line_number":785,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_55f823c3","line":782,"updated":"2020-03-24 14:36:49.000000000","message":"ditto?","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"                                        ignore_missing\u003dFalse)"},{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"        # image \u003d utils.find_resource("},{"line_number":1027,"context_line":"        #     image_client.images, parsed_args.image)"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        activation_status \u003d None"},{"line_number":1030,"context_line":"        if parsed_args.deactivate:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_35f59fcc","line":1027,"updated":"2020-03-24 14:36:49.000000000","message":"nit: remove","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":1147,"context_line":"                    # out, what was changed inside"},{"line_number":1148,"context_line":"                    # NOTE: ping gtema to improve that in SDK"},{"line_number":1149,"context_line":"                    new_props \u003d kwargs.get(\u0027properties\u0027,"},{"line_number":1150,"context_line":"                                           image.get(\u0027properties\u0027).copy())"},{"line_number":1151,"context_line":"                    new_props.pop(k, None)"},{"line_number":1152,"context_line":"                    kwargs[\u0027properties\u0027] \u003d new_props"},{"line_number":1153,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_351e3f0c","line":1150,"updated":"2020-03-24 14:36:49.000000000","message":"using `get` assumes you expect None, copy() won\u0027t work on it","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"}],"releasenotes/notes/use_sdk_for_image-f49d2df38e7d9f81.yaml":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"37332bf37349eadaf1c0b17966a80e19397ed370","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Image service for v2 is switched from using glanceclient to OpenStackSDK."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3fa7e38b_ae057f12","line":4,"range":{"start_line":4,"start_character":0,"end_line":4,"end_character":4},"updated":"2019-11-07 17:40:44.000000000","message":"We also need notes for all of the behaviour changes","commit_id":"3ae61fc0604a0a341917b77b3ad7afd062e61905"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"10313f27c17f2d64cc1fed2fb3ff81c44c85af83","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Image service for v2 is switched from using glanceclient to OpenStackSDK."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"df33271e_7518c71c","line":2,"updated":"2020-03-24 14:36:49.000000000","message":"It\u0027s not a feature, should probably go to \"others\"","commit_id":"60e7c51df4cf061ebbb435a959ad63c7d3a296bf"}]}
