)]}'
{"openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"bea5983828b208facb48ecad80c364b529cf6877","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            security_groups_choices \u003d [(\"\", _(\"No security groups available\"))]"},{"line_number":171,"context_line":"        self.fields[\u0027security_group\u0027].choices \u003d security_groups_choices"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        rules_dict \u003d settings.SECURITY_GROUP_RULES"},{"line_number":174,"context_line":"        common_rules \u003d [(k, _(rules_dict[k][\u0027name\u0027]))"},{"line_number":175,"context_line":"                         for k in rules_dict]"},{"line_number":176,"context_line":"        common_rules.sort()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FbN0%3D","line":173,"updated":"2013-05-09 23:31:39.000000000","message":"getattr(settings, \u0027SECURITY_GROUP_RULES\u0027, {}) to avoid possible exception if settings.py is edited.","commit_id":"b2f8bb04a665a77761d5e83e74f72d0f54fc2548"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"7d843d3d9c1844d895e709a4de57453efe6e046f","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            security_groups_choices \u003d [(\"\", _(\"No security groups available\"))]"},{"line_number":171,"context_line":"        self.fields[\u0027security_group\u0027].choices \u003d security_groups_choices"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        rules_dict \u003d settings.SECURITY_GROUP_RULES"},{"line_number":174,"context_line":"        common_rules \u003d [(k, _(rules_dict[k][\u0027name\u0027]))"},{"line_number":175,"context_line":"                         for k in rules_dict]"},{"line_number":176,"context_line":"        common_rules.sort()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FbGw%3D","line":173,"in_reply_to":"AAAAOn%2F%2FbN0%3D","updated":"2013-05-10 01:30:50.000000000","message":"Done","commit_id":"b2f8bb04a665a77761d5e83e74f72d0f54fc2548"},{"author":{"_account_id":2455,"name":"Tihomir Trifonov","email":"t.trifonov@gmail.com","username":"ttrifonov"},"change_message_id":"409747857f60381c013ca27a938829c31a47a342","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self.fields[\u0027security_group\u0027].choices \u003d security_groups_choices"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        rules_dict \u003d getattr(settings, \u0027SECURITY_GROUP_RULES\u0027, {})"},{"line_number":174,"context_line":"        common_rules \u003d [(k, _(rules_dict[k][\u0027name\u0027]))"},{"line_number":175,"context_line":"                         for k in rules_dict]"},{"line_number":176,"context_line":"        common_rules.sort()"},{"line_number":177,"context_line":"        custom_rules \u003d [(\u0027tcp\u0027, _(\u0027Custom TCP Rule\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2F0IE%3D","line":174,"updated":"2013-05-22 14:13:58.000000000","message":"I think showing the port along with the rule name makes much more sense, something like:\n\n    MYSQL (3306)\n\nBut anyway most of the ports are well-known... Just an idea.\n\nAlso - the rules table can show the template names if created using a template. Here is a simple snippet that can be used as a filter in the rules table:\n\n    def check_rule_template(port):\n        rules_dict \u003d getattr(settings, \u0027SECURITY_GROUP_RULES\u0027, {})\n        if not rules_dict:\n            return port\n        templ_rule \u003d filter(lambda rule: str(port) \u003d\u003d rule[\u0027from_port\u0027]\n                            and str(port) \u003d\u003d rule[\u0027to_port\u0027],\n                            [rule for rule in rules_dict.values()])\n        if templ_rule:\n            return u\"%(from_port)s (%(name)s)\" % templ_rule[0]\n        return port","commit_id":"d94071b11dfb43f314aa66ba37a572904b18979d"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"a83250b43a57d5cb653782bca0a276708f9cf9ba","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self.fields[\u0027security_group\u0027].choices \u003d security_groups_choices"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        rules_dict \u003d getattr(settings, \u0027SECURITY_GROUP_RULES\u0027, {})"},{"line_number":174,"context_line":"        common_rules \u003d [(k, _(rules_dict[k][\u0027name\u0027]))"},{"line_number":175,"context_line":"                         for k in rules_dict]"},{"line_number":176,"context_line":"        common_rules.sort()"},{"line_number":177,"context_line":"        custom_rules \u003d [(\u0027tcp\u0027, _(\u0027Custom TCP Rule\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fx0w%3D","line":174,"in_reply_to":"AAAAPH%2F%2F0IE%3D","updated":"2013-05-23 09:15:42.000000000","message":"Good idea. rules table should show the template names if created using a template. I\u0027ll add it in the next patch, thanks. but IMO, it\u0027s no need to show the port along with the rule name.","commit_id":"d94071b11dfb43f314aa66ba37a572904b18979d"}],"openstack_dashboard/dashboards/project/access_and_security/security_groups/tests.py":[{"author":{"_account_id":2455,"name":"Tihomir Trifonov","email":"t.trifonov@gmail.com","username":"ttrifonov"},"change_message_id":"409747857f60381c013ca27a938829c31a47a342","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        sec_group_list \u003d self.security_groups.list()"},{"line_number":157,"context_line":"        rule \u003d self.security_group_rules.first()"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        rule.ip_protocol \u003d \u0027tcp\u0027"},{"line_number":160,"context_line":"        rule.from_port \u003d 22"},{"line_number":161,"context_line":"        rule.to_port \u003d 22"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2F0JE%3D","line":159,"updated":"2013-05-22 14:13:58.000000000","message":"It is not a good idea to modify the data elements in tests. Add a new rule in nova_data.py instead.","commit_id":"d94071b11dfb43f314aa66ba37a572904b18979d"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"a83250b43a57d5cb653782bca0a276708f9cf9ba","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        sec_group_list \u003d self.security_groups.list()"},{"line_number":157,"context_line":"        rule \u003d self.security_group_rules.first()"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        rule.ip_protocol \u003d \u0027tcp\u0027"},{"line_number":160,"context_line":"        rule.from_port \u003d 22"},{"line_number":161,"context_line":"        rule.to_port \u003d 22"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FyFs%3D","line":159,"in_reply_to":"AAAAPH%2F%2F0JE%3D","updated":"2013-05-23 09:15:42.000000000","message":"Okay, I\u0027ll change \u0027ssh\u0027 rule template to \u0027http\u0027  so that there is no need to add new rule in nova_data.py.","commit_id":"d94071b11dfb43f314aa66ba37a572904b18979d"},{"author":{"_account_id":2455,"name":"Tihomir Trifonov","email":"t.trifonov@gmail.com","username":"ttrifonov"},"change_message_id":"409747857f60381c013ca27a938829c31a47a342","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        rule.from_port \u003d 22"},{"line_number":161,"context_line":"        rule.to_port \u003d 22"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        self.mox.StubOutWithMock(api.nova, \u0027security_group_rule_create\u0027)"},{"line_number":164,"context_line":"        self.mox.StubOutWithMock(api.nova, \u0027security_group_list\u0027)"},{"line_number":165,"context_line":"        api.nova.security_group_rule_create(IsA(http.HttpRequest),"},{"line_number":166,"context_line":"                                            sec_group.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2F0Iw%3D","line":163,"updated":"2013-05-22 14:13:58.000000000","message":"Please move the stub declaration to @test decorator.","commit_id":"d94071b11dfb43f314aa66ba37a572904b18979d"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"a83250b43a57d5cb653782bca0a276708f9cf9ba","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        rule.from_port \u003d 22"},{"line_number":161,"context_line":"        rule.to_port \u003d 22"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        self.mox.StubOutWithMock(api.nova, \u0027security_group_rule_create\u0027)"},{"line_number":164,"context_line":"        self.mox.StubOutWithMock(api.nova, \u0027security_group_list\u0027)"},{"line_number":165,"context_line":"        api.nova.security_group_rule_create(IsA(http.HttpRequest),"},{"line_number":166,"context_line":"                                            sec_group.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FyD8%3D","line":163,"in_reply_to":"AAAAPH%2F%2F0Iw%3D","updated":"2013-05-23 09:15:42.000000000","message":"just like other tests in this class.","commit_id":"d94071b11dfb43f314aa66ba37a572904b18979d"},{"author":{"_account_id":2455,"name":"Tihomir Trifonov","email":"t.trifonov@gmail.com","username":"ttrifonov"},"change_message_id":"409747857f60381c013ca27a938829c31a47a342","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                    \u0027cidr\u0027: rule.ip_range[\u0027cidr\u0027],"},{"line_number":181,"context_line":"                    \u0027source\u0027: \u0027cidr\u0027}"},{"line_number":182,"context_line":"        res \u003d self.client.post(self.edit_url, formData)"},{"line_number":183,"context_line":"        self.assertRedirectsNoFollow(res, self.detail_url)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def test_detail_add_rule_self_as_source_group(self):"},{"line_number":186,"context_line":"        sec_group \u003d self.security_groups.first()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2F0Ic%3D","line":183,"updated":"2013-05-22 14:13:58.000000000","message":"A simple redirection assert doesn\u0027t test too much. A check like\n\n    self.assertContains(res, \"NEW_RULE_IN_TABLE\") \n\nis much better. It is always good to test the data in the response html.","commit_id":"d94071b11dfb43f314aa66ba37a572904b18979d"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"a83250b43a57d5cb653782bca0a276708f9cf9ba","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                    \u0027cidr\u0027: rule.ip_range[\u0027cidr\u0027],"},{"line_number":181,"context_line":"                    \u0027source\u0027: \u0027cidr\u0027}"},{"line_number":182,"context_line":"        res \u003d self.client.post(self.edit_url, formData)"},{"line_number":183,"context_line":"        self.assertRedirectsNoFollow(res, self.detail_url)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def test_detail_add_rule_self_as_source_group(self):"},{"line_number":186,"context_line":"        sec_group \u003d self.security_groups.first()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FyDg%3D","line":183,"in_reply_to":"AAAAPH%2F%2F0Ic%3D","updated":"2013-05-23 09:15:42.000000000","message":"IMO?a redirection to the success_url here is enouth. stub declaration above have already checked the return.","commit_id":"d94071b11dfb43f314aa66ba37a572904b18979d"}],"openstack_dashboard/settings.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2eea464ff74e05c6c1f36a2501e780c95c5f45e0","unresolved":false,"context_lines":[{"line_number":172,"context_line":"USE_I18N \u003d True"},{"line_number":173,"context_line":"USE_L10N \u003d True"},{"line_number":174,"context_line":"USE_TZ \u003d True"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"SECURITY_GROUP_RULES \u003d {"},{"line_number":177,"context_line":"    \u0027all_tcp\u0027: {"},{"line_number":178,"context_line":"        \u0027name\u0027: \u0027ALL TCP\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FbMo%3D","line":175,"updated":"2013-05-09 23:41:46.000000000","message":"This configuration depends on the operator cloud setup, it fits more in local_settings.py.","commit_id":"b2f8bb04a665a77761d5e83e74f72d0f54fc2548"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"7d843d3d9c1844d895e709a4de57453efe6e046f","unresolved":false,"context_lines":[{"line_number":172,"context_line":"USE_I18N \u003d True"},{"line_number":173,"context_line":"USE_L10N \u003d True"},{"line_number":174,"context_line":"USE_TZ \u003d True"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"SECURITY_GROUP_RULES \u003d {"},{"line_number":177,"context_line":"    \u0027all_tcp\u0027: {"},{"line_number":178,"context_line":"        \u0027name\u0027: \u0027ALL TCP\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FbFk%3D","line":175,"in_reply_to":"AAAAOn%2F%2FbMo%3D","updated":"2013-05-10 01:30:50.000000000","message":"ok, i will move it to local_settings.py","commit_id":"b2f8bb04a665a77761d5e83e74f72d0f54fc2548"}],"openstack_dashboard/test/settings.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"c06b563fa688ce133eb7d58d4598d5823617b0cd","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \u0027handlers\u0027: [\u0027test\u0027],"},{"line_number":91,"context_line":"    \u0027propagate\u0027: False,"},{"line_number":92,"context_line":"}"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"SECURITY_GROUP_RULES \u003d {"},{"line_number":95,"context_line":"    \u0027all_tcp\u0027: {"},{"line_number":96,"context_line":"        \u0027name\u0027: \u0027ALL TCP\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FbMI%3D","line":93,"updated":"2013-05-09 23:43:01.000000000","message":"Probably don\u0027t need to put an exhaustive list here.","commit_id":"b2f8bb04a665a77761d5e83e74f72d0f54fc2548"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"7d843d3d9c1844d895e709a4de57453efe6e046f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \u0027handlers\u0027: [\u0027test\u0027],"},{"line_number":91,"context_line":"    \u0027propagate\u0027: False,"},{"line_number":92,"context_line":"}"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"SECURITY_GROUP_RULES \u003d {"},{"line_number":95,"context_line":"    \u0027all_tcp\u0027: {"},{"line_number":96,"context_line":"        \u0027name\u0027: \u0027ALL TCP\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FbHA%3D","line":93,"in_reply_to":"AAAAOn%2F%2FbMI%3D","updated":"2013-05-10 01:30:50.000000000","message":"yes, actually it just for unit tests, don\u0027t need so exhaunstive.","commit_id":"b2f8bb04a665a77761d5e83e74f72d0f54fc2548"}]}
