)]}'
{"nova/tests/api/openstack/contrib/test_security_groups.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f09d8369b71a07aea08c8b09a222abe31f3d951b","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class AttrDict(dict):"},{"line_number":34,"context_line":"    def __init__(self, **kwargs):"},{"line_number":35,"context_line":"        super(AttrDict, self).__init__(**kwargs)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __getattr__(self, k):"},{"line_number":38,"context_line":"        return self[k]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F5AU%3D","line":35,"updated":"2011-11-02 20:49:00.000000000","message":"I don\u0027t think you need __init__() here at all.  Won\u0027t break anything, but...","commit_id":"0a076cb482983fc1747a45b44ea95430f24b2f83"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f09d8369b71a07aea08c8b09a222abe31f3d951b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        attrs[\u0027id\u0027] \u003d id"},{"line_number":55,"context_line":"    attrs.setdefault(\u0027rules\u0027, [])"},{"line_number":56,"context_line":"    attrs.setdefault(\u0027instances\u0027, [])"},{"line_number":57,"context_line":"    return AttrDict(**attrs)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def security_group_rule_template(**kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F5AQ%3D","line":57,"updated":"2011-11-02 20:49:00.000000000","message":"If you remove AttrDict.__init__(), I think you can use \"AttrDict(attrs)\" here instead of having to use **.","commit_id":"0a076cb482983fc1747a45b44ea95430f24b2f83"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f09d8369b71a07aea08c8b09a222abe31f3d951b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    attrs \u003d rule.copy()"},{"line_number":71,"context_line":"    if \u0027ip_protocol\u0027 in attrs:"},{"line_number":72,"context_line":"        attrs[\u0027protocol\u0027] \u003d attrs.pop(\u0027ip_protocol\u0027)"},{"line_number":73,"context_line":"    return AttrDict(**attrs)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def return_server(context, server_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F5AM%3D","line":73,"updated":"2011-11-02 20:49:00.000000000","message":"Ibid.","commit_id":"0a076cb482983fc1747a45b44ea95430f24b2f83"}]}
