Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 20 additions & 9 deletions request_session/request_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ class RequestSession(object):
``requests.Session`` to be used to make the HTTP requests.
:param Ddtrace ddtrace: (optional) DataDog function to be used to trace, track and
send metrics for individual HTTP requests.
:param bool datadog_errors: (optional) If true, errors will be sent to DataDog.
Defaults to ``False``.
:param str ddtrace_service_name: (optional) Service name passed to DataDog DdTrace. Set to "booking_api_requests"
by default.
:param Statsd statsd: (optional) Datadog module to log metrics.
Expand Down Expand Up @@ -84,6 +86,7 @@ def __init__(
user_agent=None, # type: Optional[str]
user_agent_components=None, # type: Optional[UserAgentComponents]
ddtrace=None, # type: Optional[Ddtrace]
datadog_errors=False, # type: bool
statsd=None, # type: Optional[Statsd]
sentry_client=None, # type: Optional[SentryClient]
logger=None, # type: Optional[Callable]
Expand Down Expand Up @@ -118,6 +121,7 @@ def __init__(
self.user_agent_components = user_agent_components
self.ddtrace = ddtrace
self.ddtrace_service_name = ddtrace_service_name
self.datadog_errors = datadog_errors
self.statsd = statsd
self.sentry_client = sentry_client
self.logger = logger
Expand Down Expand Up @@ -404,21 +408,28 @@ def _process(
else:
# Client error, request is not valid and server rejected it with
# http 4xx, but not timeout, there is no point in retrying.
if report and self.sentry_client is not None:
if report:
response_text = self.get_response_text(response)
extra_data = (
{"response_text": response_text}
if response_text != ""
else None
)
if callable(
getattr(self.sentry_client, "capture_exception", None)
):
self.sentry_client.capture_exception(extras=extra_data)
elif callable(
getattr(self.sentry_client, "captureException", None)
):
self.sentry_client.captureException(extra=extra_data)

if self.sentry_client is not None:
if callable(
getattr(self.sentry_client, "capture_exception", None)
):
self.sentry_client.capture_exception(extras=extra_data)
elif callable(
getattr(self.sentry_client, "captureException", None)
):
self.sentry_client.captureException(extra=extra_data)

if self.datadog_errors and self.ddtrace is not None:
span = self.ddtrace.tracer.current_span()
if span:
span.record_exception(error, extra_data)

if raise_for_status:
raise RequestSessionException( # pylint: disable=raise-missing-from
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

setup(
name="request_session",
version="0.16.3",
version="0.16.4",
url="https://github.com/kiwicom/request-session",
description="Python HTTP requests on steroids",
long_description=readme,
Expand Down
Loading