)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"92eac7c6323b90ee8faa27d81f2e73d1ef10b411","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Blueprint: openstacksdk-in-nova"},{"line_number":16,"context_line":"Co-Authored-By: Dustin Cowles \u003cdustin.cowles@intel.com\u003e"},{"line_number":17,"context_line":"Depends-On: https://review.opendev.org/643601"},{"line_number":18,"context_line":"Change-Id: I49f364e01e2a18de0c95674654fc72acea019e76"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"bfb3d3c7_094a9726","line":17,"range":{"start_line":17,"start_character":27,"end_line":17,"end_character":34},"updated":"2019-05-17 19:01:31.000000000","message":"hoping this will fix the dep chain problem\n\nhttp://lists.openstack.org/pipermail/openstack-discuss/2019-April/005423.html","commit_id":"35e68dbca08f3bb74a50dad2b7f0a67e4ce2b1ec"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"00507b4ad54ec2948e4bd65d436739b9204363e4","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Blueprint: openstacksdk-in-nova"},{"line_number":16,"context_line":"Co-Authored-By: Dustin Cowles \u003cdustin.cowles@intel.com\u003e"},{"line_number":17,"context_line":"Depends-On: https://review.opendev.org/643601"},{"line_number":18,"context_line":"Change-Id: I49f364e01e2a18de0c95674654fc72acea019e76"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"bfb3d3c7_8f13e7b8","line":17,"range":{"start_line":17,"start_character":27,"end_line":17,"end_character":34},"in_reply_to":"bfb3d3c7_094a9726","updated":"2019-05-17 21:39:36.000000000","message":"hmph, no joy, wth?","commit_id":"35e68dbca08f3bb74a50dad2b7f0a67e4ce2b1ec"}],"lower-constraints.txt":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d98c8e4e0155a83cf0ca3c6415cf50e29515e2d0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"os-brick\u003d\u003d2.6.1"},{"line_number":68,"context_line":"os-client-config\u003d\u003d1.29.0"},{"line_number":69,"context_line":"os-resource-classes\u003d\u003d0.1.0"},{"line_number":70,"context_line":"os-service-types\u003d\u003d1.7.0"},{"line_number":71,"context_line":"os-traits\u003d\u003d0.12.0"},{"line_number":72,"context_line":"os-vif\u003d\u003d1.14.0"},{"line_number":73,"context_line":"os-win\u003d\u003d3.0.0"}],"source_content_type":"text/plain","patch_set":20,"id":"9fb8cfa7_c54da89a","line":70,"range":{"start_line":70,"start_character":20,"end_line":70,"end_character":21},"updated":"2019-06-11 20:58:47.000000000","message":"I think this technically only needs to be 1.4.0 (to pick up extracted placement) but using latest seems like a generally good idea.","commit_id":"b53000ecf9e65b4797b7917a843850ea201adc5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a5b5f762a15ff82efe0e8188932f308730b4cdcc","unresolved":false,"context_lines":[{"line_number":68,"context_line":"os-client-config\u003d\u003d1.29.0"},{"line_number":69,"context_line":"os-resource-classes\u003d\u003d0.1.0"},{"line_number":70,"context_line":"os-service-types\u003d\u003d1.7.0"},{"line_number":71,"context_line":"os-traits\u003d\u003d0.15.0"},{"line_number":72,"context_line":"os-vif\u003d\u003d1.14.0"},{"line_number":73,"context_line":"os-win\u003d\u003d3.0.0"},{"line_number":74,"context_line":"os-xenapi\u003d\u003d0.3.3"}],"source_content_type":"text/plain","patch_set":21,"id":"7faddb67_b67b62bc","line":71,"range":{"start_line":71,"start_character":0,"end_line":71,"end_character":17},"updated":"2019-07-09 22:43:49.000000000","message":"This is where the merge conflict from PS20..21 was.","commit_id":"2f3d24b8671097c12dab1ded3ecee3c44102ac15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb14c761bb725b870496ba57ec4e22474a6c4470","unresolved":false,"context_lines":[{"line_number":63,"context_line":"netifaces\u003d\u003d0.10.4"},{"line_number":64,"context_line":"networkx\u003d\u003d1.11"},{"line_number":65,"context_line":"numpy\u003d\u003d1.14.2"},{"line_number":66,"context_line":"openstacksdk\u003d\u003d0.31.0"},{"line_number":67,"context_line":"os-brick\u003d\u003d2.6.1"},{"line_number":68,"context_line":"os-client-config\u003d\u003d1.29.0"},{"line_number":69,"context_line":"os-resource-classes\u003d\u003d0.1.0"}],"source_content_type":"text/plain","patch_set":23,"id":"7faddb67_bfa92791","line":66,"updated":"2019-07-23 21:45:04.000000000","message":"upper-constraints is up to 0.31.1 now - is 0.31.0 for any particular thing we need or just to be a lot newer than what was here before?","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7af5b9e44977f151a22654ca14f7131f8b4541d4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"netifaces\u003d\u003d0.10.4"},{"line_number":64,"context_line":"networkx\u003d\u003d1.11"},{"line_number":65,"context_line":"numpy\u003d\u003d1.14.2"},{"line_number":66,"context_line":"openstacksdk\u003d\u003d0.31.0"},{"line_number":67,"context_line":"os-brick\u003d\u003d2.6.1"},{"line_number":68,"context_line":"os-client-config\u003d\u003d1.29.0"},{"line_number":69,"context_line":"os-resource-classes\u003d\u003d0.1.0"}],"source_content_type":"text/plain","patch_set":23,"id":"7faddb67_bf9da70b","line":66,"in_reply_to":"7faddb67_bfa92791","updated":"2019-07-23 22:02:55.000000000","message":"Yeah, the latest hotness we\u0027re counting on in here is [1] and [2] which are in 0.31.0. The 0.31.x fix versions don\u0027t have anything we care about.\n\n[1] I3aa1f1633790e6e958bbc510ac5e5a11c0c27a9f\n[2] I1c140677347cf40db11e75f6a868356300d85071","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb14c761bb725b870496ba57ec4e22474a6c4470","unresolved":false,"context_lines":[{"line_number":67,"context_line":"os-brick\u003d\u003d2.6.1"},{"line_number":68,"context_line":"os-client-config\u003d\u003d1.29.0"},{"line_number":69,"context_line":"os-resource-classes\u003d\u003d0.1.0"},{"line_number":70,"context_line":"os-service-types\u003d\u003d1.7.0"},{"line_number":71,"context_line":"os-traits\u003d\u003d0.15.0"},{"line_number":72,"context_line":"os-vif\u003d\u003d1.14.0"},{"line_number":73,"context_line":"os-win\u003d\u003d3.0.0"}],"source_content_type":"text/plain","patch_set":23,"id":"7faddb67_7f93af5d","line":70,"updated":"2019-07-23 21:45:04.000000000","message":"Matches current u-c version https://github.com/openstack/requirements/blob/master/upper-constraints.txt#L385 but also wondering if this is just to update for the sake of updating?","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7af5b9e44977f151a22654ca14f7131f8b4541d4","unresolved":false,"context_lines":[{"line_number":67,"context_line":"os-brick\u003d\u003d2.6.1"},{"line_number":68,"context_line":"os-client-config\u003d\u003d1.29.0"},{"line_number":69,"context_line":"os-resource-classes\u003d\u003d0.1.0"},{"line_number":70,"context_line":"os-service-types\u003d\u003d1.7.0"},{"line_number":71,"context_line":"os-traits\u003d\u003d0.15.0"},{"line_number":72,"context_line":"os-vif\u003d\u003d1.14.0"},{"line_number":73,"context_line":"os-win\u003d\u003d3.0.0"}],"source_content_type":"text/plain","patch_set":23,"id":"7faddb67_7f75efcb","line":70,"in_reply_to":"7faddb67_7f93af5d","updated":"2019-07-23 22:02:55.000000000","message":"We actually only need 1.4.0 (to pick up [1] from service-types-authority which takes placement out from nova) but IMO we should *always* be keeping ost at the latest version. (I have in fact considered writing a canary to enforce that.)\n\n[1] I64b579180542342afe71f05afe175d14e10a539d","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"}],"nova/test.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"942dbfa2915079666089fd74269bd54179da575f","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    TIMEOUT_SCALING_FACTOR \u003d 1"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def setUp(self, mock_ksa\u003dTrue):"},{"line_number":195,"context_line":"        \"\"\"Run before each test method to initialize test environment.\"\"\""},{"line_number":196,"context_line":"        super(TestCase, self).setUp()"},{"line_number":197,"context_line":"        self.useFixture(nova_fixtures.Timeout("}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_a8f7b6f5","line":194,"range":{"start_line":194,"start_character":29,"end_line":194,"end_character":33},"updated":"2019-04-11 22:23:12.000000000","message":"This is too pervasive for right now (I suspect it\u0027ll kill a fair bunch of tests).\n\nLet\u0027s rip out this file\u0027s delta entirely and useFixture(KSAFixture) explicitly in GetKSAAdapterTestCase.setUp instead.","commit_id":"d969d6d1efa392aa92f6fd0ce89e0732ad417d73"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"10a57e3f1d21e9962b953d8af463a25153939454","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    TIMEOUT_SCALING_FACTOR \u003d 1"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def setUp(self, mock_ksa\u003dTrue):"},{"line_number":195,"context_line":"        \"\"\"Run before each test method to initialize test environment.\"\"\""},{"line_number":196,"context_line":"        super(TestCase, self).setUp()"},{"line_number":197,"context_line":"        self.useFixture(nova_fixtures.Timeout("}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_ba712ae3","line":194,"range":{"start_line":194,"start_character":29,"end_line":194,"end_character":33},"in_reply_to":"3fce034c_a8f7b6f5","updated":"2019-04-12 16:35:54.000000000","message":"Done","commit_id":"d969d6d1efa392aa92f6fd0ce89e0732ad417d73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb14c761bb725b870496ba57ec4e22474a6c4470","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            os.environ.get(\u0027OS_TEST_TIMEOUT\u0027, 0),"},{"line_number":207,"context_line":"            self.TIMEOUT_SCALING_FACTOR))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        self.useFixture(nova_fixtures.OpenStackSDKFixture())"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        self.useFixture(fixtures.NestedTempfile())"},{"line_number":212,"context_line":"        self.useFixture(fixtures.TempHomeDir())"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_1f939b51","line":209,"updated":"2019-07-23 21:45:04.000000000","message":"Why not just use this where needed? I would expect not a ton of things need this right now. Or do future changes make it better to just put it here in the base class rather than the individual test classes that would be affected?","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7af5b9e44977f151a22654ca14f7131f8b4541d4","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            os.environ.get(\u0027OS_TEST_TIMEOUT\u0027, 0),"},{"line_number":207,"context_line":"            self.TIMEOUT_SCALING_FACTOR))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        self.useFixture(nova_fixtures.OpenStackSDKFixture())"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        self.useFixture(fixtures.NestedTempfile())"},{"line_number":212,"context_line":"        self.useFixture(fixtures.TempHomeDir())"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_1f1e3b70","line":209,"in_reply_to":"7faddb67_1f939b51","updated":"2019-07-23 22:02:55.000000000","message":"Yeah, it\u0027s because loading up the sdk in the way a zillion of our tests do it (i.e. with little or no conf) makes an actual REST call to do some version discovery. Taking this out blows up like hundreds of tests, and it would take invoking this from dozens of places to patch them all out.","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"}],"nova/tests/unit/test_utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"43fbfd134be1b876fe1bab6b6f75c75751f507f7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"import six"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"from nova import context"},{"line_number":39,"context_line":"from nova import exception"},{"line_number":40,"context_line":"from nova.objects import base as obj_base"},{"line_number":41,"context_line":"from nova.objects import instance as instance_obj"},{"line_number":42,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fce034c_ab51d7da","side":"PARENT","line":39,"updated":"2019-04-13 13:10:30.000000000","message":"Hm, we need unit tests for the new util.","commit_id":"78e742662edd164c46382c31e106884762fed029"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"7f48374ea0e5cb9ddb116bda966db3a7f34e6208","unresolved":false,"context_lines":[{"line_number":36,"context_line":"import six"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"from nova import context"},{"line_number":39,"context_line":"from nova import exception"},{"line_number":40,"context_line":"from nova.objects import base as obj_base"},{"line_number":41,"context_line":"from nova.objects import instance as instance_obj"},{"line_number":42,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fce034c_7f3aa998","side":"PARENT","line":39,"in_reply_to":"3fce034c_ab51d7da","updated":"2019-04-16 01:03:55.000000000","message":"Done: _get_conf_group, _get_auth_and_session\nWIP: get_sdk_adapter","commit_id":"78e742662edd164c46382c31e106884762fed029"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"1e57bfdca4b117ec3a83732a61d776699c6de514","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"        mock_get_project_name.return_value \u003d test_conf_grp"},{"line_number":1450,"context_line":""},{"line_number":1451,"context_line":"        # happy path"},{"line_number":1452,"context_line":"        mock_conf.test_confgrp \u003d None"},{"line_number":1453,"context_line":"        actual_conf_grp \u003d utils._get_conf_group(test_service_type)"},{"line_number":1454,"context_line":"        self.assertEqual(test_conf_grp, actual_conf_grp)"},{"line_number":1455,"context_line":"        mock_get_project_name.assert_called_once_with(test_service_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fce034c_a5456245","line":1452,"updated":"2019-04-16 04:15:52.000000000","message":"I should use a mock or another instanced object to make sure it is returning the same object","commit_id":"14113ab164916de9fca771be4daff30eba71c520"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb14c761bb725b870496ba57ec4e22474a6c4470","unresolved":false,"context_lines":[{"line_number":1568,"context_line":"        service_type \u003d \u0027test_service\u0027"},{"line_number":1569,"context_line":"        mock_conn \u003d mock.Mock()"},{"line_number":1570,"context_line":"        mock_proxy \u003d mock.Mock()"},{"line_number":1571,"context_line":"        setattr(mock_conn, service_type, mock_proxy)"},{"line_number":1572,"context_line":"        mock_connection.return_value \u003d mock_conn"},{"line_number":1573,"context_line":"        mock_session \u003d mock.Mock()"},{"line_number":1574,"context_line":"        mock_get_auth_sess.return_value \u003d (None, mock_session)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_1fbcfbb9","line":1571,"updated":"2019-07-23 21:45:04.000000000","message":"A bit unconventional, could have done instead:\n\nmock_proxy \u003d mock.Mock()\nmock_conn \u003d mock.Mock(service_type\u003dmock_proxy)","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7af5b9e44977f151a22654ca14f7131f8b4541d4","unresolved":false,"context_lines":[{"line_number":1568,"context_line":"        service_type \u003d \u0027test_service\u0027"},{"line_number":1569,"context_line":"        mock_conn \u003d mock.Mock()"},{"line_number":1570,"context_line":"        mock_proxy \u003d mock.Mock()"},{"line_number":1571,"context_line":"        setattr(mock_conn, service_type, mock_proxy)"},{"line_number":1572,"context_line":"        mock_connection.return_value \u003d mock_conn"},{"line_number":1573,"context_line":"        mock_session \u003d mock.Mock()"},{"line_number":1574,"context_line":"        mock_get_auth_sess.return_value \u003d (None, mock_session)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_91077f19","line":1571,"in_reply_to":"7faddb67_1fbcfbb9","updated":"2019-07-23 22:02:55.000000000","message":"Yeah, where did this come from, this doesn\u0027t look like me.\n\nMust have been dustinc.\n\nCould polish this in a fup.","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"}],"nova/tests/unit/virt/ironic/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"43fbfd134be1b876fe1bab6b6f75c75751f507f7","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def setUp(self, mock_sg, mock_hash):"},{"line_number":116,"context_line":"        super(IronicDriverTestCase, self).setUp()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        ksa_fixture \u003d self.useFixture(nova_fixtures.KSAFixture())"},{"line_number":119,"context_line":"        self.mock_ksa_load_auth \u003d ksa_fixture.mock_load_auth"},{"line_number":120,"context_line":"        self.mock_ksa_load_sess \u003d ksa_fixture.mock_load_sess"},{"line_number":121,"context_line":"        self.mock_ksa_session \u003d ksa_fixture.mock_session"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fce034c_6b3c4f93","line":118,"updated":"2019-04-13 13:10:30.000000000","message":"Why was this delta necessary?","commit_id":"eae8d96c4fa8b1489772877d55c4ff69f154fedf"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"7f48374ea0e5cb9ddb116bda966db3a7f34e6208","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def setUp(self, mock_sg, mock_hash):"},{"line_number":116,"context_line":"        super(IronicDriverTestCase, self).setUp()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        ksa_fixture \u003d self.useFixture(nova_fixtures.KSAFixture())"},{"line_number":119,"context_line":"        self.mock_ksa_load_auth \u003d ksa_fixture.mock_load_auth"},{"line_number":120,"context_line":"        self.mock_ksa_load_sess \u003d ksa_fixture.mock_load_sess"},{"line_number":121,"context_line":"        self.mock_ksa_session \u003d ksa_fixture.mock_session"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fce034c_bfba5107","line":118,"in_reply_to":"3fce034c_6b3c4f93","updated":"2019-04-16 01:03:55.000000000","message":"Inadvertent, done","commit_id":"eae8d96c4fa8b1489772877d55c4ff69f154fedf"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"32e11ff3fef7ffa457c3456f6291a8d25f1a82c1","unresolved":false,"context_lines":[{"line_number":38,"context_line":"from nova import objects"},{"line_number":39,"context_line":"from nova import servicegroup"},{"line_number":40,"context_line":"from nova import test"},{"line_number":41,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":42,"context_line":"from nova.tests.unit import fake_block_device"},{"line_number":43,"context_line":"from nova.tests.unit import fake_instance"},{"line_number":44,"context_line":"from nova.tests.unit import matchers as nova_matchers"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fb8cfa7_b4a1e996","line":41,"updated":"2019-06-10 10:15:38.000000000","message":"This change seems kind of out of the blue.","commit_id":"3ec5cc43a01d149312c18f24615e0a8a04c9384f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"99255d4f5fa6e41824d489394ce760204328115f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"from nova import objects"},{"line_number":39,"context_line":"from nova import servicegroup"},{"line_number":40,"context_line":"from nova import test"},{"line_number":41,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":42,"context_line":"from nova.tests.unit import fake_block_device"},{"line_number":43,"context_line":"from nova.tests.unit import fake_instance"},{"line_number":44,"context_line":"from nova.tests.unit import matchers as nova_matchers"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fb8cfa7_fd165d55","line":41,"in_reply_to":"9fb8cfa7_b4a1e996","updated":"2019-06-10 17:15:13.000000000","message":"Yup, split/rebase damage, belongs here: https://review.opendev.org/#/c/642899/26/nova/tests/unit/virt/ironic/test_driver.py","commit_id":"3ec5cc43a01d149312c18f24615e0a8a04c9384f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d98c8e4e0155a83cf0ca3c6415cf50e29515e2d0","unresolved":false,"context_lines":[{"line_number":38,"context_line":"from nova import objects"},{"line_number":39,"context_line":"from nova import servicegroup"},{"line_number":40,"context_line":"from nova import test"},{"line_number":41,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":42,"context_line":"from nova.tests.unit import fake_block_device"},{"line_number":43,"context_line":"from nova.tests.unit import fake_instance"},{"line_number":44,"context_line":"from nova.tests.unit import matchers as nova_matchers"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fb8cfa7_4148cd85","line":41,"in_reply_to":"9fb8cfa7_fd165d55","updated":"2019-06-11 20:58:47.000000000","message":"Done","commit_id":"3ec5cc43a01d149312c18f24615e0a8a04c9384f"}],"nova/utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"72dd47ad5750fd240399ce4d90b7f42493df0162","unresolved":false,"context_lines":[{"line_number":1249,"context_line":"    \"\"\""},{"line_number":1250,"context_line":"    confgrp \u003d _get_conf_group(service_type)"},{"line_number":1251,"context_line":"    _, sess \u003d _get_auth_and_session(confgrp)"},{"line_number":1252,"context_line":"    conn \u003d connection.Connection(session\u003dsess, oslo_conf\u003dCONF)"},{"line_number":1253,"context_line":"    return getattr(conn, service_type)"},{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dfbec78f_724b0987","line":1252,"range":{"start_line":1252,"start_character":4,"end_line":1252,"end_character":62},"updated":"2019-05-02 22:56:50.000000000","message":"Make the Connection a singleton? Or map per cloud region / service type? Thought needed...","commit_id":"bdaf1b4680fd4eac71e505abc50cf06fdf2bd500"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d98c8e4e0155a83cf0ca3c6415cf50e29515e2d0","unresolved":false,"context_lines":[{"line_number":1163,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":1164,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":1165,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":1166,"context_line":"        # Try the service type as the conf group.  This is necessary for e.g."},{"line_number":1167,"context_line":"        # placement, while it\u0027s still part of the nova project."},{"line_number":1168,"context_line":"        # Note that this might become the first thing we try if/as we move to"},{"line_number":1169,"context_line":"        # using service types for conf group names in general."},{"line_number":1170,"context_line":"        confgrp \u003d service_type"},{"line_number":1171,"context_line":"        if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":1172,"context_line":"            raise exception.ConfGroupForServiceTypeNotFound(stype\u003dservice_type)"},{"line_number":1173,"context_line":"    return confgrp"},{"line_number":1174,"context_line":""},{"line_number":1175,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fb8cfa7_0552e0de","line":1172,"range":{"start_line":1166,"start_character":0,"end_line":1172,"end_character":79},"updated":"2019-06-11 20:58:47.000000000","message":"This should no longer be necessary now that placement has been extracted, as long as we bump the os-service-types minimum. Going to push a separate change for this, which will need to be conflict-resolved here assuming it merges first.\n\nhttps://review.opendev.org/664689","commit_id":"b53000ecf9e65b4797b7917a843850ea201adc5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b8fe74ac2caf105a6fe5e12e75d4e6752cc3ac55","unresolved":false,"context_lines":[{"line_number":1234,"context_line":"        min_version\u003dmin_version, max_version\u003dmax_version, raise_exc\u003dFalse)"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"def get_sdk_adapter(service_type):"},{"line_number":1238,"context_line":"    \"\"\"Construct an openstacksdk-brokered Adapter for a given service type."},{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":"    We expect to find a conf group whose name corresponds to the service_type\u0027s"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_76c16ae4","line":1237,"updated":"2019-07-09 22:38:19.000000000","message":"Once we start hitting user-auth\u0027d services, add ksa_auth to this and pass it through to _get_auth_and_session() (L1251).","commit_id":"b53000ecf9e65b4797b7917a843850ea201adc5f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb14c761bb725b870496ba57ec4e22474a6c4470","unresolved":false,"context_lines":[{"line_number":1163,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":1164,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":1165,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":1166,"context_line":"        # Try the service type as the conf group.  This is necessary for e.g."},{"line_number":1167,"context_line":"        # placement, while it\u0027s still part of the nova project."},{"line_number":1168,"context_line":"        # Note that this might become the first thing we try if/as we move to"},{"line_number":1169,"context_line":"        # using service types for conf group names in general."},{"line_number":1170,"context_line":"        confgrp \u003d service_type"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_5fc1132e","line":1167,"range":{"start_line":1166,"start_character":51,"end_line":1167,"end_character":63},"updated":"2019-07-23 21:45:04.000000000","message":"Is this old or are we trying to deal with Stein upgrade compat where placement could be running from Stein nova and nova proper is running in Train?","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2851c554fb68530b75ed29a9b6f23acc9ac8147a","unresolved":false,"context_lines":[{"line_number":1163,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":1164,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":1165,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":1166,"context_line":"        # Try the service type as the conf group.  This is necessary for e.g."},{"line_number":1167,"context_line":"        # placement, while it\u0027s still part of the nova project."},{"line_number":1168,"context_line":"        # Note that this might become the first thing we try if/as we move to"},{"line_number":1169,"context_line":"        # using service types for conf group names in general."},{"line_number":1170,"context_line":"        confgrp \u003d service_type"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_df1183ae","line":1167,"range":{"start_line":1166,"start_character":51,"end_line":1167,"end_character":63},"in_reply_to":"7faddb67_5fc1132e","updated":"2019-07-23 21:45:50.000000000","message":"I see now this is basically an old comment and is here because the code was refactored.","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7af5b9e44977f151a22654ca14f7131f8b4541d4","unresolved":false,"context_lines":[{"line_number":1163,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":1164,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":1165,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":1166,"context_line":"        # Try the service type as the conf group.  This is necessary for e.g."},{"line_number":1167,"context_line":"        # placement, while it\u0027s still part of the nova project."},{"line_number":1168,"context_line":"        # Note that this might become the first thing we try if/as we move to"},{"line_number":1169,"context_line":"        # using service types for conf group names in general."},{"line_number":1170,"context_line":"        confgrp \u003d service_type"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_713763e5","line":1167,"range":{"start_line":1166,"start_character":51,"end_line":1167,"end_character":63},"in_reply_to":"7faddb67_df1183ae","updated":"2019-07-23 22:02:55.000000000","message":"\u003e I see now this is basically an old comment and is here because the\n \u003e code was refactored.\n\nThis ^\n\nI may have posted a separate patch to remove this, or I might have dreamed that.","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb14c761bb725b870496ba57ec4e22474a6c4470","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"    confgrp \u003d _get_conf_group(service_type)"},{"line_number":1251,"context_line":"    _, sess \u003d _get_auth_and_session(confgrp)"},{"line_number":1252,"context_line":"    conn \u003d connection.Connection(session\u003dsess, oslo_conf\u003dCONF)"},{"line_number":1253,"context_line":"    return getattr(conn, service_type)"},{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"def get_endpoint(ksa_adapter):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_ff123fb4","line":1253,"range":{"start_line":1253,"start_character":11,"end_line":1253,"end_character":38},"updated":"2019-07-23 21:45:04.000000000","message":"Why not just conn.service_type?","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"951f5c5e14ea9f63fc6f4b436057f9ddbc6d33cc","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"    confgrp \u003d _get_conf_group(service_type)"},{"line_number":1251,"context_line":"    _, sess \u003d _get_auth_and_session(confgrp)"},{"line_number":1252,"context_line":"    conn \u003d connection.Connection(session\u003dsess, oslo_conf\u003dCONF)"},{"line_number":1253,"context_line":"    return getattr(conn, service_type)"},{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"def get_endpoint(ksa_adapter):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_f187d360","line":1253,"range":{"start_line":1253,"start_character":11,"end_line":1253,"end_character":38},"in_reply_to":"7faddb67_516827b9","updated":"2019-07-23 22:07:15.000000000","message":"Can do, but this is just python.\n\n var \u003d \u0027foo\u0027\n assert getattr(my_obj, var) !\u003d my_obj.var\n assert getattr(my_obj, var) \u003d\u003d my_obj.foo","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c10b731671f4c0b1165a69c0b6d1f4145c9fd2d2","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"    confgrp \u003d _get_conf_group(service_type)"},{"line_number":1251,"context_line":"    _, sess \u003d _get_auth_and_session(confgrp)"},{"line_number":1252,"context_line":"    conn \u003d connection.Connection(session\u003dsess, oslo_conf\u003dCONF)"},{"line_number":1253,"context_line":"    return getattr(conn, service_type)"},{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"def get_endpoint(ksa_adapter):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_8ec60a68","line":1253,"range":{"start_line":1253,"start_character":11,"end_line":1253,"end_character":38},"in_reply_to":"7faddb67_51a10795","updated":"2019-07-31 13:00:03.000000000","message":"I know it\u0027s less pretty, but I\u0027d much rather we hardcoded the list of service types we expected in a dumb if-else statement or a dict. getattr is powerful but it just makes things harder to grok, IMO. Alternatively, the openstacksdk \u0027Connection\u0027 object could gain a method that takes \u0027service_type\u0027 as the argument.","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"036567b4a92fcfeed79a16c90562cbf384be999b","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"    confgrp \u003d _get_conf_group(service_type)"},{"line_number":1251,"context_line":"    _, sess \u003d _get_auth_and_session(confgrp)"},{"line_number":1252,"context_line":"    conn \u003d connection.Connection(session\u003dsess, oslo_conf\u003dCONF)"},{"line_number":1253,"context_line":"    return getattr(conn, service_type)"},{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"def get_endpoint(ksa_adapter):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_516827b9","line":1253,"range":{"start_line":1253,"start_character":11,"end_line":1253,"end_character":38},"in_reply_to":"7faddb67_d14bb75c","updated":"2019-07-23 22:05:40.000000000","message":"Hmm, OK that\u0027s not at all clear to me as a non-sdk user. A code comment would help.","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2d2f47544b6ab25573f16d480eeca8dda36ed8f1","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"    confgrp \u003d _get_conf_group(service_type)"},{"line_number":1251,"context_line":"    _, sess \u003d _get_auth_and_session(confgrp)"},{"line_number":1252,"context_line":"    conn \u003d connection.Connection(session\u003dsess, oslo_conf\u003dCONF)"},{"line_number":1253,"context_line":"    return getattr(conn, service_type)"},{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"def get_endpoint(ksa_adapter):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_51a10795","line":1253,"range":{"start_line":1253,"start_character":11,"end_line":1253,"end_character":38},"in_reply_to":"7faddb67_f187d360","updated":"2019-07-23 22:34:11.000000000","message":"Ack, OK, yeah when you say it like that a comment sounds dumb. Ignore.","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7af5b9e44977f151a22654ca14f7131f8b4541d4","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"    confgrp \u003d _get_conf_group(service_type)"},{"line_number":1251,"context_line":"    _, sess \u003d _get_auth_and_session(confgrp)"},{"line_number":1252,"context_line":"    conn \u003d connection.Connection(session\u003dsess, oslo_conf\u003dCONF)"},{"line_number":1253,"context_line":"    return getattr(conn, service_type)"},{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"def get_endpoint(ksa_adapter):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_d14bb75c","line":1253,"range":{"start_line":1253,"start_character":11,"end_line":1253,"end_character":38},"in_reply_to":"7faddb67_ff123fb4","updated":"2019-07-23 22:02:55.000000000","message":"conn.service_type would be looking for a connection to the service with service_type \u0027service_type\u0027.","commit_id":"9f64b9900e705e040aadb07ec3b9db140b4fc11b"}],"requirements.txt":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"f40bdd600be1b0df51260d36de8644147f7146a8","unresolved":false,"context_lines":[{"line_number":71,"context_line":"python-dateutil\u003e\u003d2.5.3 # BSD"},{"line_number":72,"context_line":"zVMCloudConnector\u003e\u003d1.3.0;sys_platform!\u003d\u0027win32\u0027  # Apache 2.0 License"},{"line_number":73,"context_line":"futurist\u003e\u003d1.8.0 # Apache-2.0"},{"line_number":74,"context_line":"openstacksdk\u003e\u003d0.26.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"3fce034c_1cd14f55","line":74,"updated":"2019-04-14 00:25:12.000000000","message":"We should bump this (and in upper-reqs) to 0.27.0 as 0.26 has a memory leak.","commit_id":"eae8d96c4fa8b1489772877d55c4ff69f154fedf"},{"author":{"_account_id":29745,"name":"Dustin Cowles","email":"cowlesd@gmail.com","username":"dustinc","status":"inactive"},"change_message_id":"7f48374ea0e5cb9ddb116bda966db3a7f34e6208","unresolved":false,"context_lines":[{"line_number":71,"context_line":"python-dateutil\u003e\u003d2.5.3 # BSD"},{"line_number":72,"context_line":"zVMCloudConnector\u003e\u003d1.3.0;sys_platform!\u003d\u0027win32\u0027  # Apache 2.0 License"},{"line_number":73,"context_line":"futurist\u003e\u003d1.8.0 # Apache-2.0"},{"line_number":74,"context_line":"openstacksdk\u003e\u003d0.26.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"3fce034c_bf4fb132","line":74,"in_reply_to":"3fce034c_1cd14f55","updated":"2019-04-16 01:03:55.000000000","message":"Done","commit_id":"eae8d96c4fa8b1489772877d55c4ff69f154fedf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d98c8e4e0155a83cf0ca3c6415cf50e29515e2d0","unresolved":false,"context_lines":[{"line_number":66,"context_line":"cursive\u003e\u003d0.2.1 # Apache-2.0"},{"line_number":67,"context_line":"pypowervm\u003e\u003d1.1.15 # Apache-2.0"},{"line_number":68,"context_line":"retrying\u003e\u003d1.3.3,!\u003d1.3.0 # Apache-2.0"},{"line_number":69,"context_line":"os-service-types\u003e\u003d1.7.0 # Apache-2.0"},{"line_number":70,"context_line":"taskflow\u003e\u003d2.16.0 # Apache-2.0"},{"line_number":71,"context_line":"python-dateutil\u003e\u003d2.5.3 # BSD"},{"line_number":72,"context_line":"zVMCloudConnector\u003e\u003d1.3.0;sys_platform!\u003d\u0027win32\u0027  # Apache 2.0 License"}],"source_content_type":"text/plain","patch_set":20,"id":"9fb8cfa7_e5522c3b","line":69,"range":{"start_line":69,"start_character":20,"end_line":69,"end_character":21},"updated":"2019-06-11 20:58:47.000000000","message":"ditto","commit_id":"b53000ecf9e65b4797b7917a843850ea201adc5f"}]}
