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
13 changes: 13 additions & 0 deletions docs/error-reporting-usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,19 @@ be used by Stackdriver Error Reporting to help group exceptions.
>>> except Exception:
>>> client.report_exception(http_context=http_context, user=user))

An automatic helper to build the HTTP Context from a Flask (Werkzeug) request
object is provided.

.. code-block:: python

>>> from google.cloud.error_reporting import build_flask_context
>>> @app.errorhandler(HTTPException)
... def handle_error(exc):
... client.report_exception(
... http_context=build_flask_context(request))
... # rest of error response code here


Reporting an error without an exception
-----------------------------------------

Expand Down
6 changes: 6 additions & 0 deletions docs/error-reporting-util.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Error Reporting Utilities
=========================

.. automodule:: google.cloud.error_reporting.util
:members:
:show-inheritance:
1 change: 1 addition & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@

error-reporting-usage
Client <error-reporting-client>
error-reporting-util

.. toctree::
:maxdepth: 0
Expand Down
2 changes: 2 additions & 0 deletions error_reporting/google/cloud/error_reporting/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,5 @@


This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

from google.cloud.error_reporting.client import Client
from google.cloud.error_reporting.client import HTTPContext

This comment was marked as spam.

from google.cloud.error_reporting.util import build_flask_context
44 changes: 44 additions & 0 deletions error_reporting/google/cloud/error_reporting/util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Copyright 2016 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Utility functions for Stackdriver Error Reporting."""

from google.cloud.error_reporting.client import HTTPContext


def build_flask_context(request):

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

"""Builds an HTTP context object from a Flask (Werkzeug) request object.
This helper method extracts the relevant HTTP context from a Flask request
object into an object ready to be sent to Error Reporting.
.. code-block:: python
>>> @app.errorhandler(HTTPException)
... def handle_error(exc):
... client.report_exception(
... http_context=build_flask_context(request))
... # rest of error response code here
:type request: :class:`werkzeug.wrappers.request`
:param request: The Flask request object to convert.
:rtype: :class:`~google.cloud.error_reporting.client.HTTPContext`
:returns: An HTTPContext object ready to be sent to the Stackdriver Error
Reporting API.
"""
return HTTPContext(url=request.url, method=request.method,
user_agent=request.user_agent.string,
referrer=request.referrer,
remote_ip=request.remote_addr)
1 change: 1 addition & 0 deletions error_reporting/tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ localdeps =
deps =
{toxinidir}/../core
{toxinidir}/../logging
mock
pytest
covercmd =
py.test --quiet \
Expand Down
48 changes: 48 additions & 0 deletions error_reporting/unit_tests/test_util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Copyright 2016 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import unittest


class Test_build_flask_context(unittest.TestCase):

def _call_fut(self, request):
from google.cloud.error_reporting.util import build_flask_context

This comment was marked as spam.

return build_flask_context(request)

def test_flask_helper(self):
import mock

user_agent = mock.Mock(string='Google Cloud Unit Tests Agent')
request = _Request('http://google.com', 'GET',
user_agent,
'http://gmail.com',
'127.0.0.1')

context = self._call_fut(request)
self.assertEqual(request.url, context.url)
self.assertEqual(request.method, context.method)
self.assertEqual(request.user_agent.string, context.userAgent)
self.assertEqual(request.referrer, context.referrer)
self.assertEqual(request.remote_addr, context.remoteIp)


class _Request(object):

def __init__(self, url, method, user_agent, referrer, remote_addr):
self.url = url
self.method = method
self.user_agent = user_agent
self.referrer = referrer
self.remote_addr = remote_addr