)]}'
{"openstack_dashboard/api/neutron.py":[{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"483ac4a0be23843a254913f7f3c8f8890afdce62","unresolved":false,"context_lines":[{"line_number":277,"context_line":"      The value should be a format of \"{\u0027cidr\u0027: \u003ccidr\u003e}\""},{"line_number":278,"context_line":"    * group: remote security group. The value should be a format of"},{"line_number":279,"context_line":"      \"{\u0027name\u0027: \u003csecgroup_name\u003e}\""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    \"\"\""},{"line_number":282,"context_line":"    backend \u003d \u0027neutron\u0027"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_414a6155","line":280,"updated":"2017-05-30 09:24:41.000000000","message":"I think this line is redundant.","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1920ca2edef34674e4ed715396a2d9182fa2d618","unresolved":false,"context_lines":[{"line_number":277,"context_line":"      The value should be a format of \"{\u0027cidr\u0027: \u003ccidr\u003e}\""},{"line_number":278,"context_line":"    * group: remote security group. The value should be a format of"},{"line_number":279,"context_line":"      \"{\u0027name\u0027: \u003csecgroup_name\u003e}\""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    \"\"\""},{"line_number":282,"context_line":"    backend \u003d \u0027neutron\u0027"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_2fadf087","line":280,"in_reply_to":"df140735_414a6155","updated":"2017-05-31 12:02:23.000000000","message":"Done.\n\nMy past memory says that a blank line needs to terminate a list in a docstring, but it seems no longer correct. The current sphinx does not complain without a blank line here.","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"483ac4a0be23843a254913f7f3c8f8890afdce62","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    def list(self):"},{"line_number":294,"context_line":"        \"\"\"Fetches a list all security groups."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        A returned value is a list of SecurityGroup object."},{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        tenant_id \u003d self.request.user.tenant_id"},{"line_number":299,"context_line":"        return self._list(tenant_id\u003dtenant_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_a1a93de0","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":59},"updated":"2017-05-30 09:24:41.000000000","message":"I think \"It returns a list of SecurityGroup object.\" for consistent with below comments.","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1920ca2edef34674e4ed715396a2d9182fa2d618","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    def list(self):"},{"line_number":294,"context_line":"        \"\"\"Fetches a list all security groups."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        A returned value is a list of SecurityGroup object."},{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        tenant_id \u003d self.request.user.tenant_id"},{"line_number":299,"context_line":"        return self._list(tenant_id\u003dtenant_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_ef7938fc","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":59},"in_reply_to":"df140735_a1a93de0","updated":"2017-05-31 12:02:23.000000000","message":"I changed it to :returns:","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"483ac4a0be23843a254913f7f3c8f8890afdce62","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        :param parent_group_id: security group id a rule is created to"},{"line_number":352,"context_line":"        :param direction: ingress or egress"},{"line_number":353,"context_line":"        :param ethertype: ipv4, ipv6, ..."},{"line_number":354,"context_line":"        :param ip_protocol: tcp, udp, icmp"},{"line_number":355,"context_line":"        :param from_port: L4 port range min"},{"line_number":356,"context_line":"        :param to_port: L4 port range max"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_6170c573","line":353,"range":{"start_line":353,"start_character":36,"end_line":353,"end_character":41},"updated":"2017-05-30 09:24:41.000000000","message":"Do we have other kind of ethertype beside ipv4 and ipv6? If no, I think we can delete this.","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1920ca2edef34674e4ed715396a2d9182fa2d618","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        :param parent_group_id: security group id a rule is created to"},{"line_number":352,"context_line":"        :param direction: ingress or egress"},{"line_number":353,"context_line":"        :param ethertype: ipv4, ipv6, ..."},{"line_number":354,"context_line":"        :param ip_protocol: tcp, udp, icmp"},{"line_number":355,"context_line":"        :param from_port: L4 port range min"},{"line_number":356,"context_line":"        :param to_port: L4 port range max"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_2f25efab","line":353,"range":{"start_line":353,"start_character":36,"end_line":353,"end_character":41},"in_reply_to":"df140735_6170c573","updated":"2017-05-31 12:02:23.000000000","message":"Done","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"483ac4a0be23843a254913f7f3c8f8890afdce62","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        :param parent_group_id: security group id a rule is created to"},{"line_number":352,"context_line":"        :param direction: ingress or egress"},{"line_number":353,"context_line":"        :param ethertype: ipv4, ipv6, ..."},{"line_number":354,"context_line":"        :param ip_protocol: tcp, udp, icmp"},{"line_number":355,"context_line":"        :param from_port: L4 port range min"},{"line_number":356,"context_line":"        :param to_port: L4 port range max"},{"line_number":357,"context_line":"        :param cidr: Source IP CIDR"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_21ff6dab","line":354,"range":{"start_line":354,"start_character":28,"end_line":354,"end_character":42},"updated":"2017-05-30 09:24:41.000000000","message":"add \", ...\" as above?","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1920ca2edef34674e4ed715396a2d9182fa2d618","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        :param parent_group_id: security group id a rule is created to"},{"line_number":352,"context_line":"        :param direction: ingress or egress"},{"line_number":353,"context_line":"        :param ethertype: ipv4, ipv6, ..."},{"line_number":354,"context_line":"        :param ip_protocol: tcp, udp, icmp"},{"line_number":355,"context_line":"        :param from_port: L4 port range min"},{"line_number":356,"context_line":"        :param to_port: L4 port range max"},{"line_number":357,"context_line":"        :param cidr: Source IP CIDR"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_af457f45","line":354,"range":{"start_line":354,"start_character":28,"end_line":354,"end_character":42},"in_reply_to":"df140735_21ff6dab","updated":"2017-05-31 12:02:23.000000000","message":"Updated it.\n\nIt was correct if nova-net is supported.\nIn the current horizon, it should be tcp, udp, icmp or an integer value. The back-end accepts more protocols, but the horizon presentation layer does not.","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"483ac4a0be23843a254913f7f3c8f8890afdce62","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    def list(self, all_tenants\u003dFalse, **search_opts):"},{"line_number":484,"context_line":"        \"\"\"Fetches a list of all floating IPs."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        A returned value is a list of FloatingIp object."},{"line_number":487,"context_line":"        \"\"\""},{"line_number":488,"context_line":"        if not all_tenants:"},{"line_number":489,"context_line":"            tenant_id \u003d self.request.user.tenant_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_0184695d","line":486,"range":{"start_line":486,"start_character":8,"end_line":486,"end_character":56},"updated":"2017-05-30 09:24:41.000000000","message":"ditto","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1920ca2edef34674e4ed715396a2d9182fa2d618","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    def list(self, all_tenants\u003dFalse, **search_opts):"},{"line_number":484,"context_line":"        \"\"\"Fetches a list of all floating IPs."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        A returned value is a list of FloatingIp object."},{"line_number":487,"context_line":"        \"\"\""},{"line_number":488,"context_line":"        if not all_tenants:"},{"line_number":489,"context_line":"            tenant_id \u003d self.request.user.tenant_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_4f5a63f3","line":486,"range":{"start_line":486,"start_character":8,"end_line":486,"end_character":56},"in_reply_to":"df140735_0184695d","updated":"2017-05-31 12:02:23.000000000","message":"Done","commit_id":"872c2d72d5ee4a4b15c882656b8ed2087c40d4a6"}]}
