)]}'
{"ironic/conductor/base_manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37737a7c0e33925071d7a22e312747b9e4439071","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.notifier \u003d rpc.get_notifier()"},{"line_number":67,"context_line":"        self._started \u003d False"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _get_driver(self, driver_name):"},{"line_number":70,"context_line":"        \"\"\"Get the driver."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        Really just a proxy to driver_factory.get_driver()."}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_87c9fc28","line":69,"updated":"2016-02-29 11:19:41.000000000","message":"why can\u0027t we drop this method completely?","commit_id":"834c01dfb4f621707888000b916e523418ebd89c"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"3b1f2de6d88ef8bda1fa16e13a4d4dc12efa831a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.notifier \u003d rpc.get_notifier()"},{"line_number":67,"context_line":"        self._started \u003d False"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _get_driver(self, driver_name):"},{"line_number":70,"context_line":"        \"\"\"Get the driver."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        Really just a proxy to driver_factory.get_driver()."}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_2d160a4c","line":69,"in_reply_to":"9aed3d3a_87c9fc28","updated":"2016-02-29 13:13:29.000000000","message":"It\u0027s called in manager.py as well, but yeah I can run through and do that.","commit_id":"834c01dfb4f621707888000b916e523418ebd89c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37737a7c0e33925071d7a22e312747b9e4439071","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \"\"\"Consistent hash ring which maps drivers to conductors.\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # NOTE(deva): this call may raise DriverLoadError or DriverNotFound"},{"line_number":110,"context_line":"        _drivers \u003d driver_factory.drivers()"},{"line_number":111,"context_line":"        if not _drivers:"},{"line_number":112,"context_line":"            msg \u003d _LE(\"Conductor %s cannot be started because no drivers \""},{"line_number":113,"context_line":"                      \"were loaded.  This could be because no drivers were \""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_67ce782f","line":110,"updated":"2016-02-29 11:19:41.000000000","message":"+1","commit_id":"834c01dfb4f621707888000b916e523418ebd89c"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"e4cad98e3583d5348261b93c66cb7946c6103dd8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \"\"\"Consistent hash ring which maps drivers to conductors.\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # NOTE(deva): this call may raise DriverLoadError or DriverNotFound"},{"line_number":110,"context_line":"        _drivers \u003d driver_factory.drivers()"},{"line_number":111,"context_line":"        if not _drivers:"},{"line_number":112,"context_line":"            msg \u003d _LE(\"Conductor %s cannot be started because no drivers \""},{"line_number":113,"context_line":"                      \"were loaded.  This could be because no drivers were \""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_6214ab9f","line":110,"updated":"2016-02-29 10:05:31.000000000","message":"nit: not needed to use underscores for local variables.","commit_id":"834c01dfb4f621707888000b916e523418ebd89c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37737a7c0e33925071d7a22e312747b9e4439071","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        # NOTE(jroll) this is passed to the dbapi, which requires a list, not"},{"line_number":119,"context_line":"        # a generator (which keys() returns in py3)"},{"line_number":120,"context_line":"        _driver_names \u003d list(_drivers.keys())"},{"line_number":121,"context_line":"        _driver_objs \u003d _drivers.values()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Collect driver-specific periodic tasks."}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_c7cf8427","line":120,"updated":"2016-02-29 11:19:41.000000000","message":".keys() is not needed","commit_id":"834c01dfb4f621707888000b916e523418ebd89c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37737a7c0e33925071d7a22e312747b9e4439071","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # NOTE(jroll) this is passed to the dbapi, which requires a list, not"},{"line_number":119,"context_line":"        # a generator (which keys() returns in py3)"},{"line_number":120,"context_line":"        _driver_names \u003d list(_drivers.keys())"},{"line_number":121,"context_line":"        _driver_objs \u003d _drivers.values()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Collect driver-specific periodic tasks."},{"line_number":124,"context_line":"        # Conductor periodic tasks accept context argument, driver periodic"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_a7d400bd","line":121,"updated":"2016-02-29 11:19:41.000000000","message":"not sure if it\u0027s important or not, but values() is also a generator in py3k","commit_id":"834c01dfb4f621707888000b916e523418ebd89c"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"3b1f2de6d88ef8bda1fa16e13a4d4dc12efa831a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # NOTE(jroll) this is passed to the dbapi, which requires a list, not"},{"line_number":119,"context_line":"        # a generator (which keys() returns in py3)"},{"line_number":120,"context_line":"        _driver_names \u003d list(_drivers.keys())"},{"line_number":121,"context_line":"        _driver_objs \u003d _drivers.values()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Collect driver-specific periodic tasks."},{"line_number":124,"context_line":"        # Conductor periodic tasks accept context argument, driver periodic"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_8d5476ff","line":121,"in_reply_to":"9aed3d3a_a7d400bd","updated":"2016-02-29 13:13:29.000000000","message":"Right, we iterate properly over this one :)","commit_id":"834c01dfb4f621707888000b916e523418ebd89c"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7d48d21955219e4bb49d56c2c4fc958c5d9673dd","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.ring_manager \u003d hash.HashRingManager()"},{"line_number":94,"context_line":"        \"\"\"Consistent hash ring which maps drivers to conductors.\"\"\""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # NOTE(deva): this call may raise DriverLoadError or DriverNotFound"},{"line_number":97,"context_line":"        drivers \u003d driver_factory.drivers()"},{"line_number":98,"context_line":"        if not drivers:"},{"line_number":99,"context_line":"            msg \u003d _LE(\"Conductor %s cannot be started because no drivers \""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_1599577c","line":96,"updated":"2016-03-01 07:59:56.000000000","message":"I think we should add these raises to docstring also","commit_id":"c1b92132b236039cd92cd7e84aa9e28f6bf213de"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a653c2a09d25ea4d8e4eeb08b678560c0f9da678","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.ring_manager \u003d hash.HashRingManager()"},{"line_number":94,"context_line":"        \"\"\"Consistent hash ring which maps drivers to conductors.\"\"\""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # NOTE(deva): this call may raise DriverLoadError or DriverNotFound"},{"line_number":97,"context_line":"        drivers \u003d driver_factory.drivers()"},{"line_number":98,"context_line":"        if not drivers:"},{"line_number":99,"context_line":"            msg \u003d _LE(\"Conductor %s cannot be started because no drivers \""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_ad05bf46","line":96,"in_reply_to":"9aed3d3a_1599577c","updated":"2016-03-01 09:48:49.000000000","message":"That\u0027s right, but this problem was there before this patch, so I think it can be fixed separately.","commit_id":"c1b92132b236039cd92cd7e84aa9e28f6bf213de"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a653c2a09d25ea4d8e4eeb08b678560c0f9da678","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # NOTE(jroll) this is passed to the dbapi, which requires a list, not"},{"line_number":106,"context_line":"        # a generator (which keys() returns in py3)"},{"line_number":107,"context_line":"        driver_names \u003d list(drivers)"},{"line_number":108,"context_line":"        driver_objs \u003d drivers.values()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Collect driver-specific periodic tasks."},{"line_number":111,"context_line":"        # Conductor periodic tasks accept context argument, driver periodic"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_6d9e1708","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":38},"updated":"2016-03-01 09:48:49.000000000","message":"I would avoid a temporary variable, so that someone does not try to use it as list once more","commit_id":"c1b92132b236039cd92cd7e84aa9e28f6bf213de"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"bf0f3d3e1235608b7a71b83a9e56d0c0db18ed51","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        :raises: RuntimeError when conductor is already running."},{"line_number":74,"context_line":"        :raises: NoDriversLoaded when no drivers are enabled on the conductor."},{"line_number":75,"context_line":"        :raises: DriverNotFound if a driver is enabled that does not exist."},{"line_number":76,"context_line":"        :raises DriverLoadError if an enabled driver cannot be loaded."},{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        if self._started:"},{"line_number":79,"context_line":"            raise RuntimeError(_(\u0027Attempt to start an already running \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_160aa226","line":76,"updated":"2016-03-01 23:37:35.000000000","message":"nit: Might impact generated documentation.\n\ns/:raises /:raises: /","commit_id":"4c9b6fa5a8298b48adc3b254f0f378cb085f3f20"}],"ironic/tests/unit/common/test_driver_factory.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"87f9a9619a846b623d080dcd2b0558558d5ed6d3","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(DriverLoadTestCase, self).setUp()"},{"line_number":32,"context_line":"        driver_factory.DriverFactory._extension_manager \u003d None"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _fake_init_name_err(self, *args, **kwargs):"},{"line_number":35,"context_line":"        kwargs[\u0027on_load_failure_callback\u0027](None, FakeEp, NameError(\u0027aaa\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_a73008a0","line":32,"range":{"start_line":32,"start_character":8,"end_line":32,"end_character":62},"updated":"2016-03-01 11:32:41.000000000","message":"maybe you need to do something like this?","commit_id":"c1b92132b236039cd92cd7e84aa9e28f6bf213de"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"86ed94828250e0eeb2789a22f5d6aed66906cbbe","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(DriverLoadTestCase, self).setUp()"},{"line_number":32,"context_line":"        driver_factory.DriverFactory._extension_manager \u003d None"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _fake_init_name_err(self, *args, **kwargs):"},{"line_number":35,"context_line":"        kwargs[\u0027on_load_failure_callback\u0027](None, FakeEp, NameError(\u0027aaa\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_18415d0c","line":32,"range":{"start_line":32,"start_character":8,"end_line":32,"end_character":62},"in_reply_to":"7af24918_a73008a0","updated":"2016-03-01 12:15:11.000000000","message":"+1 looks like mocked extension manager from previous completed test used in test_get_driver_known()","commit_id":"c1b92132b236039cd92cd7e84aa9e28f6bf213de"}]}
