)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":10,"context_line":"is gathered, cached, used, updated, etc."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This refactoring increases code reuse and is a basis for later"},{"line_number":13,"context_line":"addition of account ACLs. It should be preceeded with slowly"},{"line_number":14,"context_line":"removing the deprecatd code. This staged approach ensures the"},{"line_number":15,"context_line":"behaviour is unchanged."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPH%2F%2Fl14%3D","line":13,"updated":"2013-05-29 22:56:33.000000000","message":"*preceded","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This refactoring increases code reuse and is a basis for later"},{"line_number":13,"context_line":"addition of account ACLs. It should be preceeded with slowly"},{"line_number":14,"context_line":"removing the deprecatd code. This staged approach ensures the"},{"line_number":15,"context_line":"behaviour is unchanged."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I67b58030d3f9e3bc86bcd7ece0f1dc693c4e08c3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPH%2F%2Fl1w%3D","line":14,"updated":"2013-05-29 22:56:33.000000000","message":"*deprecated","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    headers \u003d dict((k.lower(), v) for k, v in dict(headers).iteritems())"},{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"        \u0027status\u0027: status_int,"},{"line_number":112,"context_line":"        # \u0027container_count\u0027 anomality:"},{"line_number":113,"context_line":"        # Previous code sometimes expects an int sometimes a string"},{"line_number":114,"context_line":"        # Current code aligns to str and None, yet translates to int in"},{"line_number":115,"context_line":"        # deprecated functions as needed"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FlYI%3D","line":112,"updated":"2013-05-29 22:56:33.000000000","message":"ITYM \"anomaly\"","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"76f0ba2b73a4ce6d85c946ce6eea711e24e2ce77","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        req_origin \u003d req.headers.get(\u0027Origin\u0027, None)"},{"line_number":169,"context_line":"        if req_origin:"},{"line_number":170,"context_line":"            # Yes, this is a CORS request so test if the origin is allowed"},{"line_number":171,"context_line":"            container_info \u003d \\"},{"line_number":172,"context_line":"                controller.container_info(controller.account_name,"},{"line_number":173,"context_line":"                                          controller.container_name)"},{"line_number":174,"context_line":"            cors_info \u003d container_info.get(\u0027cors\u0027, {})"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FloA%3D","line":171,"updated":"2013-05-29 21:16:15.000000000","message":"Should we also change this call site to use the non-deprecated method?","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    where info about accounts and containers is cached"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    :param   account: The name of the account"},{"line_number":257,"context_line":"    :param container: The name of teh container (or None if account)"},{"line_number":258,"context_line":"    :returns a touple of (cache_key, env_key)"},{"line_number":259,"context_line":"    \"\"\""},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2Fl1Q%3D","line":257,"updated":"2013-05-29 22:56:33.000000000","message":"*the","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    :param   account: The name of the account"},{"line_number":257,"context_line":"    :param container: The name of teh container (or None if account)"},{"line_number":258,"context_line":"    :returns a touple of (cache_key, env_key)"},{"line_number":259,"context_line":"    \"\"\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    if container:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2Fl1U%3D","line":258,"updated":"2013-05-29 22:56:33.000000000","message":"*tuple","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":269,"context_line":"def _set_info_cache(app, req, resp):"},{"line_number":270,"context_line":"    \"\"\""},{"line_number":271,"context_line":"    Cache info in both memcache and env"},{"line_number":272,"context_line":"    Caching is used to avoid unnecessery calls to account and container servers"},{"line_number":273,"context_line":"    This is a private function that is being called by GETorHEAD_base"},{"line_number":274,"context_line":"    Any attempt to GET or HEAD from the conatiner/account server should use"},{"line_number":275,"context_line":"    the GETorHEAD_base interface"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2Fl08%3D","line":272,"updated":"2013-05-29 22:56:33.000000000","message":"*unnecessary","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    Cache info in both memcache and env"},{"line_number":272,"context_line":"    Caching is used to avoid unnecessery calls to account and container servers"},{"line_number":273,"context_line":"    This is a private function that is being called by GETorHEAD_base"},{"line_number":274,"context_line":"    Any attempt to GET or HEAD from the conatiner/account server should use"},{"line_number":275,"context_line":"    the GETorHEAD_base interface"},{"line_number":276,"context_line":"    This function is also used by the clear_info_cache"},{"line_number":277,"context_line":"    to delete the cache entries"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FlX4%3D","line":274,"updated":"2013-05-29 22:56:33.000000000","message":"*container","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":323,"context_line":"def clear_info_cache(app, req):"},{"line_number":324,"context_line":"    \"\"\""},{"line_number":325,"context_line":"    Cache info in both memcache and env"},{"line_number":326,"context_line":"    Caching is used to avoid unnecessery calls to account and container servers"},{"line_number":327,"context_line":"    This is a private function that is being called by GETorHEAD_base"},{"line_number":328,"context_line":"    Any attempt to GET or HEAD from the conatiner/account server should use"},{"line_number":329,"context_line":"    the GETorHEAD_base interface"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2Fl04%3D","line":326,"updated":"2013-05-29 22:56:33.000000000","message":"*unnecessary","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    Cache info in both memcache and env"},{"line_number":326,"context_line":"    Caching is used to avoid unnecessery calls to account and container servers"},{"line_number":327,"context_line":"    This is a private function that is being called by GETorHEAD_base"},{"line_number":328,"context_line":"    Any attempt to GET or HEAD from the conatiner/account server should use"},{"line_number":329,"context_line":"    the GETorHEAD_base interface"},{"line_number":330,"context_line":"    This function is also used by the clear_info_cache"},{"line_number":331,"context_line":"    to delete the cache entries"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FlXs%3D","line":328,"updated":"2013-05-29 22:56:33.000000000","message":"*container","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":361,"context_line":"    return info"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"def get_info(app, env, account, container\u003dNone, ret_not_found\u003dFalse):"},{"line_number":365,"context_line":"    \"\"\""},{"line_number":366,"context_line":"    Get the info about accounts or containers"},{"line_number":367,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FlXk%3D","line":364,"updated":"2013-05-29 22:56:33.000000000","message":"Can you elaborate more on the purpose of the `ret_not_found` parameter? It doesn\u0027t seem necessary to me, but maybe I just haven\u0027t seen the caller that needs it yet.","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":368,"context_line":"    :param  app: the application object"},{"line_number":369,"context_line":"    :param  env: the environment used by the current request"},{"line_number":370,"context_line":"    :param   account: The name of the account"},{"line_number":371,"context_line":"    :param container: The name of teh container (or None if account)"},{"line_number":372,"context_line":"    :returns the cached info or None if cannot be retrived"},{"line_number":373,"context_line":"    \"\"\""},{"line_number":374,"context_line":"    info \u003d _get_info_cache(app, env, account, container)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2Fl00%3D","line":371,"updated":"2013-05-29 22:56:33.000000000","message":"*the","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":369,"context_line":"    :param  env: the environment used by the current request"},{"line_number":370,"context_line":"    :param   account: The name of the account"},{"line_number":371,"context_line":"    :param container: The name of teh container (or None if account)"},{"line_number":372,"context_line":"    :returns the cached info or None if cannot be retrived"},{"line_number":373,"context_line":"    \"\"\""},{"line_number":374,"context_line":"    info \u003d _get_info_cache(app, env, account, container)"},{"line_number":375,"context_line":"    if info:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2Fl0w%3D","line":372,"updated":"2013-05-29 22:56:33.000000000","message":"*retrieved","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        if ret_not_found or is_success(info[\u0027status\u0027]):"},{"line_number":377,"context_line":"            return info"},{"line_number":378,"context_line":"        return None"},{"line_number":379,"context_line":"    # Not in cached, lets try the account servers"},{"line_number":380,"context_line":"    path \u003d \u0027/v1/%s\u0027 % account"},{"line_number":381,"context_line":"    if container:"},{"line_number":382,"context_line":"        # Stop and check if we have an account?"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FlXc%3D","line":379,"updated":"2013-05-29 22:56:33.000000000","message":"\"let\u0027s\" with an apostrophe","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"468980948d119048b90f9d253c451daa60c952c7","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        split_path(env[\u0027PATH_INFO\u0027], 3, 4, True)"},{"line_number":224,"context_line":"    info \u003d get_info(app, env, account, container, ret_not_found\u003dTrue)"},{"line_number":225,"context_line":"    if not info:"},{"line_number":226,"context_line":"        info \u003d headers_to_container_info({}, 0)"},{"line_number":227,"context_line":"    return info"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FjSs%3D","line":226,"updated":"2013-05-30 18:18:27.000000000","message":"status code 0? seems odd to me; maybe you want 404 here?","commit_id":"92ac9c43feb18a30760b9b0f889b2601c5582a94"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"ef4893928474833207627e622acecdf2d34b5116","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        split_path(env[\u0027PATH_INFO\u0027], 3, 4, True)"},{"line_number":224,"context_line":"    info \u003d get_info(app, env, account, container, ret_not_found\u003dTrue)"},{"line_number":225,"context_line":"    if not info:"},{"line_number":226,"context_line":"        info \u003d headers_to_container_info({}, 0)"},{"line_number":227,"context_line":"    return info"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fiq8%3D","line":226,"in_reply_to":"AAAAPH%2F%2FjEs%3D","updated":"2013-05-30 23:02:34.000000000","message":"Well, that\u0027s technically not true here; in case of a missing container, this function would have returned a status 404.\n\nHowever, the one caller of get_container_info in the Swift codebase is only inspecting the status code to see if it\u0027s 2xx or not, so in that case, 0 vs. 404 is moot.","commit_id":"92ac9c43feb18a30760b9b0f889b2601c5582a94"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"fafe4353e80b566e0529cc8c297a6596bb1a6964","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        split_path(env[\u0027PATH_INFO\u0027], 3, 4, True)"},{"line_number":224,"context_line":"    info \u003d get_info(app, env, account, container, ret_not_found\u003dTrue)"},{"line_number":225,"context_line":"    if not info:"},{"line_number":226,"context_line":"        info \u003d headers_to_container_info({}, 0)"},{"line_number":227,"context_line":"    return info"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FjEs%3D","line":226,"in_reply_to":"AAAAPH%2F%2FjSs%3D","updated":"2013-05-30 19:34:16.000000000","message":"Well it is odd to me as well - but it is how the original code behaved and this patch avoid changing get_info external behavior wherever possible. (Leaving such changes to future patch)","commit_id":"92ac9c43feb18a30760b9b0f889b2601c5582a94"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"ecc8d898f2ea3a99a81c93e593867d36f0731e03","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    return cache_key"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def get_container_memcache_key(account, container):"},{"line_number":99,"context_line":"    cache_key, env_key \u003d _get_cache_key(account, container)"},{"line_number":100,"context_line":"    return cache_key"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fb7c%3D","line":98,"updated":"2013-06-04 01:05:29.000000000","message":"I\u0027d really like to have some check that the caller actually passed in a container here. Otherwise, callers might inadvertently get back an account\u0027s cache key.\n\nIt doesn\u0027t have to be at all fancy; something really simple like this would be just fine:\n\n    if not container:\n        raise ValueError(\"container not provided\")\n\nI think raising an exception is much nicer to the caller than handing back something almost, but not totally, unlike a container cache key.","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"0f36b4d1171aa5ce1c01a32c1fe00bea7ac2630b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    return cache_key"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def get_container_memcache_key(account, container):"},{"line_number":99,"context_line":"    cache_key, env_key \u003d _get_cache_key(account, container)"},{"line_number":100,"context_line":"    return cache_key"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2F%2F3A%3D","line":98,"in_reply_to":"AAAAPH%2F%2Fb7c%3D","updated":"2013-06-04 06:40:03.000000000","message":"Sounds right.  (I was hoping to deprecate this function).","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"ecc8d898f2ea3a99a81c93e593867d36f0731e03","unresolved":false,"context_lines":[{"line_number":213,"context_line":"    Get the info structure for a container, based on env and app."},{"line_number":214,"context_line":"    This is useful to middlewares."},{"line_number":215,"context_line":"    Note: This call bypasses auth. Success does not imply that the"},{"line_number":216,"context_line":"          request has authorization to the get_info."},{"line_number":217,"context_line":"    \"\"\""},{"line_number":218,"context_line":"    (version, account, container, _) \u003d \\"},{"line_number":219,"context_line":"        split_path(env[\u0027PATH_INFO\u0027], 3, 4, True)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2FcM8%3D","line":216,"updated":"2013-06-04 01:05:29.000000000","message":"I think \"get_info\" here should just be \"container.\"\n\n(Yes, it was funny-looking before too, but since you\u0027re in here, it\u0027d be nice to fix it.)","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"0f36b4d1171aa5ce1c01a32c1fe00bea7ac2630b","unresolved":false,"context_lines":[{"line_number":213,"context_line":"    Get the info structure for a container, based on env and app."},{"line_number":214,"context_line":"    This is useful to middlewares."},{"line_number":215,"context_line":"    Note: This call bypasses auth. Success does not imply that the"},{"line_number":216,"context_line":"          request has authorization to the get_info."},{"line_number":217,"context_line":"    \"\"\""},{"line_number":218,"context_line":"    (version, account, container, _) \u003d \\"},{"line_number":219,"context_line":"        split_path(env[\u0027PATH_INFO\u0027], 3, 4, True)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2F%2F1Q%3D","line":216,"in_reply_to":"AAAAPH%2F%2FcM8%3D","updated":"2013-06-04 06:40:03.000000000","message":"Done","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"ecc8d898f2ea3a99a81c93e593867d36f0731e03","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    # Use a unique environment cache key per account and one container."},{"line_number":259,"context_line":"    # This allows caching both account and container and ensures that when we"},{"line_number":260,"context_line":"    # copy this env to form a new request, it won\u0027t accidentally reuse the"},{"line_number":261,"context_line":"    # old container or accont info"},{"line_number":262,"context_line":"    env_key \u003d \u0027swift.%s\u0027 % cache_key"},{"line_number":263,"context_line":"    return cache_key, env_key"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2FcLA%3D","line":261,"updated":"2013-06-04 01:05:29.000000000","message":"*account","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"0f36b4d1171aa5ce1c01a32c1fe00bea7ac2630b","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    # Use a unique environment cache key per account and one container."},{"line_number":259,"context_line":"    # This allows caching both account and container and ensures that when we"},{"line_number":260,"context_line":"    # copy this env to form a new request, it won\u0027t accidentally reuse the"},{"line_number":261,"context_line":"    # old container or accont info"},{"line_number":262,"context_line":"    env_key \u003d \u0027swift.%s\u0027 % cache_key"},{"line_number":263,"context_line":"    return cache_key, env_key"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2F%2F1I%3D","line":261,"in_reply_to":"AAAAPH%2F%2FcLA%3D","updated":"2013-06-04 06:40:03.000000000","message":"Done","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"ecc8d898f2ea3a99a81c93e593867d36f0731e03","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    if not cache_time:"},{"line_number":297,"context_line":"        env.pop(env_key, None)"},{"line_number":298,"context_line":"        memcache \u003d getattr(app, \u0027memcache\u0027, None) or env.get(\u0027swift.cache\u0027)"},{"line_number":299,"context_line":"        if memcache:"},{"line_number":300,"context_line":"            memcache.delete(cache_key)"},{"line_number":301,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2FcKY%3D","line":298,"updated":"2013-06-04 01:05:29.000000000","message":"It\u0027s a small thing, but there are two places in this function where a memcache handle is pulled out. Could you move this up higher in the function and get rid of the other one?","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"0f36b4d1171aa5ce1c01a32c1fe00bea7ac2630b","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    if not cache_time:"},{"line_number":297,"context_line":"        env.pop(env_key, None)"},{"line_number":298,"context_line":"        memcache \u003d getattr(app, \u0027memcache\u0027, None) or env.get(\u0027swift.cache\u0027)"},{"line_number":299,"context_line":"        if memcache:"},{"line_number":300,"context_line":"            memcache.delete(cache_key)"},{"line_number":301,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2F%2F1A%3D","line":298,"in_reply_to":"AAAAPH%2F%2FcKY%3D","updated":"2013-06-04 06:40:03.000000000","message":"Done","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"ecc8d898f2ea3a99a81c93e593867d36f0731e03","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        \"\"\""},{"line_number":557,"context_line":"        partition, nodes \u003d self.app.account_ring.get_nodes(account)"},{"line_number":558,"context_line":"        if req:"},{"line_number":559,"context_line":"            env \u003d getattr(req, \u0027environ\u0027, {})"},{"line_number":560,"context_line":"        else:"},{"line_number":561,"context_line":"            env \u003d {}"},{"line_number":562,"context_line":"        info \u003d get_info(self.app, env, account)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fb%2FQ%3D","line":559,"updated":"2013-06-04 01:05:29.000000000","message":"If there really are places in the codebase where Request objects are being generated without an environment, then I\u0027d rather have this fix in swob.Request.__init__().\n\nIf there are no such places, then let\u0027s just say \"req.environ\" here.","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"0f36b4d1171aa5ce1c01a32c1fe00bea7ac2630b","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        \"\"\""},{"line_number":557,"context_line":"        partition, nodes \u003d self.app.account_ring.get_nodes(account)"},{"line_number":558,"context_line":"        if req:"},{"line_number":559,"context_line":"            env \u003d getattr(req, \u0027environ\u0027, {})"},{"line_number":560,"context_line":"        else:"},{"line_number":561,"context_line":"            env \u003d {}"},{"line_number":562,"context_line":"        info \u003d get_info(self.app, env, account)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2F%2F08%3D","line":559,"in_reply_to":"AAAAPH%2F%2Fb%2FQ%3D","updated":"2013-06-04 06:40:03.000000000","message":"This was done since not all tests necessarily add env and in order to make as little changes to the tests as possible.","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"ecc8d898f2ea3a99a81c93e593867d36f0731e03","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        \"\"\""},{"line_number":585,"context_line":"        part, nodes \u003d self.app.container_ring.get_nodes(account, container)"},{"line_number":586,"context_line":"        if req:"},{"line_number":587,"context_line":"            env \u003d getattr(req, \u0027environ\u0027, {})"},{"line_number":588,"context_line":"        else:"},{"line_number":589,"context_line":"            env \u003d {}"},{"line_number":590,"context_line":"        info \u003d get_info(self.app, env, account, container)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fb8w%3D","line":587,"updated":"2013-06-04 01:05:29.000000000","message":"Same thing about req.environ as above.","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"0f36b4d1171aa5ce1c01a32c1fe00bea7ac2630b","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        \"\"\""},{"line_number":585,"context_line":"        part, nodes \u003d self.app.container_ring.get_nodes(account, container)"},{"line_number":586,"context_line":"        if req:"},{"line_number":587,"context_line":"            env \u003d getattr(req, \u0027environ\u0027, {})"},{"line_number":588,"context_line":"        else:"},{"line_number":589,"context_line":"            env \u003d {}"},{"line_number":590,"context_line":"        info \u003d get_info(self.app, env, account, container)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2F%2F00%3D","line":587,"in_reply_to":"AAAAPH%2F%2Fb8w%3D","updated":"2013-06-04 06:40:03.000000000","message":"See above","commit_id":"1034738eff9b3cc08d6936e62e448b58456bed8d"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"6dc9682335f8683ed1b5b169b2ebd05c174c6e20","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    if info.get(\u0027container_count\u0027) is None:"},{"line_number":241,"context_line":"        info[\u0027container_count\u0027] \u003d 0"},{"line_number":242,"context_line":"    else:"},{"line_number":243,"context_line":"        info[\u0027container_count\u0027] \u003d int(info[\u0027container_count\u0027])"},{"line_number":244,"context_line":"    return info"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPX%2F%2F95Q%3D","line":243,"updated":"2013-06-05 21:34:07.000000000","message":"This line could use some (unit) test coverage. It\u0027s pretty important.","commit_id":"57a613544ed3c4afdc94cb685206a281e2d60f5c"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"6dc9682335f8683ed1b5b169b2ebd05c174c6e20","unresolved":false,"context_lines":[{"line_number":395,"context_line":"    cache_key, env_key \u003d _get_cache_key(account, container)"},{"line_number":396,"context_line":"    try:"},{"line_number":397,"context_line":"        info \u003d resp.environ[env_key]"},{"line_number":398,"context_line":"        env[env_key] \u003d info"},{"line_number":399,"context_line":"        if ret_not_found or is_success(info[\u0027status\u0027]):"},{"line_number":400,"context_line":"            return info"},{"line_number":401,"context_line":"    except (KeyError, AttributeError):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPX%2F%2F%2BYc%3D","line":398,"updated":"2013-06-05 21:34:07.000000000","message":"If I comment out this line, no unit tests fail. It seems like a pretty important line, too.","commit_id":"57a613544ed3c4afdc94cb685206a281e2d60f5c"}],"test/unit/proxy/controllers/test_base.py":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.assertEquals(resp[\u0027total_object_count\u0027], 1000)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_get_account_info_cache(self):"},{"line_number":100,"context_line":"        # test the depreceated get_account_info - \u0027container_count\u0027 was missing"},{"line_number":101,"context_line":"        cached \u003d {\u0027status\u0027: 404,"},{"line_number":102,"context_line":"                  \u0027bytes\u0027: 3333,"},{"line_number":103,"context_line":"                  \u0027container_count\u0027: 30,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2Flzg%3D","line":100,"updated":"2013-05-29 22:56:33.000000000","message":"*deprecated","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.assertEquals(resp[\u0027status\u0027], 404)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def test_get_account_info_env(self):"},{"line_number":115,"context_line":"        # test the depreceated get_account_info - \u0027container_count\u0027 was missing"},{"line_number":116,"context_line":"        env_cache \u003d {\u0027status\u0027: 200,"},{"line_number":117,"context_line":"                  \u0027bytes\u0027: 3867,"},{"line_number":118,"context_line":"                  \u0027container_count\u0027: 30,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2Flzc%3D","line":115,"updated":"2013-05-29 22:56:33.000000000","message":"*deprecated","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"d8a358c6709d5244bbe09cf8686f19e2d3abb302","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            ret \u003d self.controller.container_info("},{"line_number":527,"context_line":"                self.account, self.container, self.request)"},{"line_number":528,"context_line":"            self.check_container_info_return(ret, True)"},{"line_number":529,"context_line":"           "},{"line_number":530,"context_line":"            set_http_connect(503, 404, 404)# account_info \u0027NotFound\u0027"},{"line_number":531,"context_line":"            ret \u003d self.controller.container_info("},{"line_number":532,"context_line":"                self.account, self.container, self.request)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FmXY%3D","line":529,"updated":"2013-05-29 16:01:12.000000000","message":"Extra whitespace?","commit_id":"38acb908be19c0172cf9000e9868661031263d0c"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"31ad0b6ab4a3bb3a815a3b9629827048554a4d6c","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            ret \u003d self.controller.container_info("},{"line_number":527,"context_line":"                self.account, self.container, self.request)"},{"line_number":528,"context_line":"            self.check_container_info_return(ret, True)"},{"line_number":529,"context_line":"           "},{"line_number":530,"context_line":"            set_http_connect(503, 404, 404)# account_info \u0027NotFound\u0027"},{"line_number":531,"context_line":"            ret \u003d self.controller.container_info("},{"line_number":532,"context_line":"                self.account, self.container, self.request)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FmRI%3D","line":529,"in_reply_to":"AAAAPH%2F%2FmXY%3D","updated":"2013-05-29 16:34:00.000000000","message":"Done","commit_id":"38acb908be19c0172cf9000e9868661031263d0c"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"d8a358c6709d5244bbe09cf8686f19e2d3abb302","unresolved":false,"context_lines":[{"line_number":542,"context_line":"            ret \u003d self.controller.container_info("},{"line_number":543,"context_line":"                self.account, self.container, self.request)"},{"line_number":544,"context_line":"            self.check_container_info_return(ret, True)"},{"line_number":545,"context_line":"             "},{"line_number":546,"context_line":"    # tests if some http status codes are not cached"},{"line_number":547,"context_line":"    def test_container_info_no_cache(self):"},{"line_number":548,"context_line":"        def test(*status_list):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FmYM%3D","line":545,"updated":"2013-05-29 16:01:12.000000000","message":"Extra whitespace?","commit_id":"38acb908be19c0172cf9000e9868661031263d0c"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"31ad0b6ab4a3bb3a815a3b9629827048554a4d6c","unresolved":false,"context_lines":[{"line_number":542,"context_line":"            ret \u003d self.controller.container_info("},{"line_number":543,"context_line":"                self.account, self.container, self.request)"},{"line_number":544,"context_line":"            self.check_container_info_return(ret, True)"},{"line_number":545,"context_line":"             "},{"line_number":546,"context_line":"    # tests if some http status codes are not cached"},{"line_number":547,"context_line":"    def test_container_info_no_cache(self):"},{"line_number":548,"context_line":"        def test(*status_list):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FmRM%3D","line":545,"in_reply_to":"AAAAPH%2F%2FmYM%3D","updated":"2013-05-29 16:34:00.000000000","message":"Done","commit_id":"38acb908be19c0172cf9000e9868661031263d0c"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"76f0ba2b73a4ce6d85c946ce6eea711e24e2ce77","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        with save_globals():"},{"line_number":386,"context_line":"            set_http_connect(200)"},{"line_number":387,"context_line":"            partition, nodes, count \u003d \\"},{"line_number":388,"context_line":"                self.controller.account_info(self.account, self.request)"},{"line_number":389,"context_line":"            self.check_account_info_return(partition, nodes)"},{"line_number":390,"context_line":"            self.assertEquals(count, 12345)"},{"line_number":391,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2Flnk%3D","line":388,"updated":"2013-05-29 21:16:15.000000000","message":"Should we remove these deprecated references as well?","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"76f0ba2b73a4ce6d85c946ce6eea711e24e2ce77","unresolved":false,"context_lines":[{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        with save_globals():"},{"line_number":478,"context_line":"            swift.proxy.controllers.Controller.account_info \u003d account_info"},{"line_number":479,"context_line":"            ret \u003d self.controller.container_info(self.account,"},{"line_number":480,"context_line":"                                                 self.container,"},{"line_number":481,"context_line":"                                                 self.request)"},{"line_number":482,"context_line":"            self.check_container_info_return(ret, True)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FlnQ%3D","line":479,"updated":"2013-05-29 21:16:15.000000000","message":"Should we also remove these decprecated references?","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"2d9ea0e8c098bf456dfeb06e9b55d4e29b5c1752","unresolved":false,"context_lines":[{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        with save_globals():"},{"line_number":513,"context_line":"            set_http_connect(503, 204, # account_info found"},{"line_number":514,"context_line":"                             504, 404, 404) # container_info \u0027NotFount\u0027"},{"line_number":515,"context_line":"            ret \u003d self.controller.container_info("},{"line_number":516,"context_line":"                self.account, self.container, self.request)"},{"line_number":517,"context_line":"            self.check_container_info_return(ret, True)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FlXU%3D","line":514,"updated":"2013-05-29 22:56:33.000000000","message":"*found","commit_id":"bbab319a62f63a463894da289a572a84d78d9c6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"6dc9682335f8683ed1b5b169b2ebd05c174c6e20","unresolved":false,"context_lines":[{"line_number":2350,"context_line":"            #                acct acct acct"},{"line_number":2351,"context_line":"            # make sure to use a fresh request without cached env"},{"line_number":2352,"context_line":"            req \u003d Request.blank(\u0027/a/c/o\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027DELETE\u0027})"},{"line_number":2353,"context_line":"            self.app.update_request(req)"},{"line_number":2354,"context_line":"            resp \u003d getattr(controller, \u0027DELETE\u0027)(req)"},{"line_number":2355,"context_line":"            self.assertEquals(resp.status_int, 404)"},{"line_number":2356,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPX%2F%2F9wU%3D","line":2353,"updated":"2013-06-05 21:34:07.000000000","message":"All these update_request() calls you\u0027ve added don\u0027t actually do anything.\n\nupdate_request() just copies X-Storage-Token over to X-Auth-Token for compatibility with old clients. The blank request here has neither, so there\u0027s no need to call update_request().","commit_id":"57a613544ed3c4afdc94cb685206a281e2d60f5c"}]}
