)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"6da9702fa770321bc0071d8e3d07ce86b9e17dff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d0f9b81b_d2a9def6","updated":"2026-08-07 08:10:15.000000000","message":"Thank you Emma","commit_id":"dc04f3a8185ce0d41b405e8a94dfdc70f3002d03"}],"ceilometer/tests/unit/fakes.py":[{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"8c95c6770dfb65ccd71f5d9b335a5434bc56dfa6","unresolved":true,"context_lines":[{"line_number":452,"context_line":"        return iter([VPN_SERVICE_0])"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"IMAGE_UBUNTU \u003d openstack.image.v2.image.Image("},{"line_number":456,"context_line":"    connection\u003dNone,"},{"line_number":457,"context_line":"    name\u003d\"ubuntu-12.04-x86\","},{"line_number":458,"context_line":"    disk_format\u003d\"raw\", container_format\u003d\"bare\","}],"source_content_type":"text/x-python","patch_set":3,"id":"826acf86_dc8b056e","line":455,"updated":"2026-08-05 11:09:50.000000000","message":"Just out of curiosity, why does this image misses several fields present in the rest of the images? It lacks visibility, checksum, protected, created_at, and updated_at, which are present in the other fixtures.\n\nThe extract_image_metadata() method in glance.py reads all of these via getattr(). The SDK Resource defaults unset Body fields to None so this won\u0027t crash, but it means IMAGE_UBUNTU exercises a different code path (all None metadata) than the other images, and this inconsistency isn\u0027t intentional or tested.\n\nWe should either add the missing metadata fields or add a comment explaining why we choose to not add them.","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"06a464652f482eb4c4b8f8a32055ac09926acde7","unresolved":true,"context_lines":[{"line_number":452,"context_line":"        return iter([VPN_SERVICE_0])"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"IMAGE_UBUNTU \u003d openstack.image.v2.image.Image("},{"line_number":456,"context_line":"    connection\u003dNone,"},{"line_number":457,"context_line":"    name\u003d\"ubuntu-12.04-x86\","},{"line_number":458,"context_line":"    disk_format\u003d\"raw\", container_format\u003d\"bare\","}],"source_content_type":"text/x-python","patch_set":3,"id":"d5d282ed_4cc7b703","line":455,"in_reply_to":"826acf86_dc8b056e","updated":"2026-08-06 20:36:49.000000000","message":"This is used in one of the basic tests for the glance client, rather than the pollsters. It checks that the basic image is returned. I can add more metadata.\n\n\nThere are specific images used (added in a later review, that check the missing metadata paths)","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"8c95c6770dfb65ccd71f5d9b335a5434bc56dfa6","unresolved":true,"context_lines":[{"line_number":498,"context_line":"    updated_at\u003d\"2026-01-26T14:35:31Z\","},{"line_number":499,"context_line":"    tags\u003d[],"},{"line_number":500,"context_line":")"},{"line_number":501,"context_line":"IMAGE_CIRROS_DISK \u003d openstack.image.v2.image.Image("},{"line_number":502,"context_line":"   connection\u003dNone,"},{"line_number":503,"context_line":"   name\u003d\"cirros-0.6.1-x86_64-disk\","},{"line_number":504,"context_line":"   disk_format\u003d\"qcow2\", container_format\u003d\"bare\","}],"source_content_type":"text/x-python","patch_set":3,"id":"2b8ea11b_148b92dc","line":501,"updated":"2026-08-05 11:09:50.000000000","message":"This uses 3 space indentation, when it should be 4 space.\n\nI would have said that this should have been catched up by pep8, but yet.","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"06a464652f482eb4c4b8f8a32055ac09926acde7","unresolved":true,"context_lines":[{"line_number":498,"context_line":"    updated_at\u003d\"2026-01-26T14:35:31Z\","},{"line_number":499,"context_line":"    tags\u003d[],"},{"line_number":500,"context_line":")"},{"line_number":501,"context_line":"IMAGE_CIRROS_DISK \u003d openstack.image.v2.image.Image("},{"line_number":502,"context_line":"   connection\u003dNone,"},{"line_number":503,"context_line":"   name\u003d\"cirros-0.6.1-x86_64-disk\","},{"line_number":504,"context_line":"   disk_format\u003d\"qcow2\", container_format\u003d\"bare\","}],"source_content_type":"text/x-python","patch_set":3,"id":"6aebabc3_97d9d216","line":501,"in_reply_to":"2b8ea11b_148b92dc","updated":"2026-08-06 20:36:49.000000000","message":"I agree that it should be caught be pep8, nice spot.","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"8c95c6770dfb65ccd71f5d9b335a5434bc56dfa6","unresolved":true,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"class FakeSDKImageClient:"},{"line_number":520,"context_line":"    def __init__(self, images):"},{"line_number":521,"context_line":"        self._images \u003d images if images is not None else IMAGE_LIST"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def images(self, **query):"}],"source_content_type":"text/x-python","patch_set":3,"id":"b4a5e02c_d78a1463","line":520,"updated":"2026-08-05 11:09:50.000000000","message":"All the rest of the methods uses defaults parameters. This is not a big deal but as long as you have to address other comments, it would be more consistent to change images to \"images\u003dNone\" here","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"06a464652f482eb4c4b8f8a32055ac09926acde7","unresolved":true,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"class FakeSDKImageClient:"},{"line_number":520,"context_line":"    def __init__(self, images):"},{"line_number":521,"context_line":"        self._images \u003d images if images is not None else IMAGE_LIST"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def images(self, **query):"}],"source_content_type":"text/x-python","patch_set":3,"id":"35653f6c_cadf2f19","line":520,"in_reply_to":"b4a5e02c_d78a1463","updated":"2026-08-06 20:36:49.000000000","message":"It should be images\u003dNone.","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"8c95c6770dfb65ccd71f5d9b335a5434bc56dfa6","unresolved":true,"context_lines":[{"line_number":530,"context_line":"        :rtype: :class:`~openstack.image.v1.image.Image`"},{"line_number":531,"context_line":"        \"\"\""},{"line_number":532,"context_line":"        if query:"},{"line_number":533,"context_line":"            raise NotImplementedError("},{"line_number":534,"context_line":"                \"FakeSDKImageClient.images does not support query param\")"},{"line_number":535,"context_line":"        return iter(self._images)"},{"line_number":536,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ee86479a_5810aa9e","line":533,"updated":"2026-08-05 11:09:50.000000000","message":"This is a rather new behaviour. All other Fake classes just silently accept and ignore query params, why this specific Fake class must be different from the others?","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"06a464652f482eb4c4b8f8a32055ac09926acde7","unresolved":true,"context_lines":[{"line_number":530,"context_line":"        :rtype: :class:`~openstack.image.v1.image.Image`"},{"line_number":531,"context_line":"        \"\"\""},{"line_number":532,"context_line":"        if query:"},{"line_number":533,"context_line":"            raise NotImplementedError("},{"line_number":534,"context_line":"                \"FakeSDKImageClient.images does not support query param\")"},{"line_number":535,"context_line":"        return iter(self._images)"},{"line_number":536,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"4082ab15_fd9989ad","line":533,"in_reply_to":"ee86479a_5810aa9e","updated":"2026-08-06 20:36:49.000000000","message":"I got caught with a testing bug, and didn\u0027t want anyone else to get caught that way next time.","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"8c95c6770dfb65ccd71f5d9b335a5434bc56dfa6","unresolved":true,"context_lines":[{"line_number":534,"context_line":"                \"FakeSDKImageClient.images does not support query param\")"},{"line_number":535,"context_line":"        return iter(self._images)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def get_image(self, image):"},{"line_number":538,"context_line":"        \"\"\"Get a single image"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        based on ??? \u003cTODO\u003e"}],"source_content_type":"text/x-python","patch_set":3,"id":"09844ac8_f84248bc","line":537,"updated":"2026-08-05 11:09:50.000000000","message":"This method is never used in the code. I would that it will be used in one of the subsequent patches, but that means we have to merge this as dead, untested code here and review it in combination with other patches.\n\nIt would be much better if you do less atomic changes and add this get_image method along with the changes that actually use/test it. If not, it is quite difficult to review that everything ties together.","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"06a464652f482eb4c4b8f8a32055ac09926acde7","unresolved":true,"context_lines":[{"line_number":534,"context_line":"                \"FakeSDKImageClient.images does not support query param\")"},{"line_number":535,"context_line":"        return iter(self._images)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def get_image(self, image):"},{"line_number":538,"context_line":"        \"\"\"Get a single image"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        based on ??? \u003cTODO\u003e"}],"source_content_type":"text/x-python","patch_set":3,"id":"47910c68_fc39c0e4","line":537,"in_reply_to":"09844ac8_f84248bc","updated":"2026-08-06 20:36:49.000000000","message":"It\u0027s used in ceilometer/novaclient.py (L114 approx), in the _with_image method.","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"8c95c6770dfb65ccd71f5d9b335a5434bc56dfa6","unresolved":true,"context_lines":[{"line_number":537,"context_line":"    def get_image(self, image):"},{"line_number":538,"context_line":"        \"\"\"Get a single image"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        based on ??? \u003cTODO\u003e"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        :param image: The value can be the ID of an image or a"},{"line_number":543,"context_line":"            :class:`~openstack.image.v1.image.Image` instance."}],"source_content_type":"text/x-python","patch_set":3,"id":"5cace7e3_fe2ad411","line":540,"updated":"2026-08-05 11:09:50.000000000","message":"We should not have TODOs on final code, also this comment should be more explicative or be removed.","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"06a464652f482eb4c4b8f8a32055ac09926acde7","unresolved":false,"context_lines":[{"line_number":537,"context_line":"    def get_image(self, image):"},{"line_number":538,"context_line":"        \"\"\"Get a single image"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        based on ??? \u003cTODO\u003e"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        :param image: The value can be the ID of an image or a"},{"line_number":543,"context_line":"            :class:`~openstack.image.v1.image.Image` instance."}],"source_content_type":"text/x-python","patch_set":3,"id":"bb28340e_e3cf24f2","line":540,"in_reply_to":"5cace7e3_fe2ad411","updated":"2026-08-06 20:36:49.000000000","message":"Fixed","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"8c95c6770dfb65ccd71f5d9b335a5434bc56dfa6","unresolved":true,"context_lines":[{"line_number":540,"context_line":"        based on ??? \u003cTODO\u003e"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        :param image: The value can be the ID of an image or a"},{"line_number":543,"context_line":"            :class:`~openstack.image.v1.image.Image` instance."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"        :returns: One :class:`~openstack.image.v1.image.Image`"},{"line_number":546,"context_line":"        :raises: :class:`~openstack.exceptions.NotFoundException`"}],"source_content_type":"text/x-python","patch_set":3,"id":"686b32de_bb9aa4cb","line":543,"updated":"2026-08-05 11:09:50.000000000","message":"This is actually v2 in the implementation","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"06a464652f482eb4c4b8f8a32055ac09926acde7","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        based on ??? \u003cTODO\u003e"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        :param image: The value can be the ID of an image or a"},{"line_number":543,"context_line":"            :class:`~openstack.image.v1.image.Image` instance."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"        :returns: One :class:`~openstack.image.v1.image.Image`"},{"line_number":546,"context_line":"        :raises: :class:`~openstack.exceptions.NotFoundException`"}],"source_content_type":"text/x-python","patch_set":3,"id":"f1433e93_1c7655fa","line":543,"in_reply_to":"686b32de_bb9aa4cb","updated":"2026-08-06 20:36:49.000000000","message":"Fixed","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"8c95c6770dfb65ccd71f5d9b335a5434bc56dfa6","unresolved":true,"context_lines":[{"line_number":542,"context_line":"        :param image: The value can be the ID of an image or a"},{"line_number":543,"context_line":"            :class:`~openstack.image.v1.image.Image` instance."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"        :returns: One :class:`~openstack.image.v1.image.Image`"},{"line_number":546,"context_line":"        :raises: :class:`~openstack.exceptions.NotFoundException`"},{"line_number":547,"context_line":"            when no resource can be found."},{"line_number":548,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"2187815c_1df0901b","line":545,"updated":"2026-08-05 11:09:50.000000000","message":"Same as above","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"06a464652f482eb4c4b8f8a32055ac09926acde7","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        :param image: The value can be the ID of an image or a"},{"line_number":543,"context_line":"            :class:`~openstack.image.v1.image.Image` instance."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"        :returns: One :class:`~openstack.image.v1.image.Image`"},{"line_number":546,"context_line":"        :raises: :class:`~openstack.exceptions.NotFoundException`"},{"line_number":547,"context_line":"            when no resource can be found."},{"line_number":548,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"e640936f_d30be4e5","line":545,"in_reply_to":"2187815c_1df0901b","updated":"2026-08-06 20:36:49.000000000","message":"Done","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"8c95c6770dfb65ccd71f5d9b335a5434bc56dfa6","unresolved":true,"context_lines":[{"line_number":556,"context_line":"            return image_list[0]"},{"line_number":557,"context_line":"        except IndexError:"},{"line_number":558,"context_line":"            raise openstack.exceptions.NotFoundException"},{"line_number":559,"context_line":"        # TODO(efoley): check if this should raise NoUniqueMatch"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"class FakeConnection:"}],"source_content_type":"text/x-python","patch_set":3,"id":"6db3733a_b9c7e63d","line":559,"updated":"2026-08-05 11:09:50.000000000","message":"Check it before merging and remove the comment","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"},{"author":{"_account_id":13177,"name":"Emma Foley","email":"efoley@redhat.com","username":"emma-l-foley"},"change_message_id":"06a464652f482eb4c4b8f8a32055ac09926acde7","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            return image_list[0]"},{"line_number":557,"context_line":"        except IndexError:"},{"line_number":558,"context_line":"            raise openstack.exceptions.NotFoundException"},{"line_number":559,"context_line":"        # TODO(efoley): check if this should raise NoUniqueMatch"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"class FakeConnection:"}],"source_content_type":"text/x-python","patch_set":3,"id":"63abd554_850604bc","line":559,"in_reply_to":"6db3733a_b9c7e63d","updated":"2026-08-06 20:36:49.000000000","message":"It doesn\u0027t raise NoUniqueMatch because the parameter is an image or id, which will either return nothing or the image matching id or image.id","commit_id":"1183bdb2b9d7545e8ac2fe016982357f981bb6ec"}]}
