)]}'
{"openstack_dashboard/dashboards/project/security_groups/forms.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fe5efc3c41b381ebe8d157d681f3e61f033f8747","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        if self.backend \u003d\u003d \u0027neutron\u0027:"},{"line_number":278,"context_line":"            self.fields[\u0027direction\u0027].choices \u003d [(\u0027ingress\u0027, _(\u0027Ingress\u0027)),"},{"line_number":279,"context_line":"                                                (\u0027egress\u0027, _(\u0027Egress\u0027))]"},{"line_number":280,"context_line":"            self.fields[\u0027ip_protocol\u0027].helptext \u003d _("},{"line_number":281,"context_line":"                \"Enter an integer value between 0 and 255 (or leave the field\""},{"line_number":282,"context_line":"                \"empty for any protocol).\""},{"line_number":283,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_6324c3af","line":280,"range":{"start_line":280,"start_character":39,"end_line":280,"end_character":47},"updated":"2017-03-28 21:36:47.000000000","message":"help_text instead of helptext?","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"04f4938e831c40796ab5c791ff2e9fc4afeac0e0","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        if self.backend \u003d\u003d \u0027neutron\u0027:"},{"line_number":278,"context_line":"            self.fields[\u0027direction\u0027].choices \u003d [(\u0027ingress\u0027, _(\u0027Ingress\u0027)),"},{"line_number":279,"context_line":"                                                (\u0027egress\u0027, _(\u0027Egress\u0027))]"},{"line_number":280,"context_line":"            self.fields[\u0027ip_protocol\u0027].helptext \u003d _("},{"line_number":281,"context_line":"                \"Enter an integer value between 0 and 255 (or leave the field\""},{"line_number":282,"context_line":"                \"empty for any protocol).\""},{"line_number":283,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_0c2f4d88","line":280,"range":{"start_line":280,"start_character":39,"end_line":280,"end_character":47},"in_reply_to":"ffe62b97_1bcb0ca5","updated":"2017-03-30 08:43:24.000000000","message":"This is API reference of Django form. help_text is documented here https://docs.djangoproject.com/en/1.10/ref/forms/fields/#help-text","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":8674,"name":"Yves-Gwenael Bourhis","email":"ygbourhis@gmail.com","username":"yves"},"change_message_id":"ba84c4a579ead286e2000d314ce6a11c5bf6f94f","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        if self.backend \u003d\u003d \u0027neutron\u0027:"},{"line_number":278,"context_line":"            self.fields[\u0027direction\u0027].choices \u003d [(\u0027ingress\u0027, _(\u0027Ingress\u0027)),"},{"line_number":279,"context_line":"                                                (\u0027egress\u0027, _(\u0027Egress\u0027))]"},{"line_number":280,"context_line":"            self.fields[\u0027ip_protocol\u0027].helptext \u003d _("},{"line_number":281,"context_line":"                \"Enter an integer value between 0 and 255 (or leave the field\""},{"line_number":282,"context_line":"                \"empty for any protocol).\""},{"line_number":283,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_1bcb0ca5","line":280,"range":{"start_line":280,"start_character":39,"end_line":280,"end_character":47},"in_reply_to":"ffe62b97_6324c3af","updated":"2017-03-29 09:24:59.000000000","message":"ipdb introspection gives \"helptext\" but the 2 seem to work (maybe a __getattr__ on the django class).","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fe5efc3c41b381ebe8d157d681f3e61f033f8747","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            self.fields[\u0027direction\u0027].choices \u003d [(\u0027ingress\u0027, _(\u0027Ingress\u0027)),"},{"line_number":279,"context_line":"                                                (\u0027egress\u0027, _(\u0027Egress\u0027))]"},{"line_number":280,"context_line":"            self.fields[\u0027ip_protocol\u0027].helptext \u003d _("},{"line_number":281,"context_line":"                \"Enter an integer value between 0 and 255 (or leave the field\""},{"line_number":282,"context_line":"                \"empty for any protocol).\""},{"line_number":283,"context_line":"            )"},{"line_number":284,"context_line":"            self.fields[\u0027port\u0027].helptext \u003d _("},{"line_number":285,"context_line":"                \"Enter an integer value between 1 and 65535 (or leave the \""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_26f7e9d5","line":282,"range":{"start_line":281,"start_character":62,"end_line":282,"end_character":39},"updated":"2017-03-28 21:36:47.000000000","message":"For ICMP type and code, we use -1 to indicate wild card.\nIf we use \u0027blank\u0027 field to indicate wild card here, it leads to two interfaces to show wild card in the single form. I think it looks inconsistent. How about changing it to -1?\napi/neutron SecurityGroupManager already regards a negative value as None.","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":8674,"name":"Yves-Gwenael Bourhis","email":"ygbourhis@gmail.com","username":"yves"},"change_message_id":"ba84c4a579ead286e2000d314ce6a11c5bf6f94f","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            self.fields[\u0027direction\u0027].choices \u003d [(\u0027ingress\u0027, _(\u0027Ingress\u0027)),"},{"line_number":279,"context_line":"                                                (\u0027egress\u0027, _(\u0027Egress\u0027))]"},{"line_number":280,"context_line":"            self.fields[\u0027ip_protocol\u0027].helptext \u003d _("},{"line_number":281,"context_line":"                \"Enter an integer value between 0 and 255 (or leave the field\""},{"line_number":282,"context_line":"                \"empty for any protocol).\""},{"line_number":283,"context_line":"            )"},{"line_number":284,"context_line":"            self.fields[\u0027port\u0027].helptext \u003d _("},{"line_number":285,"context_line":"                \"Enter an integer value between 1 and 65535 (or leave the \""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_a0498b60","line":282,"range":{"start_line":281,"start_character":62,"end_line":282,"end_character":39},"in_reply_to":"ffe62b97_26f7e9d5","updated":"2017-03-29 09:24:59.000000000","message":"No, it doesn\u0027t work, it\u0027s refused by neutron and raises an error:\n\nInvalid value for port -1","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"04f4938e831c40796ab5c791ff2e9fc4afeac0e0","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            self.fields[\u0027direction\u0027].choices \u003d [(\u0027ingress\u0027, _(\u0027Ingress\u0027)),"},{"line_number":279,"context_line":"                                                (\u0027egress\u0027, _(\u0027Egress\u0027))]"},{"line_number":280,"context_line":"            self.fields[\u0027ip_protocol\u0027].helptext \u003d _("},{"line_number":281,"context_line":"                \"Enter an integer value between 0 and 255 (or leave the field\""},{"line_number":282,"context_line":"                \"empty for any protocol).\""},{"line_number":283,"context_line":"            )"},{"line_number":284,"context_line":"            self.fields[\u0027port\u0027].helptext \u003d _("},{"line_number":285,"context_line":"                \"Enter an integer value between 1 and 65535 (or leave the \""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_2101fa06","line":282,"range":{"start_line":281,"start_character":62,"end_line":282,"end_character":39},"in_reply_to":"ffe62b97_a0498b60","updated":"2017-03-30 08:43:24.000000000","message":"Neutron API does not accept -1 as a valid protocol value.\n\nHorizon API wrapper for neutron does it.\nhttps://github.com/openstack/horizon/blob/master/openstack_dashboard/api/neutron.py#L301-L302\n\nActually I am not sure which is better to keep consistency in Horizon security group rule form or to sync the interface with neutron REST API. At least I would like to try to keep consistency in Horizon. The latter is also good point but REST, CLI and GUI are a bit different and IMHO it is not a requirement to use the same value.","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fe5efc3c41b381ebe8d157d681f3e61f033f8747","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                \"Enter an integer value between 0 and 255 (or leave the field\""},{"line_number":282,"context_line":"                \"empty for any protocol).\""},{"line_number":283,"context_line":"            )"},{"line_number":284,"context_line":"            self.fields[\u0027port\u0027].helptext \u003d _("},{"line_number":285,"context_line":"                \"Enter an integer value between 1 and 65535 (or leave the \""},{"line_number":286,"context_line":"                \"field empty for any value).\""},{"line_number":287,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_233a3bcb","line":284,"range":{"start_line":284,"start_character":32,"end_line":284,"end_character":40},"updated":"2017-03-28 21:36:47.000000000","message":"ditto","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":8674,"name":"Yves-Gwenael Bourhis","email":"ygbourhis@gmail.com","username":"yves"},"change_message_id":"ba84c4a579ead286e2000d314ce6a11c5bf6f94f","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                \"Enter an integer value between 0 and 255 (or leave the field\""},{"line_number":282,"context_line":"                \"empty for any protocol).\""},{"line_number":283,"context_line":"            )"},{"line_number":284,"context_line":"            self.fields[\u0027port\u0027].helptext \u003d _("},{"line_number":285,"context_line":"                \"Enter an integer value between 1 and 65535 (or leave the \""},{"line_number":286,"context_line":"                \"field empty for any value).\""},{"line_number":287,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_1b40ac06","line":284,"range":{"start_line":284,"start_character":32,"end_line":284,"end_character":40},"in_reply_to":"ffe62b97_233a3bcb","updated":"2017-03-29 09:24:59.000000000","message":"dito too about the fact that helptext is given by introspection (and works)","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fe5efc3c41b381ebe8d157d681f3e61f033f8747","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            self.fields[\u0027port\u0027].helptext \u003d _("},{"line_number":285,"context_line":"                \"Enter an integer value between 1 and 65535 (or leave the \""},{"line_number":286,"context_line":"                \"field empty for any value).\""},{"line_number":287,"context_line":"            )"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            # direction and ethertype are not supported in Nova secgroup."},{"line_number":290,"context_line":"            self.fields[\u0027direction\u0027].widget \u003d forms.HiddenInput()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_d9a6e2ab","line":287,"updated":"2017-03-28 21:36:47.000000000","message":"We have two interfaces (port and port_range) in the form. After this change, \"port\" accepts -1 and \"port range\" does not. Looks inconsistent.\n\nHow about adding a new menu like \"All Ports\" to \"port_or_port_range\" choices?","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"}],"openstack_dashboard/dashboards/project/security_groups/tests.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fe5efc3c41b381ebe8d157d681f3e61f033f8747","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"                    \u0027remote\u0027: \u0027cidr\u0027}"},{"line_number":1059,"context_line":"        res \u003d self.client.post(self.edit_url, formData)"},{"line_number":1060,"context_line":"        self.assertNoMessages()"},{"line_number":1061,"context_line":"        self.assertContains(res, \"Not a valid port number\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_5c5c00ec","line":1061,"range":{"start_line":1061,"start_character":7,"end_line":1061,"end_character":59},"updated":"2017-03-28 21:36:47.000000000","message":"This looks odd. This patch allows to post -1 as port, but the test expects to get an error message.","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":8674,"name":"Yves-Gwenael Bourhis","email":"ygbourhis@gmail.com","username":"yves"},"change_message_id":"ba84c4a579ead286e2000d314ce6a11c5bf6f94f","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"                    \u0027remote\u0027: \u0027cidr\u0027}"},{"line_number":1059,"context_line":"        res \u003d self.client.post(self.edit_url, formData)"},{"line_number":1060,"context_line":"        self.assertNoMessages()"},{"line_number":1061,"context_line":"        self.assertContains(res, \"Not a valid port number\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_8067a7b7","line":1061,"range":{"start_line":1061,"start_character":7,"end_line":1061,"end_character":59},"in_reply_to":"ffe62b97_5c5c00ec","updated":"2017-03-29 09:24:59.000000000","message":"For nova network as you mentioned earlier.\n\nThis patch does not allow -1 for neutron because neutron rejects -1","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"04f4938e831c40796ab5c791ff2e9fc4afeac0e0","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"                    \u0027remote\u0027: \u0027cidr\u0027}"},{"line_number":1059,"context_line":"        res \u003d self.client.post(self.edit_url, formData)"},{"line_number":1060,"context_line":"        self.assertNoMessages()"},{"line_number":1061,"context_line":"        self.assertContains(res, \"Not a valid port number\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_8758d630","line":1061,"range":{"start_line":1061,"start_character":7,"end_line":1061,"end_character":59},"in_reply_to":"ffe62b97_8067a7b7","updated":"2017-03-30 08:43:24.000000000","message":"sorry I was a bit confused when I wrote this comment.\nAfter I changed the code to accept -1 as a valid value, this test still succeeds :-(  I haven\u0027t investigated the detail but.....","commit_id":"8a1f14a95d3a3f81dbc389d91826d356cf04af99"}]}
