)]}'
{"oslo_log/helpers.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"004cf7751fd75ae2418eb5dc9a12bfec77121111","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        log.debug(\u0027[%(id)s]: %(caller)s method %(method_name)s \u0027"},{"line_number":56,"context_line":"                  \u0027called with arguments %(args)s %(kwargs)s\u0027, data)"},{"line_number":57,"context_line":"        start_time \u003d timeutils.utcnow_ts()"},{"line_number":58,"context_line":"        res \u003d method(*args, **kwargs)"},{"line_number":59,"context_line":"        data \u003d {\u0027id\u0027: log_id,"},{"line_number":60,"context_line":"                \u0027caller\u0027: caller,"},{"line_number":61,"context_line":"                \u0027method_name\u0027: method.__name__,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_2b115fad","line":58,"updated":"2016-04-15 15:23:44.000000000","message":"The log call below this point won\u0027t be invoked if method raises an exception. Is that what we want?","commit_id":"065bb4c8b223ff7d1f3bf32894ece7611060b666"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0c0c5542599b74424461dd5bfa6b61767d1ad134","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        log.debug(\u0027[%(id)s]: %(caller)s method %(method_name)s \u0027"},{"line_number":56,"context_line":"                  \u0027called with arguments %(args)s %(kwargs)s\u0027, data)"},{"line_number":57,"context_line":"        start_time \u003d timeutils.utcnow_ts()"},{"line_number":58,"context_line":"        res \u003d method(*args, **kwargs)"},{"line_number":59,"context_line":"        data \u003d {\u0027id\u0027: log_id,"},{"line_number":60,"context_line":"                \u0027caller\u0027: caller,"},{"line_number":61,"context_line":"                \u0027method_name\u0027: method.__name__,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_4c049516","line":58,"in_reply_to":"1a122d0e_2b115fad","updated":"2016-04-17 11:38:23.000000000","message":"nice catch","commit_id":"065bb4c8b223ff7d1f3bf32894ece7611060b666"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"8f4d43465a418b00fdc045ea4b9434e0f5b8c058","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                      getattr(cls, \u0027__qualname__\u0027, cls.__name__))"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def _time_taken(start, end):"},{"line_number":30,"context_line":"    return end - start"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_506888ba","line":29,"updated":"2016-04-22 22:04:50.000000000","message":"Use a timeutils.StopWatch (which internally uses a monontically increasing time source); for tracking duration style times using such a thing is more accurate and less prone to problems.\n\nhttp://docs.openstack.org/developer/oslo.utils/api/timeutils.html#oslo_utils.timeutils.StopWatch","commit_id":"db8a34cdb155471820a4d3b678111e86eb66e205"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6de9bcc00dab3bb3d0e170016fbc68dc916bc8cd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                      getattr(cls, \u0027__qualname__\u0027, cls.__name__))"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def _time_taken(start, end):"},{"line_number":30,"context_line":"    return end - start"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_5ebd0bb6","line":29,"in_reply_to":"1a122d0e_506888ba","updated":"2016-05-10 11:24:41.000000000","message":"Done","commit_id":"db8a34cdb155471820a4d3b678111e86eb66e205"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1cde58417d6e14d3cd600381d8c2e1c46c67ee5f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                \u0027caller\u0027: caller,"},{"line_number":53,"context_line":"                \u0027method_name\u0027: method.__name__,"},{"line_number":54,"context_line":"                \u0027args\u0027: args[1:], \u0027kwargs\u0027: kwargs}"},{"line_number":55,"context_line":"        log.debug(\u0027[%(id)s]: %(caller)s method %(method_name)s \u0027"},{"line_number":56,"context_line":"                  \u0027called with arguments %(args)s %(kwargs)s\u0027, data)"},{"line_number":57,"context_line":"        start_time \u003d timeutils.utcnow_ts()"},{"line_number":58,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_eabc4fdd","line":55,"updated":"2016-04-22 16:37:37.000000000","message":"The colon after the [] seems superfluous.","commit_id":"db8a34cdb155471820a4d3b678111e86eb66e205"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6de9bcc00dab3bb3d0e170016fbc68dc916bc8cd","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                \u0027caller\u0027: caller,"},{"line_number":53,"context_line":"                \u0027method_name\u0027: method.__name__,"},{"line_number":54,"context_line":"                \u0027args\u0027: args[1:], \u0027kwargs\u0027: kwargs}"},{"line_number":55,"context_line":"        log.debug(\u0027[%(id)s]: %(caller)s method %(method_name)s \u0027"},{"line_number":56,"context_line":"                  \u0027called with arguments %(args)s %(kwargs)s\u0027, data)"},{"line_number":57,"context_line":"        start_time \u003d timeutils.utcnow_ts()"},{"line_number":58,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_9eb3f3e8","line":55,"in_reply_to":"1a122d0e_eabc4fdd","updated":"2016-05-10 11:24:41.000000000","message":"Done","commit_id":"db8a34cdb155471820a4d3b678111e86eb66e205"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"46407a228b83b8eb2257301c9503eb5abe97ac51","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            data \u003d {\u0027id\u0027: log_id,"},{"line_number":60,"context_line":"                    \u0027caller\u0027: caller,"},{"line_number":61,"context_line":"                    \u0027method_name\u0027: method.__name__,"},{"line_number":62,"context_line":"                    \u0027time_taken\u0027: w.elapsed()}"},{"line_number":63,"context_line":"            log.debug(\u0027%(id)s: %(caller)s method %(method_name)s \u0027"},{"line_number":64,"context_line":"                      \u0027completed in %(time_taken)s\u0027, data)"},{"line_number":65,"context_line":"        return res"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_8cd7444a","line":62,"updated":"2016-05-10 13:27:56.000000000","message":"since we\u0027re logging args + kwargs, feels like we may as well log the return value and any exception (reraising afterwards)","commit_id":"e9b9e33cccf15257d7bd8c71183a7647140bb6da"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"46407a228b83b8eb2257301c9503eb5abe97ac51","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                    \u0027method_name\u0027: method.__name__,"},{"line_number":62,"context_line":"                    \u0027time_taken\u0027: w.elapsed()}"},{"line_number":63,"context_line":"            log.debug(\u0027%(id)s: %(caller)s method %(method_name)s \u0027"},{"line_number":64,"context_line":"                      \u0027completed in %(time_taken)s\u0027, data)"},{"line_number":65,"context_line":"        return res"},{"line_number":66,"context_line":"    return wrapper"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_913801f1","line":64,"range":{"start_line":64,"start_character":36,"end_line":64,"end_character":50},"updated":"2016-05-10 13:27:56.000000000","message":"seconds? milliseconds? yards? :)","commit_id":"e9b9e33cccf15257d7bd8c71183a7647140bb6da"}]}
