)]}'
{"keystone/auth/plugins/saml2.py":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b31243b3277dd965f179a1164dc3101f26a299cc","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            federation.PROTOCOL: protocol"},{"line_number":88,"context_line":"        }"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _validate_groups(self, group_ids, mapping_id):"},{"line_number":91,"context_line":"        if not group_ids:"},{"line_number":92,"context_line":"            raise exception.MissingGroups(mapping_id\u003dmapping_id)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9Tuk%3D","line":90,"updated":"2014-04-07 08:15:16.000000000","message":"Just wondering: How about moving this to the utils too and change its signature to pass identity_api object(or even the Saml2 instance)? I think this method could also be re-used if we suddently decided to support OpenID or similar protocols.\n\ndef _validate_groups(identity_api, group_ids, mapping_id):\n    ...\n    for group_id in group_ids:\n        try:\n            identity_api.get_group(group_id)\n        [...]","commit_id":"ebf85f73c85b4ef67e830b1c653cce9df2ed220c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9c14ac7c341ddaa52eb61ee028b9024ebcad3fbf","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            federation.PROTOCOL: protocol"},{"line_number":88,"context_line":"        }"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _validate_groups(self, group_ids, mapping_id):"},{"line_number":91,"context_line":"        if not group_ids:"},{"line_number":92,"context_line":"            raise exception.MissingGroups(mapping_id\u003dmapping_id)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9O3A%3D","line":90,"in_reply_to":"AAAAWH%2F9Tuk%3D","updated":"2014-04-07 19:24:50.000000000","message":"thanks marek!","commit_id":"ebf85f73c85b4ef67e830b1c653cce9df2ed220c"}],"keystone/contrib/federation/utils.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f2978d8f08a3d7769654a80333a7d88431d65ec1","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            raise exception.ValidationError(messages)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def validate_expiration(token_ref):"},{"line_number":121,"context_line":"    if timeutils.utcnow() \u003e token_ref[\u0027expires\u0027]:"},{"line_number":122,"context_line":"        raise exception.Unauthorized(_(\u0027Federation token is expired\u0027))"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAW3%2F%2FkQM%3D","line":120,"updated":"2014-04-12 14:06:02.000000000","message":"If these functions are going to be reusable then they should have docstrings.","commit_id":"65de654bb8ae48a1d6649d670f21209b43581409"}]}
