summaryrefslogtreecommitdiff
path: root/docs/integrations/flask.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/integrations/flask.rst')
-rw-r--r--docs/integrations/flask.rst228
1 files changed, 0 insertions, 228 deletions
diff --git a/docs/integrations/flask.rst b/docs/integrations/flask.rst
deleted file mode 100644
index ad3403c..0000000
--- a/docs/integrations/flask.rst
+++ /dev/null
@@ -1,228 +0,0 @@
-Flask
-=====
-
-Installation
-------------
-
-If you haven't already, install raven with its explicit Flask dependencies::
-
- pip install raven[flask]
-
-Setup
------
-
-The first thing you'll need to do is to initialize Raven under your application::
-
- from raven.contrib.flask import Sentry
- sentry = Sentry(app, dsn='___DSN___')
-
-If you don't specify the ``dsn`` value, we will attempt to read it from
-your environment under the ``SENTRY_DSN`` key.
-
-Extended Setup
---------------
-
-You can optionally configure logging too:
-
-.. sourcecode:: python
-
- import logging
- from raven.contrib.flask import Sentry
- sentry = Sentry(app, logging=True, level=logging.ERROR, \
- logging_exclusions=("logger1", "logger2", ...))
-
-Building applications on the fly? You can use Raven's ``init_app`` hook:
-
-.. sourcecode:: python
-
- sentry = Sentry(dsn='http://public_key:secret_key@example.com/1')
-
- def create_app():
- app = Flask(__name__)
- sentry.init_app(app)
- return app
-
-You can pass parameters in the ``init_app`` hook:
-
-.. sourcecode:: python
-
- sentry = Sentry()
-
- def create_app():
- app = Flask(__name__)
- sentry.init_app(app, dsn='___DSN___', logging=True,
- level=logging.ERROR,
- logging_exclusions=("logger1", "logger2", ...))
- return app
-
-Settings
---------
-
-Additional settings for the client can be configured using
-``SENTRY_CONFIG`` in your application's configuration:
-
-.. sourcecode:: python
-
- class MyConfig(object):
- SENTRY_CONFIG = {
- 'dsn': '___DSN___',
- 'include_paths': ['myproject'],
- 'release': raven.fetch_git_sha(os.path.dirname(__file__)),
- }
-
-If `Flask-Login <https://pypi.python.org/pypi/Flask-Login/>`_ is used by
-your application (including `Flask-Security
-<https://pypi.python.org/pypi/Flask-Security/>`_), user information will
-be captured when an exception or message is captured. By default, only
-the ``id`` (current_user.get_id()), ``is_authenticated``, and
-``is_anonymous`` is captured for the user. If you would like additional
-attributes on the ``current_user`` to be captured, you can configure them
-using ``SENTRY_USER_ATTRS``:
-
-.. sourcecode:: python
-
- class MyConfig(object):
- SENTRY_USER_ATTRS = ['username', 'first_name', 'last_name', 'email']
-
-``email`` will be captured as ``sentry.interfaces.User.email``, and any
-additional attributes will be available under
-``sentry.interfaces.User.data``
-
-You can specify the types of exceptions that should not be reported by
-Sentry client in your application by setting the ``ignore_exceptions``
-configuration value:
-
-.. sourcecode:: python
-
- class MyExceptionType(Exception):
- def __init__(self, message):
- super(MyExceptionType, self).__init__(message)
-
- app = Flask(__name__)
- app.config['SENTRY_CONFIG'] = {
- 'ignore_exceptions': [MyExceptionType],
- }
-
-Usage
------
-
-Once you've configured the Sentry application it will automatically
-capture uncaught exceptions within Flask. If you want to send additional
-events, a couple of shortcuts are provided on the Sentry Flask middleware
-object.
-
-Capture an arbitrary exception by calling ``captureException``:
-
-.. sourcecode:: python
-
- try:
- 1 / 0
- except ZeroDivisionError:
- sentry.captureException()
-
-Log a generic message with ``captureMessage``:
-
-.. sourcecode:: python
-
- sentry.captureMessage('hello, world!')
-
-Getting The Last Event ID
--------------------------
-
-If possible, the last Sentry event ID is stored in the request context
-``g.sentry_event_id`` variable. This allow to present the user an error
-ID if have done a custom error 500 page.
-
-.. sourcecode:: html+jinja
-
- <h2>Error 500</h2>
- {% if g.sentry_event_id %}
- <p>The error identifier is {{ g.sentry_event_id }}</p>
- {% endif %}
-
-.. _python-flask-user-feedback:
-
-User Feedback
--------------
-
-To enable user feedback for crash reports just make sure you have a custom
-`500` error handler and render out a HTML snippet for bringing up the
-crash dialog:
-
-.. sourcecode:: python
-
- from flask import Flask, g, render_template
- from raven.contrib.flask import Sentry
-
- app = Flask(__name__)
- sentry = Sentry(app, dsn='___DSN___')
-
- @app.errorhandler(500)
- def internal_server_error(error):
- return render_template('500.html',
- event_id=g.sentry_event_id,
- public_dsn=sentry.client.get_public_dsn('https')
- )
-
-And in the error template (``500.html``) you can then do this:
-
-.. sourcecode:: html+jinja
-
- <!-- Sentry JS SDK 2.1.+ required -->
- <script src="https://cdn.ravenjs.com/2.3.0/raven.min.js"></script>
-
- {% if event_id %}
- <script>
- Raven.showReportDialog({
- eventId: '{{ event_id }}',
- dsn: '{{ public_dsn }}'
- });
- </script>
- {% endif %}
-
-That's it!
-
-For more details on this feature, see the :doc:`User Feedback guide
-<../../../learn/user-feedback>`.
-
-Dealing With Proxies
---------------------
-
-When your Flask application is behind a proxy such as nginx, Sentry will
-use the remote address from the proxy, rather than from the actual
-requesting computer. By using ``ProxyFix`` from `werkzeug.contrib.fixers
-<http://werkzeug.pocoo.org/docs/0.10/contrib/fixers/#werkzeug.contrib.fixers.ProxyFix>`_
-the Flask ``.wsgi_app`` can be modified to send the actual ``REMOTE_ADDR``
-along to Sentry. ::
-
- from werkzeug.contrib.fixers import ProxyFix
- app.wsgi_app = ProxyFix(app.wsgi_app)
-
-This may also require `changes
-<http://flask.pocoo.org/docs/0.10/deploying/wsgi-standalone/#proxy-setups>`_
-to the proxy configuration to pass the right headers if it isn't doing so
-already.
-
-
-Signals
--------
-
-Raven uses `blinker <https://github.com/jek/blinker>`_ to emit a signal
-(called ``logging_configured``) after logging has been configured for the
-client. You may `bind to that signal <https://pythonhosted.org/blinker/#subscribing-to-signals>`_
-in your application to do any additional configuration to the logging
-handler ``SentryHandler``.
-
-.. sourcecode:: python
-
- from raven.contrib.flask import Sentry, logging_configured
- from flask import Flask, g, render_template
- from raven.contrib.flask import Sentry
-
- app = Flask(__name__)
- sentry = Sentry(app, dsn='___DSN___', logging=True)
-
- @logging_configured.connect
- def internal_server_error(sender, sentry_handler=None, **kwargs):
- # configure sentry_handler here
- sentry_handler.addFilter(some_filter)