)]}'
{"openstack/compute/v2/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1de1bee22af35914dacc717c3fc72c3e50dbf14c","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        return self._find(_aggregate.Aggregate, name_or_id,"},{"line_number":276,"context_line":"                          ignore_missing\u003dignore_missing)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def create_aggregate(self, **attrs):"},{"line_number":279,"context_line":"        \"\"\"Create a new host aggregate from attributes"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        :param dict attrs: Keyword arguments which will be used to create a"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_5a927158","line":278,"range":{"start_line":278,"start_character":31,"end_line":278,"end_character":38},"updated":"2020-11-12 15:07:23.000000000","message":"Noted it in another review, but it would be nice to set the arguments explicitly here. Can we do that? Looking at the source [1], \u0027name\u0027 is mandatory and \u0027availability_zone\u0027 is optional.\n\n  def create_aggregate(self, name, availability_zone\u003dNone):\n\nDon\u0027t forget the docstring :)\n\n[1] https://github.com/openstack/nova/blob/eb279e9a5676f4142cce4700c3097ecc14161895/nova/api/openstack/compute/schemas/aggregates.py#L26-L42","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"2da30a95103bfee269be213d0f8ba1ba184cfcfd","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        return self._find(_aggregate.Aggregate, name_or_id,"},{"line_number":276,"context_line":"                          ignore_missing\u003dignore_missing)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def create_aggregate(self, **attrs):"},{"line_number":279,"context_line":"        \"\"\"Create a new host aggregate from attributes"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        :param dict attrs: Keyword arguments which will be used to create a"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_85fcae70","line":278,"range":{"start_line":278,"start_character":31,"end_line":278,"end_character":38},"in_reply_to":"1f621f24_5a927158","updated":"2020-11-12 15:57:48.000000000","message":"We do not actually want to have it globally this way, since any change on the server side (something else become mandatory) would require us to update all interfaces. Instead we simply pass what the user gives relying that he knows what to do. Another side is that depending on the server version something might be not mandatory on older releases and mandatory on newer, SDK must be backward/forward compatible.","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3c243e0b17177324446d9b34a91334a803b17b08","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        return self._find(_aggregate.Aggregate, name_or_id,"},{"line_number":276,"context_line":"                          ignore_missing\u003dignore_missing)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def create_aggregate(self, **attrs):"},{"line_number":279,"context_line":"        \"\"\"Create a new host aggregate from attributes"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        :param dict attrs: Keyword arguments which will be used to create a"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_a553aa38","line":278,"range":{"start_line":278,"start_character":31,"end_line":278,"end_character":38},"in_reply_to":"1f621f24_85fcae70","updated":"2020-11-12 16:12:46.000000000","message":"I get where you\u0027re coming from, but I don\u0027t necessarily agree in this instance. This particular API has always accepted those parameters and if it changed in the future, we would eventually need to make changes to openstacksdk to support the new microversion but the \u0027_max_microversion\u0027 would protect us until then, right?\n\nAlso, we already have a couple of occurrences of explicitly specifying all parameters in this file alone:\n\n- create_server_image\n- create_console\n- create_flavor_extra_specs\n\nPlus a few that specify the mandatory parameters at least:\n\n- create_server_interface\n- create_volume_attachment\n- create_server_remote_console\n\nWe also do it for many of the non-create functions too","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d8b8132672e7cb6785f2a9705136fba18257f63f","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        return self._find(_aggregate.Aggregate, name_or_id,"},{"line_number":276,"context_line":"                          ignore_missing\u003dignore_missing)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def create_aggregate(self, **attrs):"},{"line_number":279,"context_line":"        \"\"\"Create a new host aggregate from attributes"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        :param dict attrs: Keyword arguments which will be used to create a"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_606a201a","line":278,"range":{"start_line":278,"start_character":31,"end_line":278,"end_character":38},"in_reply_to":"1f621f24_a553aa38","updated":"2020-11-12 16:57:52.000000000","message":"Hmm, I have not noticed those cases (not created by me). Generally we always were trying to have this only in exceptional cases, since the real life proves it is not a bloomy glowy as we might expect.\nFor the second part of your list some other stuff applied: we can not modify sub-resource without knowing the resource.\n\nA yet additional \"practice\" is to leave proxy/resource layer a complete \"low-level\", while having then cloud layer doing lot\u0027s of desired validations and so on. So there I would not object in any way, but here I would really rather prefer leaving all params this way","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"}],"openstack/compute/v2/aggregate.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1de1bee22af35914dacc717c3fc72c3e50dbf14c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    # Properties"},{"line_number":31,"context_line":"    #: Availability zone of aggregate"},{"line_number":32,"context_line":"    availability_zone \u003d resource.Body(\u0027availability_zone\u0027)"},{"line_number":33,"context_line":"    #: The date and time when the resource was created."},{"line_number":34,"context_line":"    created_at \u003d resource.Body(\u0027created_at\u0027)"},{"line_number":35,"context_line":"    #: The date and time when the resource was deleted."},{"line_number":36,"context_line":"    deleted_at \u003d resource.Body(\u0027deleted_at\u0027)"},{"line_number":37,"context_line":"    #: Deleted?"},{"line_number":38,"context_line":"    deleted \u003d resource.Body(\u0027deleted\u0027, type\u003dbool)"},{"line_number":39,"context_line":"    #: Name of aggregate"},{"line_number":40,"context_line":"    name \u003d resource.Body(\u0027name\u0027)"},{"line_number":41,"context_line":"    #: Hosts"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_fadffd09","line":38,"range":{"start_line":33,"start_character":0,"end_line":38,"end_character":49},"updated":"2020-11-12 15:07:23.000000000","message":"These are read-only. Is there any way to indicate this? Do we do that in openstacksdk?","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"7158ccf981c9724440b6530b050787d820795eb9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    # Properties"},{"line_number":31,"context_line":"    #: Availability zone of aggregate"},{"line_number":32,"context_line":"    availability_zone \u003d resource.Body(\u0027availability_zone\u0027)"},{"line_number":33,"context_line":"    #: The date and time when the resource was created."},{"line_number":34,"context_line":"    created_at \u003d resource.Body(\u0027created_at\u0027)"},{"line_number":35,"context_line":"    #: The date and time when the resource was deleted."},{"line_number":36,"context_line":"    deleted_at \u003d resource.Body(\u0027deleted_at\u0027)"},{"line_number":37,"context_line":"    #: Deleted?"},{"line_number":38,"context_line":"    deleted \u003d resource.Body(\u0027deleted\u0027, type\u003dbool)"},{"line_number":39,"context_line":"    #: Name of aggregate"},{"line_number":40,"context_line":"    name \u003d resource.Body(\u0027name\u0027)"},{"line_number":41,"context_line":"    #: Hosts"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_80df7c67","line":38,"range":{"start_line":33,"start_character":0,"end_line":38,"end_character":49},"in_reply_to":"1f621f24_c5f2269a","updated":"2020-11-12 16:27:29.000000000","message":"as we are talking about it - a general convention for bools is to name them \"is_XXX\" -\u003e rename it while we are here","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"2da30a95103bfee269be213d0f8ba1ba184cfcfd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    # Properties"},{"line_number":31,"context_line":"    #: Availability zone of aggregate"},{"line_number":32,"context_line":"    availability_zone \u003d resource.Body(\u0027availability_zone\u0027)"},{"line_number":33,"context_line":"    #: The date and time when the resource was created."},{"line_number":34,"context_line":"    created_at \u003d resource.Body(\u0027created_at\u0027)"},{"line_number":35,"context_line":"    #: The date and time when the resource was deleted."},{"line_number":36,"context_line":"    deleted_at \u003d resource.Body(\u0027deleted_at\u0027)"},{"line_number":37,"context_line":"    #: Deleted?"},{"line_number":38,"context_line":"    deleted \u003d resource.Body(\u0027deleted\u0027, type\u003dbool)"},{"line_number":39,"context_line":"    #: Name of aggregate"},{"line_number":40,"context_line":"    name \u003d resource.Body(\u0027name\u0027)"},{"line_number":41,"context_line":"    #: Hosts"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_c5f2269a","line":38,"range":{"start_line":33,"start_character":0,"end_line":38,"end_character":49},"in_reply_to":"1f621f24_fadffd09","updated":"2020-11-12 15:57:48.000000000","message":"We are currently not having a way to do that. I agree it might make sense, but definitely not in the scope of this change - this would be a huge change","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1de1bee22af35914dacc717c3fc72c3e50dbf14c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    deleted \u003d resource.Body(\u0027deleted\u0027, type\u003dbool)"},{"line_number":39,"context_line":"    #: Name of aggregate"},{"line_number":40,"context_line":"    name \u003d resource.Body(\u0027name\u0027)"},{"line_number":41,"context_line":"    #: Hosts"},{"line_number":42,"context_line":"    hosts \u003d resource.Body(\u0027hosts\u0027, type\u003dlist)"},{"line_number":43,"context_line":"    #: Metadata"},{"line_number":44,"context_line":"    metadata \u003d resource.Body(\u0027metadata\u0027, type\u003ddict)"},{"line_number":45,"context_line":"    #: The date and time when the resource was updated"},{"line_number":46,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":47,"context_line":"    #: UUID"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_fa16dda7","line":44,"range":{"start_line":41,"start_character":0,"end_line":44,"end_character":51},"updated":"2020-11-12 15:07:23.000000000","message":"These are also sort of read-only in that you have to use the actions to set them (idk why it was engineered that way but it was)","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"2da30a95103bfee269be213d0f8ba1ba184cfcfd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    deleted \u003d resource.Body(\u0027deleted\u0027, type\u003dbool)"},{"line_number":39,"context_line":"    #: Name of aggregate"},{"line_number":40,"context_line":"    name \u003d resource.Body(\u0027name\u0027)"},{"line_number":41,"context_line":"    #: Hosts"},{"line_number":42,"context_line":"    hosts \u003d resource.Body(\u0027hosts\u0027, type\u003dlist)"},{"line_number":43,"context_line":"    #: Metadata"},{"line_number":44,"context_line":"    metadata \u003d resource.Body(\u0027metadata\u0027, type\u003ddict)"},{"line_number":45,"context_line":"    #: The date and time when the resource was updated"},{"line_number":46,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":47,"context_line":"    #: UUID"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_4534564a","line":44,"range":{"start_line":41,"start_character":0,"end_line":44,"end_character":51},"in_reply_to":"1f621f24_fa16dda7","updated":"2020-11-12 15:57:48.000000000","message":"same here","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1de1bee22af35914dacc717c3fc72c3e50dbf14c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    hosts \u003d resource.Body(\u0027hosts\u0027, type\u003dlist)"},{"line_number":43,"context_line":"    #: Metadata"},{"line_number":44,"context_line":"    metadata \u003d resource.Body(\u0027metadata\u0027, type\u003ddict)"},{"line_number":45,"context_line":"    #: The date and time when the resource was updated"},{"line_number":46,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":47,"context_line":"    #: UUID"},{"line_number":48,"context_line":"    uuid \u003d resource.Body(\u0027uuid\u0027)"},{"line_number":49,"context_line":"    # Image pre-caching introduced in 2.81"},{"line_number":50,"context_line":"    _max_microversion \u003d \u00272.81\u0027"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_da1961d7","line":48,"range":{"start_line":45,"start_character":0,"end_line":48,"end_character":32},"updated":"2020-11-12 15:07:23.000000000","message":"These are straight up read-only","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"2da30a95103bfee269be213d0f8ba1ba184cfcfd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    hosts \u003d resource.Body(\u0027hosts\u0027, type\u003dlist)"},{"line_number":43,"context_line":"    #: Metadata"},{"line_number":44,"context_line":"    metadata \u003d resource.Body(\u0027metadata\u0027, type\u003ddict)"},{"line_number":45,"context_line":"    #: The date and time when the resource was updated"},{"line_number":46,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":47,"context_line":"    #: UUID"},{"line_number":48,"context_line":"    uuid \u003d resource.Body(\u0027uuid\u0027)"},{"line_number":49,"context_line":"    # Image pre-caching introduced in 2.81"},{"line_number":50,"context_line":"    _max_microversion \u003d \u00272.81\u0027"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_25379a4f","line":48,"range":{"start_line":45,"start_character":0,"end_line":48,"end_character":32},"in_reply_to":"1f621f24_da1961d7","updated":"2020-11-12 15:57:48.000000000","message":"and here","commit_id":"49d02788a2d469bc91c4fbddcd87fe1dc4e5b3ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e28919f3e2d562f149f595109a20c647dd5e8667","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        response \u003d session.post("},{"line_number":82,"context_line":"            url, json\u003dbody)"},{"line_number":83,"context_line":"        exceptions.raise_from_response(response)"},{"line_number":84,"context_line":"        # This API has no result"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f621f24_650b5229","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":32},"updated":"2020-11-12 16:49:05.000000000","message":"nit:\n\n  return None\n\nwould achieve the same thing","commit_id":"90f83c3a37cd3f3da96808d0c764d402caa9380a"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d8b8132672e7cb6785f2a9705136fba18257f63f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        response \u003d session.post("},{"line_number":82,"context_line":"            url, json\u003dbody)"},{"line_number":83,"context_line":"        exceptions.raise_from_response(response)"},{"line_number":84,"context_line":"        # This API has no result"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f621f24_603ce02e","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":32},"in_reply_to":"1f621f24_650b5229","updated":"2020-11-12 16:57:52.000000000","message":"ha, this is the same as \"if a: raise() else: bar()\"  ;-)","commit_id":"90f83c3a37cd3f3da96808d0c764d402caa9380a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"54f403ff40234f03e962fc29017e854c2ddd949a","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def precache_images(self, session, images):"},{"line_number":78,"context_line":"        \"\"\"Requests image pre-caching\"\"\""},{"line_number":79,"context_line":"        body \u003d {\u0027cache\u0027: images}"},{"line_number":80,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027images\u0027)"},{"line_number":81,"context_line":"        response \u003d session.post("},{"line_number":82,"context_line":"            url, json\u003dbody)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_ee99dec3","line":79,"range":{"start_line":79,"start_character":25,"end_line":79,"end_character":31},"updated":"2020-11-16 16:40:52.000000000","message":"This isn\u0027t a valid request as used at [1]. The API appears to expect a list of objects (bad API design, I know). Either \u0027images\u0027 should be a list of objects and the docstring should indicate this, or it should be a list of IDs and we should transform this to objects with an \u0027id\u0027 key\n\n[1] https://review.opendev.org/#/c/762134/3/openstackclient/compute/v2/aggregate.py@413","commit_id":"88f47f13759b7a13e81ae4f7a3d32a135d2dc932"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"94bb82e1ab1c66a163f3867bba5f71c0f945e6d3","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def precache_images(self, session, images):"},{"line_number":78,"context_line":"        \"\"\"Requests image pre-caching\"\"\""},{"line_number":79,"context_line":"        body \u003d {\u0027cache\u0027: images}"},{"line_number":80,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027images\u0027)"},{"line_number":81,"context_line":"        response \u003d session.post("},{"line_number":82,"context_line":"            url, json\u003dbody)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_ce47c21c","line":79,"range":{"start_line":79,"start_character":25,"end_line":79,"end_character":31},"in_reply_to":"1f621f24_ee99dec3","updated":"2020-11-16 16:54:47.000000000","message":"argh, was not careful enough reading the spec.\nAnd at least now I also see why the microversion is not properly used","commit_id":"88f47f13759b7a13e81ae4f7a3d32a135d2dc932"}],"openstack/dns/v2/_base.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"a1291903cee3c15e90c244e868bd6ba63482eb7f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":"import urllib.parse"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from openstack import exceptions"},{"line_number":15,"context_line":"from openstack import resource"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_eccc468a","line":14,"updated":"2020-11-16 19:15:29.000000000","message":"pep8: F401 \u0027openstack.exceptions\u0027 imported but unused","commit_id":"2e732fb09b2d3492b069d00365ba6fb29e8110c9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"a6cdbd2ce29712c92a024168454ab7b777f63fc5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":"import urllib.parse"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from openstack import exceptions"},{"line_number":15,"context_line":"from openstack import resource"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f621f24_e7d741be","line":14,"updated":"2020-11-16 21:10:40.000000000","message":"pep8: F401 \u0027openstack.exceptions\u0027 imported but unused","commit_id":"ca0c748f5e83e42dabd03a4ae43f48d39afc7e87"}],"openstack/tests/unit/compute/v2/test_proxy.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"a1291903cee3c15e90c244e868bd6ba63482eb7f","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            \"openstack.compute.v2.aggregate.Aggregate.precache_images\","},{"line_number":294,"context_line":"            self.proxy.aggregate_precache_images,"},{"line_number":295,"context_line":"            method_args\u003d[\"value\", \u00271\u0027],"},{"line_number":296,"context_line":"            expected_args\u003d[[{\u0027id\u0027:\u00271\u0027}]])"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def test_aggregate_precache_images(self):"},{"line_number":299,"context_line":"        self._verify("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_acb7eef4","line":296,"updated":"2020-11-16 19:15:29.000000000","message":"pep8: E231 missing whitespace after \u0027:\u0027","commit_id":"2e732fb09b2d3492b069d00365ba6fb29e8110c9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"a1291903cee3c15e90c244e868bd6ba63482eb7f","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            \"openstack.compute.v2.aggregate.Aggregate.precache_images\","},{"line_number":301,"context_line":"            self.proxy.aggregate_precache_images,"},{"line_number":302,"context_line":"            method_args\u003d[\"value\", [\u00271\u0027, \u00272\u0027]],"},{"line_number":303,"context_line":"            expected_args\u003d[[{\u0027id\u0027:\u00271\u0027}, {\u0027id\u0027: \u00272\u0027}]])"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"class TestCompute(TestComputeProxy):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_0cd26228","line":303,"updated":"2020-11-16 19:15:29.000000000","message":"pep8: E231 missing whitespace after \u0027:\u0027","commit_id":"2e732fb09b2d3492b069d00365ba6fb29e8110c9"}]}
