)]}'
{"watcher/cmd/api.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"9b68ea44a7f88f64f7940b42187b54140427aaa2","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_reports import guru_meditation_report as gmr"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from watcher._i18n import _"},{"line_number":27,"context_line":"from watcher.common import service as watcher_service"},{"line_number":28,"context_line":"from watcher import version"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_02d0bc52","line":27,"range":{"start_line":27,"start_character":35,"end_line":27,"end_character":53},"updated":"2016-03-21 10:55:25.000000000","message":"IMHO, not necessary. \u0027service\u0027 is shorter than \u0027watcher_service\u0027, and we do not import another service module","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"545454864ee4c7af97ff6b3e93bfee142dae2971","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_reports import guru_meditation_report as gmr"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from watcher._i18n import _"},{"line_number":27,"context_line":"from watcher.common import service as watcher_service"},{"line_number":28,"context_line":"from watcher import version"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_e89ba6c7","line":27,"range":{"start_line":27,"start_character":35,"end_line":27,"end_character":53},"in_reply_to":"fa0719c6_02d0bc52","updated":"2016-03-30 07:34:15.000000000","message":"Done","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"},{"author":{"_account_id":20676,"name":"daniel.pawlik","display_name":"Daniel Pawlik","email":"dpawlik@redhat.com","username":"daniel.pawlik"},"change_message_id":"6e91df429c7be42b2c61aac2543bae106611aec6","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    if host \u003d\u003d \u00270.0.0.0\u0027:"},{"line_number":46,"context_line":"        LOG.info(_(\u0027serving on 0.0.0.0:%(port)s, \u0027"},{"line_number":47,"context_line":"                   \u0027view at http://127.0.0.1:%(port)s\u0027) %"},{"line_number":48,"context_line":"                 dict(port\u003dport))"},{"line_number":49,"context_line":"    else:"},{"line_number":50,"context_line":"        LOG.info(_(\u0027serving on http://%(host)s:%(port)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_1c5a8f4f","line":47,"updated":"2016-05-09 21:26:19.000000000","message":"If CONF.api.enable_ssl_api is True, protocol should be changed from http to https. Or?","commit_id":"a9e7251d0d57015d752ca7e8b9ea1f1667d8ddc5"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"13b9c5344faa12d8f63a9157bf4c97a44293e052","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    if host \u003d\u003d \u00270.0.0.0\u0027:"},{"line_number":46,"context_line":"        LOG.info(_(\u0027serving on 0.0.0.0:%(port)s, \u0027"},{"line_number":47,"context_line":"                   \u0027view at http://127.0.0.1:%(port)s\u0027) %"},{"line_number":48,"context_line":"                 dict(port\u003dport))"},{"line_number":49,"context_line":"    else:"},{"line_number":50,"context_line":"        LOG.info(_(\u0027serving on http://%(host)s:%(port)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_6a713ba8","line":47,"in_reply_to":"dab17558_1c5a8f4f","updated":"2016-05-10 15:07:36.000000000","message":"You are completely right, but it\u0027s not really related to this blueprint, I created a bug (see https://bugs.launchpad.net/watcher/+bug/1580044) with a low-hanging-fruit-tag so that someone can fix this.","commit_id":"a9e7251d0d57015d752ca7e8b9ea1f1667d8ddc5"},{"author":{"_account_id":20676,"name":"daniel.pawlik","display_name":"Daniel Pawlik","email":"dpawlik@redhat.com","username":"daniel.pawlik"},"change_message_id":"7644711aba3a25e6903ddab24c7254d492c4bbf5","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    if host \u003d\u003d \u00270.0.0.0\u0027:"},{"line_number":46,"context_line":"        LOG.info(_(\u0027serving on 0.0.0.0:%(port)s, \u0027"},{"line_number":47,"context_line":"                   \u0027view at http://127.0.0.1:%(port)s\u0027) %"},{"line_number":48,"context_line":"                 dict(port\u003dport))"},{"line_number":49,"context_line":"    else:"},{"line_number":50,"context_line":"        LOG.info(_(\u0027serving on http://%(host)s:%(port)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_0c5d0b79","line":47,"in_reply_to":"dab17558_6a713ba8","updated":"2016-05-10 15:46:06.000000000","message":"Ok, thanks","commit_id":"a9e7251d0d57015d752ca7e8b9ea1f1667d8ddc5"},{"author":{"_account_id":20676,"name":"daniel.pawlik","display_name":"Daniel Pawlik","email":"dpawlik@redhat.com","username":"daniel.pawlik"},"change_message_id":"6e91df429c7be42b2c61aac2543bae106611aec6","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                   \u0027view at http://127.0.0.1:%(port)s\u0027) %"},{"line_number":48,"context_line":"                 dict(port\u003dport))"},{"line_number":49,"context_line":"    else:"},{"line_number":50,"context_line":"        LOG.info(_(\u0027serving on http://%(host)s:%(port)s\u0027) %"},{"line_number":51,"context_line":"                 dict(host\u003dhost, port\u003dport))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    launcher \u003d service.process_launcher()"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_fc54eb21","line":50,"updated":"2016-05-09 21:26:19.000000000","message":"Ditto","commit_id":"a9e7251d0d57015d752ca7e8b9ea1f1667d8ddc5"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"13b9c5344faa12d8f63a9157bf4c97a44293e052","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                   \u0027view at http://127.0.0.1:%(port)s\u0027) %"},{"line_number":48,"context_line":"                 dict(port\u003dport))"},{"line_number":49,"context_line":"    else:"},{"line_number":50,"context_line":"        LOG.info(_(\u0027serving on http://%(host)s:%(port)s\u0027) %"},{"line_number":51,"context_line":"                 dict(host\u003dhost, port\u003dport))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    launcher \u003d service.process_launcher()"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_0a618fd3","line":50,"in_reply_to":"dab17558_fc54eb21","updated":"2016-05-10 15:07:36.000000000","message":"Same remark as above","commit_id":"a9e7251d0d57015d752ca7e8b9ea1f1667d8ddc5"}],"watcher/common/service.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"9b68ea44a7f88f64f7940b42187b54140427aaa2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"service_opts \u003d ["},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027periodic_interval\u0027,"},{"line_number":34,"context_line":"               default\u003d60,"},{"line_number":35,"context_line":"               help\u003d\u0027Seconds between running periodic tasks.\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027host\u0027,"},{"line_number":37,"context_line":"               default\u003dsocket.getfqdn(),"},{"line_number":38,"context_line":"               help\u003d\u0027Name of this node. This can be an opaque identifier.  \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_77269c17","line":35,"range":{"start_line":35,"start_character":20,"end_line":35,"end_character":61},"updated":"2016-03-21 10:55:25.000000000","message":"add _() i18n","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"545454864ee4c7af97ff6b3e93bfee142dae2971","unresolved":false,"context_lines":[{"line_number":32,"context_line":"service_opts \u003d ["},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027periodic_interval\u0027,"},{"line_number":34,"context_line":"               default\u003d60,"},{"line_number":35,"context_line":"               help\u003d\u0027Seconds between running periodic tasks.\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027host\u0027,"},{"line_number":37,"context_line":"               default\u003dsocket.getfqdn(),"},{"line_number":38,"context_line":"               help\u003d\u0027Name of this node. This can be an opaque identifier.  \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_c885025a","line":35,"range":{"start_line":35,"start_character":20,"end_line":35,"end_character":61},"in_reply_to":"fa0719c6_77269c17","updated":"2016-03-30 07:34:15.000000000","message":"Done","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"9b68ea44a7f88f64f7940b42187b54140427aaa2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d\u0027Seconds between running periodic tasks.\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027host\u0027,"},{"line_number":37,"context_line":"               default\u003dsocket.getfqdn(),"},{"line_number":38,"context_line":"               help\u003d\u0027Name of this node. This can be an opaque identifier.  \u0027"},{"line_number":39,"context_line":"               \u0027It is not necessarily a hostname, FQDN, or IP address. \u0027"},{"line_number":40,"context_line":"               \u0027However, the node name must be valid within \u0027"},{"line_number":41,"context_line":"               \u0027an AMQP key, and if using ZeroMQ, a valid \u0027"},{"line_number":42,"context_line":"               \u0027hostname, FQDN, or IP address.\u0027),"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"cfg.CONF.register_opts(service_opts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_f778ecfa","line":42,"range":{"start_line":38,"start_character":20,"end_line":42,"end_character":47},"updated":"2016-03-21 10:55:25.000000000","message":"ditto","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"545454864ee4c7af97ff6b3e93bfee142dae2971","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d\u0027Seconds between running periodic tasks.\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027host\u0027,"},{"line_number":37,"context_line":"               default\u003dsocket.getfqdn(),"},{"line_number":38,"context_line":"               help\u003d\u0027Name of this node. This can be an opaque identifier.  \u0027"},{"line_number":39,"context_line":"               \u0027It is not necessarily a hostname, FQDN, or IP address. \u0027"},{"line_number":40,"context_line":"               \u0027However, the node name must be valid within \u0027"},{"line_number":41,"context_line":"               \u0027an AMQP key, and if using ZeroMQ, a valid \u0027"},{"line_number":42,"context_line":"               \u0027hostname, FQDN, or IP address.\u0027),"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"cfg.CONF.register_opts(service_opts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_287d9e6e","line":42,"range":{"start_line":38,"start_character":20,"end_line":42,"end_character":47},"in_reply_to":"fa0719c6_f778ecfa","updated":"2016-03-30 07:34:15.000000000","message":"Done","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"9b68ea44a7f88f64f7940b42187b54140427aaa2","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class WSGIService(service.ServiceBase):"},{"line_number":59,"context_line":"    \"\"\"Provides ability to launch ironic API from wsgi app.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def __init__(self, name, use_ssl\u003dFalse):"},{"line_number":62,"context_line":"        \"\"\"Initialize, but do not start the WSGI server."}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_57d8b8ef","line":59,"range":{"start_line":59,"start_character":34,"end_line":59,"end_character":40},"updated":"2016-03-21 10:55:25.000000000","message":"Watcher","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"545454864ee4c7af97ff6b3e93bfee142dae2971","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class WSGIService(service.ServiceBase):"},{"line_number":59,"context_line":"    \"\"\"Provides ability to launch ironic API from wsgi app.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def __init__(self, name, use_ssl\u003dFalse):"},{"line_number":62,"context_line":"        \"\"\"Initialize, but do not start the WSGI server."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_e8dd6615","line":59,"range":{"start_line":59,"start_character":34,"end_line":59,"end_character":40},"in_reply_to":"fa0719c6_57d8b8ef","updated":"2016-03-30 07:34:15.000000000","message":"Done","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"}],"watcher/tests/cmd/test_api.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"9b68ea44a7f88f64f7940b42187b54140427aaa2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        super(TestApi, self).tearDown()"},{"line_number":49,"context_line":"        self.conf._parse_cli_opts \u003d self._parse_cli_opts"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @mock.patch.object(wsgi, \"Server\", mock.Mock())"},{"line_number":52,"context_line":"    @mock.patch(\"watcher.api.app.pecan.make_app\")"},{"line_number":53,"context_line":"    @mock.patch.object(service, \"process_launcher\")"},{"line_number":54,"context_line":"    def test_run_api_app(self, m_launcher, m_make_app):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_dded0927","line":51,"range":{"start_line":51,"start_character":4,"end_line":51,"end_character":51},"updated":"2016-03-21 10:55:25.000000000","message":"is it useful ?","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"545454864ee4c7af97ff6b3e93bfee142dae2971","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        super(TestApi, self).tearDown()"},{"line_number":49,"context_line":"        self.conf._parse_cli_opts \u003d self._parse_cli_opts"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @mock.patch.object(wsgi, \"Server\", mock.Mock())"},{"line_number":52,"context_line":"    @mock.patch(\"watcher.api.app.pecan.make_app\")"},{"line_number":53,"context_line":"    @mock.patch.object(service, \"process_launcher\")"},{"line_number":54,"context_line":"    def test_run_api_app(self, m_launcher, m_make_app):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_489292a0","line":51,"range":{"start_line":51,"start_character":4,"end_line":51,"end_character":51},"in_reply_to":"fa0719c6_dded0927","updated":"2016-03-30 07:34:15.000000000","message":"Yes because when Server is instantiated, it opens a socket.","commit_id":"3b68b56cff6a1461fa5f52c00c85194a8ca566b2"}]}
