)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f77f118ed83180238dd561f6cb2d1d1d15e2bc0a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fixes a series of bugs related to Floating IPs."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Fixes KeyErrors when accessing \u0027floatingip\u0027 values in usages, which"},{"line_number":10,"context_line":"  broke Floating IP allocation."},{"line_number":11,"context_line":"- The quota display in the bottom right of the Allocation dialog are"},{"line_number":12,"context_line":"  only displayed if \u0027enabled_quotas\u0027 is True"},{"line_number":13,"context_line":"- Adds security group rule tallying for the usages overview page, which"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_a29b5577","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":2},"updated":"2019-12-17 04:30:59.000000000","message":"When I happened to open the commit message, I noticed non-ascii characters are included in whitespace areas.\nThe latest patch has fixed them.","commit_id":"570cc0340aa318b342b02fbe42d1b1ecc445ef98"}],"openstack_dashboard/dashboards/project/floating_ips/forms.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1d0f0a94ad107a81ff577bc76889752c0f597504","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            usages \u003d quotas.tenant_quota_usages(request,"},{"line_number":58,"context_line":"                                                targets\u003d(\u0027floatingip\u0027, ))"},{"line_number":59,"context_line":"            if \u0027floatingip\u0027 in usages and \\"},{"line_number":60,"context_line":"               usages[\u0027floatingip\u0027][\u0027available\u0027] \u003c\u003d 0:"},{"line_number":61,"context_line":"                error_message \u003d _(\u0027You are already using all of your available\u0027"},{"line_number":62,"context_line":"                                  \u0027 floating IPs.\u0027)"},{"line_number":63,"context_line":"                self.api_error(error_message)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f6940838","line":60,"updated":"2019-11-21 12:47:09.000000000","message":"Can you please use () instead of \\? Like this:\n\nif (\u0027floatingip\u0027 in usages and\n               usages[\u0027floatingip\u0027][\u0027available\u0027] \u003c\u003d 0):","commit_id":"e5d4c06e41f24606247f7b8be9eae24ad307ca2c"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1d0f0a94ad107a81ff577bc76889752c0f597504","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                             _(\u0027Allocated Floating IP %(ip)s.\u0027)"},{"line_number":79,"context_line":"                             % {\"ip\": fip.ip})"},{"line_number":80,"context_line":"            return fip"},{"line_number":81,"context_line":"        except Exception as e:"},{"line_number":82,"context_line":"            exceptions.handle(request, _(\u0027Unable to allocate Floating IP.\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d69d4c57","line":81,"updated":"2019-11-21 12:47:09.000000000","message":"this doesn\u0027t seem to be used anywhere?","commit_id":"e5d4c06e41f24606247f7b8be9eae24ad307ca2c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"25b7d080afa50f8034e7420ab0dd580281a719cd","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            usages \u003d quotas.tenant_quota_usages(request,"},{"line_number":58,"context_line":"                                                targets\u003d(\u0027floatingip\u0027, ))"},{"line_number":59,"context_line":"            if (\u0027floatingip\u0027 in usages and"},{"line_number":60,"context_line":"               usages[\u0027floatingip\u0027][\u0027available\u0027] \u003c\u003d 0):"},{"line_number":61,"context_line":"                error_message \u003d _(\u0027You are already using all of your available\u0027"},{"line_number":62,"context_line":"                                  \u0027 floating IPs.\u0027)"},{"line_number":63,"context_line":"                self.api_error(error_message)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_d6b737d7","line":60,"updated":"2019-12-16 20:42:30.000000000","message":"The indent level looks wrong. One more space is needed before \"usage\".","commit_id":"570cc0340aa318b342b02fbe42d1b1ecc445ef98"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f77f118ed83180238dd561f6cb2d1d1d15e2bc0a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            usages \u003d quotas.tenant_quota_usages(request,"},{"line_number":58,"context_line":"                                                targets\u003d(\u0027floatingip\u0027, ))"},{"line_number":59,"context_line":"            if (\u0027floatingip\u0027 in usages and"},{"line_number":60,"context_line":"               usages[\u0027floatingip\u0027][\u0027available\u0027] \u003c\u003d 0):"},{"line_number":61,"context_line":"                error_message \u003d _(\u0027You are already using all of your available\u0027"},{"line_number":62,"context_line":"                                  \u0027 floating IPs.\u0027)"},{"line_number":63,"context_line":"                self.api_error(error_message)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_62d79d24","line":60,"in_reply_to":"3fa7e38b_d6b737d7","updated":"2019-12-17 04:30:59.000000000","message":"Done","commit_id":"570cc0340aa318b342b02fbe42d1b1ecc445ef98"}],"openstack_dashboard/test/unit/usage/test_quotas.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"35756bfa81d2c5f47a6fd64326338fd6b8fd5401","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def _mock_service_enabled(self, compute_enabled\u003dTrue,"},{"line_number":38,"context_line":"                              network_enabled\u003dFalse, volume_enabled\u003dTrue):"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        with open(\u0027/root/data/ancilliary/usage_tests.txt\u0027, \u0027a+\u0027) as f:"},{"line_number":41,"context_line":"            f.write("},{"line_number":42,"context_line":"                \"_mock_service_enabled called: {} \\n\".format(network_enabled)"},{"line_number":43,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_ded57744","line":40,"updated":"2019-11-20 12:47:03.000000000","message":"Where is this file supposed to come from, and why is the path hardcoded?","commit_id":"71c1fe93a907a3d6d22f2806b9915b3e716f2f34"}],"openstack_dashboard/usage/quotas.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1d0f0a94ad107a81ff577bc76889752c0f597504","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        \u0027subnet\u0027: (neutron.subnet_list, {\u0027tenant_id\u0027: tenant_id}),"},{"line_number":374,"context_line":"        \u0027port\u0027: (neutron.port_list, {\u0027tenant_id\u0027: tenant_id}),"},{"line_number":375,"context_line":"        \u0027router\u0027: (neutron.router_list, {\u0027tenant_id\u0027: tenant_id}),"},{"line_number":376,"context_line":"        \u0027floatingip\u0027: (neutron.tenant_floating_ip_list, {})"},{"line_number":377,"context_line":"    }"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    for quota_name, lister_info in resource_lister.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_96d114fb","line":376,"updated":"2019-11-21 12:47:09.000000000","message":"please leave the trailing coma, that helps avoid copy-paste errors","commit_id":"e5d4c06e41f24606247f7b8be9eae24ad307ca2c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"25b7d080afa50f8034e7420ab0dd580281a719cd","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    if add_sg or add_sgr:"},{"line_number":395,"context_line":"        try:"},{"line_number":396,"context_line":"            security_groups \u003d neutron.security_group_list(request)"},{"line_number":397,"context_line":"            security_group_rules \u003d []"},{"line_number":398,"context_line":"            for group in security_groups:"},{"line_number":399,"context_line":"                security_group_rules +\u003d group[\u0027security_group_rules\u0027]"},{"line_number":400,"context_line":"        except Exception:"},{"line_number":401,"context_line":"            security_groups \u003d []"},{"line_number":402,"context_line":"            security_group_rules \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_36f32beb","line":399,"range":{"start_line":397,"start_character":12,"end_line":399,"end_character":69},"updated":"2019-12-16 20:42:30.000000000","message":"We only use the length of security_group_rules, so it looks better to use len() here.\n\n  num_rules \u003d sum(len(group[\u0027security_group_rules\u0027]\n                  for group in security_groups)","commit_id":"570cc0340aa318b342b02fbe42d1b1ecc445ef98"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f77f118ed83180238dd561f6cb2d1d1d15e2bc0a","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    if add_sg or add_sgr:"},{"line_number":395,"context_line":"        try:"},{"line_number":396,"context_line":"            security_groups \u003d neutron.security_group_list(request)"},{"line_number":397,"context_line":"            security_group_rules \u003d []"},{"line_number":398,"context_line":"            for group in security_groups:"},{"line_number":399,"context_line":"                security_group_rules +\u003d group[\u0027security_group_rules\u0027]"},{"line_number":400,"context_line":"        except Exception:"},{"line_number":401,"context_line":"            security_groups \u003d []"},{"line_number":402,"context_line":"            security_group_rules \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_82b5f9ef","line":399,"range":{"start_line":397,"start_character":12,"end_line":399,"end_character":69},"in_reply_to":"3fa7e38b_36f32beb","updated":"2019-12-17 04:30:59.000000000","message":"Done","commit_id":"570cc0340aa318b342b02fbe42d1b1ecc445ef98"}],"openstack_dashboard/usage/views.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1d0f0a94ad107a81ff577bc76889752c0f597504","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            ChartDef(\"port\", _(\"Ports\"), None, None),"},{"line_number":139,"context_line":"            ChartDef(\"router\", _(\"Routers\"), None, None),"},{"line_number":140,"context_line":"        ],"},{"line_number":141,"context_line":"        \u0027allowed\u0027: _check_network_allowed"},{"line_number":142,"context_line":"    },"},{"line_number":143,"context_line":"]"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f6308857","line":141,"updated":"2019-11-21 12:47:09.000000000","message":"trailing comma","commit_id":"e5d4c06e41f24606247f7b8be9eae24ad307ca2c"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1d0f0a94ad107a81ff577bc76889752c0f597504","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                chart_data \u003d self._process_chart_section(section[\u0027charts\u0027])"},{"line_number":161,"context_line":"                chart_sections.append({"},{"line_number":162,"context_line":"                    \u0027title\u0027: section[\u0027title\u0027],"},{"line_number":163,"context_line":"                    \u0027charts\u0027: chart_data"},{"line_number":164,"context_line":"                })"},{"line_number":165,"context_line":"        return chart_sections"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_362b80eb","line":163,"updated":"2019-11-21 12:47:09.000000000","message":"please add a trailing comma","commit_id":"e5d4c06e41f24606247f7b8be9eae24ad307ca2c"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1d0f0a94ad107a81ff577bc76889752c0f597504","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        data \u003d super(ProjectUsageView, self).get_data()"},{"line_number":216,"context_line":"        try:"},{"line_number":217,"context_line":"            self.usage.get_limits()"},{"line_number":218,"context_line":"        except Exception as e:"},{"line_number":219,"context_line":"            exceptions.handle(self.request,"},{"line_number":220,"context_line":"                              _(\u0027Unable to retrieve limits information.\u0027))"},{"line_number":221,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b6f9b080","line":218,"updated":"2019-11-21 12:47:09.000000000","message":"unused e","commit_id":"e5d4c06e41f24606247f7b8be9eae24ad307ca2c"}]}
