diff options
-rw-r--r-- | raven/contrib/zconfig/__init__.py | 25 | ||||
-rw-r--r-- | raven/contrib/zconfig/component.xml | 19 | ||||
-rwxr-xr-x | setup.py | 1 | ||||
-rw-r--r-- | tests/contrib/zconfig/__init__.py | 0 | ||||
-rw-r--r-- | tests/contrib/zconfig/tests.py | 76 |
5 files changed, 106 insertions, 15 deletions
diff --git a/raven/contrib/zconfig/__init__.py b/raven/contrib/zconfig/__init__.py index 33db528..d5f555b 100644 --- a/raven/contrib/zconfig/__init__.py +++ b/raven/contrib/zconfig/__init__.py @@ -7,18 +7,33 @@ raven.contrib.zconfig :copyright: (c) 2010-2013 by the Sentry Team, see AUTHORS for more details. :license: BSD, see LICENSE for more details. """ +import logging import ZConfig.components.logger.factory import raven.handlers.logging class Factory(ZConfig.components.logger.factory.Factory): + def __init__(self, section): + ZConfig.components.logger.factory.Factory.__init__(self) + self.section = section + self.section.level = self.section.level or logging.ERROR + def getLevel(self): return self.section.level def create(self): - return raven.handlers.logging.SentryHandler(**self.section.__dict__) - - def __init__(self, section): - ZConfig.components.logger.factory.Factory.__init__(self) - self.section = section + return raven.handlers.logging.SentryHandler( + dsn=self.section.dsn, + site=self.section.site, + name=self.section.name, + release=self.section.release, + environment=self.section.environment, + exclude_paths=self.section.exclude_paths, + include_paths=self.section.include_paths, + sample_rate=self.section.sample_rate, + list_max_length=self.section.list_max_length, + string_max_length=self.section.string_max_length, + auto_log_stacks=self.section.auto_log_stacks, + processors=self.section.processors, + level=self.section.level) diff --git a/raven/contrib/zconfig/component.xml b/raven/contrib/zconfig/component.xml index 4353eb2..716d71d 100644 --- a/raven/contrib/zconfig/component.xml +++ b/raven/contrib/zconfig/component.xml @@ -8,18 +8,17 @@ datatype="raven.contrib.zconfig.Factory" implements="ZConfig.logger.handler" extends="ZConfig.logger.base-log-handler"> - <key name="include_paths" required="no" datatype="string-list"/> - <key name="exclude_paths" required="no" datatype="string-list"/> - <key name="timeout" required="no" datatype="integer"/> - <key name="name" required="no"/> - <key name="auto_log_stacks" required="no" datatype="boolean"/> - <key name="string_max_length" required="no" datatype="integer"/> - <key name="list_max_length" required="no" datatype="integer"/> - <key name="site" required="no"/> - <key name="processors" required="no" datatype="string-list"/> - <key name="project" required="no"/> <key name="dsn" required="no"/> + <key name="site" required="no"/> + <key name="name" required="no"/> <key name="release" required="no"/> <key name="environment" required="no"/> + <key name="exclude_paths" required="no" datatype="string-list"/> + <key name="include_paths" required="no" datatype="string-list"/> + <key name="sample_rate" required="no" datatype="float" default="1.0" /> + <key name="list_max_length" required="no" datatype="integer"/> + <key name="string_max_length" required="no" datatype="integer"/> + <key name="auto_log_stacks" required="no" datatype="boolean"/> + <key name="processors" required="no" datatype="string-list"/> </sectiontype> </component> @@ -80,6 +80,7 @@ tests_require = [ 'webob', 'webtest', 'anyjson', + 'ZConfig', ] + ( flask_requires + flask_tests_requires + unittest2_requires + webpy_tests_requires diff --git a/tests/contrib/zconfig/__init__.py b/tests/contrib/zconfig/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/contrib/zconfig/__init__.py diff --git a/tests/contrib/zconfig/tests.py b/tests/contrib/zconfig/tests.py new file mode 100644 index 0000000..9626a73 --- /dev/null +++ b/tests/contrib/zconfig/tests.py @@ -0,0 +1,76 @@ +from __future__ import absolute_import +import logging +import mock +import unittest +from ZConfig import configureLoggers + + +class TestConfig(unittest.TestCase): + + @mock.patch("raven.handlers.logging.Client") + def test_minimal(self, Client): + configureLoggers(""" + <logger> + %import raven.contrib.zconfig + <sentry> + dsn https://abc:def@example.com/42 + </sentry> + </logger> + """) + handler = logging.getLogger().handlers[-1] + logging.getLogger().handlers.remove(handler) + self.assertEqual(handler.level, logging.ERROR) + Client.assert_called_with( + dsn='https://abc:def@example.com/42', + site=None, + name=None, + release=None, + environment=None, + exclude_paths=None, + include_paths=None, + sample_rate=1.0, + list_max_length=None, + string_max_length=None, + auto_log_stacks=None, + processors=None, + level=logging.ERROR) + + @mock.patch("raven.handlers.logging.Client") + def test_many(self, Client): + configureLoggers(""" + <logger> + %import raven.contrib.zconfig + <sentry> + level WARNING + dsn https://abc:def@example.com/42 + site test-site + name test + release 42.0 + environment testing + exclude_paths /a /b + include_paths /c /d + sample_rate 0.5 + list_max_length 9 + string_max_length 99 + auto_log_stacks true + processors x y z + </sentry> + </logger> + """) + handler = logging.getLogger().handlers[-1] + logging.getLogger().handlers.remove(handler) + self.assertEqual(handler.level, logging.WARNING) + Client.assert_called_with( + dsn='https://abc:def@example.com/42', + site='test-site', + name='test', + release='42.0', + environment='testing', + exclude_paths=['/a', '/b'], + include_paths=['/c', '/d'], + sample_rate=0.5, + list_max_length=9, + string_max_length=99, + auto_log_stacks=True, + processors=['x', 'y', 'z'], + level=logging.WARNING) |