summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--raven/contrib/zconfig/__init__.py25
-rw-r--r--raven/contrib/zconfig/component.xml19
-rwxr-xr-xsetup.py1
-rw-r--r--tests/contrib/zconfig/__init__.py0
-rw-r--r--tests/contrib/zconfig/tests.py76
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>
diff --git a/setup.py b/setup.py
index 887ab2a..8e6d5ae 100755
--- a/setup.py
+++ b/setup.py
@@ -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)