)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62f08d58d658061ca551c9389279d463bd007ab2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Refactor auth_token cache"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are very different paths for when we are using encrypting tokens"},{"line_number":10,"context_line":"before saving them to memcache. Extract the encrypted strategy out to"},{"line_number":11,"context_line":"it\u0027s own class to see the similarities."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_d46fd4fa","line":9,"updated":"2014-07-17 01:30:24.000000000","message":"remove \"using\"","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e46fa7284f4f029844140cc2f9c538695128341b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Refactor auth_token cache"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are very different paths for when we are using encrypting tokens"},{"line_number":10,"context_line":"before saving them to memcache. Extract the encrypted strategy out to"},{"line_number":11,"context_line":"it\u0027s own class to see the similarities."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_1dc49e5e","line":9,"in_reply_to":"baada198_d46fd4fa","updated":"2014-07-21 01:58:17.000000000","message":"Done","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62f08d58d658061ca551c9389279d463bd007ab2","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are very different paths for when we are using encrypting tokens"},{"line_number":10,"context_line":"before saving them to memcache. Extract the encrypted strategy out to"},{"line_number":11,"context_line":"it\u0027s own class to see the similarities."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I5bf5dae3143f15a840a580a2e01ba67c50911276"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_b46c200a","line":11,"updated":"2014-07-17 01:30:24.000000000","message":"change \"it\u0027s\" to \"its\"","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e46fa7284f4f029844140cc2f9c538695128341b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are very different paths for when we are using encrypting tokens"},{"line_number":10,"context_line":"before saving them to memcache. Extract the encrypted strategy out to"},{"line_number":11,"context_line":"it\u0027s own class to see the similarities."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I5bf5dae3143f15a840a580a2e01ba67c50911276"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_fdca8a6c","line":11,"in_reply_to":"baada198_b46c200a","updated":"2014-07-21 01:58:17.000000000","message":"Done","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"}],"keystonemiddleware/auth_token.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62f08d58d658061ca551c9389279d463bd007ab2","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        self._LOG.debug(\u0027Marking token as unauthorized in cache\u0027)"},{"line_number":1437,"context_line":"        self._cache_store(token_id, self._INVALID_INDICATOR)"},{"line_number":1438,"context_line":""},{"line_number":1439,"context_line":"    def _get_cache_key(self, token_id):"},{"line_number":1440,"context_line":"        return self._CACHE_KEY_TEMPLATE % token_id, None"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":"    def _deserialize(self, data, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f4d938f5","line":1439,"updated":"2014-07-17 01:30:24.000000000","message":"should add a comment explaining what subclasses are expected to do with this method","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e46fa7284f4f029844140cc2f9c538695128341b","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        self._LOG.debug(\u0027Marking token as unauthorized in cache\u0027)"},{"line_number":1437,"context_line":"        self._cache_store(token_id, self._INVALID_INDICATOR)"},{"line_number":1438,"context_line":""},{"line_number":1439,"context_line":"    def _get_cache_key(self, token_id):"},{"line_number":1440,"context_line":"        return self._CACHE_KEY_TEMPLATE % token_id, None"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":"    def _deserialize(self, data, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_5dfff600","line":1439,"in_reply_to":"baada198_f4d938f5","updated":"2014-07-21 01:58:17.000000000","message":"Done","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62f08d58d658061ca551c9389279d463bd007ab2","unresolved":false,"context_lines":[{"line_number":1437,"context_line":"        self._cache_store(token_id, self._INVALID_INDICATOR)"},{"line_number":1438,"context_line":""},{"line_number":1439,"context_line":"    def _get_cache_key(self, token_id):"},{"line_number":1440,"context_line":"        return self._CACHE_KEY_TEMPLATE % token_id, None"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":"    def _deserialize(self, data, context):"},{"line_number":1443,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b4598090","line":1440,"updated":"2014-07-17 01:30:24.000000000","message":"give a name to None so readers know what it is... \n\n unused_context \u003d None\n return self._CACHE_KEY_TEMPLATE % token_id, unused_context","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e46fa7284f4f029844140cc2f9c538695128341b","unresolved":false,"context_lines":[{"line_number":1437,"context_line":"        self._cache_store(token_id, self._INVALID_INDICATOR)"},{"line_number":1438,"context_line":""},{"line_number":1439,"context_line":"    def _get_cache_key(self, token_id):"},{"line_number":1440,"context_line":"        return self._CACHE_KEY_TEMPLATE % token_id, None"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":"    def _deserialize(self, data, context):"},{"line_number":1443,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_dd122657","line":1440,"in_reply_to":"baada198_b4598090","updated":"2014-07-21 01:58:17.000000000","message":"Done","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62f08d58d658061ca551c9389279d463bd007ab2","unresolved":false,"context_lines":[{"line_number":1439,"context_line":"    def _get_cache_key(self, token_id):"},{"line_number":1440,"context_line":"        return self._CACHE_KEY_TEMPLATE % token_id, None"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":"    def _deserialize(self, data, context):"},{"line_number":1443,"context_line":"        return data"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"    def _serialize(self, data, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_34e490ab","line":1442,"updated":"2014-07-17 01:30:24.000000000","message":"should add a comment explaining what subclasses are expected to do with this method","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e46fa7284f4f029844140cc2f9c538695128341b","unresolved":false,"context_lines":[{"line_number":1439,"context_line":"    def _get_cache_key(self, token_id):"},{"line_number":1440,"context_line":"        return self._CACHE_KEY_TEMPLATE % token_id, None"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":"    def _deserialize(self, data, context):"},{"line_number":1443,"context_line":"        return data"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"    def _serialize(self, data, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_fd0fea2b","line":1442,"in_reply_to":"baada198_34e490ab","updated":"2014-07-21 01:58:17.000000000","message":"Done","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62f08d58d658061ca551c9389279d463bd007ab2","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"    def _deserialize(self, data, context):"},{"line_number":1443,"context_line":"        return data"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"    def _serialize(self, data, context):"},{"line_number":1446,"context_line":"        return data"},{"line_number":1447,"context_line":""},{"line_number":1448,"context_line":"    def _cache_get(self, token_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b4e7c0ab","line":1445,"updated":"2014-07-17 01:30:24.000000000","message":"should add a comment explaining what subclasses are expected to do with this method","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e46fa7284f4f029844140cc2f9c538695128341b","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"    def _deserialize(self, data, context):"},{"line_number":1443,"context_line":"        return data"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"    def _serialize(self, data, context):"},{"line_number":1446,"context_line":"        return data"},{"line_number":1447,"context_line":""},{"line_number":1448,"context_line":"    def _cache_get(self, token_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1d19fe79","line":1445,"in_reply_to":"baada198_b4e7c0ab","updated":"2014-07-21 01:58:17.000000000","message":"Done","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62f08d58d658061ca551c9389279d463bd007ab2","unresolved":false,"context_lines":[{"line_number":1469,"context_line":"        # Note that _INVALID_INDICATOR and (data, expires) are the only"},{"line_number":1470,"context_line":"        # valid types of serialized cache entries, so there is not"},{"line_number":1471,"context_line":"        # a collision with jsonutils.loads(serialized) \u003d\u003d None."},{"line_number":1472,"context_line":"        if not isinstance(data, six.string_types):"},{"line_number":1473,"context_line":"            data \u003d data.decode(\u0027utf-8\u0027)"},{"line_number":1474,"context_line":"        cached \u003d jsonutils.loads(data)"},{"line_number":1475,"context_line":"        if cached \u003d\u003d self._INVALID_INDICATOR:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d4a19447","line":1472,"updated":"2014-07-17 01:30:24.000000000","message":"the name was just changed from serialized to data. leave the name as serialized and then there won\u0027t be unnecessary changes.","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e46fa7284f4f029844140cc2f9c538695128341b","unresolved":false,"context_lines":[{"line_number":1469,"context_line":"        # Note that _INVALID_INDICATOR and (data, expires) are the only"},{"line_number":1470,"context_line":"        # valid types of serialized cache entries, so there is not"},{"line_number":1471,"context_line":"        # a collision with jsonutils.loads(serialized) \u003d\u003d None."},{"line_number":1472,"context_line":"        if not isinstance(data, six.string_types):"},{"line_number":1473,"context_line":"            data \u003d data.decode(\u0027utf-8\u0027)"},{"line_number":1474,"context_line":"        cached \u003d jsonutils.loads(data)"},{"line_number":1475,"context_line":"        if cached \u003d\u003d self._INVALID_INDICATOR:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_7d52fa13","line":1472,"in_reply_to":"baada198_d4a19447","updated":"2014-07-21 01:58:17.000000000","message":"changed part of it back, if i leave it at serialized i get the line above as:\n\n    serialized \u003d self._deserialize(serialized, context)\n\nwhich is misleading.","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62f08d58d658061ca551c9389279d463bd007ab2","unresolved":false,"context_lines":[{"line_number":1509,"context_line":"        data_to_store \u003d self._serialize(data, context)"},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":"        with self._cache_pool.reserve() as cache:"},{"line_number":1512,"context_line":"            cache.set(key, data_to_store, time\u003dself._cache_time)"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":""},{"line_number":1515,"context_line":"class _SecureTokenCache(_TokenCache):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_74bb6875","line":1512,"updated":"2014-07-17 01:30:24.000000000","message":"leave the name as cache_key.","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e46fa7284f4f029844140cc2f9c538695128341b","unresolved":false,"context_lines":[{"line_number":1509,"context_line":"        data_to_store \u003d self._serialize(data, context)"},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":"        with self._cache_pool.reserve() as cache:"},{"line_number":1512,"context_line":"            cache.set(key, data_to_store, time\u003dself._cache_time)"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":""},{"line_number":1515,"context_line":"class _SecureTokenCache(_TokenCache):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_dd3946d9","line":1512,"in_reply_to":"baada198_74bb6875","updated":"2014-07-21 01:58:17.000000000","message":"Done","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62f08d58d658061ca551c9389279d463bd007ab2","unresolved":false,"context_lines":[{"line_number":1512,"context_line":"            cache.set(key, data_to_store, time\u003dself._cache_time)"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":""},{"line_number":1515,"context_line":"class _SecureTokenCache(_TokenCache):"},{"line_number":1516,"context_line":""},{"line_number":1517,"context_line":"    def __init__(self, log, security_strategy, secret_key, **kwargs):"},{"line_number":1518,"context_line":"        super(_SecureTokenCache, self).__init__(log, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f4f6988f","line":1515,"updated":"2014-07-17 01:30:24.000000000","message":"A docstring would be nice.","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"e46fa7284f4f029844140cc2f9c538695128341b","unresolved":false,"context_lines":[{"line_number":1512,"context_line":"            cache.set(key, data_to_store, time\u003dself._cache_time)"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":""},{"line_number":1515,"context_line":"class _SecureTokenCache(_TokenCache):"},{"line_number":1516,"context_line":""},{"line_number":1517,"context_line":"    def __init__(self, log, security_strategy, secret_key, **kwargs):"},{"line_number":1518,"context_line":"        super(_SecureTokenCache, self).__init__(log, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_fd3d2abc","line":1515,"in_reply_to":"baada198_f4f6988f","updated":"2014-07-21 01:58:17.000000000","message":"Done","commit_id":"336f0cd243aca223fe70c3622fa6fb1d75e3ca36"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"024ccb7bb515d8ccfc72fa6ea98214f45fe4b1e7","unresolved":false,"context_lines":[{"line_number":1507,"context_line":""},{"line_number":1508,"context_line":"        :param str token_id: The unique token id."},{"line_number":1509,"context_line":""},{"line_number":1510,"context_line":"        :returns: A tuple of a string key and an implementation specificy"},{"line_number":1511,"context_line":"                  context object"},{"line_number":1512,"context_line":"        \"\"\""},{"line_number":1513,"context_line":"        # NOTE(jamielennox): in the basic implementation there is no need for"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_cb024708","line":1510,"updated":"2014-07-28 03:00:10.000000000","message":"change \"specificy\" to \"specific\"","commit_id":"d967ea7f524b66f2669d6178ed8ff89f6e36e103"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0fd80b9dc2a66c860029ac64e70dc8838618bce9","unresolved":false,"context_lines":[{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        self._token_cache \u003d self._token_cache_factory()"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        self._token_revocation_list_prop \u003d None"},{"line_number":532,"context_line":"        self._token_revocation_list_fetched_time_prop \u003d None"},{"line_number":533,"context_line":"        self._token_revocation_list_cache_timeout \u003d datetime.timedelta("},{"line_number":534,"context_line":"            seconds\u003dself._conf_get(\u0027revocation_cache_time\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ac7a964_03bcbfba","line":531,"updated":"2014-08-15 01:25:50.000000000","message":"revert the whitespace change on the previous line.","commit_id":"bc9d8f809841bae2a33e2ceac0fc4796f06cbed6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0fd80b9dc2a66c860029ac64e70dc8838618bce9","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"        )"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        if security_strategy:"},{"line_number":1064,"context_line":"            return _SecureTokenCache(self._LOG,"},{"line_number":1065,"context_line":"                                     security_strategy,"},{"line_number":1066,"context_line":"                                     self._conf_get(\u0027memcache_secret_key\u0027),"},{"line_number":1067,"context_line":"                                     **cache_kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ac7a964_23e8dbb3","line":1064,"updated":"2014-08-15 01:25:50.000000000","message":"self._LOG is the same for both, so why not put that into cache_kwargs?","commit_id":"bc9d8f809841bae2a33e2ceac0fc4796f06cbed6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0fd80b9dc2a66c860029ac64e70dc8838618bce9","unresolved":false,"context_lines":[{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"        :param str token_id: The unique token id."},{"line_number":1442,"context_line":""},{"line_number":1443,"context_line":"        :returns: A tuple of a string key and an implementation specificy"},{"line_number":1444,"context_line":"                  context object"},{"line_number":1445,"context_line":"        \"\"\""},{"line_number":1446,"context_line":"        # NOTE(jamielennox): in the basic implementation there is no need for"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ac7a964_a3adcb8a","line":1443,"updated":"2014-08-15 01:25:50.000000000","message":"change \"specificy\" to \"specific\"","commit_id":"bc9d8f809841bae2a33e2ceac0fc4796f06cbed6"}]}
