Matthew Schinckel  committed 2cafbe8

Added docs/comments

  • Participants
  • Parent commits 0732215
  • Branches default

Comments (0)

Files changed (1)

File sms/models/

 class Gateway(models.Model):
     A Gateway is a sending endpoint, and associated authentication info
-    that can be used to send messages.
+    that can be used to send and receive messages.
     name = models.CharField(max_length=128)
     def send(self, message):
+        """
+        Use this gateway to send a message.
+        If ``celery`` is installed, then we assume they have set up the
+        ``celeryd`` server, and we queue for delivery. Otherwise, we will
+        send in-process.
+        .. note::
+            It is strongly recommended to run this out of process, 
+            especially if you are sending as part of an HttpRequest, as this
+            could take ~5 seconds per message that is to be sent.
+        """
         if 'celery' in settings.INSTALLED_APPS:
             import sms.tasks
     def _send(self, message):
+        """
+        Actually do the work of sending the message. This is in a seperate
+        method so we can background it it possible.
+        """
+        assert message.status == "Unsent", "Re-sending SMS Messages not yet supported."
+        # We need to store the gateway that was used, so we can match up
+        # which gateway a reply has come through.
         message.gateway = self
+        # Build up a URL-encoded request.
         raw_data = {}
         if message.recipient_number:
             raw_data[self.recipient_keyword] =
         raw_data[self.content_keyword] = message.content
         if self.uuid_keyword:
-            assert message.uuid, "Message must have a valid UUID"
+            assert message.uuid, "Message must have a valid UUID. Has it been saved?"
             raw_data[self.uuid_keyword] = message.uuid
         data = urllib.urlencode(raw_data)
+        # Now hit the server.
         res = urllib.urlopen(self.base_url, data)
+        # Most servers will respond with something, which is only an
+        # interim status, which we can get for now, and maybe update later.
         status_msg =
         if status_msg.startswith('ERR') or status_msg.startswith('WARN'):
             message.status = "Failed"
             message.status_message = status_msg.split(': ')[1]