)]}'
{"openstack_dashboard/api/lbaas.py":[{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"2d09c05113148117b104872805024cf28d6b1eeb","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        body[\u0027health_monitor\u0027][\u0027expected_codes\u0027] \u003d kwargs[\u0027expected_codes\u0027]"},{"line_number":231,"context_line":"    mon \u003d quantumclient(request).create_health_monitor(body).get("},{"line_number":232,"context_line":"        \u0027health_monitor\u0027)"},{"line_number":233,"context_line":"    body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: mon[\u0027id\u0027]}}"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    return PoolMonitor(mon)"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FgnA%3D","line":233,"updated":"2013-05-07 13:08:40.000000000","message":"body is not used","commit_id":"4679cc6ac3db50272e4016e9a8c47bce0ac6e9f1"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"487ae6286958d2a8e9660c95a4fa73c672a9c835","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        body[\u0027health_monitor\u0027][\u0027expected_codes\u0027] \u003d kwargs[\u0027expected_codes\u0027]"},{"line_number":231,"context_line":"    mon \u003d quantumclient(request).create_health_monitor(body).get("},{"line_number":232,"context_line":"        \u0027health_monitor\u0027)"},{"line_number":233,"context_line":"    body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: mon[\u0027id\u0027]}}"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    return PoolMonitor(mon)"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fgj4%3D","line":233,"in_reply_to":"AAAAOn%2F%2FgnA%3D","updated":"2013-05-07 13:31:56.000000000","message":"Done","commit_id":"4679cc6ac3db50272e4016e9a8c47bce0ac6e9f1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"9a365586d6e22442fd8e0f93bb949598b0314091","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    :param pool_id: id of pool"},{"line_number":300,"context_line":"    \"\"\""},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    mon \u003d quantumclient(request).show_health_monitor("},{"line_number":303,"context_line":"            kwargs[\u0027monitor_id\u0027]).get(\u0027health_monitor\u0027)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: mon[\u0027id\u0027], }}"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FV6M%3D","line":302,"updated":"2013-05-14 05:32:44.000000000","message":"Before getting the health_monitor, might be good to be defensive here and add a check here if monitor exists and was retrieved successfully.","commit_id":"771a1cbf714c896d171fe9cc7abf24d0f1f05329"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"c9f259a858d1019e2af85aa17fa040482704e64b","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    :param pool_id: id of pool"},{"line_number":300,"context_line":"    \"\"\""},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    mon \u003d quantumclient(request).show_health_monitor("},{"line_number":303,"context_line":"            kwargs[\u0027monitor_id\u0027]).get(\u0027health_monitor\u0027)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: mon[\u0027id\u0027], }}"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAO3%2F%2F8xA%3D","line":302,"in_reply_to":"AAAAOn%2F%2FV6M%3D","updated":"2013-05-17 13:58:13.000000000","message":"I\u0027m not sure we will get this case ever: \"Add association\" page shows available monitors only. Also in workflows.py we handle an exception for this method.","commit_id":"771a1cbf714c896d171fe9cc7abf24d0f1f05329"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2f5b85bc197944ffce5b4cceb91ad9149d215dd5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            pFormatted[\u0027vip_id\u0027] \u003d None"},{"line_number":67,"context_line":"            pFormatted[\u0027vip_name\u0027] \u003d None"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        if self.health_monitors is not None:"},{"line_number":70,"context_line":"            try:"},{"line_number":71,"context_line":"                pFormatted[\u0027health_monitors\u0027] \u003d self.health_monitors"},{"line_number":72,"context_line":"            except:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F4uc%3D","line":69,"updated":"2013-06-06 18:27:36.000000000","message":"This class extends from base.APIDictWrapper which has a get(item, default\u003dNone). I think the code here can be simplified using that.","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ad679eb2da049e396fa3c55505b5b18afb33fb3b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            pFormatted[\u0027vip_id\u0027] \u003d None"},{"line_number":67,"context_line":"            pFormatted[\u0027vip_name\u0027] \u003d None"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        if self.health_monitors is not None:"},{"line_number":70,"context_line":"            try:"},{"line_number":71,"context_line":"                pFormatted[\u0027health_monitors\u0027] \u003d self.health_monitors"},{"line_number":72,"context_line":"            except:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F3Io%3D","line":69,"in_reply_to":"AAAAPX%2F%2F4uc%3D","updated":"2013-06-07 12:24:58.000000000","message":"Done","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fa1bec0d8d0c546e7fe29e2924d955d24698e29c","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    \"\"\""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    mon \u003d quantumclient(request).show_health_monitor("},{"line_number":307,"context_line":"            kwargs[\u0027monitor_id\u0027]).get(\u0027health_monitor\u0027)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: mon[\u0027id\u0027], }}"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FwmE%3D","line":307,"updated":"2013-06-11 08:41:33.000000000","message":"Why do we need this API call? I think we can pass kwargs[\u0027monitor_id\u0027] here instead of mon[\u0027id\u0027].\n\nIMO, associate_health_monitor below should raise an exception if monitor id specified does not exists. Doesn\u0027t  LBaaS API raise an exception?","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1715fb82a6dc74f09cb6a044d16baa106ccb079b","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    \"\"\""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    mon \u003d quantumclient(request).show_health_monitor("},{"line_number":307,"context_line":"            kwargs[\u0027monitor_id\u0027]).get(\u0027health_monitor\u0027)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: mon[\u0027id\u0027], }}"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FqB8%3D","line":307,"in_reply_to":"AAAAPX%2F%2FqTs%3D","updated":"2013-06-13 11:00:53.000000000","message":"I don\u0027t think we need to modify horizon even after the bug in quantum is fixed. The fix will just change a type of exception from 500 to 404. Thus your change in patch set #11 looks good to me.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8d8ec3b29ce656569f5c8ab1a40953bf5b73246a","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    \"\"\""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    mon \u003d quantumclient(request).show_health_monitor("},{"line_number":307,"context_line":"            kwargs[\u0027monitor_id\u0027]).get(\u0027health_monitor\u0027)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: mon[\u0027id\u0027], }}"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FqTs%3D","line":307,"in_reply_to":"AAAAPX%2F%2Fv54%3D","updated":"2013-06-13 10:16:25.000000000","message":"Thank you! Done. I think when this bug in quantum is fixed, we should file horizon bug and fix it here too.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d60dcee02ab43f3f51b53c94b5c3529f8a871b87","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    \"\"\""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    mon \u003d quantumclient(request).show_health_monitor("},{"line_number":307,"context_line":"            kwargs[\u0027monitor_id\u0027]).get(\u0027health_monitor\u0027)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: mon[\u0027id\u0027], }}"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fv54%3D","line":307,"in_reply_to":"AAAAPX%2F%2FwEY%3D","updated":"2013-06-11 13:35:16.000000000","message":"I tested LBaaS API. If non-existing monitor or pool id is specified, internal server error occurred in the quantum server. It is a bug in quantum :-(  Anyway, quatumclient().associate_health_monitor raises an exception if some error happens. Thus we can remove L.306-307 and pass kwargs[\u0027monitor_id\u0027] directly in L.309.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1e59d312ca10aba36785f7dda486699be82afafc","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    \"\"\""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    mon \u003d quantumclient(request).show_health_monitor("},{"line_number":307,"context_line":"            kwargs[\u0027monitor_id\u0027]).get(\u0027health_monitor\u0027)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: mon[\u0027id\u0027], }}"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FwEY%3D","line":307,"in_reply_to":"AAAAPX%2F%2FwmE%3D","updated":"2013-06-11 12:18:46.000000000","message":"I\u0027m not sure that API call here could raise an exception. Anyway, nowhere in this module exceptions are handled. As for non-existing monitor, exceptions are handled in workflows.AddPMAssociation.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"}],"openstack_dashboard/dashboards/project/loadbalancers/tables.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"60181baa7b11b58746c07037fac5000e55f47c0e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    verbose_name \u003d _(\"Add Health Monitor\")"},{"line_number":112,"context_line":"    classes \u003d (\"btn-addassotiation\",)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def get_link_url(self, pool):"},{"line_number":115,"context_line":"        base_url \u003d reverse(\"horizon:project:loadbalancers:addassociation\","},{"line_number":116,"context_line":"                           kwargs\u003d{\u0027pool_id\u0027: pool.id})"},{"line_number":117,"context_line":"        return base_url"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuOY%3D","line":114,"updated":"2013-04-26 06:15:58.000000000","message":"This method is unnecessary.  You can just define an url class attribute, by default the object.id is passed as argument.\n\nSee AddMonitorLink","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8cb6f30024c66a3790f6b975e5ff6465f0890d28","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    verbose_name \u003d _(\"Add Health Monitor\")"},{"line_number":112,"context_line":"    classes \u003d (\"btn-addassotiation\",)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def get_link_url(self, pool):"},{"line_number":115,"context_line":"        base_url \u003d reverse(\"horizon:project:loadbalancers:addassociation\","},{"line_number":116,"context_line":"                           kwargs\u003d{\u0027pool_id\u0027: pool.id})"},{"line_number":117,"context_line":"        return base_url"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuFs%3D","line":114,"in_reply_to":"AAAAOn%2F%2FuOY%3D","updated":"2013-04-26 10:52:34.000000000","message":"Done","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"60181baa7b11b58746c07037fac5000e55f47c0e","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    verbose_name \u003d _(\"Delete Health Monitor\")"},{"line_number":123,"context_line":"    classes \u003d (\"btn-deleteassotiation\",)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def get_link_url(self, pool):"},{"line_number":126,"context_line":"        base_url \u003d reverse(\"horizon:project:loadbalancers:deleteassociation\","},{"line_number":127,"context_line":"                           kwargs\u003d{\u0027pool_id\u0027: pool.id})"},{"line_number":128,"context_line":"        return base_url"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuOU%3D","line":125,"updated":"2013-04-26 06:15:58.000000000","message":"Same here, unnecessary.","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8cb6f30024c66a3790f6b975e5ff6465f0890d28","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    verbose_name \u003d _(\"Delete Health Monitor\")"},{"line_number":123,"context_line":"    classes \u003d (\"btn-deleteassotiation\",)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def get_link_url(self, pool):"},{"line_number":126,"context_line":"        base_url \u003d reverse(\"horizon:project:loadbalancers:deleteassociation\","},{"line_number":127,"context_line":"                           kwargs\u003d{\u0027pool_id\u0027: pool.id})"},{"line_number":128,"context_line":"        return base_url"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuFo%3D","line":125,"in_reply_to":"AAAAOn%2F%2FuOU%3D","updated":"2013-04-26 10:52:34.000000000","message":"Done","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":4978,"name":"Julie Pichon","email":"jpichon@redhat.com","username":"jpichon"},"change_message_id":"bb46c252026be1ec64ee7559a8f33ce9967043ef","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    name \u003d \"addassociation\""},{"line_number":111,"context_line":"    verbose_name \u003d _(\"Add Health Monitor\")"},{"line_number":112,"context_line":"    url \u003d \"horizon:project:loadbalancers:addassociation\""},{"line_number":113,"context_line":"    classes \u003d (\"btn-addassotiation\",)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"class DeletePMAssociationLink(tables.LinkAction):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FcV0%3D","line":113,"updated":"2013-05-09 16:14:36.000000000","message":"There\u0027s a typo in \"association\" but in general I think it would be better to keep a more general \"btn-add\" class name (this is for CSS classes)","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"4e50f0eef4a09abe696c1aa2dff913671fb41892","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    name \u003d \"addassociation\""},{"line_number":111,"context_line":"    verbose_name \u003d _(\"Add Health Monitor\")"},{"line_number":112,"context_line":"    url \u003d \"horizon:project:loadbalancers:addassociation\""},{"line_number":113,"context_line":"    classes \u003d (\"btn-addassotiation\",)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"class DeletePMAssociationLink(tables.LinkAction):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FX%2FA%3D","line":113,"in_reply_to":"AAAAOn%2F%2FcV0%3D","updated":"2013-05-13 08:54:44.000000000","message":"Done","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":4978,"name":"Julie Pichon","email":"jpichon@redhat.com","username":"jpichon"},"change_message_id":"bb46c252026be1ec64ee7559a8f33ce9967043ef","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    name \u003d \"deleteassociation\""},{"line_number":118,"context_line":"    verbose_name \u003d _(\"Delete Health Monitor\")"},{"line_number":119,"context_line":"    url \u003d \"horizon:project:loadbalancers:deleteassociation\""},{"line_number":120,"context_line":"    classes \u003d (\"btn-deleteassotiation\",)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class PoolsTable(tables.DataTable):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FcVw%3D","line":120,"updated":"2013-05-09 16:14:36.000000000","message":"Same comment about typo but with \"btn-delete\"","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"4e50f0eef4a09abe696c1aa2dff913671fb41892","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    name \u003d \"deleteassociation\""},{"line_number":118,"context_line":"    verbose_name \u003d _(\"Delete Health Monitor\")"},{"line_number":119,"context_line":"    url \u003d \"horizon:project:loadbalancers:deleteassociation\""},{"line_number":120,"context_line":"    classes \u003d (\"btn-deleteassotiation\",)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class PoolsTable(tables.DataTable):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FX%2B8%3D","line":120,"in_reply_to":"AAAAOn%2F%2FcVw%3D","updated":"2013-05-13 08:54:44.000000000","message":"Done","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":4978,"name":"Julie Pichon","email":"jpichon@redhat.com","username":"jpichon"},"change_message_id":"bb46c252026be1ec64ee7559a8f33ce9967043ef","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    url \u003d \"horizon:project:loadbalancers:deleteassociation\""},{"line_number":120,"context_line":"    classes \u003d (\"btn-deleteassotiation\",)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class PoolsTable(tables.DataTable):"},{"line_number":124,"context_line":"    name \u003d tables.Column(\"name\","},{"line_number":125,"context_line":"                       verbose_name\u003d_(\"Name\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FcPQ%3D","line":122,"updated":"2013-05-09 16:14:36.000000000","message":"I think it would make sense to only show the \"Delete\" button when there are already existing Associations (using an allowed() method like e.g. in the Floating IPs table: https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tables.py#L81)\n\nAt the moment, it appears we drop the health monitor information from the row data, but it would be easy to include it back in the \"readable\" dictionary so that it can be used here:\n\nhttps://github.com/openstack/horizon/blob/master/openstack_dashboard/api/lbaas.py#L44","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":4978,"name":"Julie Pichon","email":"jpichon@redhat.com","username":"jpichon"},"change_message_id":"2ab2ca97a9550703f5160b556cbf250732d69016","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    url \u003d \"horizon:project:loadbalancers:deleteassociation\""},{"line_number":120,"context_line":"    classes \u003d (\"btn-deleteassotiation\",)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class PoolsTable(tables.DataTable):"},{"line_number":124,"context_line":"    name \u003d tables.Column(\"name\","},{"line_number":125,"context_line":"                       verbose_name\u003d_(\"Name\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FrtE%3D","line":122,"in_reply_to":"AAAAOn%2F%2FX6M%3D","updated":"2013-05-27 09:50:49.000000000","message":"Agreed, what I meant is to *not* show the Delete button when there are no associations to delete (i.e. only show the button *if* there is something to delete). I think it would make for a nicer user experience, rather than clicking on Delete and then realising that actually there is nothing that can be deleted.","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"4e50f0eef4a09abe696c1aa2dff913671fb41892","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    url \u003d \"horizon:project:loadbalancers:deleteassociation\""},{"line_number":120,"context_line":"    classes \u003d (\"btn-deleteassotiation\",)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class PoolsTable(tables.DataTable):"},{"line_number":124,"context_line":"    name \u003d tables.Column(\"name\","},{"line_number":125,"context_line":"                       verbose_name\u003d_(\"Name\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FX6M%3D","line":122,"in_reply_to":"AAAAOn%2F%2FcPQ%3D","updated":"2013-05-13 08:54:44.000000000","message":"I\u0027m not sure that showing only \"Delete\" button would be convenient. I think it is possible if one pool needs a few monitors, and we add associations one after another. What do you think about it?\n\nAbout the \"readable\" dictionary, yes, I tried this at first. But it appears we get some problems with api and quantum compatibility and unitests in this case.","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"6412173bc0d503bc5e712eaaa13a8d9391a7ef2a","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    url \u003d \"horizon:project:loadbalancers:deleteassociation\""},{"line_number":120,"context_line":"    classes \u003d (\"btn-deleteassotiation\",)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class PoolsTable(tables.DataTable):"},{"line_number":124,"context_line":"    name \u003d tables.Column(\"name\","},{"line_number":125,"context_line":"                       verbose_name\u003d_(\"Name\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FqW8%3D","line":122,"in_reply_to":"AAAAPH%2F%2FrtE%3D","updated":"2013-05-28 11:24:09.000000000","message":"Oh this really would be nice! This is exactly the thing I thought about the first time.","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7f834b68e1e09e3d8525289c4d6cf2ae6a88d326","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    classes \u003d (\"btn-add\",)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":127,"context_line":"        monitors \u003d api.lbaas.pool_health_monitors_get(request)"},{"line_number":128,"context_line":"        free_monitors_id \u003d []"},{"line_number":129,"context_line":"        for m in monitors:"},{"line_number":130,"context_line":"            if m.id not in datum[\u0027health_monitors\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpZA%3D","line":127,"updated":"2013-05-28 17:09:34.000000000","message":"Please enclose api call in try-except block","commit_id":"fa3608da0c7a04ea33cc4e5fc6c9870867a0a5d1"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"2b43118035b30dab7c8c10612a7ddba66806b8de","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    classes \u003d (\"btn-add\",)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":127,"context_line":"        monitors \u003d api.lbaas.pool_health_monitors_get(request)"},{"line_number":128,"context_line":"        free_monitors_id \u003d []"},{"line_number":129,"context_line":"        for m in monitors:"},{"line_number":130,"context_line":"            if m.id not in datum[\u0027health_monitors\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fnkc%3D","line":127,"in_reply_to":"AAAAPH%2F%2FpZA%3D","updated":"2013-05-29 07:41:08.000000000","message":"Done","commit_id":"fa3608da0c7a04ea33cc4e5fc6c9870867a0a5d1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7f834b68e1e09e3d8525289c4d6cf2ae6a88d326","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        free_monitors_id \u003d []"},{"line_number":129,"context_line":"        for m in monitors:"},{"line_number":130,"context_line":"            if m.id not in datum[\u0027health_monitors\u0027]:"},{"line_number":131,"context_line":"                free_monitors_id.append(m.id)"},{"line_number":132,"context_line":"        if datum and not free_monitors_id:"},{"line_number":133,"context_line":"            return False"},{"line_number":134,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpY4%3D","line":131,"updated":"2013-05-28 17:09:34.000000000","message":"Do you need the store the id in free_monitors_id variable? Can\u0027t you just return \"False\" here right away?","commit_id":"fa3608da0c7a04ea33cc4e5fc6c9870867a0a5d1"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"2b43118035b30dab7c8c10612a7ddba66806b8de","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        free_monitors_id \u003d []"},{"line_number":129,"context_line":"        for m in monitors:"},{"line_number":130,"context_line":"            if m.id not in datum[\u0027health_monitors\u0027]:"},{"line_number":131,"context_line":"                free_monitors_id.append(m.id)"},{"line_number":132,"context_line":"        if datum and not free_monitors_id:"},{"line_number":133,"context_line":"            return False"},{"line_number":134,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FnkU%3D","line":131,"in_reply_to":"AAAAPH%2F%2FpY4%3D","updated":"2013-05-29 07:41:08.000000000","message":"Yes, that\u0027s right. Thanks!","commit_id":"fa3608da0c7a04ea33cc4e5fc6c9870867a0a5d1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fa1bec0d8d0c546e7fe29e2924d955d24698e29c","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":166,"context_line":"        try:"},{"line_number":167,"context_line":"            monitors \u003d api.lbaas.pool_health_monitors_get(request)"},{"line_number":168,"context_line":"            for m in monitors:"},{"line_number":169,"context_line":"                if m.id not in datum[\u0027health_monitors\u0027]:"},{"line_number":170,"context_line":"                    return True"},{"line_number":171,"context_line":"        except:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fwjo%3D","line":168,"updated":"2013-06-11 08:41:33.000000000","message":"This loop checks if there are monitors which are not associated. We can also write it as follows:\n\nif set(m.id for m in monitors) - set(datum.health_monitors):\n  return True\nelse:\n  return False\n\nI am not sure which costs more, so my comment just shows another option.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1e59d312ca10aba36785f7dda486699be82afafc","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":166,"context_line":"        try:"},{"line_number":167,"context_line":"            monitors \u003d api.lbaas.pool_health_monitors_get(request)"},{"line_number":168,"context_line":"            for m in monitors:"},{"line_number":169,"context_line":"                if m.id not in datum[\u0027health_monitors\u0027]:"},{"line_number":170,"context_line":"                    return True"},{"line_number":171,"context_line":"        except:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FwLU%3D","line":168,"in_reply_to":"AAAAPX%2F%2Fwjo%3D","updated":"2013-06-11 12:18:46.000000000","message":"Thank you!","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fa1bec0d8d0c546e7fe29e2924d955d24698e29c","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        try:"},{"line_number":167,"context_line":"            monitors \u003d api.lbaas.pool_health_monitors_get(request)"},{"line_number":168,"context_line":"            for m in monitors:"},{"line_number":169,"context_line":"                if m.id not in datum[\u0027health_monitors\u0027]:"},{"line_number":170,"context_line":"                    return True"},{"line_number":171,"context_line":"        except:"},{"line_number":172,"context_line":"            exceptions.handle(request,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fwjw%3D","line":169,"updated":"2013-06-11 08:41:33.000000000","message":"same as below","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1e59d312ca10aba36785f7dda486699be82afafc","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        try:"},{"line_number":167,"context_line":"            monitors \u003d api.lbaas.pool_health_monitors_get(request)"},{"line_number":168,"context_line":"            for m in monitors:"},{"line_number":169,"context_line":"                if m.id not in datum[\u0027health_monitors\u0027]:"},{"line_number":170,"context_line":"                    return True"},{"line_number":171,"context_line":"        except:"},{"line_number":172,"context_line":"            exceptions.handle(request,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FwK8%3D","line":169,"in_reply_to":"AAAAPX%2F%2Fwjw%3D","updated":"2013-06-11 12:18:46.000000000","message":"Done","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"829968637fda713a87c8857c66ce97cd18eee565","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    name \u003d \"deleteassociation\""},{"line_number":179,"context_line":"    verbose_name \u003d _(\"Delete Health Monitor\")"},{"line_number":180,"context_line":"    url \u003d \"horizon:project:loadbalancers:deleteassociation\""},{"line_number":181,"context_line":"    classes \u003d (\"btn-delete\",)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":184,"context_line":"        if datum and not datum[\u0027health_monitors\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fq38%3D","line":181,"updated":"2013-06-13 04:41:36.000000000","message":"Please add \"btn-danger\".","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8d8ec3b29ce656569f5c8ab1a40953bf5b73246a","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    name \u003d \"deleteassociation\""},{"line_number":179,"context_line":"    verbose_name \u003d _(\"Delete Health Monitor\")"},{"line_number":180,"context_line":"    url \u003d \"horizon:project:loadbalancers:deleteassociation\""},{"line_number":181,"context_line":"    classes \u003d (\"btn-delete\",)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":184,"context_line":"        if datum and not datum[\u0027health_monitors\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fqgc%3D","line":181,"in_reply_to":"AAAAPX%2F%2Fq38%3D","updated":"2013-06-13 10:16:25.000000000","message":"Oh, thanks! Done.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fa1bec0d8d0c546e7fe29e2924d955d24698e29c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    classes \u003d (\"btn-delete\",)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":184,"context_line":"        if datum and not datum[\u0027health_monitors\u0027]:"},{"line_number":185,"context_line":"            return False"},{"line_number":186,"context_line":"        return True"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fwk8%3D","line":184,"updated":"2013-06-11 08:41:33.000000000","message":"In Horizon, attribute based reference is usually used. If possible datam.health_monitors looks better to me.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8d8ec3b29ce656569f5c8ab1a40953bf5b73246a","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    classes \u003d (\"btn-delete\",)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":184,"context_line":"        if datum and not datum[\u0027health_monitors\u0027]:"},{"line_number":185,"context_line":"            return False"},{"line_number":186,"context_line":"        return True"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FqgY%3D","line":184,"in_reply_to":"AAAAPX%2F%2Fv6Q%3D","updated":"2013-06-13 10:16:25.000000000","message":"Done","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d60dcee02ab43f3f51b53c94b5c3529f8a871b87","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    classes \u003d (\"btn-delete\",)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":184,"context_line":"        if datum and not datum[\u0027health_monitors\u0027]:"},{"line_number":185,"context_line":"            return False"},{"line_number":186,"context_line":"        return True"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fv6Q%3D","line":184,"in_reply_to":"AAAAPX%2F%2FwKs%3D","updated":"2013-06-11 13:35:16.000000000","message":"On a second thought, I think it is okay since we have several similar ones.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1e59d312ca10aba36785f7dda486699be82afafc","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    classes \u003d (\"btn-delete\",)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":184,"context_line":"        if datum and not datum[\u0027health_monitors\u0027]:"},{"line_number":185,"context_line":"            return False"},{"line_number":186,"context_line":"        return True"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FwKs%3D","line":184,"in_reply_to":"AAAAPX%2F%2Fwk8%3D","updated":"2013-06-11 12:18:46.000000000","message":"Yes. Should I replace it with attribute based reference?","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"}],"openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/addassociation.html":[{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"ccaa378a810809e740447f9ac85988cbfa4feb9b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{% extends \u0027base.html\u0027 %}"},{"line_number":2,"context_line":"{% load i18n %}"},{"line_number":3,"context_line":"{% block title %}{% trans \"Add Association\" %}{% endblock %}"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"{% block page_header %}"},{"line_number":6,"context_line":"  {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Add Association\") %}"}],"source_content_type":"text/html","patch_set":2,"id":"AAAAOn%2F%2Fwv0%3D","line":3,"updated":"2013-04-24 11:55:38.000000000","message":"couldn\u0027t we parametereize add/delete association? This seems unnecessary duplication of template code","commit_id":"a010f79946c6a19171104e247453f291a38e0e0e"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9b2d49c8154a18aa1681c10cf0fd56dff5a9b53e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{% extends \u0027base.html\u0027 %}"},{"line_number":2,"context_line":"{% load i18n %}"},{"line_number":3,"context_line":"{% block title %}{% trans \"Add Association\" %}{% endblock %}"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"{% block page_header %}"},{"line_number":6,"context_line":"  {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Add Association\") %}"}],"source_content_type":"text/html","patch_set":2,"id":"AAAAOn%2F%2FuO8%3D","line":3,"in_reply_to":"AAAAOn%2F%2Fwv0%3D","updated":"2013-04-26 05:47:43.000000000","message":"Done","commit_id":"a010f79946c6a19171104e247453f291a38e0e0e"}],"openstack_dashboard/dashboards/project/loadbalancers/tests.py":[{"author":{"_account_id":4978,"name":"Julie Pichon","email":"jpichon@redhat.com","username":"jpichon"},"change_message_id":"bb46c252026be1ec64ee7559a8f33ce9967043ef","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from .tabs import LoadBalancerTabs, MembersTab, PoolsTab, MonitorsTab"},{"line_number":14,"context_line":"from .workflows import AddPool, AddMember, AddMonitor, AddVip"},{"line_number":15,"context_line":"from .workflows import AddPMAssociation, DeletePMAssociation"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class LoadBalancerTests(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FcM0%3D","line":15,"updated":"2013-05-09 16:14:36.000000000","message":"Rather than importing the same file twice, it\u0027s usually preferred to continue the previous line. (See e.g. https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/admin/volumes/tables.py#L5)","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"4e50f0eef4a09abe696c1aa2dff913671fb41892","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from .tabs import LoadBalancerTabs, MembersTab, PoolsTab, MonitorsTab"},{"line_number":14,"context_line":"from .workflows import AddPool, AddMember, AddMonitor, AddVip"},{"line_number":15,"context_line":"from .workflows import AddPMAssociation, DeletePMAssociation"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class LoadBalancerTests(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FYBw%3D","line":15,"in_reply_to":"AAAAOn%2F%2FcM0%3D","updated":"2013-05-13 08:54:44.000000000","message":"Thank you! Done.","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"051b9a0a515dceca5d4df827730304dd873e321d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"from openstack_dashboard.api.lbaas import Pool, Vip, Member, PoolMonitor"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from .tabs import LoadBalancerTabs, MembersTab, PoolsTab, MonitorsTab"},{"line_number":14,"context_line":"from .workflows import (AddPool, AddMember, AddMonitor, AddVip,"},{"line_number":15,"context_line":"        AddPMAssociation, DeletePMAssociation)"},{"line_number":16,"context_line":"from .forms import UpdatePool"},{"line_number":17,"context_line":"from horizon.workflows.views import WorkflowView"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F8b4%3D","line":14,"updated":"2013-06-17 18:09:00.000000000","message":"requires multiple lines now.","commit_id":"ec3d50ab3f86dd25202a1dfa413b1e5e92bc9994"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"f1c3b924a14917e2a1e4ebc967a3119ce665f9c8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"from openstack_dashboard.api.lbaas import Pool, Vip, Member, PoolMonitor"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from .tabs import LoadBalancerTabs, MembersTab, PoolsTab, MonitorsTab"},{"line_number":14,"context_line":"from .workflows import (AddPool, AddMember, AddMonitor, AddVip,"},{"line_number":15,"context_line":"        AddPMAssociation, DeletePMAssociation)"},{"line_number":16,"context_line":"from .forms import UpdatePool"},{"line_number":17,"context_line":"from horizon.workflows.views import WorkflowView"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F668%3D","line":14,"in_reply_to":"AAAAPn%2F%2F8b4%3D","updated":"2013-06-18 08:28:41.000000000","message":"Done","commit_id":"ec3d50ab3f86dd25202a1dfa413b1e5e92bc9994"}],"openstack_dashboard/dashboards/project/loadbalancers/urls.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"051b9a0a515dceca5d4df827730304dd873e321d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"                    UpdateVipView, UpdateMonitorView)"},{"line_number":23,"context_line":"from .views import PoolDetailsView, VipDetailsView"},{"line_number":24,"context_line":"from .views import MemberDetailsView, MonitorDetailsView"},{"line_number":25,"context_line":"from .views import AddPMAssociationView, DeletePMAssociationView"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"urlpatterns \u003d patterns("},{"line_number":28,"context_line":"    \u0027openstack_dashboard.dashboards.project.loadbalancers.views\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F8cE%3D","line":25,"updated":"2013-06-17 18:09:00.000000000","message":"This should be two lines now with recent changes.  Rebase is required as well.","commit_id":"ec3d50ab3f86dd25202a1dfa413b1e5e92bc9994"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"f1c3b924a14917e2a1e4ebc967a3119ce665f9c8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"                    UpdateVipView, UpdateMonitorView)"},{"line_number":23,"context_line":"from .views import PoolDetailsView, VipDetailsView"},{"line_number":24,"context_line":"from .views import MemberDetailsView, MonitorDetailsView"},{"line_number":25,"context_line":"from .views import AddPMAssociationView, DeletePMAssociationView"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"urlpatterns \u003d patterns("},{"line_number":28,"context_line":"    \u0027openstack_dashboard.dashboards.project.loadbalancers.views\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F660%3D","line":25,"in_reply_to":"AAAAPn%2F%2F8cE%3D","updated":"2013-06-18 08:28:41.000000000","message":"Done","commit_id":"ec3d50ab3f86dd25202a1dfa413b1e5e92bc9994"}],"openstack_dashboard/dashboards/project/loadbalancers/views.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"60181baa7b11b58746c07037fac5000e55f47c0e","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            initial[\u0027pool_name\u0027] \u003d pool.name"},{"line_number":170,"context_line":"            initial[\u0027pool_monitors\u0027] \u003d pool.health_monitors"},{"line_number":171,"context_line":"        except:"},{"line_number":172,"context_line":"            initial[\u0027pool_name\u0027] \u003d \u0027\u0027"},{"line_number":173,"context_line":"            initial[\u0027pool_monitors\u0027] \u003d []"},{"line_number":174,"context_line":"            msg \u003d _(\u0027Unable to retrieve pool name.\u0027)"},{"line_number":175,"context_line":"            exceptions.handle(self.request, msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuLc%3D","line":172,"updated":"2013-04-26 06:15:58.000000000","message":"Initializing here doesn\u0027t seem necessary, because the execution will stop and page won\u0027t load.","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8cb6f30024c66a3790f6b975e5ff6465f0890d28","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            initial[\u0027pool_name\u0027] \u003d pool.name"},{"line_number":170,"context_line":"            initial[\u0027pool_monitors\u0027] \u003d pool.health_monitors"},{"line_number":171,"context_line":"        except:"},{"line_number":172,"context_line":"            initial[\u0027pool_name\u0027] \u003d \u0027\u0027"},{"line_number":173,"context_line":"            initial[\u0027pool_monitors\u0027] \u003d []"},{"line_number":174,"context_line":"            msg \u003d _(\u0027Unable to retrieve pool name.\u0027)"},{"line_number":175,"context_line":"            exceptions.handle(self.request, msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuFc%3D","line":172,"in_reply_to":"AAAAOn%2F%2FuLc%3D","updated":"2013-04-26 10:52:34.000000000","message":"Done","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"60181baa7b11b58746c07037fac5000e55f47c0e","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            initial[\u0027pool_name\u0027] \u003d pool.name"},{"line_number":194,"context_line":"            initial[\u0027pool_monitors\u0027] \u003d pool.health_monitors"},{"line_number":195,"context_line":"        except:"},{"line_number":196,"context_line":"            initial[\u0027pool_name\u0027] \u003d \u0027\u0027"},{"line_number":197,"context_line":"            initial[\u0027pool_monitors\u0027] \u003d []"},{"line_number":198,"context_line":"            msg \u003d _(\u0027Unable to retrieve pool name.\u0027)"},{"line_number":199,"context_line":"            exceptions.handle(self.request, msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuLY%3D","line":196,"updated":"2013-04-26 06:15:58.000000000","message":"same here","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8cb6f30024c66a3790f6b975e5ff6465f0890d28","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            initial[\u0027pool_name\u0027] \u003d pool.name"},{"line_number":194,"context_line":"            initial[\u0027pool_monitors\u0027] \u003d pool.health_monitors"},{"line_number":195,"context_line":"        except:"},{"line_number":196,"context_line":"            initial[\u0027pool_name\u0027] \u003d \u0027\u0027"},{"line_number":197,"context_line":"            initial[\u0027pool_monitors\u0027] \u003d []"},{"line_number":198,"context_line":"            msg \u003d _(\u0027Unable to retrieve pool name.\u0027)"},{"line_number":199,"context_line":"            exceptions.handle(self.request, msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuFY%3D","line":196,"in_reply_to":"AAAAOn%2F%2FuLY%3D","updated":"2013-04-26 10:52:34.000000000","message":"Done","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":4978,"name":"Julie Pichon","email":"jpichon@redhat.com","username":"jpichon"},"change_message_id":"bb46c252026be1ec64ee7559a8f33ce9967043ef","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":161,"context_line":"        context \u003d super(AddPMAssociationView, self).get_context_data(**kwargs)"},{"line_number":162,"context_line":"        return context"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def get_initial(self):"},{"line_number":165,"context_line":"        initial \u003d super(AddPMAssociationView, self).get_initial()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FcLE%3D","line":162,"updated":"2013-05-09 16:14:36.000000000","message":"Is this actually necessary?","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"4e50f0eef4a09abe696c1aa2dff913671fb41892","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":161,"context_line":"        context \u003d super(AddPMAssociationView, self).get_context_data(**kwargs)"},{"line_number":162,"context_line":"        return context"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def get_initial(self):"},{"line_number":165,"context_line":"        initial \u003d super(AddPMAssociationView, self).get_initial()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FX%2F8%3D","line":162,"in_reply_to":"AAAAOn%2F%2FcLE%3D","updated":"2013-05-13 08:54:44.000000000","message":"Done","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":4978,"name":"Julie Pichon","email":"jpichon@redhat.com","username":"jpichon"},"change_message_id":"bb46c252026be1ec64ee7559a8f33ce9967043ef","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":182,"context_line":"        context \u003d super(DeletePMAssociationView, self).get_context_data("},{"line_number":183,"context_line":"                                                                    **kwargs)"},{"line_number":184,"context_line":"        return context"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def get_initial(self):"},{"line_number":187,"context_line":"        initial \u003d super(DeletePMAssociationView, self).get_initial()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FcKo%3D","line":184,"updated":"2013-05-09 16:14:36.000000000","message":"Same question","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"4e50f0eef4a09abe696c1aa2dff913671fb41892","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":182,"context_line":"        context \u003d super(DeletePMAssociationView, self).get_context_data("},{"line_number":183,"context_line":"                                                                    **kwargs)"},{"line_number":184,"context_line":"        return context"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def get_initial(self):"},{"line_number":187,"context_line":"        initial \u003d super(DeletePMAssociationView, self).get_initial()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FX%2F4%3D","line":184,"in_reply_to":"AAAAOn%2F%2FcKo%3D","updated":"2013-05-13 08:54:44.000000000","message":"Done","commit_id":"4e153bb90c203c026fa8df95fdec4936b40e5cdb"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2f5b85bc197944ffce5b4cceb91ad9149d215dd5","unresolved":false,"context_lines":[{"line_number":304,"context_line":"class DeletePMAssociationView(workflows.WorkflowView):"},{"line_number":305,"context_line":"    workflow_class \u003d DeletePMAssociation"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def get_initial(self):"},{"line_number":308,"context_line":"        initial \u003d super(DeletePMAssociationView, self).get_initial()"},{"line_number":309,"context_line":"        initial[\u0027pool_id\u0027] \u003d self.kwargs[\u0027pool_id\u0027]"},{"line_number":310,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F4to%3D","line":307,"updated":"2013-06-06 18:27:36.000000000","message":"Look like the exact code as above. There\u0027s an opportunity for code re-use.","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ad679eb2da049e396fa3c55505b5b18afb33fb3b","unresolved":false,"context_lines":[{"line_number":304,"context_line":"class DeletePMAssociationView(workflows.WorkflowView):"},{"line_number":305,"context_line":"    workflow_class \u003d DeletePMAssociation"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def get_initial(self):"},{"line_number":308,"context_line":"        initial \u003d super(DeletePMAssociationView, self).get_initial()"},{"line_number":309,"context_line":"        initial[\u0027pool_id\u0027] \u003d self.kwargs[\u0027pool_id\u0027]"},{"line_number":310,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F280%3D","line":307,"in_reply_to":"AAAAPX%2F%2F4to%3D","updated":"2013-06-07 12:24:58.000000000","message":"Yes, this definitely looks like an opportunity for code reuse and probably is an opportunity for code reuse, but the problem is it can\u0027t be easily achieved without breaking classes hierarchy. At least now I can not come up with easy and elegant solution and strongly believe that in this case we can leave everything as is.","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"051b9a0a515dceca5d4df827730304dd873e321d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from openstack_dashboard import api"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from .workflows import (AddPool, AddMember, AddMonitor, AddVip,"},{"line_number":33,"context_line":"        AddPMAssociation, DeletePMAssociation)"},{"line_number":34,"context_line":"from .forms import UpdatePool, UpdateVip, UpdateMember, UpdateMonitor"},{"line_number":35,"context_line":"from .tabs import LoadBalancerTabs, PoolDetailsTabs, VipDetailsTabs"},{"line_number":36,"context_line":"from .tabs import MemberDetailsTabs, MonitorDetailsTabs"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F8cA%3D","line":33,"updated":"2013-06-17 18:09:00.000000000","message":"require\u0027s multiple lines now.","commit_id":"ec3d50ab3f86dd25202a1dfa413b1e5e92bc9994"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"f1c3b924a14917e2a1e4ebc967a3119ce665f9c8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from openstack_dashboard import api"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from .workflows import (AddPool, AddMember, AddMonitor, AddVip,"},{"line_number":33,"context_line":"        AddPMAssociation, DeletePMAssociation)"},{"line_number":34,"context_line":"from .forms import UpdatePool, UpdateVip, UpdateMember, UpdateMonitor"},{"line_number":35,"context_line":"from .tabs import LoadBalancerTabs, PoolDetailsTabs, VipDetailsTabs"},{"line_number":36,"context_line":"from .tabs import MemberDetailsTabs, MonitorDetailsTabs"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F66w%3D","line":33,"in_reply_to":"AAAAPn%2F%2F8cA%3D","updated":"2013-06-18 08:28:41.000000000","message":"Done","commit_id":"ec3d50ab3f86dd25202a1dfa413b1e5e92bc9994"}],"openstack_dashboard/dashboards/project/loadbalancers/workflows.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"60181baa7b11b58746c07037fac5000e55f47c0e","unresolved":false,"context_lines":[{"line_number":539,"context_line":"    slug \u003d \"addassociation\""},{"line_number":540,"context_line":"    name \u003d _(\"Add Association\")"},{"line_number":541,"context_line":"    finalize_button_name \u003d _(\"Add\")"},{"line_number":542,"context_line":"    success_message \u003d _(\u0027Added Association.\u0027)"},{"line_number":543,"context_line":"    failure_message \u003d _(\u0027Unable to add Association.\u0027)"},{"line_number":544,"context_line":"    success_url \u003d \"horizon:project:loadbalancers:index\""},{"line_number":545,"context_line":"    default_steps \u003d (AddPMAssociationStep,)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuLQ%3D","line":542,"updated":"2013-04-26 06:15:58.000000000","message":"Since this is a message, \"Association\" should have small a.","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8cb6f30024c66a3790f6b975e5ff6465f0890d28","unresolved":false,"context_lines":[{"line_number":539,"context_line":"    slug \u003d \"addassociation\""},{"line_number":540,"context_line":"    name \u003d _(\"Add Association\")"},{"line_number":541,"context_line":"    finalize_button_name \u003d _(\"Add\")"},{"line_number":542,"context_line":"    success_message \u003d _(\u0027Added Association.\u0027)"},{"line_number":543,"context_line":"    failure_message \u003d _(\u0027Unable to add Association.\u0027)"},{"line_number":544,"context_line":"    success_url \u003d \"horizon:project:loadbalancers:index\""},{"line_number":545,"context_line":"    default_steps \u003d (AddPMAssociationStep,)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuFQ%3D","line":542,"in_reply_to":"AAAAOn%2F%2FuLQ%3D","updated":"2013-04-26 10:52:34.000000000","message":"Done","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"60181baa7b11b58746c07037fac5000e55f47c0e","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        except:"},{"line_number":553,"context_line":"            exceptions.handle(request, _(\"Unable to add association.\"))"},{"line_number":554,"context_line":"        return False"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        try:"},{"line_number":557,"context_line":"            pool \u003d api.lbaas.pool_get(request, context[\u0027pool_id\u0027])"},{"line_number":558,"context_line":"            context[\u0027pool_name\u0027] \u003d pool[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuKw%3D","line":555,"updated":"2013-04-26 06:15:58.000000000","message":"Unreachable code.  Method would have already exited by the return True/False above.","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8cb6f30024c66a3790f6b975e5ff6465f0890d28","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        except:"},{"line_number":553,"context_line":"            exceptions.handle(request, _(\"Unable to add association.\"))"},{"line_number":554,"context_line":"        return False"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        try:"},{"line_number":557,"context_line":"            pool \u003d api.lbaas.pool_get(request, context[\u0027pool_id\u0027])"},{"line_number":558,"context_line":"            context[\u0027pool_name\u0027] \u003d pool[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuFI%3D","line":555,"in_reply_to":"AAAAOn%2F%2FuKw%3D","updated":"2013-04-26 10:52:34.000000000","message":"Done","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"60181baa7b11b58746c07037fac5000e55f47c0e","unresolved":false,"context_lines":[{"line_number":606,"context_line":"    slug \u003d \"deleteassociation\""},{"line_number":607,"context_line":"    name \u003d _(\"Delete Association\")"},{"line_number":608,"context_line":"    finalize_button_name \u003d _(\"Delete\")"},{"line_number":609,"context_line":"    success_message \u003d _(\u0027Deleted Association.\u0027)"},{"line_number":610,"context_line":"    failure_message \u003d _(\u0027Unable to delete Association.\u0027)"},{"line_number":611,"context_line":"    success_url \u003d \"horizon:project:loadbalancers:index\""},{"line_number":612,"context_line":"    default_steps \u003d (DeletePMAssociationStep,)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuLU%3D","line":609,"updated":"2013-04-26 06:15:58.000000000","message":"Since this is a message, \"Association\" should have small a.","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8cb6f30024c66a3790f6b975e5ff6465f0890d28","unresolved":false,"context_lines":[{"line_number":606,"context_line":"    slug \u003d \"deleteassociation\""},{"line_number":607,"context_line":"    name \u003d _(\"Delete Association\")"},{"line_number":608,"context_line":"    finalize_button_name \u003d _(\"Delete\")"},{"line_number":609,"context_line":"    success_message \u003d _(\u0027Deleted Association.\u0027)"},{"line_number":610,"context_line":"    failure_message \u003d _(\u0027Unable to delete Association.\u0027)"},{"line_number":611,"context_line":"    success_url \u003d \"horizon:project:loadbalancers:index\""},{"line_number":612,"context_line":"    default_steps \u003d (DeletePMAssociationStep,)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuFM%3D","line":609,"in_reply_to":"AAAAOn%2F%2FuLU%3D","updated":"2013-04-26 10:52:34.000000000","message":"Done","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"60181baa7b11b58746c07037fac5000e55f47c0e","unresolved":false,"context_lines":[{"line_number":620,"context_line":"            exceptions.handle(request, _(\"Unable to delete association.\"))"},{"line_number":621,"context_line":"        return False"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        try:"},{"line_number":624,"context_line":"            pool \u003d api.lbaas.pool_get(request, context[\u0027pool_id\u0027])"},{"line_number":625,"context_line":"            context[\u0027pool_name\u0027] \u003d pool[\u0027name\u0027]"},{"line_number":626,"context_line":"            context[\u0027pool_monitors\u0027] \u003d pool[\u0027health_monitors\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuKo%3D","line":623,"updated":"2013-04-26 06:15:58.000000000","message":"Unreachable code.","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8cb6f30024c66a3790f6b975e5ff6465f0890d28","unresolved":false,"context_lines":[{"line_number":620,"context_line":"            exceptions.handle(request, _(\"Unable to delete association.\"))"},{"line_number":621,"context_line":"        return False"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        try:"},{"line_number":624,"context_line":"            pool \u003d api.lbaas.pool_get(request, context[\u0027pool_id\u0027])"},{"line_number":625,"context_line":"            context[\u0027pool_name\u0027] \u003d pool[\u0027name\u0027]"},{"line_number":626,"context_line":"            context[\u0027pool_monitors\u0027] \u003d pool[\u0027health_monitors\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FuFE%3D","line":623,"in_reply_to":"AAAAOn%2F%2FuKo%3D","updated":"2013-04-26 10:52:34.000000000","message":"Done","commit_id":"97f5b3d96bfd743fdd7da187271ac98d9516383c"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"2d09c05113148117b104872805024cf28d6b1eeb","unresolved":false,"context_lines":[{"line_number":521,"context_line":"    class Meta:"},{"line_number":522,"context_line":"        name \u003d _(\"Association Details\")"},{"line_number":523,"context_line":"        permissions \u003d (\u0027openstack.services.network\u0027,)"},{"line_number":524,"context_line":"        help_text \u003d _(\"Associate a new health monitor with target pool.\")"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"class AddPMAssociationStep(workflows.Step):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fgl0%3D","line":524,"updated":"2013-05-07 13:08:40.000000000","message":"word \u0027new\u0027 is not needed","commit_id":"4679cc6ac3db50272e4016e9a8c47bce0ac6e9f1"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"487ae6286958d2a8e9660c95a4fa73c672a9c835","unresolved":false,"context_lines":[{"line_number":521,"context_line":"    class Meta:"},{"line_number":522,"context_line":"        name \u003d _(\"Association Details\")"},{"line_number":523,"context_line":"        permissions \u003d (\u0027openstack.services.network\u0027,)"},{"line_number":524,"context_line":"        help_text \u003d _(\"Associate a new health monitor with target pool.\")"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"class AddPMAssociationStep(workflows.Step):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fgk0%3D","line":524,"in_reply_to":"AAAAOn%2F%2Fgl0%3D","updated":"2013-05-07 13:31:56.000000000","message":"Done","commit_id":"4679cc6ac3db50272e4016e9a8c47bce0ac6e9f1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2f5b85bc197944ffce5b4cceb91ad9149d215dd5","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        super(AddPMAssociationAction, self).__init__(request, *args, **kwargs)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"        self.fields[\u0027monitor_id\u0027].label \u003d _(\"Select a monitor template \""},{"line_number":502,"context_line":"                                            \"for %s\" % args[0][\u0027pool_name\u0027])"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        monitor_id_choices \u003d [(\u0027\u0027, _(\"Select a Monitor\"))]"},{"line_number":505,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F4qw%3D","line":502,"updated":"2013-06-06 18:27:36.000000000","message":"Probably be nice to define a variable for args[0] for knowing what is args[0].","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ad679eb2da049e396fa3c55505b5b18afb33fb3b","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        super(AddPMAssociationAction, self).__init__(request, *args, **kwargs)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"        self.fields[\u0027monitor_id\u0027].label \u003d _(\"Select a monitor template \""},{"line_number":502,"context_line":"                                            \"for %s\" % args[0][\u0027pool_name\u0027])"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        monitor_id_choices \u003d [(\u0027\u0027, _(\"Select a Monitor\"))]"},{"line_number":505,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F2%2BU%3D","line":502,"in_reply_to":"AAAAPX%2F%2F4qw%3D","updated":"2013-06-07 12:24:58.000000000","message":"Done","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2f5b85bc197944ffce5b4cceb91ad9149d215dd5","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        self.fields[\u0027monitor_id\u0027].label \u003d _(\"Select a monitor template \""},{"line_number":502,"context_line":"                                            \"for %s\" % args[0][\u0027pool_name\u0027])"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        monitor_id_choices \u003d [(\u0027\u0027, _(\"Select a Monitor\"))]"},{"line_number":505,"context_line":"        try:"},{"line_number":506,"context_line":"            monitors \u003d api.lbaas.pool_health_monitors_get(request)"},{"line_number":507,"context_line":"            for m in monitors:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F4ro%3D","line":504,"updated":"2013-06-06 18:27:36.000000000","message":"There\u0027s actually a nice feature in workflows.Action that handles populating choice field.\n\nYou just need to define a method wiht this signature \"def populate_\u003cfield_name\u003e_choices(self, request, context):\" and move the code here on that method.\n\nYou can use this for reference: https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/access_and_security/floating_ips/workflows.py#L64","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ad679eb2da049e396fa3c55505b5b18afb33fb3b","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        self.fields[\u0027monitor_id\u0027].label \u003d _(\"Select a monitor template \""},{"line_number":502,"context_line":"                                            \"for %s\" % args[0][\u0027pool_name\u0027])"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        monitor_id_choices \u003d [(\u0027\u0027, _(\"Select a Monitor\"))]"},{"line_number":505,"context_line":"        try:"},{"line_number":506,"context_line":"            monitors \u003d api.lbaas.pool_health_monitors_get(request)"},{"line_number":507,"context_line":"            for m in monitors:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F24I%3D","line":504,"in_reply_to":"AAAAPX%2F%2F4ro%3D","updated":"2013-06-07 12:24:58.000000000","message":"Thanks! Done.","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2f5b85bc197944ffce5b4cceb91ad9149d215dd5","unresolved":false,"context_lines":[{"line_number":556,"context_line":"                                                request, *args, **kwargs)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        self.fields[\u0027monitor_id\u0027].label \u003d _(\"Select a health monitor of %s\" %"},{"line_number":559,"context_line":"                                               args[0][\u0027pool_name\u0027])"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"        monitor_id_choices \u003d [(\u0027\u0027, _(\"Select a Monitor\"))]"},{"line_number":562,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F4qs%3D","line":559,"updated":"2013-06-06 18:27:36.000000000","message":"Same comment here for args[0].","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ad679eb2da049e396fa3c55505b5b18afb33fb3b","unresolved":false,"context_lines":[{"line_number":556,"context_line":"                                                request, *args, **kwargs)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        self.fields[\u0027monitor_id\u0027].label \u003d _(\"Select a health monitor of %s\" %"},{"line_number":559,"context_line":"                                               args[0][\u0027pool_name\u0027])"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"        monitor_id_choices \u003d [(\u0027\u0027, _(\"Select a Monitor\"))]"},{"line_number":562,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F2%2BQ%3D","line":559,"in_reply_to":"AAAAPX%2F%2F4qs%3D","updated":"2013-06-07 12:24:58.000000000","message":"Done","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2f5b85bc197944ffce5b4cceb91ad9149d215dd5","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        self.fields[\u0027monitor_id\u0027].label \u003d _(\"Select a health monitor of %s\" %"},{"line_number":559,"context_line":"                                               args[0][\u0027pool_name\u0027])"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"        monitor_id_choices \u003d [(\u0027\u0027, _(\"Select a Monitor\"))]"},{"line_number":562,"context_line":"        try:"},{"line_number":563,"context_line":"            for m_id in args[0][\u0027pool_monitors\u0027]:"},{"line_number":564,"context_line":"                monitor_id_choices.append((m_id, m_id))"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F4rk%3D","line":561,"updated":"2013-06-06 18:27:36.000000000","message":"Same comment here.","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ad679eb2da049e396fa3c55505b5b18afb33fb3b","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        self.fields[\u0027monitor_id\u0027].label \u003d _(\"Select a health monitor of %s\" %"},{"line_number":559,"context_line":"                                               args[0][\u0027pool_name\u0027])"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"        monitor_id_choices \u003d [(\u0027\u0027, _(\"Select a Monitor\"))]"},{"line_number":562,"context_line":"        try:"},{"line_number":563,"context_line":"            for m_id in args[0][\u0027pool_monitors\u0027]:"},{"line_number":564,"context_line":"                monitor_id_choices.append((m_id, m_id))"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2F24o%3D","line":561,"in_reply_to":"AAAAPX%2F%2F4rk%3D","updated":"2013-06-07 12:24:58.000000000","message":"Done","commit_id":"7e74ad2b5354d9bf082ddcd5170c4f3582a83331"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fa1bec0d8d0c546e7fe29e2924d955d24698e29c","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        return False"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"class AddPMAssociationAction(workflows.Action):"},{"line_number":496,"context_line":"    monitor_id \u003d forms.ChoiceField(label\u003d_(\"Monitor\"))"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def __init__(self, request, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FwjM%3D","line":495,"updated":"2013-06-11 08:41:33.000000000","message":"We can associate multiple monitors to a pool. If associating multiple monitors is a usual case, how about using workflows.UpdateMembersStep?","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1715fb82a6dc74f09cb6a044d16baa106ccb079b","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        return False"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"class AddPMAssociationAction(workflows.Action):"},{"line_number":496,"context_line":"    monitor_id \u003d forms.ChoiceField(label\u003d_(\"Monitor\"))"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def __init__(self, request, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FqBg%3D","line":495,"in_reply_to":"AAAAPX%2F%2FqIs%3D","updated":"2013-06-13 11:00:53.000000000","message":"Agree with you. This patch looks good to me.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8d8ec3b29ce656569f5c8ab1a40953bf5b73246a","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        return False"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"class AddPMAssociationAction(workflows.Action):"},{"line_number":496,"context_line":"    monitor_id \u003d forms.ChoiceField(label\u003d_(\"Monitor\"))"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def __init__(self, request, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FqIs%3D","line":495,"in_reply_to":"AAAAPX%2F%2Fv7Y%3D","updated":"2013-06-13 10:16:25.000000000","message":"Thanks. Didn\u0027t get it first time, sorry. I think if all is OK with this patch set, I could file a wish about another interface and we could discuss it there.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d60dcee02ab43f3f51b53c94b5c3529f8a871b87","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        return False"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"class AddPMAssociationAction(workflows.Action):"},{"line_number":496,"context_line":"    monitor_id \u003d forms.ChoiceField(label\u003d_(\"Monitor\"))"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def __init__(self, request, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fv7Y%3D","line":495,"in_reply_to":"AAAAPX%2F%2FwMA%3D","updated":"2013-06-11 13:35:16.000000000","message":"I didn\u0027t try to discuss workflow vs form. What I thought is using UpdateMembers user interface. It is like this: https://www.dropbox.com/s/y9c0618f7j9y7m3/UpdateMemberStep.PNG . Available items are listed on the left and associated items on the right. I thought it may fit for pool-monitor association form (or workflow): Available monitors on the left and associated monitors on the right side.\n\nIt is just FYI and the current implementation is also okay to me.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1e59d312ca10aba36785f7dda486699be82afafc","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        return False"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"class AddPMAssociationAction(workflows.Action):"},{"line_number":496,"context_line":"    monitor_id \u003d forms.ChoiceField(label\u003d_(\"Monitor\"))"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def __init__(self, request, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FwMA%3D","line":495,"in_reply_to":"AAAAPX%2F%2FwjM%3D","updated":"2013-06-11 12:18:46.000000000","message":"Well, as it was discussed (https://bugs.launchpad.net/horizon/+bug/1158602), a health monitor is just a kind of template. One pool can have several monitors, and one monitor can be associated with several pools. So the *form* (not workflow, as we discussed here: https://review.openstack.org/#/c/27258/) for update *monitor* option doesn\u0027t contain any pool associations.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"}],"openstack_dashboard/test/test_data/quantum_data.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fa1bec0d8d0c546e7fe29e2924d955d24698e29c","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                 \u0027subnet_id\u0027: TEST.subnets.first().id,"},{"line_number":332,"context_line":"                 \u0027protocol\u0027: \u0027HTTPS\u0027,"},{"line_number":333,"context_line":"                 \u0027lb_method\u0027: \u0027ROUND_ROBIN\u0027,"},{"line_number":334,"context_line":"                 \u0027health_monitors\u0027: [\u0027d4a0500f-db2b-4cc4-afcf-ec026febff97\u0027],"},{"line_number":335,"context_line":"                 \u0027admin_state_up\u0027: True}"},{"line_number":336,"context_line":"    TEST.api_pools.add(pool_dict)"},{"line_number":337,"context_line":"    TEST.pools.add(Pool(pool_dict))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fwh4%3D","line":334,"updated":"2013-06-11 08:41:33.000000000","message":"Don\u0027t we need a pool data without health_monitors? I haven\u0027t checked how the second pool is used in the test code.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8d8ec3b29ce656569f5c8ab1a40953bf5b73246a","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                 \u0027subnet_id\u0027: TEST.subnets.first().id,"},{"line_number":332,"context_line":"                 \u0027protocol\u0027: \u0027HTTPS\u0027,"},{"line_number":333,"context_line":"                 \u0027lb_method\u0027: \u0027ROUND_ROBIN\u0027,"},{"line_number":334,"context_line":"                 \u0027health_monitors\u0027: [\u0027d4a0500f-db2b-4cc4-afcf-ec026febff97\u0027],"},{"line_number":335,"context_line":"                 \u0027admin_state_up\u0027: True}"},{"line_number":336,"context_line":"    TEST.api_pools.add(pool_dict)"},{"line_number":337,"context_line":"    TEST.pools.add(Pool(pool_dict))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FqpA%3D","line":334,"in_reply_to":"AAAAPX%2F%2FwBQ%3D","updated":"2013-06-13 10:16:25.000000000","message":"Done","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d60dcee02ab43f3f51b53c94b5c3529f8a871b87","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                 \u0027subnet_id\u0027: TEST.subnets.first().id,"},{"line_number":332,"context_line":"                 \u0027protocol\u0027: \u0027HTTPS\u0027,"},{"line_number":333,"context_line":"                 \u0027lb_method\u0027: \u0027ROUND_ROBIN\u0027,"},{"line_number":334,"context_line":"                 \u0027health_monitors\u0027: [\u0027d4a0500f-db2b-4cc4-afcf-ec026febff97\u0027],"},{"line_number":335,"context_line":"                 \u0027admin_state_up\u0027: True}"},{"line_number":336,"context_line":"    TEST.api_pools.add(pool_dict)"},{"line_number":337,"context_line":"    TEST.pools.add(Pool(pool_dict))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FwBQ%3D","line":334,"in_reply_to":"AAAAPX%2F%2FwPc%3D","updated":"2013-06-11 13:35:16.000000000","message":"I see. Let\u0027s keep it unchanged.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1e59d312ca10aba36785f7dda486699be82afafc","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                 \u0027subnet_id\u0027: TEST.subnets.first().id,"},{"line_number":332,"context_line":"                 \u0027protocol\u0027: \u0027HTTPS\u0027,"},{"line_number":333,"context_line":"                 \u0027lb_method\u0027: \u0027ROUND_ROBIN\u0027,"},{"line_number":334,"context_line":"                 \u0027health_monitors\u0027: [\u0027d4a0500f-db2b-4cc4-afcf-ec026febff97\u0027],"},{"line_number":335,"context_line":"                 \u0027admin_state_up\u0027: True}"},{"line_number":336,"context_line":"    TEST.api_pools.add(pool_dict)"},{"line_number":337,"context_line":"    TEST.pools.add(Pool(pool_dict))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FwPc%3D","line":334,"in_reply_to":"AAAAPX%2F%2Fwh4%3D","updated":"2013-06-11 12:18:46.000000000","message":"We need attribute \u0027health_monitors\u0027 for the first pool. Here I just add the same, for consistency and future possible tests.","commit_id":"4a644ca71ebdbf5e53f372b75cf7a21be610f6d4"}]}
