# HG changeset patch # User Sandro Knauß # Date 1330743293 -3600 # Node ID bacf50bc46bff1553aab082a563c0051bd9da68d # Parent 3620bacf115289fde35088b932f317c717271c88 refactoring error of smstrade. diff -r 3620bacf1152 -r bacf50bc46bf iro/offer/smstrade.py --- a/iro/offer/smstrade.py Sat Mar 03 03:29:19 2012 +0100 +++ b/iro/offer/smstrade.py Sat Mar 03 03:54:53 2012 +0100 @@ -24,53 +24,55 @@ import logging logger=logging.getLogger("smstrade") -class UnknownStatusCode(ExternalException): +statusCodes = {10 : "Empfaengernummer nicht korrekt.", + 20 : "Absenderkennung nicht korrekt.", + 30 : "Nachrichtentext nicht korrekt.", + 31 : "Messagetyp nicht korrekt.", + 40 : "SMS Route nicht korrekt.", + 50 : "Identifikation fehlgeschlagen.", + 60 : "nicht genuegend Guthaben.", + 70 : "Netz wird von Route nicht abgedeckt.", + 71 : "Feature nicht ueber diese Route moeglich.", + 80 : "Uebergabe an SMS-C fehlgeschlagen.", + 90 : "Versand nicht moeglich.", + 100 : "SMS wurde versendet.", + } + + +class StatusException(ExternalException): def __init__(self,status): ExternalException.__init__(self) - self.status=status - + self.status = status + self.str_ = "%i: unknown statuscode."%status + try: + self.str_="%i: %s"%(status, statusCodes[int(status)]) + except KeyError: + pass def __str__(self): - return "%s\nStatusCode %i is unknown."%(ExternalException.__str__(self),self.status) + return "%s\n%s"%(ExternalException.__str__(self),self.str_) class StatusCode: - statusCodes = {10 : "Empfaengernummer nicht korrekt", - 20 : "Absenderkennung nicht korrekt", - 30 : "Nachrichtentext nicht korrekt", - 31 : "Messagetyp nicht korrekt", - 40 : "SMS Route nicht korrekt", - 50 : "Identifikation fehlgeschlagen", - 60 : "nicht genuegend Guthaben", - 70 : "Netz wird von Route nicht abgedeckt", - 71 : "Feature nicht ueber diese Route moeglich", - 80 : "Uebergabe an SMS-C fehlgeschlagen", - 90 : "Versand nicht moeglich", - 100 : "SMS wurde versendet", - } - def __init__(self,code, mID=None, cost=None, count=None): - if code in self.statusCodes.keys(): - self.code=code + if code in statusCodes.keys(): + self.code = code else: - raise UnknownStatusCode(code) + raise StatusException(code) self.mID=mID self.cost = cost self.count = count def __str__(self): try: - return "%i: %s"%(self.code, self.statusCodes[self.code]) + return "%i: %s"%(self.code, statusCodes[self.code]) except IndexError: - raise UnknownStatusCode(self.code) + raise StatusException(self.code) def __int__(self): - if not self.code in self.statusCodes.keys(): - raise UnknownStatusCode(self.code) + if not self.code in statusCodes.keys(): + raise StatusException(self.code) return self.code - - - class Smstrade(Provider): """ s. auch http://kundencenter.smstrade.de/sites/smstrade.de.kundencenter/__pdf/SMS-Gateway_HTTP_API_v2.pdf @@ -105,7 +107,7 @@ elif int(smsSendStatus) in (70,71,): raise RejectRecipient(recipient, status=smsSendStatus) else: - raise Exception() + raise StatusException(smsSendStatus) def __send(self, route, to, sms): """ This function is the main part of the request to the sms service. diff -r 3620bacf1152 -r bacf50bc46bf tests/smstrade.py --- a/tests/smstrade.py Sat Mar 03 03:29:19 2012 +0100 +++ b/tests/smstrade.py Sat Mar 03 03:54:53 2012 +0100 @@ -5,7 +5,7 @@ from iro.error import NoRoute, NoTyp, NeededOption, RejectRecipient from iro.telnumber import Telnumber from iro.model.message import SMS -from iro.offer.smstrade import Smstrade, UnknownStatusCode +from iro.offer.smstrade import Smstrade, StatusException HOST = "localhost" PORT = 9999 @@ -68,18 +68,29 @@ f.readlines.return_value = ["71"] e = self.assertRaises(RejectRecipient, p.send , "basic", SMS(content,None), Telnumber("01701234567")) - self.assertEqual(str(e),'Reject recipient(00491701234567): 71: Feature nicht ueber diese Route moeglich') + self.assertEqual(str(e),'Reject recipient(00491701234567): 71: Feature nicht ueber diese Route moeglich.') @patch("urllib.urlopen") - def testUnknownStatusCode(self,mock_urlopen): + def testUnknwonStatuscode(self,mock_urlopen): f = Mock() f.readlines.return_value = ["703"] mock_urlopen.return_value = f p=self.getProvider() content = "Hello World" - e = self.assertRaises(UnknownStatusCode, p.send , "basic", SMS(content,None), Telnumber("01701234567")) - self.assertEqual(str(e),'950:Error in external API.\nStatusCode 703 is unknown.') + e = self.assertRaises(StatusException, p.send , "basic", SMS(content,None), Telnumber("01701234567")) + self.assertEqual(str(e),'950:Error in external API.\n703: unknown statuscode.') + + @patch("urllib.urlopen") + def testStatusException(self,mock_urlopen): + f = Mock() + f.readlines.return_value = ["10"] + mock_urlopen.return_value = f + + p=self.getProvider() + content = "Hello World" + e = self.assertRaises(StatusException, p.send , "basic", SMS(content,None), Telnumber("01701234567")) + self.assertEqual(str(e),'950:Error in external API.\n10: Empfaengernummer nicht korrekt.')