Python microagent compatibility¶ Compatibility Supported Not supported Operating systems Linux, macOS Solaris, Windows Runtime versions CPython 2.7, and 3.4 - 3.8 JPython, PyPy Web frameworks Django 1.6 and greater, Flask 0.10 and greater, Pyramid 1.6 and greater, aiohttp 2.2, 2.3, 3.0, 3.1 (see note below), Pylons Bottle, Tornado, web2py Web app servers chaussette, gunicorn, uWSGI (see note below), waitress, most WSGI-compliant servers ASGI Databases MongoDB, MySQL, PostgreSQL, SQLite MS SQL Server, Oracle Templating engines Django, Jinja2 - User monitoring Django, SDK for user monitoring - aiohttp The aiohttp server must use either the built-in asyncio event loop or the uvloop. uWSGI The Python agent is fully compatible with uWSGI servers. When using uWSGI, you must include several options. Refer to Python microagent compatibility for details. uWSGI servers¶ The Python agent is fully compatible with uWSGI servers. When using uWSGI, you must include the following options: --enable-threads: By default, uWSGI does not permit the creation of threads. You must enable them because the Python microagent uses threads. --single-interpreter: By default, uWSGI loads every app in a new Python interpreter. You must ensure that your application and the Python microagent load on the same Python virtual machine. --py-call-osafterfork: By default, uWSGI does not execute cleanup code on threads after forking. Enable this option because the Python microagent requires cleanup. --master: If you use master mode on uWSGI and notice that Sqreen is not reporting data, enable the --lazy-apps option. By default, uWSGI pre-loads your application in a master process and this pre-loading could prevent the microagent from starting properly in the worker processes. If you still want to use pre-loading, use uwsgidecorators.postfork in your WSGI script instead of the sqreen-start CLI helper. This delays microagent startup after the master process has forked. Refer to the example below. from uwsgidecorators import postfork @postfork def delayed_start(): try: import sqreen sqreen.start() except ImportError: pass Automatic user context in Python apps¶ The microagent automatically detects and protects user accounts when your application uses the Django framework. The Python microagent hooks the Django authenticate function. Sqreen accepts any of the following argument values as Django users identifier: username email user mail login name id userid user_id identification If your Sqreen Dashboard does not show any attempts at user authentication, check that your app is calling the standard Django authenticate function and that at least one keyword argument matches the list above and that its value is not None. If your Python app uses a different framework, you can use the SDK for user monitoring to detect and protect user accounts. Sqreen and NewRelic¶ The Sqreen microagent for Python and the NewRelic agent for Python agents are compatible. If you use CLI helpers, put sqreen-start before newrelic-admin. sqreen-start newrelic-admin gunicorn ... If you modify the WSGI file, import the Sqreen microagent before the NewRelic agent. try: import sqreen sqreen.start() except ImportError: pass try: import newrelic.agent newrelic.agent.initialize('newrelic.ini') except ImportError: pass Non-web applications¶ The microagent detects applications working without a web server at launch time. The microagent does not automatically run with: tests launchers iPython interpreters celery workers RQ workers Django and Flask interactive interpreter (manage.py shell). If you want to disable Sqreen when launching an application, add the SQREEN_DISABLE=1 environment variable. See Configure for details.