)]}'
{"openstack_dashboard/api/vpn.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f9b5feb5261290b75b2b8b7e0f5f0e2ebd94d340","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d []"},{"line_number":53,"context_line":"            for c in conns:"},{"line_number":54,"context_line":"                if c.ikepolicy_id \u003d\u003d self.id:"},{"line_number":55,"context_line":"                    pFormatted[\u0027ipsecsiteconns\u0027].append(c.id)"},{"line_number":56,"context_line":"        except Exception:"},{"line_number":57,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d None"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BA6s%3D","line":55,"updated":"2013-12-03 13:34:21.000000000","message":"I prefer to the following:\n\n  pFormatted[\u0027ipsecsiteconns\u0027] \u003d [c.id for c in conns if c.ikepolicy_id \u003d\u003d self.id]","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8ef0099148cf6c61b3d3ffd1db40298774399778","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d []"},{"line_number":53,"context_line":"            for c in conns:"},{"line_number":54,"context_line":"                if c.ikepolicy_id \u003d\u003d self.id:"},{"line_number":55,"context_line":"                    pFormatted[\u0027ipsecsiteconns\u0027].append(c.id)"},{"line_number":56,"context_line":"        except Exception:"},{"line_number":57,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d None"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F976E%3D","line":55,"in_reply_to":"AAAATn%2F%2BA6s%3D","updated":"2013-12-04 09:57:30.000000000","message":"Done","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f9b5feb5261290b75b2b8b7e0f5f0e2ebd94d340","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d []"},{"line_number":87,"context_line":"            for c in conns:"},{"line_number":88,"context_line":"                if c.ipsecpolicy_id \u003d\u003d self.id:"},{"line_number":89,"context_line":"                    pFormatted[\u0027ipsecsiteconns\u0027].append(c.id)"},{"line_number":90,"context_line":"        except Exception:"},{"line_number":91,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d None"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BA6k%3D","line":89,"updated":"2013-12-03 13:34:21.000000000","message":"Same as the above.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8ef0099148cf6c61b3d3ffd1db40298774399778","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d []"},{"line_number":87,"context_line":"            for c in conns:"},{"line_number":88,"context_line":"                if c.ipsecpolicy_id \u003d\u003d self.id:"},{"line_number":89,"context_line":"                    pFormatted[\u0027ipsecsiteconns\u0027].append(c.id)"},{"line_number":90,"context_line":"        except Exception:"},{"line_number":91,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d None"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F973w%3D","line":89,"in_reply_to":"AAAATn%2F%2BA6k%3D","updated":"2013-12-04 09:57:30.000000000","message":"Done","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f9b5feb5261290b75b2b8b7e0f5f0e2ebd94d340","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            sFormatted[\u0027ipsecsiteconns\u0027] \u003d []"},{"line_number":183,"context_line":"            for c in conns:"},{"line_number":184,"context_line":"                if c.vpnservice_id \u003d\u003d self.id:"},{"line_number":185,"context_line":"                    sFormatted[\u0027ipsecsiteconns\u0027].append(c.id)"},{"line_number":186,"context_line":"        except Exception:"},{"line_number":187,"context_line":"            sFormatted[\u0027ipsecsiteconns\u0027] \u003d None"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BA6g%3D","line":185,"updated":"2013-12-03 13:34:21.000000000","message":"Same as the above.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8ef0099148cf6c61b3d3ffd1db40298774399778","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            sFormatted[\u0027ipsecsiteconns\u0027] \u003d []"},{"line_number":183,"context_line":"            for c in conns:"},{"line_number":184,"context_line":"                if c.vpnservice_id \u003d\u003d self.id:"},{"line_number":185,"context_line":"                    sFormatted[\u0027ipsecsiteconns\u0027].append(c.id)"},{"line_number":186,"context_line":"        except Exception:"},{"line_number":187,"context_line":"            sFormatted[\u0027ipsecsiteconns\u0027] \u003d None"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F973Q%3D","line":185,"in_reply_to":"AAAATn%2F%2BA6g%3D","updated":"2013-12-04 09:57:30.000000000","message":"Done","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":2455,"name":"Tihomir Trifonov","email":"t.trifonov@gmail.com","username":"ttrifonov"},"change_message_id":"67ef8dd42d1d2b83c1d1f4b1d6bc9636004b33b2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def __init__(self, apiresource):"},{"line_number":65,"context_line":"        super(IPSecPolicy, self).__init__(apiresource)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    class AttributeDict(dict):"},{"line_number":68,"context_line":"        def __getattr__(self, attr):"},{"line_number":69,"context_line":"            return self[attr]"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F51Y%3D","line":67,"updated":"2013-12-27 13:17:32.000000000","message":"Why do we need this duplicated class here? Why not moving it on module level?","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"51ab59e950138f29621af2cf6386b15708e13851","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def __init__(self, apiresource):"},{"line_number":65,"context_line":"        super(IPSecPolicy, self).__init__(apiresource)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    class AttributeDict(dict):"},{"line_number":68,"context_line":"        def __getattr__(self, attr):"},{"line_number":69,"context_line":"            return self[attr]"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzU4%3D","line":67,"in_reply_to":"AAAAT3%2F%2F51Y%3D","updated":"2013-12-31 07:35:08.000000000","message":"You are right, it is not needed here. Moreover, it should go to horizon.utils, because it is used not only in this class but in some classes below and in module lbaas.py. This cleanup will definitely result in less redundant code, which is good. However this patch set is not about cleaning up and doing two different things in one patch set doesn\u0027t look like a good idea to me. So after some hard thoughts I decided to leave it as is for now and do refactoring in separate patch set. If I\u0027m missing something please point that out.","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":2455,"name":"Tihomir Trifonov","email":"t.trifonov@gmail.com","username":"ttrifonov"},"change_message_id":"67ef8dd42d1d2b83c1d1f4b1d6bc9636004b33b2","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    def __init__(self, apiresource):"},{"line_number":97,"context_line":"        super(IPSecSiteConnection, self).__init__(apiresource)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    class AttributeDict(dict):"},{"line_number":100,"context_line":"        def __getattr__(self, attr):"},{"line_number":101,"context_line":"            return self[attr]"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F51U%3D","line":99,"updated":"2013-12-27 13:17:32.000000000","message":"The same? Is this just a copy-pasted code?","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"51ab59e950138f29621af2cf6386b15708e13851","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    def __init__(self, apiresource):"},{"line_number":97,"context_line":"        super(IPSecSiteConnection, self).__init__(apiresource)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    class AttributeDict(dict):"},{"line_number":100,"context_line":"        def __getattr__(self, attr):"},{"line_number":101,"context_line":"            return self[attr]"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzUw%3D","line":99,"in_reply_to":"AAAAT3%2F%2F51U%3D","updated":"2013-12-31 07:35:08.000000000","message":"Please refer to my answer at L#67.","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":6966,"name":"Jeffrey J. Walls","email":"jeff.walls@hpe.com","username":"ftcjeff"},"change_message_id":"00ed0cb6d72820f6262b390cefce5078c7d0b9bf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d [c.id for c in conns"},{"line_number":53,"context_line":"                                            if c.ikepolicy_id \u003d\u003d self.id]"},{"line_number":54,"context_line":"        except Exception:"},{"line_number":55,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d None"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        return self.AttributeDict(pFormatted)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FmX0%3D","line":55,"updated":"2014-01-10 16:16:25.000000000","message":"I won\u0027t -1 it, but it\u0027s handy to log exceptions so that there\u0027s detail as to why things fail.  Not everyone agrees with this, but it has saved me more times than I can count.  \n\nexcept Exception as e:\n    LOG.debug(\u0027Exception caught while \u003cxxx\u003e: %s\u0027 % e)","commit_id":"ae4cae1342c824ee9f0019b0797dfe4ad2081745"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"0f91940a7ca1034579ce8e7ccad45ce18135d98e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d [c.id for c in conns"},{"line_number":53,"context_line":"                                            if c.ikepolicy_id \u003d\u003d self.id]"},{"line_number":54,"context_line":"        except Exception:"},{"line_number":55,"context_line":"            pFormatted[\u0027ipsecsiteconns\u0027] \u003d None"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        return self.AttributeDict(pFormatted)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FiTI%3D","line":55,"in_reply_to":"AAAAUH%2F%2FmX0%3D","updated":"2014-01-12 08:02:33.000000000","message":"Agreed. I will keep it in mind in my next patch set where I\u0027m going to move all \u0027AttributeDict\u0027 classes and \u0027readable\u0027 methods.","commit_id":"ae4cae1342c824ee9f0019b0797dfe4ad2081745"}],"openstack_dashboard/dashboards/project/vpn/tables.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e50869b73b9f9204cc7151584963f6ff8604b2e5","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":76,"context_line":"        if datum and datum.ipsecsiteconns:"},{"line_number":77,"context_line":"                return False"},{"line_number":78,"context_line":"        return True"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F9M8%3D","line":77,"updated":"2014-01-06 08:40:46.000000000","message":"Too many indent","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"0a0513a491ab5bbc28c05f7b3b2a3cfdc5acd20e","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":76,"context_line":"        if datum and datum.ipsecsiteconns:"},{"line_number":77,"context_line":"                return False"},{"line_number":78,"context_line":"        return True"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FtQ0%3D","line":77,"in_reply_to":"AAAAUH%2F%2F9M8%3D","updated":"2014-01-09 12:19:45.000000000","message":"Thanks! Didn\u0027t notice.","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e50869b73b9f9204cc7151584963f6ff8604b2e5","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":89,"context_line":"        if datum and datum.ipsecsiteconns:"},{"line_number":90,"context_line":"                return False"},{"line_number":91,"context_line":"        return True"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F9M4%3D","line":90,"updated":"2014-01-06 08:40:46.000000000","message":"Too many indent","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"0a0513a491ab5bbc28c05f7b3b2a3cfdc5acd20e","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":89,"context_line":"        if datum and datum.ipsecsiteconns:"},{"line_number":90,"context_line":"                return False"},{"line_number":91,"context_line":"        return True"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FtQw%3D","line":90,"in_reply_to":"AAAAUH%2F%2F9M4%3D","updated":"2014-01-09 12:19:45.000000000","message":"Done","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"}],"openstack_dashboard/dashboards/project/vpn/tabs.py":[{"author":{"_account_id":8674,"name":"Yves-Gwenael Bourhis","email":"ygbourhis@gmail.com","username":"yves"},"change_message_id":"3a91acbba61755843f0d2639b7e89f61bb5f8507","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        try:"},{"line_number":98,"context_line":"            ikepolicies \u003d api.vpn.ikepolicies_get("},{"line_number":99,"context_line":"                self.tab_group.request)"},{"line_number":100,"context_line":"            ikepoliciesFormatted \u003d [s.readable(self.tab_group.request)"},{"line_number":101,"context_line":"                for s in ikepolicies]"},{"line_number":102,"context_line":"        except Exception:"},{"line_number":103,"context_line":"            ikepoliciesFormatted \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Be5U%3D","line":100,"updated":"2013-11-25 16:19:57.000000000","message":"We already have mixedCase variables and as per PEP8 states : \"mixedCase is allowed only in contexts where that\u0027s already the prevailing style\".\nHowever we should move toward a standard of not using mixed case in the future.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d9e128d96f2320328b61b65b0c3cc3471fd8cb26","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        try:"},{"line_number":98,"context_line":"            ikepolicies \u003d api.vpn.ikepolicies_get("},{"line_number":99,"context_line":"                self.tab_group.request)"},{"line_number":100,"context_line":"            ikepoliciesFormatted \u003d [s.readable(self.tab_group.request)"},{"line_number":101,"context_line":"                for s in ikepolicies]"},{"line_number":102,"context_line":"        except Exception:"},{"line_number":103,"context_line":"            ikepoliciesFormatted \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BUTM%3D","line":100,"in_reply_to":"AAAATn%2F%2BYxs%3D","updated":"2013-11-27 13:20:58.000000000","message":"Thank you. If I may help you in your plans about removing \"readable\" methods, let me know.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47d51f55236184e0543964f7c51ff7c903f0cd7b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        try:"},{"line_number":98,"context_line":"            ikepolicies \u003d api.vpn.ikepolicies_get("},{"line_number":99,"context_line":"                self.tab_group.request)"},{"line_number":100,"context_line":"            ikepoliciesFormatted \u003d [s.readable(self.tab_group.request)"},{"line_number":101,"context_line":"                for s in ikepolicies]"},{"line_number":102,"context_line":"        except Exception:"},{"line_number":103,"context_line":"            ikepoliciesFormatted \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BYxs%3D","line":100,"in_reply_to":"AAAATn%2F%2BbGc%3D","updated":"2013-11-26 16:43:32.000000000","message":"Agree. Let\u0027s fix later. In addition, readable method looks unnecessary and it is only used in LBaaS and VPNaaS code. I have a plan to remove it.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"56e9db18799db9843eba2c739659eba5f54d0f04","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        try:"},{"line_number":98,"context_line":"            ikepolicies \u003d api.vpn.ikepolicies_get("},{"line_number":99,"context_line":"                self.tab_group.request)"},{"line_number":100,"context_line":"            ikepoliciesFormatted \u003d [s.readable(self.tab_group.request)"},{"line_number":101,"context_line":"                for s in ikepolicies]"},{"line_number":102,"context_line":"        except Exception:"},{"line_number":103,"context_line":"            ikepoliciesFormatted \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BbGc%3D","line":100,"in_reply_to":"AAAATn%2F%2Be5U%3D","updated":"2013-11-26 09:17:59.000000000","message":"I got your point. Moreover I agree that Horizon needs a few more standards to follow. But we have this kind of mixedCase (I mean variables \"somethingFormatted\") not only here, but in some another places. I think it would be better to fix all these cases in separate patch set.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":8674,"name":"Yves-Gwenael Bourhis","email":"ygbourhis@gmail.com","username":"yves"},"change_message_id":"3a91acbba61755843f0d2639b7e89f61bb5f8507","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            ipsecpolicies \u003d api.vpn.ipsecpolicies_get("},{"line_number":118,"context_line":"                self.tab_group.request)"},{"line_number":119,"context_line":"            ipsecpoliciesFormatted \u003d [s.readable(self.tab_group.request)"},{"line_number":120,"context_line":"                for s in ipsecpolicies]"},{"line_number":121,"context_line":"        except Exception:"},{"line_number":122,"context_line":"            ipsecpoliciesFormatted \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Be5A%3D","line":119,"updated":"2013-11-25 16:19:57.000000000","message":"Same as above.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e50869b73b9f9204cc7151584963f6ff8604b2e5","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            ikepolicies \u003d api.vpn.ikepolicy_list("},{"line_number":102,"context_line":"                self.tab_group.request, tenant_id\u003dtenant_id)"},{"line_number":103,"context_line":"            ikepoliciesFormatted \u003d [s.readable(self.tab_group.request)"},{"line_number":104,"context_line":"                for s in ikepolicies]"},{"line_number":105,"context_line":"        except Exception:"},{"line_number":106,"context_line":"            ikepoliciesFormatted \u003d []"},{"line_number":107,"context_line":"            exceptions.handle(self.tab_group.request,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F9Mo%3D","line":104,"updated":"2014-01-06 08:40:46.000000000","message":"It is better to align the indent level to \"s.readable\".","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"0a0513a491ab5bbc28c05f7b3b2a3cfdc5acd20e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            ikepolicies \u003d api.vpn.ikepolicy_list("},{"line_number":102,"context_line":"                self.tab_group.request, tenant_id\u003dtenant_id)"},{"line_number":103,"context_line":"            ikepoliciesFormatted \u003d [s.readable(self.tab_group.request)"},{"line_number":104,"context_line":"                for s in ikepolicies]"},{"line_number":105,"context_line":"        except Exception:"},{"line_number":106,"context_line":"            ikepoliciesFormatted \u003d []"},{"line_number":107,"context_line":"            exceptions.handle(self.tab_group.request,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FtQk%3D","line":104,"in_reply_to":"AAAAUH%2F%2F9Mo%3D","updated":"2014-01-09 12:19:45.000000000","message":"Done","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e50869b73b9f9204cc7151584963f6ff8604b2e5","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            ipsecpolicies \u003d api.vpn.ipsecpolicy_list("},{"line_number":122,"context_line":"                self.tab_group.request, tenant_id\u003dtenant_id)"},{"line_number":123,"context_line":"            ipsecpoliciesFormatted \u003d [s.readable(self.tab_group.request)"},{"line_number":124,"context_line":"                for s in ipsecpolicies]"},{"line_number":125,"context_line":"        except Exception:"},{"line_number":126,"context_line":"            ipsecpoliciesFormatted \u003d []"},{"line_number":127,"context_line":"            exceptions.handle(self.tab_group.request,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F9Mc%3D","line":124,"updated":"2014-01-06 08:40:46.000000000","message":"ditto","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"0a0513a491ab5bbc28c05f7b3b2a3cfdc5acd20e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            ipsecpolicies \u003d api.vpn.ipsecpolicy_list("},{"line_number":122,"context_line":"                self.tab_group.request, tenant_id\u003dtenant_id)"},{"line_number":123,"context_line":"            ipsecpoliciesFormatted \u003d [s.readable(self.tab_group.request)"},{"line_number":124,"context_line":"                for s in ipsecpolicies]"},{"line_number":125,"context_line":"        except Exception:"},{"line_number":126,"context_line":"            ipsecpoliciesFormatted \u003d []"},{"line_number":127,"context_line":"            exceptions.handle(self.tab_group.request,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FtQg%3D","line":124,"in_reply_to":"AAAAUH%2F%2F9Mc%3D","updated":"2014-01-09 12:19:45.000000000","message":"Done","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"}],"openstack_dashboard/dashboards/project/vpn/tests.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47d51f55236184e0543964f7c51ff7c903f0cd7b","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        # retrieves ipsecsiteconnections"},{"line_number":90,"context_line":"        api.vpn.ipsecsiteconnections_get("},{"line_number":91,"context_line":"            IsA(http.HttpRequest)).MultipleTimes() \\"},{"line_number":92,"context_line":"                .AndReturn(self.ipsecsiteconnections.list())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def set_up_expect_with_exception(self):"},{"line_number":95,"context_line":"        api.vpn.vpnservices_get("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BYvM%3D","line":92,"updated":"2013-11-26 16:43:32.000000000","message":"Can\u0027t we avoid using MultipleTimes? I am not sure how it varies across tests but ideally I would like to check each call.\n\nAnd one question. ipsecsiteconnections_get is memoized. I am not sure why ipsecsiteconnetions_get is called multiple times.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8ef0099148cf6c61b3d3ffd1db40298774399778","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        # retrieves ipsecsiteconnections"},{"line_number":90,"context_line":"        api.vpn.ipsecsiteconnections_get("},{"line_number":91,"context_line":"            IsA(http.HttpRequest)).MultipleTimes() \\"},{"line_number":92,"context_line":"                .AndReturn(self.ipsecsiteconnections.list())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def set_up_expect_with_exception(self):"},{"line_number":95,"context_line":"        api.vpn.vpnservices_get("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97wg%3D","line":92,"in_reply_to":"AAAATn%2F%2BAnQ%3D","updated":"2013-12-04 09:57:30.000000000","message":"Done","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7f3e262f4cd9f4be46ed706c7a58e3afade66aef","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        # retrieves ipsecsiteconnections"},{"line_number":90,"context_line":"        api.vpn.ipsecsiteconnections_get("},{"line_number":91,"context_line":"            IsA(http.HttpRequest)).MultipleTimes() \\"},{"line_number":92,"context_line":"                .AndReturn(self.ipsecsiteconnections.list())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def set_up_expect_with_exception(self):"},{"line_number":95,"context_line":"        api.vpn.vpnservices_get("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BAnQ%3D","line":92,"in_reply_to":"AAAATn%2F%2BUUw%3D","updated":"2013-12-03 14:41:41.000000000","message":"Let\u0027s keep it, but could you add a comment?\n\nIn unit tests, it seems memoized decorator is not called when methods with memonized decorators are stubbed-out. I think this is the reason multipletimes is needed. I confirmed ipsecsiteconnectiosn_get is called 7 times and it matches the total number (6) of vpnservices, ipsec/ikepolicies + ipsecsiteconn_list.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d9e128d96f2320328b61b65b0c3cc3471fd8cb26","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        # retrieves ipsecsiteconnections"},{"line_number":90,"context_line":"        api.vpn.ipsecsiteconnections_get("},{"line_number":91,"context_line":"            IsA(http.HttpRequest)).MultipleTimes() \\"},{"line_number":92,"context_line":"                .AndReturn(self.ipsecsiteconnections.list())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def set_up_expect_with_exception(self):"},{"line_number":95,"context_line":"        api.vpn.vpnservices_get("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BUUw%3D","line":92,"in_reply_to":"AAAATn%2F%2BYvM%3D","updated":"2013-11-27 13:20:58.000000000","message":"We have to keep MultipleTimes. Otherwise, it will ruins all index tests because ipsecsiteconnections_get is used now for adding attribute \"ipsecsiteconns\" to VPN Service and policies.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"}],"openstack_dashboard/dashboards/project/vpn/views.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e50869b73b9f9204cc7151584963f6ff8604b2e5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"import re"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class IndexView(tabs.TabView):"},{"line_number":37,"context_line":"    tab_group_class \u003d vpn_tabs.VPNTabs"},{"line_number":38,"context_line":"    template_name \u003d \u0027project/vpn/index.html\u0027"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F9LU%3D","line":36,"updated":"2014-01-06 08:40:46.000000000","message":"Why is this change needed? Let me clarify.","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"0a0513a491ab5bbc28c05f7b3b2a3cfdc5acd20e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"import re"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class IndexView(tabs.TabView):"},{"line_number":37,"context_line":"    tab_group_class \u003d vpn_tabs.VPNTabs"},{"line_number":38,"context_line":"    template_name \u003d \u0027project/vpn/index.html\u0027"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FtAo%3D","line":36,"in_reply_to":"AAAAUH%2F%2F9LU%3D","updated":"2014-01-09 12:19:45.000000000","message":"TabbedTableView class is not needed here: TabView methods are enough. Moreover, this change makes handling \"NotImplementedError\" much simpler.","commit_id":"1ca23407577d2b1a34960cf709cf16d6aba836e2"}],"openstack_dashboard/test/test_data/neutron_data.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47d51f55236184e0543964f7c51ff7c903f0cd7b","unresolved":false,"context_lines":[{"line_number":650,"context_line":"                      \u0027lifetime\u0027: {\u0027units\u0027: \u0027seconds\u0027, \u0027value\u0027: 3600},"},{"line_number":651,"context_line":"                      \u0027phase1_negotiation_mode\u0027: \u0027main\u0027,"},{"line_number":652,"context_line":"                      \u0027pfs\u0027: \u0027group5\u0027,"},{"line_number":653,"context_line":"                      \u0027ipsecsiteconns\u0027: []}"},{"line_number":654,"context_line":"    TEST.api_ikepolicies.add(ikepolicy_dict)"},{"line_number":655,"context_line":"    TEST.ikepolicies.add(vpn.IKEPolicy(ikepolicy_dict))"},{"line_number":656,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BYvw%3D","line":653,"updated":"2013-11-26 16:43:32.000000000","message":"In Neutron API response, this attribute does not exist. It is better to keep TEST.api_ikepolicies consistent with Neutron API.\nChanging TEST.ikepolicies is no problem unless it conforms with the return value of api/vpn.py.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8ef0099148cf6c61b3d3ffd1db40298774399778","unresolved":false,"context_lines":[{"line_number":650,"context_line":"                      \u0027lifetime\u0027: {\u0027units\u0027: \u0027seconds\u0027, \u0027value\u0027: 3600},"},{"line_number":651,"context_line":"                      \u0027phase1_negotiation_mode\u0027: \u0027main\u0027,"},{"line_number":652,"context_line":"                      \u0027pfs\u0027: \u0027group5\u0027,"},{"line_number":653,"context_line":"                      \u0027ipsecsiteconns\u0027: []}"},{"line_number":654,"context_line":"    TEST.api_ikepolicies.add(ikepolicy_dict)"},{"line_number":655,"context_line":"    TEST.ikepolicies.add(vpn.IKEPolicy(ikepolicy_dict))"},{"line_number":656,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BA1Q%3D","line":653,"in_reply_to":"AAAATn%2F%2BA7M%3D","updated":"2013-12-04 09:57:30.000000000","message":"Done","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f9b5feb5261290b75b2b8b7e0f5f0e2ebd94d340","unresolved":false,"context_lines":[{"line_number":650,"context_line":"                      \u0027lifetime\u0027: {\u0027units\u0027: \u0027seconds\u0027, \u0027value\u0027: 3600},"},{"line_number":651,"context_line":"                      \u0027phase1_negotiation_mode\u0027: \u0027main\u0027,"},{"line_number":652,"context_line":"                      \u0027pfs\u0027: \u0027group5\u0027,"},{"line_number":653,"context_line":"                      \u0027ipsecsiteconns\u0027: []}"},{"line_number":654,"context_line":"    TEST.api_ikepolicies.add(ikepolicy_dict)"},{"line_number":655,"context_line":"    TEST.ikepolicies.add(vpn.IKEPolicy(ikepolicy_dict))"},{"line_number":656,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BA7M%3D","line":653,"in_reply_to":"AAAATn%2F%2BUTs%3D","updated":"2013-12-03 13:34:21.000000000","message":"Even after I removed ipsecsiteconnes from ikepolicy_dict and ipsecpolicy_dict, the unit tests passed. I wonder why it is needed.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d9e128d96f2320328b61b65b0c3cc3471fd8cb26","unresolved":false,"context_lines":[{"line_number":650,"context_line":"                      \u0027lifetime\u0027: {\u0027units\u0027: \u0027seconds\u0027, \u0027value\u0027: 3600},"},{"line_number":651,"context_line":"                      \u0027phase1_negotiation_mode\u0027: \u0027main\u0027,"},{"line_number":652,"context_line":"                      \u0027pfs\u0027: \u0027group5\u0027,"},{"line_number":653,"context_line":"                      \u0027ipsecsiteconns\u0027: []}"},{"line_number":654,"context_line":"    TEST.api_ikepolicies.add(ikepolicy_dict)"},{"line_number":655,"context_line":"    TEST.ikepolicies.add(vpn.IKEPolicy(ikepolicy_dict))"},{"line_number":656,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BUTs%3D","line":653,"in_reply_to":"AAAATn%2F%2BYvw%3D","updated":"2013-11-27 13:20:58.000000000","message":"Agreed. But we need this attribute if we want to keep adding \u0027ipsecsiteconns\u0027 attributes in readable methods of IKEPolicy, IPSecPolicy and VPNService classes.","commit_id":"2fe516a36b7f85bf3c559fc934dce41835d8d942"}]}
