)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7f781df674f710c0cd2ee3eba63c688a208e4c80","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This change also creates the `get_expiration_time_fn` function"},{"line_number":17,"context_line":"that better describes the fallthrough behavior of the [cache]"},{"line_number":18,"context_line":"expriration_time config value."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This patch updates the revocation event cache time to be in the"},{"line_number":21,"context_line":"proper [revoke] section of the config for consistency with the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5a890539_076205d9","line":18,"updated":"2014-12-01 00:21:37.000000000","message":"change \"expriration_time\" to \"expiration_time\" (or fix the name of the variable)","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ef96b6085b7a230438a1a310fb6b4c8a37370263","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This change also creates the `get_expiration_time_fn` function"},{"line_number":17,"context_line":"that better describes the fallthrough behavior of the [cache]"},{"line_number":18,"context_line":"expriration_time config value."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This patch updates the revocation event cache time to be in the"},{"line_number":21,"context_line":"proper [revoke] section of the config for consistency with the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"1a930d6b_fd3a0635","line":18,"in_reply_to":"5a890539_076205d9","updated":"2015-02-25 14:36:33.000000000","message":"Done","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7f781df674f710c0cd2ee3eba63c688a208e4c80","unresolved":false,"context_lines":[{"line_number":22,"context_line":"other sections."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact: revocation_cache_time moved from [token] config "},{"line_number":25,"context_line":"section to [revoke]/cache_time "},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Co-Authored-By: David Stanek \u003cdstanek@dstanek.com\u003e"},{"line_number":28,"context_line":"Change-Id: I5c4e5f509ab82b060938591655e6c615ac7d38dd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5a890539_c770fda6","line":25,"updated":"2014-12-01 00:21:37.000000000","message":"remove trailing blanks.","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ef96b6085b7a230438a1a310fb6b4c8a37370263","unresolved":false,"context_lines":[{"line_number":22,"context_line":"other sections."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DocImpact: revocation_cache_time moved from [token] config "},{"line_number":25,"context_line":"section to [revoke]/cache_time "},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Co-Authored-By: David Stanek \u003cdstanek@dstanek.com\u003e"},{"line_number":28,"context_line":"Change-Id: I5c4e5f509ab82b060938591655e6c615ac7d38dd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"1a930d6b_5d495acf","line":25,"in_reply_to":"5a890539_c770fda6","updated":"2015-02-25 14:36:33.000000000","message":"Done","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"}],"keystone/assignment/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ad7b9cf6682ada89755e171eb6146496eb2809b2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027assignment\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# NOTE(blk-u): The config option is not available at import time."},{"line_number":39,"context_line":"def get_expiration_time():"},{"line_number":40,"context_line":"    return CONF.assignment.cache_time or CONF.cache_time"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7ac7a964_e8ba42e0","line":38,"updated":"2014-08-15 00:46:38.000000000","message":"revert the whitespace change on the previous line since it\u0027s unrelated.","commit_id":"b0b105c4d3418e0e1f61a1dd77dbcc317e4deac3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"7209b78dfebb6f397cabb1287890b5007bdfc155","unresolved":false,"context_lines":[{"line_number":35,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027assignment\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# NOTE(blk-u): The config option is not available at import time."},{"line_number":39,"context_line":"def get_expiration_time():"},{"line_number":40,"context_line":"    return CONF.assignment.cache_time or CONF.cache_time"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_40450cb2","line":38,"in_reply_to":"1abeadc6_e147ed1b","updated":"2014-09-08 02:29:44.000000000","message":"This whitespace change is required to pass pep8","commit_id":"b0b105c4d3418e0e1f61a1dd77dbcc317e4deac3"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"185619220d5c96a21b6802a8c6a90e583c38dac3","unresolved":false,"context_lines":[{"line_number":35,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027assignment\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# NOTE(blk-u): The config option is not available at import time."},{"line_number":39,"context_line":"def get_expiration_time():"},{"line_number":40,"context_line":"    return CONF.assignment.cache_time or CONF.cache_time"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_e147ed1b","line":38,"in_reply_to":"7ac7a964_e8ba42e0","updated":"2014-08-18 07:04:35.000000000","message":"pep8.","commit_id":"b0b105c4d3418e0e1f61a1dd77dbcc317e4deac3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ad7b9cf6682ada89755e171eb6146496eb2809b2","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# NOTE(blk-u): The config option is not available at import time."},{"line_number":39,"context_line":"def get_expiration_time():"},{"line_number":40,"context_line":"    return CONF.assignment.cache_time or CONF.cache_time"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def calc_default_domain():"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ac7a964_c8ee66ec","line":40,"updated":"2014-08-15 00:46:38.000000000","message":"the only actual change here is to add \"or CONF.cache_time\". I don\u0027t see why the name had to be changed.","commit_id":"b0b105c4d3418e0e1f61a1dd77dbcc317e4deac3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"7209b78dfebb6f397cabb1287890b5007bdfc155","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# NOTE(blk-u): The config option is not available at import time."},{"line_number":39,"context_line":"def get_expiration_time():"},{"line_number":40,"context_line":"    return CONF.assignment.cache_time or CONF.cache_time"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def calc_default_domain():"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_601130af","line":40,"in_reply_to":"1abeadc6_210005aa","updated":"2014-09-08 02:29:44.000000000","message":"I prefer the function to the lambda, and it should change names if we are changing it.","commit_id":"b0b105c4d3418e0e1f61a1dd77dbcc317e4deac3"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"185619220d5c96a21b6802a8c6a90e583c38dac3","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# NOTE(blk-u): The config option is not available at import time."},{"line_number":39,"context_line":"def get_expiration_time():"},{"line_number":40,"context_line":"    return CONF.assignment.cache_time or CONF.cache_time"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def calc_default_domain():"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_210005aa","line":40,"in_reply_to":"7ac7a964_c8ee66ec","updated":"2014-08-18 07:04:35.000000000","message":"http://legacy.python.org/dev/peps/pep-0008/#function-names","commit_id":"b0b105c4d3418e0e1f61a1dd77dbcc317e4deac3"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"7f1651de65577a863762bc6c1e1fe0a0b83c3771","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# NOTE(blk-u): The config option is not available at import time."},{"line_number":40,"context_line":"def get_expiration_time():"},{"line_number":41,"context_line":"    return CONF.assignment.cache_time or CONF.cache_time"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_e230b2a0","line":40,"updated":"2014-09-08 15:12:48.000000000","message":"This code is duplicated in keystone/catalog/core.py: 40\nIs there any standard configuration interface to avoid this?","commit_id":"f8df07320e7a654fe68ef733fea4070d67124569"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40d194e63df790b5ca150a36ee5d4722e57687f3","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"},{"line_number":35,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":36,"context_line":"MEMOIZE \u003d cache.get_memoization_decorator(\u0027role\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def deprecated_to_role_api(f):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_190ca293","line":36,"updated":"2015-02-26 01:20:31.000000000","message":"should be \"section\u003d\u0027role\u0027\" for consistency.","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"}],"keystone/catalog/core.py":[{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"7f1651de65577a863762bc6c1e1fe0a0b83c3771","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# NOTE(blk-u): The config options are not available at import time."},{"line_number":40,"context_line":"def get_expiration_time():"},{"line_number":41,"context_line":"    return CONF.catalog.cache_time or CONF.cache_time"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_62ca0270","line":40,"updated":"2014-09-08 15:12:48.000000000","message":"Duplicates keystone/assignment/core.py: 40\nIs it a temporary solution?","commit_id":"f8df07320e7a654fe68ef733fea4070d67124569"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6655056f1f2180b36a734e2584a4fb9e29d3c9e4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"CONF \u003d config.CONF"},{"line_number":35,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":36,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027catalog\u0027)"},{"line_number":37,"context_line":"EXPIRATION_TIME \u003d cache.get_expiration_time_fn(\u0027catalog\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def format_url(url, substitutions):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_3d794d2f","line":37,"updated":"2014-09-15 00:46:24.000000000","message":"I\u0027d prefer it if this had section\u003d\u0027catalog\u0027 so that we know it\u0027s the section name.\n\nAlso, as a cleanup, there could be one function that handled both functions:\n\n SHOULD_CACHE, EXPIRATION_TIME \u003d cache.get_cache_fns(section\u003d\u0027catalog\u0027)\n\nAlternatively, could return an instance with should_cache and expiration_time members:\n\n CACHE_INFO \u003d cache.get_cache_fns(section\u003d\u0027catalog\u0027)\n\n @cache.on_arguments(should_cache_fn\u003dCACHE_INFO.should_cache, \n                                     expiration_time\u003dCACHE_INFO.expiration_time_fn)\n\nCACHE_INFO could just have the decorator:\n\n  @CACHE_INFO.on_arguments","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5986798a1bbc178228e5ffb8014d9082af871dcb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"CONF \u003d config.CONF"},{"line_number":35,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":36,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027catalog\u0027)"},{"line_number":37,"context_line":"EXPIRATION_TIME \u003d cache.get_expiration_time_fn(\u0027catalog\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def format_url(url, substitutions):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_2cc5eb8d","line":37,"in_reply_to":"fa98f980_3d794d2f","updated":"2014-11-21 18:35:34.000000000","message":"I\u0027ll take a stab at making cache_info support the decorator as described.","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ae003e1db80298ede66fd13be0f6e99cf88cbd38","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"CONF \u003d cfg.CONF"},{"line_number":36,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":37,"context_line":"MEMOIZE \u003d cache.get_memoization_decorator(section\u003d\u0027catalog\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def format_url(url, substitutions):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_ca805ff9","line":37,"updated":"2015-03-16 08:40:07.000000000","message":"why uppercase?","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"1d10b30379f4ff55ec6f18cb40d6ed6d247231ab","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        notifications.Audit.created(self._REGION, ret[\u0027id\u0027], initiator)"},{"line_number":117,"context_line":"        return ret"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @MEMOIZE"},{"line_number":120,"context_line":"    def get_region(self, region_id):"},{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            return self.driver.get_region(region_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_abac2cee","line":119,"updated":"2015-03-14 01:49:28.000000000","message":"cache.on_arguments seems a lot uglier than MEMOIZE.  Nice to see this cleanup","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"}],"keystone/common/cache/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6655056f1f2180b36a734e2584a4fb9e29d3c9e4","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    For any given driver in keystone that has caching capabilities, an int"},{"line_number":190,"context_line":"    config option called ``cache_time`` for that driver\u0027s section"},{"line_number":191,"context_line":"    (e.g. ``token``) should exist and default to ``None``. This function will"},{"line_number":192,"context_line":"    use that value to tell the caching decorator of the TTL override for"},{"line_number":193,"context_line":"    caching the resulting objects. If the value of the config option is"},{"line_number":194,"context_line":"    ``None`` the default value provided in the ``[cache] expiration_time``"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_3da06d8f","line":191,"updated":"2014-09-15 00:46:24.000000000","message":"what if it doesn\u0027t default to None?","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5986798a1bbc178228e5ffb8014d9082af871dcb","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    For any given driver in keystone that has caching capabilities, an int"},{"line_number":190,"context_line":"    config option called ``cache_time`` for that driver\u0027s section"},{"line_number":191,"context_line":"    (e.g. ``token``) should exist and default to ``None``. This function will"},{"line_number":192,"context_line":"    use that value to tell the caching decorator of the TTL override for"},{"line_number":193,"context_line":"    caching the resulting objects. If the value of the config option is"},{"line_number":194,"context_line":"    ``None`` the default value provided in the ``[cache] expiration_time``"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_2c696bbe","line":191,"in_reply_to":"fa98f980_3da06d8f","updated":"2014-11-21 18:35:34.000000000","message":"If it defaults to *something* other than None, that will be used as the TTL, coerced to an Int. dogpile relies on None to indicate that the @on_arguments memoization should not override the default passed to the Region itself.","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6655056f1f2180b36a734e2584a4fb9e29d3c9e4","unresolved":false,"context_lines":[{"line_number":213,"context_line":"    \"\"\""},{"line_number":214,"context_line":"    def get_expiration_time():"},{"line_number":215,"context_line":"        conf_group \u003d getattr(CONF, section)"},{"line_number":216,"context_line":"        return getattr(conf_group, \u0027cache_time\u0027, None)"},{"line_number":217,"context_line":"    return get_expiration_time"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_5d745135","line":216,"updated":"2014-09-15 00:46:24.000000000","message":"shouldn\u0027t it be an error if there\u0027s no cache_time? e.g., this should be\n\n  return conf_group.cache_time","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5986798a1bbc178228e5ffb8014d9082af871dcb","unresolved":false,"context_lines":[{"line_number":213,"context_line":"    \"\"\""},{"line_number":214,"context_line":"    def get_expiration_time():"},{"line_number":215,"context_line":"        conf_group \u003d getattr(CONF, section)"},{"line_number":216,"context_line":"        return getattr(conf_group, \u0027cache_time\u0027, None)"},{"line_number":217,"context_line":"    return get_expiration_time"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_4cadd7e8","line":216,"in_reply_to":"7a8c0949_7568a587","updated":"2014-11-21 18:35:34.000000000","message":"This is similar to the get_should_cache_fn and is meant to be as defensive as possible.","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c4be71ecda044c703208bc7cb4839a0896dbc351","unresolved":false,"context_lines":[{"line_number":213,"context_line":"    \"\"\""},{"line_number":214,"context_line":"    def get_expiration_time():"},{"line_number":215,"context_line":"        conf_group \u003d getattr(CONF, section)"},{"line_number":216,"context_line":"        return getattr(conf_group, \u0027cache_time\u0027, None)"},{"line_number":217,"context_line":"    return get_expiration_time"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8c0949_7568a587","line":216,"in_reply_to":"fa98f980_5d745135","updated":"2014-11-07 09:36:46.000000000","message":"Should this error if there isn\u0027t a ``cache_time`` option? I think if this is called internally then there shouldn\u0027t be.","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7f781df674f710c0cd2ee3eba63c688a208e4c80","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    For any given driver in keystone that has caching capabilities, an int"},{"line_number":203,"context_line":"    config option called ``cache_time`` for that driver\u0027s section"},{"line_number":204,"context_line":"    (e.g. ``token``) should exist and typically default to ``None``. This"},{"line_number":205,"context_line":"    function wil use that value to tell the caching decorator of the TTL"},{"line_number":206,"context_line":"    override for caching the resulting objects. If the value of the config"},{"line_number":207,"context_line":"    option is ``None`` the default value provided in the"},{"line_number":208,"context_line":"    ``[cache] expiration_time`` option will be used by the decorator. The"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_475c0d1a","line":205,"updated":"2014-12-01 00:21:37.000000000","message":"change \"wil\" to \"will\"","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ef96b6085b7a230438a1a310fb6b4c8a37370263","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    For any given driver in keystone that has caching capabilities, an int"},{"line_number":203,"context_line":"    config option called ``cache_time`` for that driver\u0027s section"},{"line_number":204,"context_line":"    (e.g. ``token``) should exist and typically default to ``None``. This"},{"line_number":205,"context_line":"    function wil use that value to tell the caching decorator of the TTL"},{"line_number":206,"context_line":"    override for caching the resulting objects. If the value of the config"},{"line_number":207,"context_line":"    option is ``None`` the default value provided in the"},{"line_number":208,"context_line":"    ``[cache] expiration_time`` option will be used by the decorator. The"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_5d207af7","line":205,"in_reply_to":"5a890539_475c0d1a","updated":"2015-02-25 14:36:33.000000000","message":"Done","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7f781df674f710c0cd2ee3eba63c688a208e4c80","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    ``[cache] expiration_time`` option will be used by the decorator. The"},{"line_number":209,"context_line":"    default may be set to something other than ``None`` in cases where the"},{"line_number":210,"context_line":"    caching TTL should not be tied to the global default(s) (e.g."},{"line_number":211,"context_line":"    revocation_list changes very infrenquently and can be cached for \u003e1h by"},{"line_number":212,"context_line":"    default)."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    To properly use this with the decorator, pass this function the"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_679ae9c6","line":211,"updated":"2014-12-01 00:21:37.000000000","message":"change \"infrenquently\" to \"infrequently\"","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ef96b6085b7a230438a1a310fb6b4c8a37370263","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    ``[cache] expiration_time`` option will be used by the decorator. The"},{"line_number":209,"context_line":"    default may be set to something other than ``None`` in cases where the"},{"line_number":210,"context_line":"    caching TTL should not be tied to the global default(s) (e.g."},{"line_number":211,"context_line":"    revocation_list changes very infrenquently and can be cached for \u003e1h by"},{"line_number":212,"context_line":"    default)."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    To properly use this with the decorator, pass this function the"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_7d1d36bd","line":211,"in_reply_to":"5a890539_679ae9c6","updated":"2015-02-25 14:36:33.000000000","message":"Done","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7f781df674f710c0cd2ee3eba63c688a208e4c80","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    :param section: name of the configuration section to examine"},{"line_number":228,"context_line":"    :type section: string"},{"line_number":229,"context_line":"    :returns: function reference"},{"line_number":230,"context_line":"    \"\"\""},{"line_number":231,"context_line":"    def get_expiration_time():"},{"line_number":232,"context_line":"        conf_group \u003d getattr(CONF, section)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_879d15be","line":229,"updated":"2014-12-01 00:21:37.000000000","message":"should be :rtype:","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ef96b6085b7a230438a1a310fb6b4c8a37370263","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    :param section: name of the configuration section to examine"},{"line_number":228,"context_line":"    :type section: string"},{"line_number":229,"context_line":"    :returns: function reference"},{"line_number":230,"context_line":"    \"\"\""},{"line_number":231,"context_line":"    def get_expiration_time():"},{"line_number":232,"context_line":"        conf_group \u003d getattr(CONF, section)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_bc29e038","line":229,"in_reply_to":"5a890539_879d15be","updated":"2015-02-25 14:36:33.000000000","message":"Done","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7f781df674f710c0cd2ee3eba63c688a208e4c80","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                               to using ``section`` if the value is unspecified"},{"line_number":290,"context_line":"                               or ``None``"},{"line_number":291,"context_line":"    :type expiration_section: string"},{"line_number":292,"context_line":"    :return: function reference"},{"line_number":293,"context_line":"    \"\"\""},{"line_number":294,"context_line":"    if expiration_section is None:"},{"line_number":295,"context_line":"        expiration_section \u003d section"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_c7a71d0a","line":292,"updated":"2014-12-01 00:21:37.000000000","message":"should be :rtype:","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ef96b6085b7a230438a1a310fb6b4c8a37370263","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                               to using ``section`` if the value is unspecified"},{"line_number":290,"context_line":"                               or ``None``"},{"line_number":291,"context_line":"    :type expiration_section: string"},{"line_number":292,"context_line":"    :return: function reference"},{"line_number":293,"context_line":"    \"\"\""},{"line_number":294,"context_line":"    if expiration_section is None:"},{"line_number":295,"context_line":"        expiration_section \u003d section"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_3cc33058","line":292,"in_reply_to":"5a890539_c7a71d0a","updated":"2015-02-25 14:36:33.000000000","message":"Done","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40d194e63df790b5ca150a36ee5d4722e57687f3","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        from keystone.common import cache"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        cache_on_arguments \u003d cache.get_memoization_decorator(section\u003d\u0027token\u0027)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        @cache_on_arguments"},{"line_number":274,"context_line":"        def function(arg1, arg2):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_b9f6365b","line":271,"updated":"2015-02-26 01:20:31.000000000","message":"suggest change the name to \"MEMOIZE\" since this is what\u0027s actually used.","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40d194e63df790b5ca150a36ee5d4722e57687f3","unresolved":false,"context_lines":[{"line_number":294,"context_line":"    if expiration_section is None:"},{"line_number":295,"context_line":"        expiration_section \u003d section"},{"line_number":296,"context_line":"    should_cache \u003d should_cache_fn(section)"},{"line_number":297,"context_line":"    expiration_time \u003d get_expiration_time_fn(expiration_section)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    memoize \u003d REGION.cache_on_arguments(should_cache_fn\u003dshould_cache,"},{"line_number":300,"context_line":"                                        expiration_time\u003dexpiration_time)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_59b37a97","line":297,"updated":"2015-02-26 01:20:31.000000000","message":"I like that get_expiration_time_fn starts with get_, unlike should_cache_fn\n\nSuggest change name to expiration_time_fn","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40d194e63df790b5ca150a36ee5d4722e57687f3","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    # available. This is potentially interesting/useful to pre-seed cache"},{"line_number":304,"context_line":"    # values."},{"line_number":305,"context_line":"    setattr(memoize, \u0027should_cache_fn\u0027, should_cache)"},{"line_number":306,"context_line":"    setattr(memoize, \u0027expiration_time_fn\u0027, expiration_time)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    return memoize"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_3947a678","line":306,"updated":"2015-02-26 01:20:31.000000000","message":"use\n\n memoize.should_cache_fn \u003d should_cache\n memoize.expiration_time_fn \u003d expiration_time\n\notherwise we should consistently use setattr everywhere.\n\nAlso, I think these should be called memoize.should_cache and memoize.get_expiration_time","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"10a9a9546ef735ab369a99cab2f263cf859a816b","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    # available. This is potentially interesting/useful to pre-seed cache"},{"line_number":304,"context_line":"    # values."},{"line_number":305,"context_line":"    setattr(memoize, \u0027should_cache_fn\u0027, should_cache)"},{"line_number":306,"context_line":"    setattr(memoize, \u0027expiration_time_fn\u0027, expiration_time)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    return memoize"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_922ea7a3","line":306,"in_reply_to":"ba7be1f8_3947a678","updated":"2015-02-26 03:17:38.000000000","message":"IIRC setattr is needed here otherwise you run into issues with the way things fall through the method/decorator (memoize is not just a plain defined object, it\u0027s a callable which has other issues)","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ae003e1db80298ede66fd13be0f6e99cf88cbd38","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        conf_group \u003d getattr(CONF, section)"},{"line_number":195,"context_line":"        return getattr(conf_group, \u0027caching\u0027, True)"},{"line_number":196,"context_line":"    return should_cache"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"def get_expiration_time_fn(section):"},{"line_number":200,"context_line":"    \"\"\"Build a function that returns a config section\u0027s expiration time status."}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_b5e2acd2","line":197,"updated":"2015-03-16 08:40:07.000000000","message":"++","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"1d10b30379f4ff55ec6f18cb40d6ed6d247231ab","unresolved":false,"context_lines":[{"line_number":199,"context_line":"def get_expiration_time_fn(section):"},{"line_number":200,"context_line":"    \"\"\"Build a function that returns a config section\u0027s expiration time status."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    For any given driver in keystone that has caching capabilities, an int"},{"line_number":203,"context_line":"    config option called ``cache_time`` for that driver\u0027s section"},{"line_number":204,"context_line":"    (e.g. ``token``) should exist and typically default to ``None``. This"},{"line_number":205,"context_line":"    function will use that value to tell the caching decorator of the TTL"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_4b7bb07a","line":202,"updated":"2015-03-14 01:49:28.000000000","message":"Very nice comment!","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ae003e1db80298ede66fd13be0f6e99cf88cbd38","unresolved":false,"context_lines":[{"line_number":252,"context_line":"REGION \u003d dogpile.cache.make_region("},{"line_number":253,"context_line":"    function_key_generator\u003dfunction_key_generator)"},{"line_number":254,"context_line":"on_arguments \u003d REGION.cache_on_arguments"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"def get_memoization_decorator(section, expiration_section\u003dNone):"},{"line_number":258,"context_line":"    \"\"\"Build a function based on the `on_arguments` decorator for the section."}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_f58424d4","line":255,"updated":"2015-03-16 08:40:07.000000000","message":"++","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"1d10b30379f4ff55ec6f18cb40d6ed6d247231ab","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"def get_memoization_decorator(section, expiration_section\u003dNone):"},{"line_number":258,"context_line":"    \"\"\"Build a function based on the `on_arguments` decorator for the section."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    For any given driver in Keystone that has caching capabilities, a"},{"line_number":261,"context_line":"    pair of functions is required to properly determine the status of the"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_eb89c46f","line":258,"updated":"2015-03-14 01:49:28.000000000","message":"Another amazing comment!","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"1d10b30379f4ff55ec6f18cb40d6ed6d247231ab","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    :param section: name of the configuration section to examine"},{"line_number":286,"context_line":"    :type section: string"},{"line_number":287,"context_line":"    :param expiration_section: name of the configuration section to examine"},{"line_number":288,"context_line":"                               for the expiration option. This will fall back"},{"line_number":289,"context_line":"                               to using ``section`` if the value is unspecified"},{"line_number":290,"context_line":"                               or ``None``"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_8bc68898","line":287,"updated":"2015-03-14 01:49:28.000000000","message":"This is some pretty flexible support for getting the proper expiration_time from the right section","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7b96a913740f93651db29318e7223584331fdb91","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    # available. This is potentially interesting/useful to pre-seed cache"},{"line_number":304,"context_line":"    # values."},{"line_number":305,"context_line":"    setattr(memoize, \u0027should_cache_fn\u0027, should_cache)"},{"line_number":306,"context_line":"    setattr(memoize, \u0027expiration_time_fn\u0027, expiration_time)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    return memoize"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_996a75ec","line":306,"updated":"2015-03-08 14:52:20.000000000","message":"use\n\n memoize.should_cache_fn \u003d should_cache\n memoize.expiration_time_fn \u003d expiration_time\n\notherwise we should consistently use setattr everywhere.\n\nI tried it and it works.\n\nAlso, I think these should be called memoize.should_cache and memoize.get_expiration_time","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"103a7f242be48a135da25c1d7dbf7fcea040f95a","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    # available. This is potentially interesting/useful to pre-seed cache"},{"line_number":304,"context_line":"    # values."},{"line_number":305,"context_line":"    setattr(memoize, \u0027should_cache_fn\u0027, should_cache)"},{"line_number":306,"context_line":"    setattr(memoize, \u0027expiration_time_fn\u0027, expiration_time)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    return memoize"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_e4439c10","line":306,"in_reply_to":"9a80dd14_996a75ec","updated":"2015-03-10 00:41:16.000000000","message":"oh sure will propose a followup. that makes sense to me.","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ae003e1db80298ede66fd13be0f6e99cf88cbd38","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    # available. This is potentially interesting/useful to pre-seed cache"},{"line_number":304,"context_line":"    # values."},{"line_number":305,"context_line":"    setattr(memoize, \u0027should_cache_fn\u0027, should_cache)"},{"line_number":306,"context_line":"    setattr(memoize, \u0027expiration_time_fn\u0027, expiration_time)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    return memoize"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_356a3c1a","line":306,"in_reply_to":"9a80dd14_e4439c10","updated":"2015-03-16 08:40:07.000000000","message":"++","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"}],"keystone/common/config.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6655056f1f2180b36a734e2584a4fb9e29d3c9e4","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":279,"context_line":"                    help\u003d\u0027Toggle for revocation event caching. This has no \u0027"},{"line_number":280,"context_line":"                         \u0027effect unless global caching is enabled.\u0027),"},{"line_number":281,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027, default\u003d3600,"},{"line_number":282,"context_line":"                   help\u003d\u0027Time to cache the revocation list and the revocation \u0027"},{"line_number":283,"context_line":"                        \u0027events if revoke extension is enabled (in seconds). \u0027"},{"line_number":284,"context_line":"                        \u0027This has no effect unless global and token \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_fd9a6560","line":281,"updated":"2014-09-15 00:46:24.000000000","message":"The docstring for get_expiration_time_fn says this should default to None.","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5986798a1bbc178228e5ffb8014d9082af871dcb","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":279,"context_line":"                    help\u003d\u0027Toggle for revocation event caching. This has no \u0027"},{"line_number":280,"context_line":"                         \u0027effect unless global caching is enabled.\u0027),"},{"line_number":281,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027, default\u003d3600,"},{"line_number":282,"context_line":"                   help\u003d\u0027Time to cache the revocation list and the revocation \u0027"},{"line_number":283,"context_line":"                        \u0027events if revoke extension is enabled (in seconds). \u0027"},{"line_number":284,"context_line":"                        \u0027This has no effect unless global and token \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_ccef071d","line":281,"in_reply_to":"fa98f980_fd9a6560","updated":"2014-11-21 18:35:34.000000000","message":"This is a special case - I\u0027ll update the help text, but we *know* this is something we can cache for longer and should. Typically cache_time should be None and fall back to the global TTL.","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40d194e63df790b5ca150a36ee5d4722e57687f3","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                         \u0027effect unless global caching is enabled.\u0027),"},{"line_number":263,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027, default\u003d3600,"},{"line_number":264,"context_line":"                   help\u003d\u0027Time to cache the revocation list and the revocation \u0027"},{"line_number":265,"context_line":"                        \u0027events if revoke extension is enabled (in seconds). \u0027"},{"line_number":266,"context_line":"                        \u0027This has no effect unless global and token \u0027"},{"line_number":267,"context_line":"                        \u0027caching are enabled.\u0027,"},{"line_number":268,"context_line":"                   deprecated_opts\u003d[cfg.DeprecatedOpt("}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_9c3320f5","line":265,"updated":"2015-02-26 01:20:31.000000000","message":"I believe the revoke extension is required to be enabled now?","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ae003e1db80298ede66fd13be0f6e99cf88cbd38","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":232,"context_line":"                    help\u003d\u0027Toggle for token system caching. This has no \u0027"},{"line_number":233,"context_line":"                         \u0027effect unless global caching is enabled.\u0027),"},{"line_number":234,"context_line":"        cfg.IntOpt(\u0027revocation_cache_time\u0027, default\u003d3600,"},{"line_number":235,"context_line":"                   help\u003d\u0027Time to cache the revocation list and the revocation \u0027"},{"line_number":236,"context_line":"                        \u0027events if revoke extension is enabled (in seconds). \u0027"},{"line_number":237,"context_line":"                        \u0027This has no effect unless global and token \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_b568ecf5","side":"PARENT","line":234,"updated":"2015-03-16 08:40:07.000000000","message":"what if somebody has config with some non-default value configured here?  The code will suddently \"switch\" to revoke/cache_time value hence old  cache expiration time will be discarded?","commit_id":"b3f8d21863bcfc8b2afb753f8962fe0d6086fd15"}],"keystone/contrib/revoke/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40d194e63df790b5ca150a36ee5d4722e57687f3","unresolved":false,"context_lines":[{"line_number":52,"context_line":"extension.register_admin_extension(EXTENSION_DATA[\u0027alias\u0027], EXTENSION_DATA)"},{"line_number":53,"context_line":"extension.register_public_extension(EXTENSION_DATA[\u0027alias\u0027], EXTENSION_DATA)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"MEMOIZE \u003d cache.get_memoization_decorator(\u0027revoke\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def revoked_before_cutoff_time():"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_3c5a342a","line":55,"updated":"2015-02-26 01:20:31.000000000","message":"suggest \"section\u003d\u0027revoke\u0027\"","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"}],"keystone/identity/core.py":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"1d10b30379f4ff55ec6f18cb40d6ed6d247231ab","unresolved":false,"context_lines":[{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    @domains_configured"},{"line_number":605,"context_line":"    @exception_translated(\u0027user\u0027)"},{"line_number":606,"context_line":"    @MEMOIZE"},{"line_number":607,"context_line":"    def get_user(self, user_id):"},{"line_number":608,"context_line":"        domain_id, driver, entity_id \u003d ("},{"line_number":609,"context_line":"            self._get_domain_driver_and_entity_id(user_id))"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_eb6544af","line":606,"updated":"2015-03-14 01:49:28.000000000","message":"I really like how the caching characteristics are encapsulated in the decorator returned by get_memoization_decorator.  It ensures consistency and the code is a lot easier to mainain if the caching characteristics need to change","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"}],"keystone/resource/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40d194e63df790b5ca150a36ee5d4722e57687f3","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"CONF \u003d cfg.CONF"},{"line_number":33,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":34,"context_line":"MEMOIZE \u003d cache.get_memoization_decorator(section\u003d\u0027resource\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def calc_default_domain():"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_9c4a4053","line":34,"updated":"2015-02-26 01:20:31.000000000","message":"nice!","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40d194e63df790b5ca150a36ee5d4722e57687f3","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                             parents_list)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        ret \u003d self.driver.create_project(tenant_id, tenant)"},{"line_number":109,"context_line":"        if MEMOIZE.should_cache_fn(ret):"},{"line_number":110,"context_line":"            self.get_project.set(ret, self, tenant_id)"},{"line_number":111,"context_line":"            self.get_project_by_name.set(ret, self, ret[\u0027name\u0027],"},{"line_number":112,"context_line":"                                         ret[\u0027domain_id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_dc77589e","line":109,"updated":"2015-02-26 01:20:31.000000000","message":"doesn\u0027t this return a function? seems like this should be \"should_cache\" rather than \"should_cache_fn\"","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"10a9a9546ef735ab369a99cab2f263cf859a816b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                             parents_list)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        ret \u003d self.driver.create_project(tenant_id, tenant)"},{"line_number":109,"context_line":"        if MEMOIZE.should_cache_fn(ret):"},{"line_number":110,"context_line":"            self.get_project.set(ret, self, tenant_id)"},{"line_number":111,"context_line":"            self.get_project_by_name.set(ret, self, ret[\u0027name\u0027],"},{"line_number":112,"context_line":"                                         ret[\u0027domain_id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_720a1327","line":109,"in_reply_to":"ba7be1f8_dc77589e","updated":"2015-02-26 03:17:38.000000000","message":"should_cache_fn is actually the rerturned function. the get_memoization_decorator builds it.","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"}],"keystone/tests/test_cache.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6655056f1f2180b36a734e2584a4fb9e29d3c9e4","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertEqual(cache_time, expiration_time())"},{"line_number":158,"context_line":"        _do_test(value\u003dtest_value)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # Run the test with the assignment cache_time value set to None and"},{"line_number":161,"context_line":"        # the global value set."},{"line_number":162,"context_line":"        self.config_fixture.config(cache_time\u003dNone, group\u003d\u0027assignment\u0027)"},{"line_number":163,"context_line":"        test_value \u003d TestProxyValue(uuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_5dab7174","line":160,"updated":"2014-09-15 00:46:24.000000000","message":"why not just split this into 2 functions?","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5986798a1bbc178228e5ffb8014d9082af871dcb","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertEqual(cache_time, expiration_time())"},{"line_number":158,"context_line":"        _do_test(value\u003dtest_value)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # Run the test with the assignment cache_time value set to None and"},{"line_number":161,"context_line":"        # the global value set."},{"line_number":162,"context_line":"        self.config_fixture.config(cache_time\u003dNone, group\u003d\u0027assignment\u0027)"},{"line_number":163,"context_line":"        test_value \u003d TestProxyValue(uuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_2cdecb6d","line":160,"in_reply_to":"7a8c0949_95d43121","updated":"2014-11-21 18:35:34.000000000","message":"Done in next","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c4be71ecda044c703208bc7cb4839a0896dbc351","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertEqual(cache_time, expiration_time())"},{"line_number":158,"context_line":"        _do_test(value\u003dtest_value)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # Run the test with the assignment cache_time value set to None and"},{"line_number":161,"context_line":"        # the global value set."},{"line_number":162,"context_line":"        self.config_fixture.config(cache_time\u003dNone, group\u003d\u0027assignment\u0027)"},{"line_number":163,"context_line":"        test_value \u003d TestProxyValue(uuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8c0949_95d43121","line":160,"in_reply_to":"fa98f980_5dab7174","updated":"2014-11-07 09:36:46.000000000","message":"+1","commit_id":"2935a29634fb500d77ab304309c70765c8ef8bcf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7f781df674f710c0cd2ee3eba63c688a208e4c80","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                                 function_with_cache(value).value)"},{"line_number":138,"context_line":"                # Override the return of the function to be different than what"},{"line_number":139,"context_line":"                # we would normally get back. The value should be the same."},{"line_number":140,"context_line":"                override_fn_return \u003d True"},{"line_number":141,"context_line":"                self.assertEqual(cached_value.value,"},{"line_number":142,"context_line":"                                 function_with_cache(value).value)"},{"line_number":143,"context_line":"                # override the system time to ensure  the non-cached override"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_6781094d","line":140,"updated":"2014-12-01 00:21:37.000000000","message":"I think that if a class was used (where a property is changed) then this would be easier to understand.","commit_id":"602b63b84810f0d8b2304254bf2c70f93069f06e"}],"keystone/tests/unit/test_cache.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40d194e63df790b5ca150a36ee5d4722e57687f3","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                                 function_with_cache(value).value)"},{"line_number":138,"context_line":"                # Override the return of the function to be different than what"},{"line_number":139,"context_line":"                # we would normally get back. The value should be the same."},{"line_number":140,"context_line":"                override_fn_return \u003d True"},{"line_number":141,"context_line":"                self.assertEqual(cached_value.value,"},{"line_number":142,"context_line":"                                 function_with_cache(value).value)"},{"line_number":143,"context_line":"                # override the system time to ensure  the non-cached override"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_3938863c","line":140,"updated":"2015-02-26 01:20:31.000000000","message":"I think that if a class was used (where a property is changed) then this would be easier to understand.","commit_id":"b31703b58e15dc80fe0433a20e2798c0a6d99253"}],"keystone/token/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ad7b9cf6682ada89755e171eb6146496eb2809b2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027token\u0027)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# NOTE(blk-u): The config options are not available at import time."},{"line_number":32,"context_line":"REVOCATION_CACHE_EXPIRATION_TIME \u003d lambda: CONF.token.revocation_cache_time"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@versionutils.deprecated("}],"source_content_type":"text/x-python","patch_set":3,"id":"7ac7a964_8892ae55","line":32,"updated":"2014-08-15 00:46:38.000000000","message":"the change on the previous line should be done in a separate commit since it\u0027s not related.","commit_id":"b0b105c4d3418e0e1f61a1dd77dbcc317e4deac3"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"185619220d5c96a21b6802a8c6a90e583c38dac3","unresolved":false,"context_lines":[{"line_number":29,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027token\u0027)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# NOTE(blk-u): The config options are not available at import time."},{"line_number":32,"context_line":"REVOCATION_CACHE_EXPIRATION_TIME \u003d lambda: CONF.token.revocation_cache_time"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@versionutils.deprecated("}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_a1b975eb","line":32,"in_reply_to":"7ac7a964_8892ae55","updated":"2014-08-18 07:04:35.000000000","message":"+1","commit_id":"b0b105c4d3418e0e1f61a1dd77dbcc317e4deac3"}],"keystone/token/persistence/core.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2dac975f24fa9df5e859c7ff33313f2c1da7f4c2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"REVOCATION_MEMOIZE \u003d cache.get_memoization_decorator("},{"line_number":37,"context_line":"    section\u003d\u0027token\u0027, expiration_section\u003d\u0027revoke\u0027)"},{"line_number":38,"context_line":"# NOTE(blk-u): The config options are not available at import time."},{"line_number":39,"context_line":"REVOCATION_CACHE_EXPIRATION_TIME \u003d lambda: CONF.revoke.cache_time"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027identity_api\u0027, \u0027token_provider_api\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_32cb8654","line":39,"updated":"2014-11-21 20:02:42.000000000","message":"Hey. this needs to be removed...","commit_id":"447dea0c5fc0a6e4bb695d4794ff9e62b9a19f8a"}],"keystone/token/provider.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7b96a913740f93651db29318e7223584331fdb91","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF \u003d cfg.CONF"},{"line_number":40,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":41,"context_line":"MEMOIZE \u003d cache.get_memoization_decorator(\u0027token\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# NOTE(morganfainberg): This is for compatibility in case someone was relying"},{"line_number":44,"context_line":"# on the old location of the UnsupportedTokenVersionException for their code."}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_f95ff13e","line":41,"updated":"2015-03-08 14:52:20.000000000","message":"suggest use section\u003d\u0027token\u0027","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"103a7f242be48a135da25c1d7dbf7fcea040f95a","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF \u003d cfg.CONF"},{"line_number":40,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":41,"context_line":"MEMOIZE \u003d cache.get_memoization_decorator(\u0027token\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# NOTE(morganfainberg): This is for compatibility in case someone was relying"},{"line_number":44,"context_line":"# on the old location of the UnsupportedTokenVersionException for their code."}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_24493431","line":41,"in_reply_to":"9a80dd14_f95ff13e","updated":"2015-03-10 00:41:16.000000000","message":"In followup.","commit_id":"3f1d7f30daee34555664ee3e553c6c2749b5f627"}]}
