)]}'
{"ara/clients/offline.py":[{"author":{"_account_id":29199,"name":"Florian Apolloner","email":"florian@apolloner.eu","username":"apollo13"},"change_message_id":"97a31fdd09e769af0f5d1cb34d09abc1d488acb8","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    from django.core.handlers.wsgi import WSGIHandler"},{"line_number":30,"context_line":"    from django.core.servers.basehttp import ThreadedWSGIServer, WSGIRequestHandler"},{"line_number":31,"context_line":"except ImportError:"},{"line_number":32,"context_line":"    raise MissingDjangoException"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class AraOfflineClient(AraHttpClient):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_57458e6f","line":32,"updated":"2019-05-03 16:00:01.000000000","message":"This hides the original exception, usually something along the lines of:\n\nexcept ImportError as e:\n   raise MissingDjangoException from e\n\nis prefered since it also shows the original error. Which is massively helpful if for instance the import error is not caused by a missing Django but rather some dependency of Django itself…","commit_id":"b5ad26cb861176014865836771e57c651d5f9a5b"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"62b8844b2f251ffaccb62612d829b4d04be7b838","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    from django.core.handlers.wsgi import WSGIHandler"},{"line_number":30,"context_line":"    from django.core.servers.basehttp import ThreadedWSGIServer, WSGIRequestHandler"},{"line_number":31,"context_line":"except ImportError:"},{"line_number":32,"context_line":"    raise MissingDjangoException"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class AraOfflineClient(AraHttpClient):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_065fe241","line":32,"in_reply_to":"dfbec78f_57458e6f","updated":"2019-05-03 19:58:06.000000000","message":"Good catch. Thanks!","commit_id":"b5ad26cb861176014865836771e57c651d5f9a5b"},{"author":{"_account_id":29199,"name":"Florian Apolloner","email":"florian@apolloner.eu","username":"apollo13"},"change_message_id":"97a31fdd09e769af0f5d1cb34d09abc1d488acb8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        self.log \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        try:"},{"line_number":40,"context_line":"            from django import setup as django_setup"},{"line_number":41,"context_line":"            from django.core.management import execute_from_command_line"},{"line_number":42,"context_line":"        except ImportError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_1724f6c5","line":39,"updated":"2019-05-03 16:00:01.000000000","message":"Can you actually reach that point without running into the ImportError on the module level already? I think you can safely drop this here.","commit_id":"b5ad26cb861176014865836771e57c651d5f9a5b"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"62b8844b2f251ffaccb62612d829b4d04be7b838","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        self.log \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        try:"},{"line_number":40,"context_line":"            from django import setup as django_setup"},{"line_number":41,"context_line":"            from django.core.management import execute_from_command_line"},{"line_number":42,"context_line":"        except ImportError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_664a5e81","line":39,"in_reply_to":"dfbec78f_1724f6c5","updated":"2019-05-03 19:58:06.000000000","message":"Yeah I thought the same thing, figured I\u0027d add it just in case. Will drop it.","commit_id":"b5ad26cb861176014865836771e57c651d5f9a5b"}],"ara/server/__main__.py":[{"author":{"_account_id":29199,"name":"Florian Apolloner","email":"florian@apolloner.eu","username":"apollo13"},"change_message_id":"97a31fdd09e769af0f5d1cb34d09abc1d488acb8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    try:"},{"line_number":29,"context_line":"        from django.core.management import execute_from_command_line"},{"line_number":30,"context_line":"    except ImportError:"},{"line_number":31,"context_line":"        raise MissingDjangoException"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    execute_from_command_line(sys.argv)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_9a27abb7","line":31,"updated":"2019-05-03 16:00:01.000000000","message":"Same as before, reraise with the previous exception intact","commit_id":"b5ad26cb861176014865836771e57c651d5f9a5b"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"62b8844b2f251ffaccb62612d829b4d04be7b838","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    try:"},{"line_number":29,"context_line":"        from django.core.management import execute_from_command_line"},{"line_number":30,"context_line":"    except ImportError:"},{"line_number":31,"context_line":"        raise MissingDjangoException"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    execute_from_command_line(sys.argv)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_265c664a","line":31,"in_reply_to":"dfbec78f_9a27abb7","updated":"2019-05-03 19:58:06.000000000","message":"Ack.","commit_id":"b5ad26cb861176014865836771e57c651d5f9a5b"}]}
