)]}'
{"openstack/network/v2/router.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f15484eea5a7ddb06bdaa8f87ce06fd2b5409be0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    #: *Type: list of availability zone names*"},{"line_number":37,"context_line":"    availability_zones \u003d resource.prop(\u0027availability_zones\u0027)"},{"line_number":38,"context_line":"    #: Timestamp when the router was created."},{"line_number":39,"context_line":"    created_at \u003d resource.prop(\u0027created_at\u0027)"},{"line_number":40,"context_line":"    #: The router description."},{"line_number":41,"context_line":"    description \u003d resource.prop(\u0027description\u0027)"},{"line_number":42,"context_line":"    #: The ``network_id``, for the external gateway. *Type: dict*"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_79a711bd","side":"PARENT","line":39,"updated":"2016-12-10 13:59:09.000000000","message":"Please add back.","commit_id":"00526ee1a7a42ae4ad129ad1b736e0dffed3e665"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"812fb27e2210999e0e65d05a72793f3fba6257f6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    #: *Type: list of availability zone names*"},{"line_number":37,"context_line":"    availability_zones \u003d resource.prop(\u0027availability_zones\u0027)"},{"line_number":38,"context_line":"    #: Timestamp when the router was created."},{"line_number":39,"context_line":"    created_at \u003d resource.prop(\u0027created_at\u0027)"},{"line_number":40,"context_line":"    #: The router description."},{"line_number":41,"context_line":"    description \u003d resource.prop(\u0027description\u0027)"},{"line_number":42,"context_line":"    #: The ``network_id``, for the external gateway. *Type: dict*"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_f9c88157","side":"PARENT","line":39,"in_reply_to":"3a71b18c_79a711bd","updated":"2016-12-10 14:16:48.000000000","message":"done.","commit_id":"00526ee1a7a42ae4ad129ad1b736e0dffed3e665"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f220d3566ce6b08dd0ec701586239329c823a383","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    #: The router status."},{"line_number":62,"context_line":"    status \u003d resource.prop(\u0027status\u0027)"},{"line_number":63,"context_line":"    #: Timestamp when the router was last updated."},{"line_number":64,"context_line":"    updated_at \u003d resource.prop(\u0027updated_at\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def add_interface(self, session, **body):"},{"line_number":67,"context_line":"        \"\"\"Add an internal interface to a logical router."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_997f8d16","side":"PARENT","line":64,"updated":"2016-12-10 13:59:31.000000000","message":"Please add back.","commit_id":"00526ee1a7a42ae4ad129ad1b736e0dffed3e665"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"812fb27e2210999e0e65d05a72793f3fba6257f6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    #: The router status."},{"line_number":62,"context_line":"    status \u003d resource.prop(\u0027status\u0027)"},{"line_number":63,"context_line":"    #: Timestamp when the router was last updated."},{"line_number":64,"context_line":"    updated_at \u003d resource.prop(\u0027updated_at\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def add_interface(self, session, **body):"},{"line_number":67,"context_line":"        \"\"\"Add an internal interface to a logical router."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_b9b289e3","side":"PARENT","line":64,"in_reply_to":"3a71b18c_997f8d16","updated":"2016-12-10 14:16:48.000000000","message":"done.","commit_id":"00526ee1a7a42ae4ad129ad1b736e0dffed3e665"}],"openstack/network/v2/security_group.py":[{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"0c5e45876244f5e2a1efbea95f671742a11432bf","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def __init__(self, synchronized\u003dFalse, **attrs):"},{"line_number":51,"context_line":"        super(SecurityGroup, self).__init__(synchronized, **attrs)"},{"line_number":52,"context_line":"        # Convert any raw rules to SecurityGroupRule objects."},{"line_number":53,"context_line":"        # TODO(Qiming): The following logic doesn\u0027t work due to the serializer"},{"line_number":54,"context_line":"        #               logic in base class that converts the rule into a"},{"line_number":55,"context_line":"        #               dict."},{"line_number":56,"context_line":"        # if self.security_group_rules:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_19ff16ab","line":53,"updated":"2016-12-09 16:55:04.000000000","message":"Is this going to be necessary at all? I think this was in-place back when the security_group_rules prop/Body would have had type\u003dSecurityGroupRule, but now that we don\u0027t have it I think we can maybe even get rid of this __init__ entirely, right?","commit_id":"3d50980e324ec961764287a9a12f5a42b406d2f0"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"91028ebc4a7aff81279ae8d17fa156e41d68e72d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def __init__(self, synchronized\u003dFalse, **attrs):"},{"line_number":51,"context_line":"        super(SecurityGroup, self).__init__(synchronized, **attrs)"},{"line_number":52,"context_line":"        # Convert any raw rules to SecurityGroupRule objects."},{"line_number":53,"context_line":"        # TODO(Qiming): The following logic doesn\u0027t work due to the serializer"},{"line_number":54,"context_line":"        #               logic in base class that converts the rule into a"},{"line_number":55,"context_line":"        #               dict."},{"line_number":56,"context_line":"        # if self.security_group_rules:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_0115cde3","line":53,"in_reply_to":"3a71b18c_19ff16ab","updated":"2016-12-10 00:58:48.000000000","message":"yes, time to remove this.","commit_id":"3d50980e324ec961764287a9a12f5a42b406d2f0"}],"openstack/network/v2/security_group_rule.py":[{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"0c5e45876244f5e2a1efbea95f671742a11432bf","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    #: The security group ID to associate with this security group rule."},{"line_number":70,"context_line":"    security_group_id \u003d resource.prop(\u0027security_group_id\u0027)"},{"line_number":71,"context_line":"    #: Timestamp when the security group rule was last updated."},{"line_number":72,"context_line":"    updated_at \u003d resource.prop(\u0027updated_at\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_7cb478f1","side":"PARENT","line":72,"updated":"2016-12-09 16:55:04.000000000","message":"Do you happen to know if these timestamps (including created_at) are no longer a part of a real response or if they\u0027re just not documented as such? I think a lot of the times we\u0027ve added timestamps when they\u0027re not documented because whoever added the resource saw them in their test responses from a real devstack/other cloud.\n\nThis also applies to router and security_group as well.","commit_id":"48fe4166e994962a2b68b5ce4e524f88aab2e66b"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"1127f27639819879d2b6a0f03dd18cdad9e42c5f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    #: The security group ID to associate with this security group rule."},{"line_number":70,"context_line":"    security_group_id \u003d resource.prop(\u0027security_group_id\u0027)"},{"line_number":71,"context_line":"    #: Timestamp when the security group rule was last updated."},{"line_number":72,"context_line":"    updated_at \u003d resource.prop(\u0027updated_at\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_bf551051","side":"PARENT","line":72,"in_reply_to":"3a71b18c_01feadad","updated":"2016-12-10 03:52:14.000000000","message":"double checked the source code. Both SecurityGroup and SecurityGroupRule share the standard_attr.HasStandardAttributes parent class which means they all bear \u0027created_at\u0027 and \u0027updated_at\u0027 now.\nThis is contradictary to my old version and the api-ref doc.\nI don\u0027t mind add them back.","commit_id":"48fe4166e994962a2b68b5ce4e524f88aab2e66b"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"91028ebc4a7aff81279ae8d17fa156e41d68e72d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    #: The security group ID to associate with this security group rule."},{"line_number":70,"context_line":"    security_group_id \u003d resource.prop(\u0027security_group_id\u0027)"},{"line_number":71,"context_line":"    #: Timestamp when the security group rule was last updated."},{"line_number":72,"context_line":"    updated_at \u003d resource.prop(\u0027updated_at\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_01feadad","side":"PARENT","line":72,"in_reply_to":"3a71b18c_5cca5c1b","updated":"2016-12-10 00:58:48.000000000","message":"they are not documented in the api docs, they are not shown in my test either, so I think they are safe to be removed.","commit_id":"48fe4166e994962a2b68b5ce4e524f88aab2e66b"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"99ccc2763c3c7ca1fcfd2525802d81a3ed1e16ac","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    #: The security group ID to associate with this security group rule."},{"line_number":70,"context_line":"    security_group_id \u003d resource.prop(\u0027security_group_id\u0027)"},{"line_number":71,"context_line":"    #: Timestamp when the security group rule was last updated."},{"line_number":72,"context_line":"    updated_at \u003d resource.prop(\u0027updated_at\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_5cca5c1b","side":"PARENT","line":72,"in_reply_to":"3a71b18c_7cb478f1","updated":"2016-12-09 16:58:21.000000000","message":"These are new in Newton for many of the resource. and should be kept.  Why are they being removed?","commit_id":"48fe4166e994962a2b68b5ce4e524f88aab2e66b"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"42c34f0832f121b09e50d0913fbe0842afefc8ef","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    direction \u003d resource.Body(\u0027direction\u0027)"},{"line_number":44,"context_line":"    #: Must be IPv4 or IPv6, and addresses represented in CIDR must match"},{"line_number":45,"context_line":"    #: the ingress or egress rules."},{"line_number":46,"context_line":"    ethertype \u003d resource.Body(\u0027ethertype\u0027)"},{"line_number":47,"context_line":"    #: The maximum port number in the range that is matched by the"},{"line_number":48,"context_line":"    #: security group rule. The port_range_min attribute constrains"},{"line_number":49,"context_line":"    #: the port_range_max attribute. If the protocol is ICMP, this"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_fc2088f9","line":46,"updated":"2016-12-09 16:56:53.000000000","message":"Should this be ether_type? I noticed in the #4 change you modified something from metainfo to meta_info, which I think is fine.","commit_id":"3d50980e324ec961764287a9a12f5a42b406d2f0"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"91028ebc4a7aff81279ae8d17fa156e41d68e72d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    direction \u003d resource.Body(\u0027direction\u0027)"},{"line_number":44,"context_line":"    #: Must be IPv4 or IPv6, and addresses represented in CIDR must match"},{"line_number":45,"context_line":"    #: the ingress or egress rules."},{"line_number":46,"context_line":"    ethertype \u003d resource.Body(\u0027ethertype\u0027)"},{"line_number":47,"context_line":"    #: The maximum port number in the range that is matched by the"},{"line_number":48,"context_line":"    #: security group rule. The port_range_min attribute constrains"},{"line_number":49,"context_line":"    #: the port_range_max attribute. If the protocol is ICMP, this"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_6123e158","line":46,"in_reply_to":"3a71b18c_fc2088f9","updated":"2016-12-10 00:58:48.000000000","message":"good suggestion, will do.","commit_id":"3d50980e324ec961764287a9a12f5a42b406d2f0"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f15484eea5a7ddb06bdaa8f87ce06fd2b5409be0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    direction \u003d resource.Body(\u0027direction\u0027)"},{"line_number":46,"context_line":"    #: Must be IPv4 or IPv6, and addresses represented in CIDR must match"},{"line_number":47,"context_line":"    #: the ingress or egress rules."},{"line_number":48,"context_line":"    ether_type \u003d resource.Body(\u0027ethertype\u0027)"},{"line_number":49,"context_line":"    #: The maximum port number in the range that is matched by the"},{"line_number":50,"context_line":"    #: security group rule. The port_range_min attribute constrains"},{"line_number":51,"context_line":"    #: the port_range_max attribute. If the protocol is ICMP, this"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_d996654b","line":48,"updated":"2016-12-10 13:59:09.000000000","message":"Why change this?","commit_id":"10da741fca985817c5549ba4efc7e506ec4bd464"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"812fb27e2210999e0e65d05a72793f3fba6257f6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    direction \u003d resource.Body(\u0027direction\u0027)"},{"line_number":46,"context_line":"    #: Must be IPv4 or IPv6, and addresses represented in CIDR must match"},{"line_number":47,"context_line":"    #: the ingress or egress rules."},{"line_number":48,"context_line":"    ether_type \u003d resource.Body(\u0027ethertype\u0027)"},{"line_number":49,"context_line":"    #: The maximum port number in the range that is matched by the"},{"line_number":50,"context_line":"    #: security group rule. The port_range_min attribute constrains"},{"line_number":51,"context_line":"    #: the port_range_max attribute. If the protocol is ICMP, this"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_99e4ede0","line":48,"in_reply_to":"3a71b18c_d996654b","updated":"2016-12-10 14:16:48.000000000","message":"ethertype is not a word...","commit_id":"10da741fca985817c5549ba4efc7e506ec4bd464"}]}
