)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"cf9ce6e43c2468cf11b1433ccd8a753da479452d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bed651f2_2abfeab8","updated":"2026-05-28 18:03:08.000000000","message":"recheck, seems unrelated and runs successfully locally","commit_id":"adad264d0682d22b79e2cb923dfc312ff9687394"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04b3ea8450ea33db19ace5036d897571f33b79fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"54262b3d_07506256","updated":"2026-06-04 17:30:00.000000000","message":"Couple of early comments. I need to review this in more depth.","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"6b523a1ebf78a8767f1b3242b9f27a10b5440ac5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"be148722_98574fcf","updated":"2026-06-18 18:20:29.000000000","message":"Hello @t.v.ovtchinnikova@gmail.com\n\nAfter this patch, there are missing data in\nProject -\u003e Compute -\u003e Instance -\u003e Launch instance -\u003e Flavor (tab):\nThe Ephemeral Disk column is empty (no data). The public column is full of “No” also for Flavors that should have “Yes”.\n\nIn the new patch, in the response for the call ```GET /api/nova/flavors/``` the JSON items include ```ephemeral:1, is_public: true```, etc…\nBut previous version response for this call contained ```OS-FLV-EXT-DATA:ephemeral    1, os-flavor-access:is_public    true```\n\nThe old variables/aliases are still used in code like here:\nhttps://github.com/openstack/horizon/blob/e4837ab45aa52891465c31d7191d60c7e32de491/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/flavor/flavor.controller.js#L287\n\nAlso there is an issue is in Instance resize:\n```Error: Unable to retrieve quota information. Details\n\u0027Flavor\u0027 object has no attribute \u0027_info\u0027``` \n\nCould you please double check it?","commit_id":"a7905a74f4d4f1a5120776aa7ed8009cfda7d581"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"a0e1be7692780567f6a6dc5c1909b4daf07a7ed8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c2095693_7bcbb40c","in_reply_to":"be148722_98574fcf","updated":"2026-06-22 18:05:30.000000000","message":"Thank you for your review!","commit_id":"a7905a74f4d4f1a5120776aa7ed8009cfda7d581"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"4a66b08749e32309260cb244718535230e34ca03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"bb460e98_46412055","updated":"2026-06-25 14:23:52.000000000","message":"Hello @t.v.ovtchinnikova@gmail.com,\nI reviewed the code, tested it in devstack and everything seems to be fine for me.\nThanks!","commit_id":"553386dd1bb7f96bb57e3e67f769c80077c30720"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"8b31ab14e4493a985f88b0db5e374a5838625238","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"5723ccff_1c0672c7","updated":"2026-06-30 14:10:16.000000000","message":"Thank you for the patch, the code looks good!","commit_id":"553386dd1bb7f96bb57e3e67f769c80077c30720"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8ee197daa857e14d8f682cd852c4e0b87a5065d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"10c3b6f1_77b6c0b9","updated":"2026-06-30 14:42:00.000000000","message":"bp: https://blueprints.launchpad.net/horizon/+spec/sdk-nova","commit_id":"553386dd1bb7f96bb57e3e67f769c80077c30720"}],"openstack_dashboard/api/_nova.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04b3ea8450ea33db19ace5036d897571f33b79fe","unresolved":true,"context_lines":[{"line_number":226,"context_line":"        session\u003dk_session,"},{"line_number":227,"context_line":"        region_name\u003drequest.user.services_region,"},{"line_number":228,"context_line":"        app_name\u003d\u0027horizon\u0027,"},{"line_number":229,"context_line":"        app_version\u003d\u00271.0\u0027,"},{"line_number":230,"context_line":"    )"},{"line_number":231,"context_line":"    return conn.compute"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"59c92ccd_09c01b14","line":229,"updated":"2026-06-04 17:30:00.000000000","message":"Do you want to use the actual version here?\n\n\n\n```suggestion\n        app_version\u003dimportlib.metadata.version(\u0027horizon\u0027),\n```","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d7d214fe3de599a8a21933024de90e6dc186348a","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        session\u003dk_session,"},{"line_number":227,"context_line":"        region_name\u003drequest.user.services_region,"},{"line_number":228,"context_line":"        app_name\u003d\u0027horizon\u0027,"},{"line_number":229,"context_line":"        app_version\u003d\u00271.0\u0027,"},{"line_number":230,"context_line":"    )"},{"line_number":231,"context_line":"    return conn.compute"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"47b55807_26f790bd","line":229,"in_reply_to":"59c92ccd_09c01b14","updated":"2026-06-12 01:13:38.000000000","message":"Done","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"}],"openstack_dashboard/api/nova.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"8b31ab14e4493a985f88b0db5e374a5838625238","unresolved":true,"context_lines":[{"line_number":366,"context_line":"    if flavor is None:"},{"line_number":367,"context_line":"        return []"},{"line_number":368,"context_line":"    flavor_id \u003d _flavor_identifier(flavor)"},{"line_number":369,"context_line":"    return _nova.computeclient(request).get_flavor_access(flavor_id)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"@profiler.trace"}],"source_content_type":"text/x-python","patch_set":7,"id":"1d4c9bf6_71c1d5ba","line":369,"updated":"2026-06-30 14:10:16.000000000","message":"I think this should always use flavor_id, the one case where we used flavor directly in our tests was an error, and it resulted in memoization warnings, I made a separate patch to fix it. Than again, I suppose it doesn\u0027t hurt to leave it here.","commit_id":"553386dd1bb7f96bb57e3e67f769c80077c30720"}],"openstack_dashboard/dashboards/admin/flavors/tables.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04b3ea8450ea33db19ace5036d897571f33b79fe","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def get_extra_specs(flavor):"},{"line_number":134,"context_line":"    return getattr(flavor, \u0027extra_specs\u0027, None) or {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"class FlavorsTable(tables.DataTable):"}],"source_content_type":"text/x-python","patch_set":4,"id":"28bc9b2c_3997cc3d","line":134,"updated":"2026-06-04 17:30:00.000000000","message":"The `getattr` should not be necessary? I wonder if that\u0027s because of incomplete mocks in our tests?","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d7d214fe3de599a8a21933024de90e6dc186348a","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def get_extra_specs(flavor):"},{"line_number":134,"context_line":"    return getattr(flavor, \u0027extra_specs\u0027, None) or {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"class FlavorsTable(tables.DataTable):"}],"source_content_type":"text/x-python","patch_set":4,"id":"24ab2c0f_82d5e30c","line":134,"in_reply_to":"28bc9b2c_3997cc3d","updated":"2026-06-12 01:13:38.000000000","message":"Done","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"}],"openstack_dashboard/dashboards/admin/flavors/workflows.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04b3ea8450ea33db19ace5036d897571f33b79fe","unresolved":true,"context_lines":[{"line_number":166,"context_line":"        flavor_access \u003d []"},{"line_number":167,"context_line":"        try:"},{"line_number":168,"context_line":"            if flavor and not flavor.is_public:"},{"line_number":169,"context_line":"                flavor_access \u003d [access[\u0027tenant_id\u0027] for access in"},{"line_number":170,"context_line":"                                 context[\u0027current_flavor_access\u0027]]"},{"line_number":171,"context_line":"        except Exception:"},{"line_number":172,"context_line":"            exceptions.handle(request, err_msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5c017023_12431ce0","line":169,"updated":"2026-06-04 17:30:00.000000000","message":"You should be able to access this as an attribute, no?\n\n```suggestion\n                flavor_access \u003d [access.tenant_id for access in\n```","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d7d214fe3de599a8a21933024de90e6dc186348a","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        flavor_access \u003d []"},{"line_number":167,"context_line":"        try:"},{"line_number":168,"context_line":"            if flavor and not flavor.is_public:"},{"line_number":169,"context_line":"                flavor_access \u003d [access[\u0027tenant_id\u0027] for access in"},{"line_number":170,"context_line":"                                 context[\u0027current_flavor_access\u0027]]"},{"line_number":171,"context_line":"        except Exception:"},{"line_number":172,"context_line":"            exceptions.handle(request, err_msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"04f64618_c1b4b296","line":169,"in_reply_to":"5c017023_12431ce0","updated":"2026-06-12 01:13:38.000000000","message":"That\u0027s a dict object. We could use a wrapper, but I don\u0027t think it\u0027s needed.","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"}],"openstack_dashboard/test/unit/api/rest/test_nova.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04b3ea8450ea33db19ace5036d897571f33b79fe","unresolved":true,"context_lines":[{"line_number":26,"context_line":"from openstack_dashboard.usage import quotas"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# NOTE(flwang): mock.Mock and mock.MagicMock do not support sort, so the test"},{"line_number":30,"context_line":"# case involved sorted will fail. This fake class is for the flavor test cases"},{"line_number":31,"context_line":"# related to sort."},{"line_number":32,"context_line":"class FakeFlavor(object):"},{"line_number":33,"context_line":"    def __init__(self, id, ram\u003d1, is_public\u003dTrue):"},{"line_number":34,"context_line":"        self.id \u003d id"},{"line_number":35,"context_line":"        self.ram \u003d ram"},{"line_number":36,"context_line":"        self.is_public \u003d is_public"},{"line_number":37,"context_line":"        self.extra_specs \u003d {}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def to_dict(self, computed\u003dFalse):"},{"line_number":40,"context_line":"        return {\"id\": self.id}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class NovaRestTestCase(test.RestAPITestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"2a467713_642952cd","line":40,"range":{"start_line":29,"start_character":0,"end_line":40,"end_character":30},"updated":"2026-06-04 17:30:00.000000000","message":"I\u0027d drop this and instead use the `openstack.test.generate_fake_resource` helper. You\u0027re just opening yourself up to endless bugs if you insist on returning something other that the object that you would *actually* get here.","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d7d214fe3de599a8a21933024de90e6dc186348a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from openstack_dashboard.usage import quotas"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# NOTE(flwang): mock.Mock and mock.MagicMock do not support sort, so the test"},{"line_number":30,"context_line":"# case involved sorted will fail. This fake class is for the flavor test cases"},{"line_number":31,"context_line":"# related to sort."},{"line_number":32,"context_line":"class FakeFlavor(object):"},{"line_number":33,"context_line":"    def __init__(self, id, ram\u003d1, is_public\u003dTrue):"},{"line_number":34,"context_line":"        self.id \u003d id"},{"line_number":35,"context_line":"        self.ram \u003d ram"},{"line_number":36,"context_line":"        self.is_public \u003d is_public"},{"line_number":37,"context_line":"        self.extra_specs \u003d {}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def to_dict(self, computed\u003dFalse):"},{"line_number":40,"context_line":"        return {\"id\": self.id}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class NovaRestTestCase(test.RestAPITestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"905383a6_28138f48","line":40,"range":{"start_line":29,"start_character":0,"end_line":40,"end_character":30},"in_reply_to":"2a467713_642952cd","updated":"2026-06-12 01:13:38.000000000","message":"Thanks! Done","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04b3ea8450ea33db19ace5036d897571f33b79fe","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    #"},{"line_number":46,"context_line":"    # Snapshots"},{"line_number":47,"context_line":"    #"},{"line_number":48,"context_line":"    @test.create_mocks({api.nova: [\u0027snapshot_create\u0027]})"},{"line_number":49,"context_line":"    def test_snapshots_create(self):"},{"line_number":50,"context_line":"        body \u003d \u0027{\"instance_id\": \"1234\", \"name\": \"foo\"}\u0027"},{"line_number":51,"context_line":"        request \u003d self.mock_rest_request(body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":4,"id":"4c0bf3bb_f70d906d","line":48,"updated":"2026-06-04 17:30:00.000000000","message":"I have left a comment on this in the next file, but IMO you\u0027d be *much* better off doing this in `setUp` since it lets you easily spec out the","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d7d214fe3de599a8a21933024de90e6dc186348a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    #"},{"line_number":46,"context_line":"    # Snapshots"},{"line_number":47,"context_line":"    #"},{"line_number":48,"context_line":"    @test.create_mocks({api.nova: [\u0027snapshot_create\u0027]})"},{"line_number":49,"context_line":"    def test_snapshots_create(self):"},{"line_number":50,"context_line":"        body \u003d \u0027{\"instance_id\": \"1234\", \"name\": \"foo\"}\u0027"},{"line_number":51,"context_line":"        request \u003d self.mock_rest_request(body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b5493729_36fbdee5","line":48,"in_reply_to":"4c0bf3bb_f70d906d","updated":"2026-06-12 01:13:38.000000000","message":"Done","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04b3ea8450ea33db19ace5036d897571f33b79fe","unresolved":true,"context_lines":[{"line_number":518,"context_line":"    def test_get_extras_default(self):"},{"line_number":519,"context_line":"        self._test_flavor_get_single(get_extras\u003dNone)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @test.create_mocks({api.nova: [\u0027flavor_get\u0027, \u0027flavor_get_extras\u0027]})"},{"line_number":522,"context_line":"    def _test_flavor_get_single(self, get_extras):"},{"line_number":523,"context_line":"        if get_extras:"},{"line_number":524,"context_line":"            request \u003d self.mock_rest_request(GET\u003d{\u0027get_extras\u0027: \u0027tRuE\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1137a9_0bb49a99","line":521,"updated":"2026-06-04 17:30:00.000000000","message":"I have left a comment on this in the next file, but IMO you\u0027d be *much* better off doing this in `setUp` since it lets you easily spec out the `Proxy` class and avoid calling invalid methods.","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d7d214fe3de599a8a21933024de90e6dc186348a","unresolved":false,"context_lines":[{"line_number":518,"context_line":"    def test_get_extras_default(self):"},{"line_number":519,"context_line":"        self._test_flavor_get_single(get_extras\u003dNone)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @test.create_mocks({api.nova: [\u0027flavor_get\u0027, \u0027flavor_get_extras\u0027]})"},{"line_number":522,"context_line":"    def _test_flavor_get_single(self, get_extras):"},{"line_number":523,"context_line":"        if get_extras:"},{"line_number":524,"context_line":"            request \u003d self.mock_rest_request(GET\u003d{\u0027get_extras\u0027: \u0027tRuE\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"90d0ed3d_ff1a254a","line":521,"in_reply_to":"1a1137a9_0bb49a99","updated":"2026-06-12 01:13:38.000000000","message":"Done","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"}],"openstack_dashboard/test/unit/api/test_nova.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04b3ea8450ea33db19ace5036d897571f33b79fe","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ServerWrapperTests(test.TestCase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_get_base_attribute(self):"},{"line_number":37,"context_line":"        server \u003d api.nova.Server(self.servers.first(), self.request)"},{"line_number":38,"context_line":"        self.assertEqual(self.servers.first().id, server.id)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dd57eab6_79008c0f","line":36,"range":{"start_line":35,"start_character":1,"end_line":36,"end_character":38},"updated":"2026-06-04 17:30:00.000000000","message":"per my comments below\n\n```suggestion\n\n    def setUp(self):\n        super().setUp()\n        patcher \u003d mock.patch(\n            api._nova, \u0027computeclient\u0027, spec\u003dcompute_v2.Proxy)\n        self.computeclient \u003d patcher.start()\n        self.addCleanup(patcher.stop)\n\n    def test_get_base_attribute(self):\n```\n\nYou\u0027ll need an `import openstack.compute.v2 as compute_v2` statement too.\n\n(I think `spec` is what you want, but it might be `autospec`...)","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d7d214fe3de599a8a21933024de90e6dc186348a","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ServerWrapperTests(test.TestCase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_get_base_attribute(self):"},{"line_number":37,"context_line":"        server \u003d api.nova.Server(self.servers.first(), self.request)"},{"line_number":38,"context_line":"        self.assertEqual(self.servers.first().id, server.id)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"660408b7_a6e18f54","line":36,"range":{"start_line":35,"start_character":1,"end_line":36,"end_character":38},"in_reply_to":"dd57eab6_79008c0f","updated":"2026-06-12 01:13:38.000000000","message":"Thank you! It\u0027s probably out of scope of this change, but I think it\u0027s worth it.","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04b3ea8450ea33db19ace5036d897571f33b79fe","unresolved":true,"context_lines":[{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    \"\"\"Flavor Tests\"\"\""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @mock.patch.object(api._nova, \u0027computeclient\u0027)"},{"line_number":485,"context_line":"    def test_flavor_list_no_extras(self, mock_computeclient):"},{"line_number":486,"context_line":"        flavors \u003d self.flavors.list()"},{"line_number":487,"context_line":"        computeclient \u003d mock_computeclient.return_value"}],"source_content_type":"text/x-python","patch_set":4,"id":"24ff31a2_fccae31e","line":484,"updated":"2026-06-04 17:30:00.000000000","message":"Rather than doing this on each method, why not set it once in `setUp` like above? You should also set `spec` so that you will get an error if you attempt to call or set a mock on an invalid method.","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d7d214fe3de599a8a21933024de90e6dc186348a","unresolved":false,"context_lines":[{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    \"\"\"Flavor Tests\"\"\""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @mock.patch.object(api._nova, \u0027computeclient\u0027)"},{"line_number":485,"context_line":"    def test_flavor_list_no_extras(self, mock_computeclient):"},{"line_number":486,"context_line":"        flavors \u003d self.flavors.list()"},{"line_number":487,"context_line":"        computeclient \u003d mock_computeclient.return_value"}],"source_content_type":"text/x-python","patch_set":4,"id":"5b85c5a1_664c1b60","line":484,"in_reply_to":"24ff31a2_fccae31e","updated":"2026-06-12 01:13:38.000000000","message":"Done","commit_id":"325f115f05fde46a9e1254849ff99c767592c80b"}]}
