)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c6c0d43881f441303e7ba9e4ca5cae2d661105a3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"options in the main project conf (ie /etc/nova/nova.conf)"},{"line_number":23,"context_line":"without exposing them directly to all of nova\u0027s own"},{"line_number":24,"context_line":"config options."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I9634b474cd0d3fda09aef5800020c9415c28e3d8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dae33548_fb246fb0","line":25,"updated":"2016-02-14 08:12:37.000000000","message":"Implements ?","commit_id":"76da2b466ceb93b169c7d182064e85b1dcb3f67a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"620b658d19911d74c41e1890e57034c8d3d769b0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"options in the main project conf (ie /etc/nova/nova.conf)"},{"line_number":23,"context_line":"without exposing them directly to all of nova\u0027s own"},{"line_number":24,"context_line":"config options."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I9634b474cd0d3fda09aef5800020c9415c28e3d8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dae33548_b27e80ac","line":25,"in_reply_to":"dae33548_fb246fb0","updated":"2016-02-15 03:20:48.000000000","message":"implementations i guess","commit_id":"76da2b466ceb93b169c7d182064e85b1dcb3f67a"}],"os_vif/__init__.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a300811388fab5bb09e40b4542c0448b8fac388f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def load_plugin(plugin_name, plugin_class):"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    Load a plugin, registering its configuration options"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_697381b5","line":29,"updated":"2016-02-09 11:06:57.000000000","message":"I\u0027d prefer we prefix this function name with _ to indicate it\u0027s not part of the public os_vif API...","commit_id":"9422867d07f1e34a87f77134e387a7aaaa9a8ff7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a300811388fab5bb09e40b4542c0448b8fac388f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    :returns: an initialized instance of @plugin_class"},{"line_number":37,"context_line":"    \"\"\""},{"line_number":38,"context_line":"    cfg_group_name \u003d \"os_vif_\" + plugin_name"},{"line_number":39,"context_line":"    cfg_opts \u003d getattr(plugin_class, \"CONFIG_OPTS\")"},{"line_number":40,"context_line":"    cfg_group \u003d cfg.OptGroup("},{"line_number":41,"context_line":"        cfg_group_name,"},{"line_number":42,"context_line":"        \"os-vif plugin %s options\" % plugin_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_89783d91","line":39,"updated":"2016-02-09 11:06:57.000000000","message":"What if cfg_opts is None?","commit_id":"9422867d07f1e34a87f77134e387a7aaaa9a8ff7"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f229c1e8bb9a1cc8bf9ef28f5c2334e38970e8a9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    :returns: an initialized instance of @plugin_class"},{"line_number":37,"context_line":"    \"\"\""},{"line_number":38,"context_line":"    cfg_group_name \u003d \"os_vif_\" + plugin_name"},{"line_number":39,"context_line":"    cfg_opts \u003d getattr(plugin_class, \"CONFIG_OPTS\")"},{"line_number":40,"context_line":"    cfg_group \u003d cfg.OptGroup("},{"line_number":41,"context_line":"        cfg_group_name,"},{"line_number":42,"context_line":"        \"os-vif plugin %s options\" % plugin_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_7a71badf","line":39,"in_reply_to":"5a5ae5dd_89783d91","updated":"2016-02-11 10:46:02.000000000","message":"Done","commit_id":"9422867d07f1e34a87f77134e387a7aaaa9a8ff7"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fff9e94d62bad9513e33ccb1652ae360ed7263cc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def _load_plugin(plugin_name, plugin_class):"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    Load a plugin, registering its configuration options"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_18bdf9b6","line":29,"updated":"2016-02-12 08:19:56.000000000","message":"Can we have this logic inside class Plugin as a classmethod which return an instance of Plugin well initialized with its config.","commit_id":"f11dd5200d155fafd999b2598c6939f525066b9e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fff9e94d62bad9513e33ccb1652ae360ed7263cc","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    global _EXT_MANAGER"},{"line_number":61,"context_line":"    if reset or (_EXT_MANAGER is None):"},{"line_number":62,"context_line":"        _EXT_MANAGER \u003d extension.ExtensionManager(namespace\u003d\u0027os_vif\u0027,"},{"line_number":63,"context_line":"                                                  invoke_on_load\u003dFalse)"},{"line_number":64,"context_line":"        for plugin_name in _EXT_MANAGER.keys():"},{"line_number":65,"context_line":"            obj \u003d _load_plugin(plugin_name,"},{"line_number":66,"context_line":"                               _EXT_MANAGER[plugin_name].plugin)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_78b18d46","line":63,"updated":"2016-02-12 08:19:56.000000000","message":"Nice, since you are using \u0027invoke_on_load\u003dFalse\u0027 plugins are not already instantiated.","commit_id":"f11dd5200d155fafd999b2598c6939f525066b9e"}],"os_vif/plugin.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42f467cff24a13db5f16655fdbb423ebe9994102","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    # Override to provide a list of oslo_config.Opt instances for"},{"line_number":58,"context_line":"    # the plugin config parameters"},{"line_number":59,"context_line":"    CONFIG_OPTS \u003d ()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def __init__(self, config):"},{"line_number":62,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_87f7d48b","line":59,"range":{"start_line":59,"start_character":18,"end_line":59,"end_character":20},"updated":"2016-02-09 06:11:44.000000000","message":"Nit: you are initialising this as an empty tuple not a list as the comment suggests the type should be.","commit_id":"9422867d07f1e34a87f77134e387a7aaaa9a8ff7"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2dd6febf5608b34d541322357e414b0139c7d262","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @classmethod"},{"line_number":106,"context_line":"    def load(klass, plugin_name):"},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        Load a plugin, registering its configuration options"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_4d2633cf","line":106,"updated":"2016-02-16 10:57:21.000000000","message":"nit: by convention we prefer to use \u0027cls\u0027 instead of \u0027klass\u0027","commit_id":"76da2b466ceb93b169c7d182064e85b1dcb3f67a"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2dd6febf5608b34d541322357e414b0139c7d262","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        Load a plugin, registering its configuration options"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        :param klass: the class to be loaded"},{"line_number":111,"context_line":"        :param plugin_name: the name of the plugin extension"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        :returns: an initialized instance of @klass"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_0d454b6f","line":110,"updated":"2016-02-16 10:57:21.000000000","message":"Since you are using a classmethod\u0027s decorator, this argument \u0027klass\u0027 is actually private for users so I believe we should not to expose it in docstring.","commit_id":"76da2b466ceb93b169c7d182064e85b1dcb3f67a"}],"os_vif/tests/test_os_vif.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42f467cff24a13db5f16655fdbb423ebe9994102","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    CONFIG_OPTS \u003d ("},{"line_number":27,"context_line":"        cfg.BoolOpt(\"make_it_work\","},{"line_number":28,"context_line":"                    default\u003dFalse,"},{"line_number":29,"context_line":"                    help\u003d\"Make everything work correctly by setting this\"),"},{"line_number":30,"context_line":"        cfg.IntOpt(\"sleep_time\","},{"line_number":31,"context_line":"                   default\u003d0,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_8725940b","line":28,"range":{"start_line":28,"start_character":28,"end_line":28,"end_character":33},"updated":"2016-02-09 06:11:44.000000000","message":"i like your default :)","commit_id":"9422867d07f1e34a87f77134e387a7aaaa9a8ff7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a300811388fab5bb09e40b4542c0448b8fac388f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.assertEqual(cfg.CONF.os_vif_demo.make_it_work, False)"},{"line_number":66,"context_line":"        self.assertEqual(cfg.CONF.os_vif_demo.sleep_time, 0)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.assertEqual(obj.config, cfg.CONF.os_vif_demo)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def test_plug_not_initialized(self):"},{"line_number":71,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_c947154a","line":68,"updated":"2016-02-09 11:06:57.000000000","message":"Perhaps add a test for when CONFIG_OPTS is None or the default empty tuple?","commit_id":"9422867d07f1e34a87f77134e387a7aaaa9a8ff7"}]}
