mirror of
https://github.com/bellingcat/snscrape.git
synced 2026-06-12 12:28:28 +03:00
More complete and more readable exception dump
This commit is contained in:
@@ -3,6 +3,7 @@ import contextlib
|
|||||||
import datetime
|
import datetime
|
||||||
import inspect
|
import inspect
|
||||||
import logging
|
import logging
|
||||||
|
import requests.models
|
||||||
import snscrape.base
|
import snscrape.base
|
||||||
import snscrape.modules
|
import snscrape.modules
|
||||||
import tempfile
|
import tempfile
|
||||||
@@ -11,6 +12,51 @@ import tempfile
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def _requests_preparedrequest_repr(name, request):
|
||||||
|
ret = []
|
||||||
|
ret.append(repr(request))
|
||||||
|
ret.append(f'\n {name}.method = {request.method}')
|
||||||
|
ret.append(f'\n {name}.url = {request.url}')
|
||||||
|
ret.append(f'\n {name}.headers = \\')
|
||||||
|
for field in request.headers:
|
||||||
|
ret.append(f'\n {field} = {_repr("_", request.headers[field])}')
|
||||||
|
if request.body:
|
||||||
|
ret.append(f'\n {name}.body = ')
|
||||||
|
ret.append(_repr('_', request.body).replace('\n', '\n '))
|
||||||
|
return ''.join(ret)
|
||||||
|
|
||||||
|
|
||||||
|
def _requests_response_repr(name, response, withHistory = True):
|
||||||
|
ret = []
|
||||||
|
ret.append(repr(response))
|
||||||
|
ret.append(f'\n {name}.url = {response.url}')
|
||||||
|
ret.append(f'\n {name}.request = ')
|
||||||
|
ret.append(_repr('_', response.request).replace('\n', '\n '))
|
||||||
|
if withHistory and response.history:
|
||||||
|
ret.append(f'\n {name}.history = [')
|
||||||
|
for previousResponse in response.history:
|
||||||
|
ret.append(f'\n ')
|
||||||
|
ret.append(_requests_response_repr('_', previousResponse, withHistory = False).replace('\n', '\n '))
|
||||||
|
ret.append('\n ]')
|
||||||
|
ret.append(f'\n {name}.status_code = {response.status_code}')
|
||||||
|
ret.append(f'\n {name}.headers = \\')
|
||||||
|
for field in response.headers:
|
||||||
|
ret.append(f'\n {field} = {_repr("_", response.headers[field])}')
|
||||||
|
ret.append(f'\n {name}.content = {_repr("_", response.content)}')
|
||||||
|
return ''.join(ret)
|
||||||
|
|
||||||
|
|
||||||
|
def _repr(name, value):
|
||||||
|
if type(value) is requests.models.Response:
|
||||||
|
return _requests_response_repr(name, value)
|
||||||
|
if type(value) is requests.models.PreparedRequest:
|
||||||
|
return _requests_preparedrequest_repr(name, value)
|
||||||
|
valueRepr = repr(value)
|
||||||
|
if '\n' in valueRepr:
|
||||||
|
return ''.join(['\\\n ', valueRepr.replace('\n', '\n ')])
|
||||||
|
return valueRepr
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def _dump_locals_on_exception():
|
def _dump_locals_on_exception():
|
||||||
try:
|
try:
|
||||||
@@ -25,7 +71,12 @@ def _dump_locals_on_exception():
|
|||||||
continue
|
continue
|
||||||
locals_ = frameRecord[0].f_locals
|
locals_ = frameRecord[0].f_locals
|
||||||
fp.write(f'Locals from file "{frameRecord.filename}", line {frameRecord.lineno}, in {frameRecord.function}:\n')
|
fp.write(f'Locals from file "{frameRecord.filename}", line {frameRecord.lineno}, in {frameRecord.function}:\n')
|
||||||
fp.write(repr(locals_))
|
for variableName in locals_:
|
||||||
|
variable = locals_[variableName]
|
||||||
|
varRepr = _repr(variableName, variable)
|
||||||
|
fp.write(f' {variableName} {type(variable)} = ')
|
||||||
|
fp.write(varRepr.replace('\n', '\n '))
|
||||||
|
fp.write('\n')
|
||||||
fp.write('\n')
|
fp.write('\n')
|
||||||
if 'self' in locals_ and hasattr(locals_['self'], '__dict__'):
|
if 'self' in locals_ and hasattr(locals_['self'], '__dict__'):
|
||||||
fp.write(f'Object dict:\n')
|
fp.write(f'Object dict:\n')
|
||||||
|
|||||||
Reference in New Issue
Block a user