refactoring error of smstrade. devel
authorSandro Knauß <knauss@netzguerilla.net>
Sat, 03 Mar 2012 03:54:53 +0100
branchdevel
changeset 214 bacf50bc46bf
parent 213 3620bacf1152
child 215 5bacdb7e94d1
refactoring error of smstrade.
iro/offer/smstrade.py
tests/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.    
--- 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.')