)]}'
{"oslo_log/log.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c36d4b3cc9e35acc67eb9548517e0f36865b710e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    \"\"\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def debug(self, msg, *args, **kwargs):"},{"line_number":91,"context_line":"        stack \u003d 0 - kwargs.pop(\u0027stack\u0027, 1) - 1"},{"line_number":92,"context_line":"        frame \u003d traceback.extract_stack()[stack]"},{"line_number":93,"context_line":"        caller \u003d \"%s %s:%d\" % (frame[2], frame[0], frame[1])"},{"line_number":94,"context_line":"        sys.stderr.write(caller)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_ad925948","line":91,"updated":"2015-01-16 21:31:29.000000000","message":"Hmmm, seems like this should be determinable via automatic methods right?\n\nSomething like https://github.com/openstack/taskflow/blob/master/taskflow/engines/helpers.py#L86 perhaps (or something more customized for this).\n\nSince the logger is usually the module name of the calling code, seems like u could just search upwards until u have a different module name (without the same prefix).\n\nSuch that u\u0027d find the first module that did not have the same prefix as this one... So for example \u0027oslo.log.blah.blah\u0027 would look for frame that doesn\u0027t have \u0027oslo.log\u0027 in it?","commit_id":"0284387abb8b72817a719bfa2d22c01653c1cbdb"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"b5bb8bdd6517a82e673b8571ef4b4d6d0b666e1b","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    \"\"\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def debug(self, msg, *args, **kwargs):"},{"line_number":91,"context_line":"        stack \u003d 0 - kwargs.pop(\u0027stack\u0027, 1) - 1"},{"line_number":92,"context_line":"        frame \u003d traceback.extract_stack()[stack]"},{"line_number":93,"context_line":"        caller \u003d \"%s %s:%d\" % (frame[2], frame[0], frame[1])"},{"line_number":94,"context_line":"        sys.stderr.write(caller)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_85171651","line":91,"in_reply_to":"3a961159_5095fee1","updated":"2015-01-21 00:06:07.000000000","message":"Up to u, then it just makes this adapter generic and doesn\u0027t require calling code to pass in anything; users who want to use this would just change there adapter and be done with it (and let the adapter \u0027smarts\u0027 do the rest).","commit_id":"0284387abb8b72817a719bfa2d22c01653c1cbdb"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"ad639ecaa89fb45ddb9935de05e66b2a8d21471c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    \"\"\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def debug(self, msg, *args, **kwargs):"},{"line_number":91,"context_line":"        stack \u003d 0 - kwargs.pop(\u0027stack\u0027, 1) - 1"},{"line_number":92,"context_line":"        frame \u003d traceback.extract_stack()[stack]"},{"line_number":93,"context_line":"        caller \u003d \"%s %s:%d\" % (frame[2], frame[0], frame[1])"},{"line_number":94,"context_line":"        sys.stderr.write(caller)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_5095fee1","line":91,"in_reply_to":"3a961159_ad925948","updated":"2015-01-17 20:55:54.000000000","message":"Maybe doing it automatically would be interesting, I hadn\u0027t thought of that. In that case I\u0027d probably make it a debug_lib, and not override debug.","commit_id":"0284387abb8b72817a719bfa2d22c01653c1cbdb"}]}
