)]}'
{"openstack/cloud/_network.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f1e584bb3351a3423d7f9d603f7e1248708fa14f","unresolved":true,"context_lines":[{"line_number":34,"context_line":"    @_utils.cache_on_arguments()"},{"line_number":35,"context_line":"    def _neutron_extensions(self):"},{"line_number":36,"context_line":"        extensions \u003d set()"},{"line_number":37,"context_line":"        for extension in self.network.extensions():"},{"line_number":38,"context_line":"            extensions.add(extension[\u0027alias\u0027])"},{"line_number":39,"context_line":"        return extensions"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7769d852_fef0a35a","line":37,"updated":"2021-01-27 11:38:11.000000000","message":"I\u0027ve asked this later, but this was previously using \u0027extensions.json\u0027 but the \u0027openstack.network.v2.extension.Extension\u0027 resource uses \u0027extensions\u0027 (no \u0027.json\u0027 suffix). Does neutron publish both?\n\nLater: okay, yes, it publishes both [1]. Could we make this a separate precursor patch to migrate the existing code from using e.g. \u0027/extensions.json\u0027 to \u0027/extensions\u0027? That would be much easier to understand and would allow you to minimize the damage to tests in the main patch\n\n[1] https://docs.openstack.org/api-ref/network/v2/index.html#response-format","commit_id":"f67279f88a393290d939db23a0bc03f935cb6770"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0fe232cf8ecce6e57197f49cd81c95b5e6be73e3","unresolved":true,"context_lines":[{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"        curr_rule \u003d self.network.get_qos_bandwidth_limit_rule("},{"line_number":1404,"context_line":"            qos_rule\u003drule_id,"},{"line_number":1405,"context_line":"            qos_policy\u003dpolicy)"},{"line_number":1406,"context_line":"        if not curr_rule:"},{"line_number":1407,"context_line":"            raise exc.OpenStackCloudException("},{"line_number":1408,"context_line":"                \"QoS bandwidth_limit_rule {rule_id} not found in policy \""}],"source_content_type":"text/x-python","patch_set":4,"id":"80366445_727a12de","line":1405,"updated":"2021-02-17 17:06:52.000000000","message":"nit: could fit on one line","commit_id":"4f7d3a5e095bb654334720f50bf8d82be17476f7"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"ee0da3e9b7f6b482b73f765de6661e1d62d539f5","unresolved":false,"context_lines":[{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"        curr_rule \u003d self.network.get_qos_bandwidth_limit_rule("},{"line_number":1404,"context_line":"            qos_rule\u003drule_id,"},{"line_number":1405,"context_line":"            qos_policy\u003dpolicy)"},{"line_number":1406,"context_line":"        if not curr_rule:"},{"line_number":1407,"context_line":"            raise exc.OpenStackCloudException("},{"line_number":1408,"context_line":"                \"QoS bandwidth_limit_rule {rule_id} not found in policy \""}],"source_content_type":"text/x-python","patch_set":4,"id":"c955b154_f0d0e256","line":1405,"in_reply_to":"80366445_727a12de","updated":"2021-02-18 12:21:55.000000000","message":"Done","commit_id":"4f7d3a5e095bb654334720f50bf8d82be17476f7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b30a4b8310118d6ff19c69833d6a2b59b47eaff","unresolved":true,"context_lines":[{"line_number":230,"context_line":"        \"\"\""},{"line_number":231,"context_line":"        if not self._has_neutron_extension(\u0027qos\u0027):"},{"line_number":232,"context_line":"            raise exc.OpenStackCloudUnavailableExtension("},{"line_number":233,"context_line":"                \u0027QoS extension is not available on target cloud\u0027)"},{"line_number":234,"context_line":"        if not filters:"},{"line_number":235,"context_line":"            filters \u003d {}"},{"line_number":236,"context_line":"        return self.network.find_qos_policy("}],"source_content_type":"text/x-python","patch_set":6,"id":"657e7239_35ecd628","line":233,"updated":"2021-02-23 15:37:41.000000000","message":"Do we have a test?\n\nLater: Seems we have no tests for any of these. Oh well. Would be a great follow-up but I won\u0027t hold this hostage over that, obviously","commit_id":"330edbb208abef40da58693d7ebe39d32f5913d8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b30a4b8310118d6ff19c69833d6a2b59b47eaff","unresolved":true,"context_lines":[{"line_number":252,"context_line":"        \"\"\""},{"line_number":253,"context_line":"        if not self._has_neutron_extension(\u0027qos\u0027):"},{"line_number":254,"context_line":"            raise exc.OpenStackCloudUnavailableExtension("},{"line_number":255,"context_line":"                \u0027QoS extension is not available on target cloud\u0027)"},{"line_number":256,"context_line":"        query \u003d {}"},{"line_number":257,"context_line":"        if name_or_id:"},{"line_number":258,"context_line":"            query[\u0027name\u0027] \u003d name_or_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"d675d2ea_b272e798","line":255,"updated":"2021-02-23 15:37:41.000000000","message":"As above","commit_id":"330edbb208abef40da58693d7ebe39d32f5913d8"}],"openstack/network/v2/qos_policy.py":[{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"b9daf415b7642cd7e5c3ad8a3c62ae8e0729dd12","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    name \u003d resource.Body(\u0027name\u0027)"},{"line_number":39,"context_line":"    #: The ID of the project who owns the network. Only administrative"},{"line_number":40,"context_line":"    #: users can specify a project ID other than their own."},{"line_number":41,"context_line":"    project_id \u003d resource.Body(\u0027project_id\u0027, alias\u003d\u0027tenant_id\u0027)"},{"line_number":42,"context_line":"    #: Tenant_id (deprecated attribute)."},{"line_number":43,"context_line":"    tenant_id \u003d resource.Body(\u0027tenant_id\u0027, deprecated\u003dTrue)"},{"line_number":44,"context_line":"    #: The QoS policy description."}],"source_content_type":"text/x-python","patch_set":1,"id":"650a0ea4_cdd2ce6b","line":41,"updated":"2021-01-15 14:57:53.000000000","message":"We need to start sending \"project_id\" to the server finally","commit_id":"18a66ee618c770547140fb640442dd7848082956"}],"openstack/resource.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f1e584bb3351a3423d7f9d603f7e1248708fa14f","unresolved":true,"context_lines":[{"line_number":1739,"context_line":"                hasattr(cls, k)"},{"line_number":1740,"context_line":"                and isinstance(getattr(cls, k), URI)"},{"line_number":1741,"context_line":"            ):"},{"line_number":1742,"context_line":"                uri_params[k] \u003d v"},{"line_number":1743,"context_line":""},{"line_number":1744,"context_line":"        # Track the total number of resources yielded so we can paginate"},{"line_number":1745,"context_line":"        # swift objects"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ec02682_de6d271b","line":1742,"updated":"2021-01-27 11:38:11.000000000","message":"I have no idea what this is doing 😞 Could you move this to a separate precursor patch with tests that explains why it\u0027s necessary?","commit_id":"f67279f88a393290d939db23a0bc03f935cb6770"}],"openstack/tests/unit/cloud/test_caching.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f1e584bb3351a3423d7f9d603f7e1248708fa14f","unresolved":true,"context_lines":[{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        fake_flavor_dicts \u003d ["},{"line_number":458,"context_line":"            _flavor.Flavor(connection\u003dself.cloud,"},{"line_number":459,"context_line":"                           **f)._to_munch(original_names\u003dFalse)"},{"line_number":460,"context_line":"            for f in fakes.FAKE_FLAVOR_LIST"},{"line_number":461,"context_line":"        ]"},{"line_number":462,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7041a560_63f84320","line":459,"updated":"2021-01-27 11:38:11.000000000","message":"nit:\n\n  _flavor.Flavor(\n      connection\u003dself.cloud, **f,\n  )._to_munch(original_names\u003dFalse)","commit_id":"f67279f88a393290d939db23a0bc03f935cb6770"}],"openstack/tests/unit/cloud/test_network.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f1e584bb3351a3423d7f9d603f7e1248708fa14f","unresolved":true,"context_lines":[{"line_number":171,"context_line":"                 json\u003d{\u0027extensions\u0027: self.enabled_neutron_extensions}),"},{"line_number":172,"context_line":"            dict(method\u003d\u0027POST\u0027,"},{"line_number":173,"context_line":"                 uri\u003dself.get_mock_url("},{"line_number":174,"context_line":"                     \u0027network\u0027, \u0027public\u0027, append\u003d[\u0027v2.0\u0027, \u0027networks.json\u0027]),"},{"line_number":175,"context_line":"                 json\u003d{\u0027network\u0027: self.mock_new_network_rep},"},{"line_number":176,"context_line":"                 validate\u003ddict("},{"line_number":177,"context_line":"                     json\u003d{\u0027network\u0027: {"}],"source_content_type":"text/x-python","patch_set":3,"id":"0d240ade_c2a829a8","line":174,"range":{"start_line":174,"start_character":67,"end_line":174,"end_character":72},"updated":"2021-01-27 11:38:11.000000000","message":"Why are you removing \u0027.json\u0027 from above but not here? There are examples in other files too, e.g. \u0027routers.json\u0027","commit_id":"f67279f88a393290d939db23a0bc03f935cb6770"}],"openstack/tests/unit/cloud/test_qos_bandwidth_limit_rule.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0fe232cf8ecce6e57197f49cd81c95b5e6be73e3","unresolved":true,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _compare_rules(self, exp, real):"},{"line_number":72,"context_line":"        self.assertDictEqual("},{"line_number":73,"context_line":"            qos_bandwidth_limit_rule.QoSBandwidthLimitRule(**exp)._to_munch(),"},{"line_number":74,"context_line":"            real._to_munch()"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"0ee9d995_82b7f11a","line":73,"updated":"2021-02-17 17:06:52.000000000","message":"Any reason we couldn\u0027t configure \u0027mock_rule\u0027 as an instance of \u0027QoSBandwidthLimitRule\u0027. I see \u0027Resource\u0027 implements a \u0027__eq__\u0027 magic method so they should be comparable. Also, if we go this route, why use \u0027_to_munch\u0027 rather than \u0027to_dict\u0027? We don\u0027t need the shade-like functionality, do we?\n\nSame comment for other tests.","commit_id":"4f7d3a5e095bb654334720f50bf8d82be17476f7"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4f5e2627985d9753a4e91f145f099be064813240","unresolved":true,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _compare_rules(self, exp, real):"},{"line_number":72,"context_line":"        self.assertDictEqual("},{"line_number":73,"context_line":"            qos_bandwidth_limit_rule.QoSBandwidthLimitRule(**exp)._to_munch(),"},{"line_number":74,"context_line":"            real._to_munch()"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"f58bd592_312067d9","line":73,"in_reply_to":"0ee9d995_82b7f11a","updated":"2021-02-17 17:39:40.000000000","message":"due to overall huge change (and this being just a part of a bigger change) I was not really trying to improve or rework the them as such. That would also make review even more complex.\nwrt _to_munch: sadly here we need the shade-like functionality, since in the cloud layer we once gave contract to return munch object, and now we struggle. \nOverall I am thinking on improving this at once (maybe as part of a bigger release). In nearly all cases in cloud layer tests we have mock data as json. In lot of cases attribute names differ between server side and sdk side. _to_munch defaults (historically) to returning server side names, while to_dict - sdk names.","commit_id":"4f7d3a5e095bb654334720f50bf8d82be17476f7"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"ee0da3e9b7f6b482b73f765de6661e1d62d539f5","unresolved":true,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _compare_rules(self, exp, real):"},{"line_number":72,"context_line":"        self.assertDictEqual("},{"line_number":73,"context_line":"            qos_bandwidth_limit_rule.QoSBandwidthLimitRule(**exp)._to_munch(),"},{"line_number":74,"context_line":"            real._to_munch()"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9b8716b8_9619a6cd","line":73,"in_reply_to":"f58bd592_312067d9","updated":"2021-02-18 12:21:55.000000000","message":"I was expecting to have more issues, but simply to_dict(computed\u003dFalse) appeared to be sufficient.","commit_id":"4f7d3a5e095bb654334720f50bf8d82be17476f7"}],"openstack/tests/unit/network/v2/test_qos_policy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f1e584bb3351a3423d7f9d603f7e1248708fa14f","unresolved":true,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_make_it(self):"},{"line_number":44,"context_line":"        sot \u003d qos_policy.QoSPolicy(**EXAMPLE)"},{"line_number":45,"context_line":"        print(sot.project_id)"},{"line_number":46,"context_line":"        self.assertEqual(EXAMPLE[\u0027id\u0027], sot.id)"},{"line_number":47,"context_line":"        self.assertEqual(EXAMPLE[\u0027description\u0027], sot.description)"},{"line_number":48,"context_line":"        self.assertEqual(EXAMPLE[\u0027name\u0027], sot.name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"6f18e40c_103f627c","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":29},"updated":"2021-01-27 11:38:11.000000000","message":"whoops","commit_id":"f67279f88a393290d939db23a0bc03f935cb6770"}]}
