)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"1f20d768f18c3e24f32dc9d8518948f76a6b03b2","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Things TODO:"},{"line_number":16,"context_line":"  - refactor parts of keystone/auth/ to work properly with both UUID and Fernet"},{"line_number":17,"context_line":"    tokens"},{"line_number":18,"context_line":"  - consolidate all the test from TestFernetTokenProvider into TestAuth and"},{"line_number":19,"context_line":"    use one test class for all token behavior"},{"line_number":20,"context_line":"  - create test classes that represent the different token providers but each"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a80dd14_ffaa1519","line":17,"updated":"2015-03-16 23:37:50.000000000","message":"Please only address this issue here so we can get this moving ASAP. The other (below this comment) changes can be accomplished independently from this BP.","commit_id":"84711d7c165150da72e0b89ff21f0d19d70bdcb0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"745438772b5dd2b226fea6426fdc6d9962752e8f","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Things TODO:"},{"line_number":16,"context_line":"  - refactor parts of keystone/auth/ to work properly with both UUID and Fernet"},{"line_number":17,"context_line":"    tokens"},{"line_number":18,"context_line":"  - consolidate all the test from TestFernetTokenProvider into TestAuth and"},{"line_number":19,"context_line":"    use one test class for all token behavior"},{"line_number":20,"context_line":"  - create test classes that represent the different token providers but each"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a80dd14_633ca7c0","line":17,"in_reply_to":"9a80dd14_ffaa1519","updated":"2015-03-17 18:06:30.000000000","message":"makes sense, thanks Morgan","commit_id":"84711d7c165150da72e0b89ff21f0d19d70bdcb0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f2db4b247e7468ee89d32ceeea45bd56bfbf09d3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lance Bragstad \u003clbragstad@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-17 16:40:10 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use existing token test for Fernet tokens."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The test_v3_auth.py:TestAuth class has token tests in it. The Fernet token"},{"line_number":10,"context_line":"provider should honor the behavior described by these tests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a80dd14_c7c38c37","line":7,"updated":"2015-03-18 02:28:44.000000000","message":"Seems like the important thing here is that a bunch of bugs in Fernet tokens are being fixed?","commit_id":"0010e6d484abc609f6a8826020e3b825d27df3a2"}],"keystone/auth/plugins/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f2db4b247e7468ee89d32ceeea45bd56bfbf09d3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                  2: \u0027token\u0027,"},{"line_number":35,"context_line":"                  4: \u0027saml2\u0027,"},{"line_number":36,"context_line":"                  8: \u0027oauth1\u0027,"},{"line_number":37,"context_line":"                  12: \u0027external\u0027}"},{"line_number":38,"context_line":"    method_ints \u003d list()"},{"line_number":39,"context_line":"    for method in methods:"},{"line_number":40,"context_line":"        for k, v in six.iteritems(method_map):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_07d5a4e4","line":37,"updated":"2015-03-18 02:28:44.000000000","message":"how are other methods going to be handled, i.e., ones that the deployer has registered themselves?","commit_id":"0010e6d484abc609f6a8826020e3b825d27df3a2"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"bbef3342eae519946126a73896a272b041e3ada0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                  2: \u0027token\u0027,"},{"line_number":35,"context_line":"                  4: \u0027saml2\u0027,"},{"line_number":36,"context_line":"                  8: \u0027oauth1\u0027,"},{"line_number":37,"context_line":"                  12: \u0027external\u0027}"},{"line_number":38,"context_line":"    method_ints \u003d list()"},{"line_number":39,"context_line":"    for method in methods:"},{"line_number":40,"context_line":"        for k, v in six.iteritems(method_map):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_f0c1244f","line":37,"in_reply_to":"9a80dd14_07d5a4e4","updated":"2015-03-18 04:32:56.000000000","message":"Done","commit_id":"0010e6d484abc609f6a8826020e3b825d27df3a2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"03b8d1584c99bbd26b4c7396330623620e76f264","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    :returns: an integer representing the methods"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    method_map \u003d construct_method_map_from_config()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    method_ints \u003d []"},{"line_number":53,"context_line":"    for method in methods:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_e0b85ac9","line":50,"updated":"2015-03-18 16:24:23.000000000","message":"We should only have to do this once rather than every time.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0aa0b92f30f8cc9221e2196a38ac99569c66d7a3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    :returns: an integer representing the methods"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    method_map \u003d construct_method_map_from_config()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    method_ints \u003d []"},{"line_number":53,"context_line":"    for method in methods:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_e3f06468","line":50,"in_reply_to":"9a80dd14_e0b85ac9","updated":"2015-03-18 17:20:44.000000000","message":"We could make this a global variable but then we run into races as to when the config is read in.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"38fef6b83e778f0416753a71e396eda76f5b4af7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    :returns: an integer representing the methods"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    method_map \u003d construct_method_map_from_config()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    method_ints \u003d []"},{"line_number":53,"context_line":"    for method in methods:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_9748beb4","line":50,"in_reply_to":"9a80dd14_e3f06468","updated":"2015-03-18 17:47:42.000000000","message":"build it on-demand. This is easy to do with a class and a property getter.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"03b8d1584c99bbd26b4c7396330623620e76f264","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    method_ints \u003d []"},{"line_number":53,"context_line":"    for method in methods:"},{"line_number":54,"context_line":"        for k, v in six.iteritems(method_map):"},{"line_number":55,"context_line":"            if v \u003d\u003d method:"},{"line_number":56,"context_line":"                method_ints.append(k)"},{"line_number":57,"context_line":"    return sum(method_ints)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_e08a1a19","line":54,"updated":"2015-03-18 16:24:23.000000000","message":"suggest keep the reverse map too, so can look up easily.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"03b8d1584c99bbd26b4c7396330623620e76f264","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    for method in methods:"},{"line_number":54,"context_line":"        for k, v in six.iteritems(method_map):"},{"line_number":55,"context_line":"            if v \u003d\u003d method:"},{"line_number":56,"context_line":"                method_ints.append(k)"},{"line_number":57,"context_line":"    return sum(method_ints)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_c0a0b6a7","line":56,"updated":"2015-03-18 16:24:23.000000000","message":"might as welll just ret +\u003d k.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"38fef6b83e778f0416753a71e396eda76f5b4af7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    for method in methods:"},{"line_number":54,"context_line":"        for k, v in six.iteritems(method_map):"},{"line_number":55,"context_line":"            if v \u003d\u003d method:"},{"line_number":56,"context_line":"                method_ints.append(k)"},{"line_number":57,"context_line":"    return sum(method_ints)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_77e42aac","line":56,"in_reply_to":"9a80dd14_869256f4","updated":"2015-03-18 17:47:42.000000000","message":"I meant rather than storing a bunch of ints in an array and then summing at the end, sum them up as the code goes along.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0aa0b92f30f8cc9221e2196a38ac99569c66d7a3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    for method in methods:"},{"line_number":54,"context_line":"        for k, v in six.iteritems(method_map):"},{"line_number":55,"context_line":"            if v \u003d\u003d method:"},{"line_number":56,"context_line":"                method_ints.append(k)"},{"line_number":57,"context_line":"    return sum(method_ints)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_869256f4","line":56,"in_reply_to":"9a80dd14_c0a0b6a7","updated":"2015-03-18 17:20:44.000000000","message":"This throws an int not iterable error","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"03b8d1584c99bbd26b4c7396330623620e76f264","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    if method_int \u003d\u003d 0:"},{"line_number":70,"context_line":"        return []"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    method_map \u003d construct_method_map_from_config()"},{"line_number":73,"context_line":"    method_ints \u003d []"},{"line_number":74,"context_line":"    for k, v in six.iteritems(method_map):"},{"line_number":75,"context_line":"        method_ints.append(k)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_40c92659","line":72,"updated":"2015-03-18 16:24:23.000000000","message":"should only have to do this once rather than every time.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0aa0b92f30f8cc9221e2196a38ac99569c66d7a3","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    if method_int \u003d\u003d 0:"},{"line_number":70,"context_line":"        return []"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    method_map \u003d construct_method_map_from_config()"},{"line_number":73,"context_line":"    method_ints \u003d []"},{"line_number":74,"context_line":"    for k, v in six.iteritems(method_map):"},{"line_number":75,"context_line":"        method_ints.append(k)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_06b6668a","line":72,"in_reply_to":"9a80dd14_40c92659","updated":"2015-03-18 17:20:44.000000000","message":"see comment above","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"03b8d1584c99bbd26b4c7396330623620e76f264","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    method_ints \u003d []"},{"line_number":74,"context_line":"    for k, v in six.iteritems(method_map):"},{"line_number":75,"context_line":"        method_ints.append(k)"},{"line_number":76,"context_line":"    method_ints.sort(reverse\u003dTrue)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    confirmed_methods \u003d []"},{"line_number":79,"context_line":"    for m_int in method_ints:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_2001926a","line":76,"updated":"2015-03-18 16:24:23.000000000","message":"shouldn\u0027t have to build this every time either.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0aa0b92f30f8cc9221e2196a38ac99569c66d7a3","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    method_ints \u003d []"},{"line_number":74,"context_line":"    for k, v in six.iteritems(method_map):"},{"line_number":75,"context_line":"        method_ints.append(k)"},{"line_number":76,"context_line":"    method_ints.sort(reverse\u003dTrue)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    confirmed_methods \u003d []"},{"line_number":79,"context_line":"    for m_int in method_ints:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_c6628e15","line":76,"in_reply_to":"9a80dd14_2001926a","updated":"2015-03-18 17:20:44.000000000","message":"see comment above","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"03b8d1584c99bbd26b4c7396330623620e76f264","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    confirmed_methods \u003d []"},{"line_number":79,"context_line":"    for m_int in method_ints:"},{"line_number":80,"context_line":"        if (method_int / m_int) \u003d\u003d 1:"},{"line_number":81,"context_line":"            confirmed_methods.append(m_int)"},{"line_number":82,"context_line":"            method_int \u003d method_int - m_int"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_e0621a3c","line":80,"updated":"2015-03-18 16:24:23.000000000","message":"this could use a comment.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0aa0b92f30f8cc9221e2196a38ac99569c66d7a3","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    confirmed_methods \u003d []"},{"line_number":79,"context_line":"    for m_int in method_ints:"},{"line_number":80,"context_line":"        if (method_int / m_int) \u003d\u003d 1:"},{"line_number":81,"context_line":"            confirmed_methods.append(m_int)"},{"line_number":82,"context_line":"            method_int \u003d method_int - m_int"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_e62eb241","line":80,"in_reply_to":"9a80dd14_e0621a3c","updated":"2015-03-18 17:20:44.000000000","message":"Done","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"}],"keystone/auth/plugins/token.py":[{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"57e0cfaf7ba4f853261c0d11a297dbb2e898654e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        # type that isn\u0027t of six.binary_types, attempt to make token_id a"},{"line_number":43,"context_line":"        # string before sending it to the token_provider_api."},{"line_number":44,"context_line":"        if not isinstance(token_id, six.binary_type):"},{"line_number":45,"context_line":"            token_id \u003d str(token_id)"},{"line_number":46,"context_line":"        response \u003d self.token_provider_api.validate_token(token_id)"},{"line_number":47,"context_line":"        return token_model.KeystoneToken(token_id\u003dtoken_id,"},{"line_number":48,"context_line":"                                         token_data\u003dresponse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_45df263a","line":45,"updated":"2015-03-13 21:20:21.000000000","message":"I also came across this issues when authenticating with a token in v2. I fixed it using encode. So this can be done like: token_str \u003d token_id.encode(\u0027ascii\u0027).","commit_id":"aeadbc33dbc809eab65fd0172c466a5f37b23562"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"178db580b57279af1f829c0abdae17f0aa4506ee","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        # type that isn\u0027t of six.binary_types, attempt to make token_id a"},{"line_number":43,"context_line":"        # string before sending it to the token_provider_api."},{"line_number":44,"context_line":"        if not isinstance(token_id, six.binary_type):"},{"line_number":45,"context_line":"            token_id \u003d str(token_id)"},{"line_number":46,"context_line":"        response \u003d self.token_provider_api.validate_token(token_id)"},{"line_number":47,"context_line":"        return token_model.KeystoneToken(token_id\u003dtoken_id,"},{"line_number":48,"context_line":"                                         token_data\u003dresponse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_8823f303","line":45,"in_reply_to":"9a80dd14_45df263a","updated":"2015-03-13 22:00:05.000000000","message":"ok, cool. David Stanek had suggested this today when we were discussing it in -keystone. Either way works for me!","commit_id":"aeadbc33dbc809eab65fd0172c466a5f37b23562"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"03b8d1584c99bbd26b4c7396330623620e76f264","unresolved":false,"context_lines":[{"line_number":4459,"context_line":"            provider\u003d\u0027keystone.token.providers.fernet.Provider\u0027)"},{"line_number":4460,"context_line":""},{"line_number":4461,"context_line":"    def test_verify_with_bound_token(self):"},{"line_number":4462,"context_line":"        self.skipTest(\u0027Bind not current supported by Fernet, see bug 1433311.\u0027)"},{"line_number":4463,"context_line":""},{"line_number":4464,"context_line":"    def test_v2_v3_bind_token_intermix(self):"},{"line_number":4465,"context_line":"        self.skipTest(\u0027Bind not current supported by Fernet, see bug 1433311.\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_6071cadd","line":4462,"updated":"2015-03-18 16:24:23.000000000","message":"this test should show what\u0027s actually happening... check if NotImplemented is raised.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0aa0b92f30f8cc9221e2196a38ac99569c66d7a3","unresolved":false,"context_lines":[{"line_number":4459,"context_line":"            provider\u003d\u0027keystone.token.providers.fernet.Provider\u0027)"},{"line_number":4460,"context_line":""},{"line_number":4461,"context_line":"    def test_verify_with_bound_token(self):"},{"line_number":4462,"context_line":"        self.skipTest(\u0027Bind not current supported by Fernet, see bug 1433311.\u0027)"},{"line_number":4463,"context_line":""},{"line_number":4464,"context_line":"    def test_v2_v3_bind_token_intermix(self):"},{"line_number":4465,"context_line":"        self.skipTest(\u0027Bind not current supported by Fernet, see bug 1433311.\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_eca4d109","line":4462,"in_reply_to":"9a80dd14_6071cadd","updated":"2015-03-18 17:20:44.000000000","message":"Done","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"}],"keystone/token/providers/fernet/token_formatters.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"03b8d1584c99bbd26b4c7396330623620e76f264","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        # into the token format itself"},{"line_number":184,"context_line":"        created_at \u003d TokenFormatter.creation_time(token)"},{"line_number":185,"context_line":"        created_at \u003d timeutils.isotime(at\u003dcreated_at, subsecond\u003dTrue)"},{"line_number":186,"context_line":"        expires_at \u003d timeutils.parse_isotime(expires_at)"},{"line_number":187,"context_line":"        expires_at \u003d timeutils.isotime(at\u003dexpires_at, subsecond\u003dTrue)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        return (user_id, methods, audit_ids, domain_id, project_id, trust_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_601f0a71","line":186,"updated":"2015-03-18 16:24:23.000000000","message":"is this fixing a bug?","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"38ae86a6493295d3f91ac9bdd51ac52042e9f9d7","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        # into the token format itself"},{"line_number":184,"context_line":"        created_at \u003d TokenFormatter.creation_time(token)"},{"line_number":185,"context_line":"        created_at \u003d timeutils.isotime(at\u003dcreated_at, subsecond\u003dTrue)"},{"line_number":186,"context_line":"        expires_at \u003d timeutils.parse_isotime(expires_at)"},{"line_number":187,"context_line":"        expires_at \u003d timeutils.isotime(at\u003dexpires_at, subsecond\u003dTrue)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        return (user_id, methods, audit_ids, domain_id, project_id, trust_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_e3d2245a","line":186,"in_reply_to":"9a80dd14_601f0a71","updated":"2015-03-18 16:27:37.000000000","message":"This was to fix a failing test cases. Because expires_at wasn\u0027t being generated with subsecond\u003dTrue, the assertions in test_v3_auth.py wasn\u0027t recognizing it as a valid ISO8601 time format.","commit_id":"b4251c74368f881ef5c3b19ffa42f3a956eaa463"}]}
