From 8cd8ac4c2fb12d9fad52297fce90a91145bdc964 Mon Sep 17 00:00:00 2001 From: bcoe <=> Date: Tue, 15 May 2012 19:39:15 -0700 Subject: [PATCH] Updating pytoad library to accept additional debug info, and to no longer rely completely on an environment file. --- README.textile | 4 ++-- pytoad/connection.py | 44 +++++++++++++++++++++++++++++++------------- setup.py | 2 +- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/README.textile b/README.textile index da9c3ef..462031a 100644 --- a/README.textile +++ b/README.textile @@ -26,5 +26,5 @@ def foo(): h2. Usage Without Decorator bc. from pytoad import Connection -connection = Connection() -connection.send_to_hoptoad(Exception('banana')) \ No newline at end of file +connection = Connection(name="Project Name", version="Software Version", environment_name="production", api_key="API-KEY") +connection.send_to_hoptoad(Exception('banana'), additional_information="additional debug info.") \ No newline at end of file diff --git a/pytoad/connection.py b/pytoad/connection.py index 9913f23..819a519 100644 --- a/pytoad/connection.py +++ b/pytoad/connection.py @@ -3,11 +3,25 @@ from xmlbuilder import XMLBuilder class Connection(object): - - def __init__(self, use_ssl=True): - self.use_ssl = use_ssl - self.environment = Environment() + + INSTANCE_VARIABLES = ['use_ssl', 'api_key', 'environment_name', 'name', 'version', 'url'] + + def __init__(self, **kwargs): + self.use_ssl = True + self._load_instance_variables(kwargs) + self._load_environment_variables() self.hoptoad_url = self._get_hoptoad_url() + + def _load_instance_variables(self, kwargs): + for k, v in kwargs.items(): + if k in self.INSTANCE_VARIABLES: + self.__dict__[k] = v + + def _load_environment_variables(self): + self.environment = Environment() + for k in self.INSTANCE_VARIABLES: + if not self.__dict__.get(k, None) and self.environment.__dict__.get(k, None): + self.__dict__[k] = self.environment.__dict__[k] def _get_hoptoad_url(self): url_suffix = 'airbrake.io/notifier_api/v2/notices' @@ -16,9 +30,9 @@ def _get_hoptoad_url(self): else: return "http://%s" % url_suffix - def send_to_hoptoad(self, exception): + def send_to_hoptoad(self, exception, additional_information=None): headers = { 'Content-Type': 'text/xml' } - request = urllib2.Request(self.hoptoad_url, self._generate_xml(exception), headers) + request = urllib2.Request(self.hoptoad_url, self._generate_xml(exception, additional_information), headers) response = urllib2.urlopen(request) status = response.getcode() if status == 200: @@ -30,7 +44,7 @@ def send_to_hoptoad(self, exception): if status == 500: raise Exception("Hoptoad has hopped the toad") - def _generate_xml(self, exception): + def _generate_xml(self, exception, additional_information=None): _,_,trace = sys.exc_info() xml = XMLBuilder() @@ -44,17 +58,21 @@ def _generate_xml(self, exception): tb_dict['line_number'] = tb[1] tb_dict['function_name'] = tb[2] + message = str(exception) + if additional_information: + message = 'error: %s, additional info: %s' % (message, additional_information) + with xml.notice(version = 2.0): - xml << ('api-key', self.environment.api_key) + xml << ('api-key', self.api_key) with xml.notifier: - xml << ('name', self.environment.name) - xml << ('version', self.environment.version) - xml << ('url', self.environment.url) + xml << ('name', self.name) + xml << ('version', self.version) + xml << ('url', self.url) with xml('server-environment'): - xml << ('environment-name', self.environment.environment_name) + xml << ('environment-name', self.environment_name) with xml.error: xml << ('class', exception.__class__.__name__) - xml << ('message', str(exception)) + xml << ('message', message) with xml.backtrace: xml << ('line', { 'file':tb_dict.get('filename', 'unknown'), diff --git a/setup.py b/setup.py index 6a7768e..2e1a1bc 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ from setuptools import setup, find_packages setup(name="Pytoad", - version="1.0.5", + version="1.0.6", description="Pytoad is a lightweight Hoptoad notifier for Python.", author="Benjamin Coe", author_email="ben@attachments.me",