)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"176cfe0ddcbb55890e8bf9ff9ea967d35f1c3363","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"blueprint quantum-lbaas"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"retry - Jenkins download error"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This implements the quantum lbaas UI, with a number of remaining issues to"},{"line_number":12,"context_line":"refine:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"AAAAM3%2F%2Bvus%3D","line":9,"updated":"2013-02-20 02:13:21.000000000","message":"It should be removed.","commit_id":"1406ddb8c2ee5ab936efcaaa302ec4149b6860fb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"176cfe0ddcbb55890e8bf9ff9ea967d35f1c3363","unresolved":false,"context_lines":[{"line_number":14,"context_line":"2. Update Vip/Pool/Member defined in api/quantum.py but not yet used in UI"},{"line_number":15,"context_line":"3. floating IP is included in addvip workflow menu as place holder, but"},{"line_number":16,"context_line":"   currently is no-op, not yet querying floatip list"},{"line_number":17,"context_line":"4. Still adding more unit tests"},{"line_number":18,"context_line":"5. Still having issue with unit test when using horizon exceptions handler."},{"line_number":19,"context_line":"   Disabled handler and tests pass for now. Will continue to resolve the issue."},{"line_number":20,"context_line":"6. currently table shows various uuids - will replace with human readable names"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"AAAAM3%2F%2Bvug%3D","line":17,"updated":"2013-02-20 02:13:21.000000000","message":"Is this sitll a remaining work?","commit_id":"1406ddb8c2ee5ab936efcaaa302ec4149b6860fb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"176cfe0ddcbb55890e8bf9ff9ea967d35f1c3363","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   Disabled handler and tests pass for now. Will continue to resolve the issue."},{"line_number":20,"context_line":"6. currently table shows various uuids - will replace with human readable names"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Addressed review comments:"},{"line_number":23,"context_line":"1. separated lbaas api out of quantum.py into lbaas.py"},{"line_number":24,"context_line":"2. use plural name \u0027loadbalancers\u0027 for panel"},{"line_number":25,"context_line":"3. add missing try/except for all api calls"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"AAAAM3%2F%2BvvA%3D","line":22,"updated":"2013-02-20 02:13:21.000000000","message":"There is no need to write history of review in the commit message. If there is a important thing changed during the reviews, please add it as a normal message.\nI don\u0027t see any such things.","commit_id":"1406ddb8c2ee5ab936efcaaa302ec4149b6860fb"}],"openstack_dashboard/api/lbaas.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bdd38067ebdce8437fb7d876c9e786276aa10479","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"def pool_health_monitor_create(request, **kwargs):"},{"line_number":151,"context_line":"    \"\"\""},{"line_number":152,"context_line":"    Create a health monitor and associate with pool"},{"line_number":153,"context_line":"    :param request: request context"},{"line_number":154,"context_line":"    :param type: type of monitor"},{"line_number":155,"context_line":"    :param delay: delay of monitor"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0u4%3D","line":152,"updated":"2013-02-18 15:02:04.000000000","message":"According to the docstring convention, the following style is recommended, but it is not required to fix necessarily i think.\n\n\"\"\"Create a health monitor and associate with pool\n\n:param request: request context","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"}],"openstack_dashboard/api/quantum.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        # to enable simple association support."},{"line_number":206,"context_line":"        return False"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"class Vip(QuantumAPIDictWrapper):"},{"line_number":210,"context_line":"    \"\"\"Wrapper for quantum load balancer vip\"\"\""},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCws%3D","line":208,"updated":"2013-02-09 16:13:51.000000000","message":"quantum.py is getting bigger.\nIt is worth considering LBaaS related stuff are defined in a separate file (api/loadbalancer.py or api/lbaas.py).","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":563,"context_line":"def pool_health_monitor_create(request, **kwargs):"},{"line_number":564,"context_line":"    \"\"\""},{"line_number":565,"context_line":"    Create a health monitor and associate with pool"},{"line_number":566,"context_line":"    param request: request context"},{"line_number":567,"context_line":"    param type: type of monitor"},{"line_number":568,"context_line":"    param delay: delay of monitor"},{"line_number":569,"context_line":"    param timeout: timeout of monitor"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCww%3D","line":566,"updated":"2013-02-09 16:13:51.000000000","message":"A colon is needed before \u0027param\u0027 if you want to use Sphinx style documentation.","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"}],"openstack_dashboard/dashboards/project/dashboard.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":29,"context_line":"              \u0027access_and_security\u0027,"},{"line_number":30,"context_line":"              \u0027networks\u0027,"},{"line_number":31,"context_line":"              \u0027routers\u0027,"},{"line_number":32,"context_line":"              \u0027loadbalancer\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ObjectStorePanels(horizon.PanelGroup):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCwo%3D","line":32,"updated":"2013-02-09 16:13:51.000000000","message":"loadbalancers?","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bdd38067ebdce8437fb7d876c9e786276aa10479","unresolved":false,"context_lines":[{"line_number":29,"context_line":"              \u0027access_and_security\u0027,"},{"line_number":30,"context_line":"              \u0027networks\u0027,"},{"line_number":31,"context_line":"              \u0027routers\u0027,"},{"line_number":32,"context_line":"              \u0027loadbalancers\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ObjectStorePanels(horizon.PanelGroup):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0uo%3D","line":32,"updated":"2013-02-18 15:02:04.000000000","message":"It is conflicted with network-topology patch. If network-topology is merged first, please rebase it.","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"}],"openstack_dashboard/dashboards/project/loadbalancer/panel.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class LoadBalancer(horizon.Panel):"},{"line_number":9,"context_line":"    name \u003d _(\"Load Balancer\")"},{"line_number":10,"context_line":"    slug \u003d \"loadbalancer\""},{"line_number":11,"context_line":"    permissions \u003d (\u0027openstack.services.network\u0027,)"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCwg%3D","line":9,"updated":"2013-02-09 16:13:51.000000000","message":"Load Balancers is better. Other panels have names with plural form.","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":8,"context_line":"class LoadBalancer(horizon.Panel):"},{"line_number":9,"context_line":"    name \u003d _(\"Load Balancer\")"},{"line_number":10,"context_line":"    slug \u003d \"loadbalancer\""},{"line_number":11,"context_line":"    permissions \u003d (\u0027openstack.services.network\u0027,)"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"dashboard.Project.register(LoadBalancer)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCwk%3D","line":11,"updated":"2013-02-09 16:13:51.000000000","message":"It would be better Loadbalancer panel is displayed when quantum loadbalancer extension is enabled.\n\nWe may need to add another permission to do this.\nI am not sure how it can be achieved. I will ask Gabriel about it.","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"}],"openstack_dashboard/dashboards/project/loadbalancer/tables.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                       verbose_name\u003d_(\"Name\"),"},{"line_number":102,"context_line":"                       link\u003d\"horizon:project:loadbalancer:pooldetails\")"},{"line_number":103,"context_line":"    description \u003d tables.Column(\u0027description\u0027, verbose_name\u003d_(\"Description\"))"},{"line_number":104,"context_line":"    subnet_id \u003d tables.Column(\u0027subnet_id\u0027, verbose_name\u003d_(\"Subnet\"))"},{"line_number":105,"context_line":"    protocol \u003d tables.Column(\u0027protocol\u0027, verbose_name\u003d_(\"Protocol\"))"},{"line_number":106,"context_line":"    vip_id \u003d tables.Column(\u0027vip_id\u0027, verbose_name\u003d_(\"VIP\"), link\u003dget_vip_link)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCwY%3D","line":104,"updated":"2013-02-09 16:13:51.000000000","message":"In general it is better to avoid displaying UUID in tables and use human friendly information instead (e.g., CIDR and network name in this case) as much as possible.","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"}],"openstack_dashboard/dashboards/project/loadbalancer/tabs.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    table_classes \u003d (PoolsTable,)"},{"line_number":30,"context_line":"    name \u003d _(\"Pools\")"},{"line_number":31,"context_line":"    slug \u003d \"pools\""},{"line_number":32,"context_line":"    template_name \u003d (\"horizon/common/_detail_table.html\")"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def get_poolstable_data(self):"},{"line_number":35,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCwQ%3D","line":32,"updated":"2013-02-09 16:13:51.000000000","message":"We don\u0027t need to enclose template_name in parentheses.","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        p \u003d re.search(\u0027pool/(.+?)/\u0027, request.path)"},{"line_number":90,"context_line":"        if p:"},{"line_number":91,"context_line":"            pid \u003d p.group(1)"},{"line_number":92,"context_line":"            pool \u003d api.quantum.pool_get(request, pid)"},{"line_number":93,"context_line":"            return {\u0027pool\u0027: pool}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCwM%3D","line":92,"updated":"2013-02-09 16:13:51.000000000","message":"Need to wrap with try/except","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        v \u003d re.search(\u0027vip/(.+?)/\u0027, request.path)"},{"line_number":103,"context_line":"        if v:"},{"line_number":104,"context_line":"            vid \u003d v.group(1)"},{"line_number":105,"context_line":"            vip \u003d api.quantum.vip_get(request, vid)"},{"line_number":106,"context_line":"            return {\u0027vip\u0027: vip}"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCwI%3D","line":105,"updated":"2013-02-09 16:13:51.000000000","message":"Need to wrap with try/except","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        m \u003d re.search(\u0027member/(.+?)/\u0027, request.path)"},{"line_number":116,"context_line":"        if m:"},{"line_number":117,"context_line":"            mid \u003d m.group(1)"},{"line_number":118,"context_line":"            member \u003d api.quantum.member_get(request, mid)"},{"line_number":119,"context_line":"            return {\u0027member\u0027: member}"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCwA%3D","line":118,"updated":"2013-02-09 16:13:51.000000000","message":"Ditto","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        m \u003d re.search(\u0027monitor/(.+?)/\u0027, request.path)"},{"line_number":129,"context_line":"        if m:"},{"line_number":130,"context_line":"            mid \u003d m.group(1)"},{"line_number":131,"context_line":"            monitor \u003d api.quantum.pool_health_monitor_get(request, mid)"},{"line_number":132,"context_line":"            return {\u0027monitor\u0027: monitor}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCv8%3D","line":131,"updated":"2013-02-09 16:13:51.000000000","message":"Ditto","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"}],"openstack_dashboard/dashboards/project/loadbalancer/views.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            obj_ids.append(re.search(\u0027([0-9a-z-]+)$\u0027, action).group(1))"},{"line_number":48,"context_line":"        if m \u003d\u003d \u0027monitor\u0027:"},{"line_number":49,"context_line":"            for obj_id in obj_ids:"},{"line_number":50,"context_line":"                api.quantum.pool_health_monitor_delete(request, obj_id)"},{"line_number":51,"context_line":"        if m \u003d\u003d \u0027pool\u0027:"},{"line_number":52,"context_line":"            for obj_id in obj_ids:"},{"line_number":53,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCvo%3D","line":50,"updated":"2013-02-09 16:13:51.000000000","message":"try/except","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    #                  _(\u0027Must delete Vip first.\u0027))"},{"line_number":59,"context_line":"        if m \u003d\u003d \u0027member\u0027:"},{"line_number":60,"context_line":"            for obj_id in obj_ids:"},{"line_number":61,"context_line":"                api.quantum.member_delete(request, obj_id)"},{"line_number":62,"context_line":"        if m \u003d\u003d \u0027vip\u0027:"},{"line_number":63,"context_line":"            for obj_id in obj_ids:"},{"line_number":64,"context_line":"                vip_id \u003d api.quantum.pool_get(request, obj_id).vip_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCvw%3D","line":61,"updated":"2013-02-09 16:13:51.000000000","message":"try/except","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            for obj_id in obj_ids:"},{"line_number":64,"context_line":"                vip_id \u003d api.quantum.pool_get(request, obj_id).vip_id"},{"line_number":65,"context_line":"                if vip_id is not None:"},{"line_number":66,"context_line":"                    api.quantum.vip_delete(request, vip_id)"},{"line_number":67,"context_line":"        return self.get(request, *args, **kwargs)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCvs%3D","line":66,"updated":"2013-02-09 16:13:51.000000000","message":"try/except","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"}],"openstack_dashboard/dashboards/project/loadbalancer/workflows.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        super(AddMemberAction, self).__init__(request, *args, **kwargs)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        pool_id_choices \u003d [(\u0027\u0027, _(\"Select a Pool\"))]"},{"line_number":191,"context_line":"        pools \u003d api.quantum.pools_get(request)"},{"line_number":192,"context_line":"        for p in pools:"},{"line_number":193,"context_line":"            pool_id_choices.append((p.id, p.name))"},{"line_number":194,"context_line":"        self.fields[\u0027pool_id\u0027].choices \u003d sorted(pool_id_choices,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCv4%3D","line":191,"updated":"2013-02-09 16:13:51.000000000","message":"Please wrap api calls with try/except.","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d52a2dd00b27d8c85953adb44c31de5bf80da137","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        members_choices \u003d []"},{"line_number":198,"context_line":"        try:"},{"line_number":199,"context_line":"            servers \u003d api.nova.server_list(request)"},{"line_number":200,"context_line":"        except:"},{"line_number":201,"context_line":"            servers \u003d []"},{"line_number":202,"context_line":"            #exceptions.handle(request,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FCv0%3D","line":199,"updated":"2013-02-09 16:13:51.000000000","message":"try/except","commit_id":"7289a1164fd1ef42c5082399e92e6849c246589c"}],"openstack_dashboard/dashboards/project/loadbalancers/panel.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bdd38067ebdce8437fb7d876c9e786276aa10479","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"if not hasattr(settings, \u0027OPENSTACK_QUANTUM_NETWORK\u0027):"},{"line_number":17,"context_line":"    dashboard.Project.unregister(LoadBalancer)"},{"line_number":18,"context_line":"elif getattr(settings, \u0027OPENSTACK_QUANTUM_NETWORK\u0027)[\u0027enable_lb\u0027] is False:"},{"line_number":19,"context_line":"    dashboard.Project.unregister(LoadBalancer)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0so%3D","line":18,"updated":"2013-02-18 15:02:04.000000000","message":"I perfer to adding this definition to settings.py or local_settings.py.\nIt make it easier for a user to configure it.\nIf it is added as a comment, it affects nothing.","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bdd38067ebdce8437fb7d876c9e786276aa10479","unresolved":false,"context_lines":[{"line_number":16,"context_line":"if not hasattr(settings, \u0027OPENSTACK_QUANTUM_NETWORK\u0027):"},{"line_number":17,"context_line":"    dashboard.Project.unregister(LoadBalancer)"},{"line_number":18,"context_line":"elif getattr(settings, \u0027OPENSTACK_QUANTUM_NETWORK\u0027)[\u0027enable_lb\u0027] is False:"},{"line_number":19,"context_line":"    dashboard.Project.unregister(LoadBalancer)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0uI%3D","line":19,"updated":"2013-02-18 15:02:04.000000000","message":"Please consider:\n\nif (hasattr(settings, \u0027OPENSTACK_QUANTUM_NETWORK\u0027) and\n    getattr(settings, \u0027OPENSTACK_QUANTUM_NETWORK\u0027)):\n    dashboard.Project.register(LoadBalancer)","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"}],"openstack_dashboard/dashboards/project/loadbalancers/tables.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def get_link_url(self, pool):"},{"line_number":43,"context_line":"        base_url \u003d reverse(\"horizon:project:loadbalancers:addvip\","},{"line_number":44,"context_line":"                           kwargs\u003d{\u0027pool_id\u0027: pool.id})"},{"line_number":45,"context_line":"        return base_url"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class AddMemberLink(tables.LinkAction):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Byoo%3D","line":45,"updated":"2013-02-19 05:22:59.000000000","message":"Consider adding the following method.\nThis disables \"Add Vip button\" when we have already a vip for the pool.\n\ndef allowed(self, request, datum\u003dNone):\n     if datum and datum.vip_id:\n         return False\n     return True","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    action_past \u003d _(\"Scheduled deletion of\")"},{"line_number":66,"context_line":"    data_type_singular \u003d _(\"Vip\")"},{"line_number":67,"context_line":"    data_type_plural \u003d _(\"Vips\")"},{"line_number":68,"context_line":"    attrs \u003d {\u0027action\u0027: {\u0027param_name\u0027: 4}}"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class DeletePoolLink(tables.DeleteAction):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Byok%3D","line":68,"updated":"2013-02-19 05:22:59.000000000","message":"Consider adding the following method. This disables \"Delete Vip button\" when we have no vip for the pool.\n\ndef allowed(self, request, datum\u003dNone):\n    if datum and not datum.vip_id:\n        return False\n    return True","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    description \u003d tables.Column(\u0027description\u0027, verbose_name\u003d_(\"Description\"))"},{"line_number":105,"context_line":"    subnet_id \u003d tables.Column(\u0027subnet_id\u0027, verbose_name\u003d_(\"Subnet\"))"},{"line_number":106,"context_line":"    protocol \u003d tables.Column(\u0027protocol\u0027, verbose_name\u003d_(\"Protocol\"))"},{"line_number":107,"context_line":"    vip_id \u003d tables.Column(\u0027vip_id\u0027, verbose_name\u003d_(\"VIP\"), link\u003dget_vip_link)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    class Meta:"},{"line_number":110,"context_line":"        name \u003d \"poolstable\""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Byog%3D","line":107,"updated":"2013-02-19 05:22:59.000000000","message":"According to LB API attribute definition and DB model, only one vip can be associated with one pool.\n\nI could add vip1 and then add vip2 to pool1, vip1 disappears without an error. The success of such API request itself looks a bug of LBaaS API.\n\nFrom the GUI perspective, when associated vip exists it is better that \"add vip\" is disabled. Vice versa no vip exists, \"delete vip\" should be disabled. The details is described above.","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"}],"openstack_dashboard/dashboards/project/loadbalancers/tabs.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2c2f37fd22d5bfd141d8108e1f54625ce62c287a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                if p.vip_id is not None:"},{"line_number":66,"context_line":"                    pFormatted.vip_id \u003d api.lbaas.vip_get("},{"line_number":67,"context_line":"                        self.tab_group.request, p.vip_id).name"},{"line_number":68,"context_line":"                poolsFormatted.append(pFormatted)"},{"line_number":69,"context_line":"        except:"},{"line_number":70,"context_line":"            poolsFormatted \u003d []"},{"line_number":71,"context_line":"            exceptions.handle(self.tab_group.request,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0ZU%3D","line":68,"updated":"2013-02-18 17:46:24.000000000","message":"If you want to update some fields such as subnet_id or vip_id of Pool object, it would be better to add method to Pool class in api/lbaas.py.\n\nIf these updates are needed for all pools_get(), it should be done in api/lbaas/pools_get(). network_list in api/quantum.py does the similar thing. If it is specific to PoolsTab, it is better to add method to api.lbbas.Pool and calls them to update these fields.","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2c2f37fd22d5bfd141d8108e1f54625ce62c287a","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                    self.tab_group.request, m.pool_id).name"},{"line_number":92,"context_line":"                mFormatted.address \u003d m.address"},{"line_number":93,"context_line":"                mFormatted.port \u003d m.port"},{"line_number":94,"context_line":"                membersFormatted.append(mFormatted)"},{"line_number":95,"context_line":"        except:"},{"line_number":96,"context_line":"            membersFormatted \u003d []"},{"line_number":97,"context_line":"            exceptions.handle(self.tab_group.request,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0YQ%3D","line":94,"updated":"2013-02-18 17:46:24.000000000","message":"Same as the above.","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"f7be7df11e13a603fd9602ecfc4462bd0ff85e41","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    template_name \u003d \"project/loadbalancers/_pool_details.html\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_context_data(self, request):"},{"line_number":95,"context_line":"        p \u003d re.search(\u0027pool/(.+?)/\u0027, request.path)"},{"line_number":96,"context_line":"        if p:"},{"line_number":97,"context_line":"            pid \u003d p.group(1)"},{"line_number":98,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAANH%2F%2F9wc%3D","line":95,"updated":"2013-03-01 08:26:41.000000000","message":"I would also want you to drop this regexp magic and try to meet the style e.g. in openstack_dashboard/dashboards/project/networks/ports/taby.py:\n\n port_id \u003d self.tab_group.kwargs[\u0027port_id\u0027]\n        try:\n            port \u003d api.quantum.port_get(self.request, port_id)\n...","commit_id":"83940a098f802119b2d964869760e926e082179a"}],"openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_member_details.html":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bdd38067ebdce8437fb7d876c9e786276aa10479","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    \u003cdd\u003e{{ member.weight }}\u003c/dd\u003e"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    \u003cdt\u003e{% trans \"Admin State Up: \" %}\u003c/dt\u003e"},{"line_number":25,"context_line":"    \u003cdd\u003e{{ member.admin_state_up }}\u003c/dd\u003e"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    \u003cdt\u003e{% trans \"Status: \" %}\u003c/dt\u003e"},{"line_number":28,"context_line":"    \u003cdd\u003e{{ member.status }}\u003c/dd\u003e"}],"source_content_type":"text/html","patch_set":18,"id":"AAAAM3%2F%2B0sE%3D","line":25,"updated":"2013-02-18 15:02:04.000000000","message":"In Network panel, I use \"Admin State UP/DOWN\" instead of using admin_state_up directly. When I implemented the Network panel, I was suggested by Gabriel.","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    \u003cdd\u003e{{ member.tenant_id }}\u003c/dd\u003e"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    \u003cdt\u003e{% trans \"Pool ID: \" %}\u003c/dt\u003e"},{"line_number":13,"context_line":"    \u003cdd\u003e{{ member.pool }}\u003c/dd\u003e"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    \u003cdt\u003e{% trans \"Address: \" %}\u003c/dt\u003e"},{"line_number":16,"context_line":"    \u003cdd\u003e{{ member.address }}\u003c/dd\u003e"}],"source_content_type":"text/html","patch_set":19,"id":"AAAAM3%2F%2Byoc%3D","line":13,"updated":"2013-02-19 05:22:59.000000000","message":"pool ID is not displayed.\nAfter changing it to member.pool_id, it worked.","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"ca28fbec7582e91b80533dba0e13933fa9703efd","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    \u003cdd\u003e{{ member.address }}\u003c/dd\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    \u003cdt\u003e{% trans \"Port: \" %}\u003c/dt\u003e"},{"line_number":19,"context_line":"    \u003cdd\u003e{{ member.port }}\u003c/dd\u003e"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \u003cdt\u003e{% trans \"Weight: \" %}\u003c/dt\u003e"},{"line_number":22,"context_line":"    \u003cdd\u003e{{ member.weight }}\u003c/dd\u003e"}],"source_content_type":"text/html","patch_set":29,"id":"AAAAN3%2F%2F890%3D","line":19,"updated":"2013-03-05 14:04:12.000000000","message":"should be member.protocol_port","commit_id":"7000dd164ebd3f00303089659ab932abcf30c656"}],"openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_vip_details.html":[{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"ca28fbec7582e91b80533dba0e13933fa9703efd","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    \u003cdd\u003e{{ vip.address }}\u003c/dd\u003e"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    \u003cdt\u003e{% trans \"Port: \" %}\u003c/dt\u003e"},{"line_number":25,"context_line":"    \u003cdd\u003e{{ vip.port }}\u003c/dd\u003e"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    \u003cdt\u003e{% trans \"Protocol: \" %}\u003c/dt\u003e"},{"line_number":28,"context_line":"    \u003cdd\u003e{{ vip.protocol }}\u003c/dd\u003e"}],"source_content_type":"text/html","patch_set":29,"id":"AAAAN3%2F%2F89w%3D","line":25,"updated":"2013-03-05 14:04:12.000000000","message":"should be vip.protocol_port","commit_id":"7000dd164ebd3f00303089659ab932abcf30c656"}],"openstack_dashboard/dashboards/project/loadbalancers/tests.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bdd38067ebdce8437fb7d876c9e786276aa10479","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import json"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0r4%3D","line":1,"updated":"2013-02-18 15:02:04.000000000","message":"Needs Copyright notice","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2c2f37fd22d5bfd141d8108e1f54625ce62c287a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        monitor_ids \u003d [\u0027d4a0500f-db2b-4cc4-afcf-ec026febff96\u0027,"},{"line_number":45,"context_line":"                       \u0027d4a0500f-db2b-4cc4-afcf-ec026febff97\u0027]"},{"line_number":46,"context_line":"        vip_ids \u003d [\u0027abcdef-c3eb-4fee-9763-12de3338041e\u0027,"},{"line_number":47,"context_line":"                   \u0027f0881d38-c3eb-4fee-9763-12de3338041d\u0027]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self.pools \u003d []"},{"line_number":50,"context_line":"        for i in range(len(pool_ids)):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0VE%3D","line":47,"updated":"2013-02-18 17:46:24.000000000","message":"(suggestion only) All other horizon tests defines test data in openstack_dashboard/tests/test_data/ to share the test data with api tests. I am not sure it suits your test scheme and i think the priority to fix it is not high, but it would be better to follow the convention in Horizon at some time to avoid confusion.","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"}],"openstack_dashboard/dashboards/project/loadbalancers/views.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2c2f37fd22d5bfd141d8108e1f54625ce62c287a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                    api.lbaas.pool_delete(request, obj_id)"},{"line_number":60,"context_line":"                except:"},{"line_number":61,"context_line":"                    exceptions.handle(request,"},{"line_number":62,"context_line":"                                      _(\u0027Must delete Vip first.\u0027))"},{"line_number":63,"context_line":"        if m \u003d\u003d \u0027member\u0027:"},{"line_number":64,"context_line":"            for obj_id in obj_ids:"},{"line_number":65,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0T8%3D","line":62,"updated":"2013-02-18 17:46:24.000000000","message":"If you use this message, we need to catch a specific exception here.\nThe exception can be raised in the case VIP is already deleted.\n(I could not have time to learn LBaaS API, so I might be wrong)","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"}],"openstack_dashboard/dashboards/project/loadbalancers/workflows.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2c2f37fd22d5bfd141d8108e1f54625ce62c287a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    success_message \u003d _(\u0027Added Pool \"%s\".\u0027)"},{"line_number":90,"context_line":"    failure_message \u003d _(\u0027Unable to add Pool \"%s\".\u0027)"},{"line_number":91,"context_line":"    success_url \u003d \"horizon:project:loadbalancers:index\""},{"line_number":92,"context_line":"    default_steps \u003d (AddPoolStep,)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def format_status_message(self, message):"},{"line_number":95,"context_line":"        name \u003d self.context.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0P8%3D","line":92,"updated":"2013-02-18 17:46:24.000000000","message":"All workflow class in this module have one entry in default_steps. I wonder why workflow needs to be used.. Do you have a plan to improve them? (It may be a silly question though).","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2c2f37fd22d5bfd141d8108e1f54625ce62c287a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            pool \u003d api.lbaas.pool_create(request, **context)"},{"line_number":101,"context_line":"        except:"},{"line_number":102,"context_line":"            exceptions.handle(request,"},{"line_number":103,"context_line":"                              _(\u0027Unable to create pool.\u0027))"},{"line_number":104,"context_line":"        return True"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0Tk%3D","line":103,"updated":"2013-02-18 17:46:24.000000000","message":"How about using failure_message above?","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2c2f37fd22d5bfd141d8108e1f54625ce62c287a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    class Meta:"},{"line_number":140,"context_line":"        name \u003d _(\"AddVip\")"},{"line_number":141,"context_line":"        permissions \u003d (\u0027openstack.services.network\u0027,)"},{"line_number":142,"context_line":"        help_text \u003d _(\"Create Vip for current pool.\")"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class AddVipStep(workflows.Step):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0TU%3D","line":142,"updated":"2013-02-18 17:46:24.000000000","message":"for the current pool","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    name \u003d forms.CharField(max_length\u003d80, label\u003d_(\"Name\"))"},{"line_number":109,"context_line":"    description \u003d forms.CharField(max_length\u003d80, label\u003d_(\"Description\"))"},{"line_number":110,"context_line":"    floatip_address \u003d forms.ChoiceField("},{"line_number":111,"context_line":"        label\u003d_(\"Vip Address from Floating IPs\"), required\u003dFalse)"},{"line_number":112,"context_line":"    other_address \u003d forms.CharField("},{"line_number":113,"context_line":"        max_length\u003d80,"},{"line_number":114,"context_line":"        label\u003d_(\"Or, specify one\"), initial\u003d\u0027\u0027, required\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2ByoU%3D","line":111,"updated":"2013-02-19 05:22:59.000000000","message":"Needs to setup floatip_address choices.\n\n[question]\nDoes this address need to be floating IP? Cannot we specify the internal address? There are two models in LBaaS: two arm model and one arm model. When one arm mode, the specified floating IP address needs to be associated with an internal address. Who performs the association?","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        label\u003d_(\"Vip Address from Floating IPs\"), required\u003dFalse)"},{"line_number":112,"context_line":"    other_address \u003d forms.CharField("},{"line_number":113,"context_line":"        max_length\u003d80,"},{"line_number":114,"context_line":"        label\u003d_(\"Or, specify one\"), initial\u003d\u0027\u0027, required\u003dFalse)"},{"line_number":115,"context_line":"    port \u003d forms.CharField(max_length\u003d80, label\u003d_(\"Port\"))"},{"line_number":116,"context_line":"    protocol \u003d forms.ChoiceField(label\u003d_(\"Protocol\"))"},{"line_number":117,"context_line":"    session_persistence \u003d forms.ChoiceField("}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Byn8%3D","line":114,"updated":"2013-02-19 05:22:59.000000000","message":"This field just accepts an IP address. Consider using fields.IPField.\ngateway_ip field in dashboards/project/networks/workflows.py is a good example.","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        for m in servers:"},{"line_number":234,"context_line":"            members_choices.append((m.id, m.name))"},{"line_number":235,"context_line":"        self.fields[\u0027members\u0027].choices \u003d sorted(members_choices,"},{"line_number":236,"context_line":"                                                key\u003dlambda member: member[1])"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    class Meta:"},{"line_number":239,"context_line":"        name \u003d _(\"MemberDetails\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Byn4%3D","line":236,"updated":"2013-02-19 05:22:59.000000000","message":"(may be a future work) If there is no servers, no members are listed and just \"Member(s)\" is displayed. At first I could not understand what happened. It is a little confusing.","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    slug \u003d \"addmember\""},{"line_number":256,"context_line":"    name \u003d _(\"Add Member\")"},{"line_number":257,"context_line":"    finalize_button_name \u003d _(\"Add\")"},{"line_number":258,"context_line":"    success_message \u003d _(\u0027Added Member \"%s\".\u0027)"},{"line_number":259,"context_line":"    failure_message \u003d _(\u0027Unable to add Member \"%s\".\u0027)"},{"line_number":260,"context_line":"    success_url \u003d \"horizon:project:loadbalancers:index\""},{"line_number":261,"context_line":"    default_steps \u003d (AddMemberStep,)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Byn0%3D","line":258,"updated":"2013-02-19 05:22:59.000000000","message":"When I added members, i got a message \"Added Member \u0027None\u0027\". I am afraid I did something wrong.","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        for m in context[\u0027members\u0027]:"},{"line_number":269,"context_line":"            params \u003d {\u0027device_id\u0027: m}"},{"line_number":270,"context_line":"            try:"},{"line_number":271,"context_line":"                plist \u003d api.quantum.port_list(request, **params)"},{"line_number":272,"context_line":"            except:"},{"line_number":273,"context_line":"                exceptions.handle(request,"},{"line_number":274,"context_line":"                                  _(\u0027Unable to retrieve ports list.\u0027))"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Byns%3D","line":271,"updated":"2013-02-19 05:22:59.000000000","message":"(may be a future work)\nIt would be better to retrieve port list which belongs to the network which the pool connects to. If my understanding is correct, a pool and members must belong to a same subnet (network).","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"39d9c18f4cb4830ee1a9e0916accc140b8569920","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                exceptions.handle(request,"},{"line_number":274,"context_line":"                                  _(\u0027Unable to retrieve ports list.\u0027))"},{"line_number":275,"context_line":"            if plist:"},{"line_number":276,"context_line":"                context[\u0027address\u0027] \u003d plist[0].fixed_ips[0][\u0027ip_address\u0027]"},{"line_number":277,"context_line":"            try:"},{"line_number":278,"context_line":"                context[\u0027member_id\u0027] \u003d api.lbaas.member_create("},{"line_number":279,"context_line":"                    request, **context).get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAM3%2F%2Byno%3D","line":276,"updated":"2013-02-19 05:22:59.000000000","message":"(may be a future work) If a member has multiple ports, there is a possibility that a port of a different network which the pool does not connect to is selected. This can be avoided if the solution suggested above is used.","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"}],"openstack_dashboard/local/local_settings.py.example":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cdb0dc91fb0b4d8dee15407d32628a277ea2fb60","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"# The OPENSTACK_QUANTUM_NETWORK settings can be used to enable optional"},{"line_number":108,"context_line":"# services provided by quantum.  Currently only the load balancer service"},{"line_number":109,"context_line":"# is available.                                                                                                                                                                    "},{"line_number":110,"context_line":"OPENSTACK_QUANTUM_NETWORK \u003d {"},{"line_number":111,"context_line":"    \u0027enable_lb\u0027: True"},{"line_number":112,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAAM3%2F%2Bymw%3D","line":109,"updated":"2013-02-19 07:43:44.000000000","message":"Remove trailing spaces.","commit_id":"5151879f3711d06e19f102cb85c8bfa25cf4b90e"}],"openstack_dashboard/test/api_tests/lbaas_tests.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2c2f37fd22d5bfd141d8108e1f54625ce62c287a","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from quantumclient.v2_0.client import Client as quantumclient"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class LbaasApiTests(test.APITestCase):"},{"line_number":28,"context_line":"    @test.create_stubs({quantumclient: (\u0027create_vip\u0027,)})"},{"line_number":29,"context_line":"    def test_vip_create(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2B0Vk%3D","line":26,"updated":"2013-02-18 17:46:24.000000000","message":"(suggestion only) In other api tests, test data is prepared in openstack_dashboard/test/test_data/*.py.\n\nThe priority to fix it is relatively low I think since your test seems to have good coverage.","commit_id":"ddf75e079f2e3fc356550a57fbf86a69f5f988a6"}],"tools/pip-requires":[{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"f7be7df11e13a603fd9602ecfc4462bd0ff85e41","unresolved":false,"context_lines":[{"line_number":7,"context_line":"python-glanceclient\u003c2"},{"line_number":8,"context_line":"python-keystoneclient"},{"line_number":9,"context_line":"python-novaclient\u003e\u003d2.11.1,\u003c3"},{"line_number":10,"context_line":"python-quantumclient\u003e\u003d2.1.2"},{"line_number":11,"context_line":"python-swiftclient\u003e1.1,\u003c2"},{"line_number":12,"context_line":"pytz"},{"line_number":13,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":27,"id":"AAAANH%2F%2F9xA%3D","line":10,"updated":"2013-03-01 08:26:41.000000000","message":"You should just drop this file from the patch. Although it might be required right now, we have also another (small) patch just changing the python-quantumclient versioned requirement. IMHO mixing those things into this feature, makes handling patches more complicate","commit_id":"83940a098f802119b2d964869760e926e082179a"}]}
