)]}'
{"functionaltests/common/utils.py":[{"author":{"_account_id":4894,"name":"stanzgy","email":"stanzgy@gmail.com","username":"stanzgy"},"change_message_id":"fc1bc281f414368948d6f845e049d50f2318d326","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    cache \u003d {}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @functools.wraps(func)"},{"line_number":102,"context_line":"    def wrapper(*args):"},{"line_number":103,"context_line":"        if not isinstance(args, collections.Hashable):"},{"line_number":104,"context_line":"            # args is not cacheable. just call the function."},{"line_number":105,"context_line":"            return func(*args)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_1e718f76","line":102,"updated":"2015-05-29 03:37:53.000000000","message":"IMO as a general purpose function wrapper, we should also consider func that has **kwargs, although it\u0027s not cacheable at all here.","commit_id":"8273819a0925106676b7ec4459a62ca36b1e980c"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a4603af8a2fa62c024a536ea4bf7fe4ef70aaf78","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    cache \u003d {}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @functools.wraps(func)"},{"line_number":102,"context_line":"    def wrapper(*args):"},{"line_number":103,"context_line":"        if not isinstance(args, collections.Hashable):"},{"line_number":104,"context_line":"            # args is not cacheable. just call the function."},{"line_number":105,"context_line":"            return func(*args)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_43fde0af","line":102,"in_reply_to":"7a016987_1e718f76","updated":"2015-05-29 11:50:28.000000000","message":"I think we can expand it later to cover this, if needed","commit_id":"8273819a0925106676b7ec4459a62ca36b1e980c"},{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"01df8f7118d73e3a31e5f13a4997f34ff4632ec1","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    cache \u003d {}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @functools.wraps(func)"},{"line_number":102,"context_line":"    def wrapper(*args):"},{"line_number":103,"context_line":"        if not isinstance(args, collections.Hashable):"},{"line_number":104,"context_line":"            # args is not cacheable. just call the function."},{"line_number":105,"context_line":"            return func(*args)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_d79aa713","line":102,"in_reply_to":"7a016987_43fde0af","updated":"2015-05-29 15:15:52.000000000","message":"Yeah, I think we could handle kwargs by caching on tuple(sorted(kwargs.items())), or maybe using a string representation of kwargs.","commit_id":"8273819a0925106676b7ec4459a62ca36b1e980c"}]}
