* Pythonic work
authorepage <eopage@byu.net>
Sun, 29 Jun 2008 02:10:20 +0000 (02:10 +0000)
committerepage <eopage@byu.net>
Sun, 29 Jun 2008 02:10:20 +0000 (02:10 +0000)
 * Variable names
 * Documentation

Note: I don't think I broke anything but grand central is down.  I doubt it but could that have been related to us with how many downloads we do?

git-svn-id: file:///svnroot/gc-dialer/trunk@19 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

gc_dialer/browser_emu.py
gc_dialer/gc_dialer.py
gc_dialer/gcbackend.py

index 3e610d4..7a62f72 100644 (file)
@@ -41,6 +41,7 @@ import urllib2
 #import mimetypes
 import cookielib
 
+
 class MozillaEmulator(object):
 
        def __init__(self,cacher={},trycount=0):
@@ -109,6 +110,7 @@ class MozillaEmulator(object):
                @return: The raw HTML page data, unless fd was specified. When fd
                        was given, the return value is undefined.
                """
+               print "Performing download of %s" % url
                if trycount is None:
                        trycount = self.trycount
                cnt = 0
index fdf2e40..9d99b32 100755 (executable)
@@ -72,13 +72,13 @@ def makepretty(phonenumber):
 
        if phonenumber[0] == "0":
                prettynumber = ""
-               prettynumber += "+" + phonenumber[0:3]
+               prettynumber += "+%s" % phonenumber[0:3]
                if 3 < len(phonenumber):
-                       prettynumber += "-(" + phonenumber[3:6] + ")"
+                       prettynumber += "-(%s)" % phonenumber[3:6]
                        if 6 < len(phonenumber):
-                               prettynumber += "-" + phonenumber[6:9]
+                               prettynumber += "-%s" % phonenumber[6:9]
                                if 9 < len(phonenumber):
-                                       prettynumber += "-" + phonenumber[9:]
+                                       prettynumber += "-%s" % phonenumber[9:]
                return prettynumber
        elif len(phonenumber) <= 7:
                prettynumber = "%s-%s" % (phonenumber[0:3], phonenumber[3:])
@@ -104,6 +104,9 @@ class Dialpad(object):
                        if os.path.isfile(path):
                                self.wTree.add_from_file(path)
                                break
+               else:
+                       self.ErrPopUp("Cannot find gc_dialer.xml")
+                       sys.exit(1)#@todo Is this the best way to force a quit on error?
 
                self.window = self.wTree.get_object("Dialpad")
                #Get the buffer associated with the number display
@@ -135,11 +138,11 @@ class Dialpad(object):
                except:
                        print "No hildon"
 
-               if (self.window):
+               if self.window:
                        self.window.connect("destroy", gtk.main_quit)
                        self.window.show_all()
 
-               dic = {
+               callbackMapping = {
                        # Process signals from buttons
                        "on_digit_clicked"  : self.on_digit_clicked,
                        "on_dial_clicked"    : self.on_dial_clicked,
@@ -150,7 +153,7 @@ class Dialpad(object):
                        "on_recentview_row_activated" : self.on_recentview_row_activated,
                        "on_back_clicked" : self.Backspace
                }
-               self.wTree.connect_signals(dic)
+               self.wTree.connect_signals(callbackMapping)
 
                self.attemptLogin(3)
                if self.gcd.getCallbackNumber() is None:
@@ -194,8 +197,8 @@ class Dialpad(object):
                self.callbacklist = gtk.ListStore(gobject.TYPE_STRING)
                combobox.set_model(self.callbacklist)
                combobox.set_text_column(0)
-               for k, v in self.gcd.getCallbackNumbers().iteritems():
-                       self.callbacklist.append([makepretty(k)] )
+               for number, description in self.gcd.getCallbackNumbers().iteritems():
+                       self.callbacklist.append([makepretty(number)] )
 
                self.wTree.get_object("callbackentry").set_text(makepretty(self.gcd.getCallbackNumber()))
 
@@ -213,20 +216,22 @@ class Dialpad(object):
                else:
                        dialog = self.wTree.get_object("login_dialog")
 
-               while ( (times > 0) and (self.gcd.isAuthed() is False) ):
-                       if dialog.run() == gtk.RESPONSE_OK:
-                               if self.isHildon:
-                                       username = dialog.get_username()
-                                       password = dialog.get_password()
-                               else:
-                                       username = self.wTree.get_object("usernameentry").get_text()
-                                       password = self.wTree.get_object("passwordentry").get_text()
-                                       self.wTree.get_object("passwordentry").set_text("")
-                               self.gcd.login(username, password)
-                               dialog.hide()
-                               times = times - 1
-                       else:
+               while (0 < times) and not self.gcd.isAuthed():
+                       if dialog.run() != gtk.RESPONSE_OK:
                                times = 0
+                               continue
+
+                       if self.isHildon:
+                               username = dialog.get_username()
+                               password = dialog.get_password()
+                       else:
+                               username = self.wTree.get_object("usernameentry").get_text()
+                               password = self.wTree.get_object("passwordentry").get_text()
+                               self.wTree.get_object("passwordentry").set_text("")
+                       print "Attempting login"
+                       self.gcd.login(username, password)
+                       dialog.hide()
+                       times -= 1
 
                if self.isHildon:
                        dialog.destroy()
index 7e15ec8..dddb9e7 100644 (file)
@@ -20,7 +20,7 @@ class GCDialer(object):
        the functions include login, setting up a callback number, and initalting a callback
        """
 
-       _wgetOKstrRe    = re.compile("This may take a few seconds", re.M)       # string from Grandcentral.com on successful dial
+       _gcDialingStrRe = re.compile("This may take a few seconds", re.M)       # string from Grandcentral.com on successful dial
        _validateRe     = re.compile("^[0-9]{10,}$")
        _accessTokenRe  = re.compile(r"""<input type="hidden" name="a_t" [^>]*value="(.*)"/>""")
        _isLoginPageRe  = re.compile(r"""<form method="post" action="https://www.grandcentral.com/mobile/account/login">""")
@@ -36,9 +36,8 @@ class GCDialer(object):
 
        def __init__(self, cookieFile = None):
                # Important items in this function are the setup of the browser emulation and cookie file
-
                self._msg = ""
-               if cookieFile == None:
+               if cookieFile is None:
                        cookieFile = os.path.join(os.path.expanduser("~"), ".gc_dialer_cookies.txt")
                self._browser = MozillaEmulator(None, 0)
                self._browser.cookies.filename = cookieFile
@@ -51,8 +50,7 @@ class GCDialer(object):
                self._accountNum = None
 
        def grabToken(self, data):
-               # Pull the magic cookie from the datastream
-
+               "Pull the magic cookie from the datastream"
                atGroup = GCDialer._accessTokenRe.search(data)
                try:
                        self._accessToken = atGroup.group(1)
@@ -73,7 +71,6 @@ class GCDialer(object):
                Attempts to detect a current session and pull the
                auth token ( a_t ) from the page
                """
-
                self._lastData = self._browser.download(GCDialer._forwardselectURL)
                self._browser.cookies.save()
                if GCDialer._isLoginPageRe.search(self._lastData) is None:
@@ -85,7 +82,6 @@ class GCDialer(object):
                """
                Attempt to login to grandcentral
                """
-
                if self.isAuthed():
                        return
 
@@ -101,29 +97,31 @@ class GCDialer(object):
                3) anything with computer in the name
                4) the first value
                """
-
                numbers = self.getCallbackNumbers()
 
-               for k, v in numbers.iteritems():
-                       if not re.compile(r"""1747""").match(k) is None:
-                               self.setCallbackNumber(k)
+               for number, description in numbers.iteritems():
+                       if not re.compile(r"""1747""").match(number) is None:
+                               self.setCallbackNumber(number)
                                return
 
-               for k, v in numbers.iteritems():
-                       if not re.compile(r"""gizmo""", re.I).search(v) is None:
-                               self.setCallbackNumber(k)
+               for number, description in numbers.iteritems():
+                       if not re.compile(r"""gizmo""", re.I).search(description) is None:
+                               self.setCallbackNumber(number)
                                return
 
-               for k, v in numbers.iteritems():
-                       if not re.compile(r"""computer""", re.I).search(v) is None:
-                               self.setCallbackNumber(k)
+               for number, description in numbers.iteritems():
+                       if not re.compile(r"""computer""", re.I).search(description) is None:
+                               self.setCallbackNumber(number)
                                return
 
-               for k, v in numbers.iteritems():
-                       self.setCallbackNumber(k)
+               for number, description in numbers.iteritems():
+                       self.setCallbackNumber(number)
                        return
 
        def getCallbackNumbers(self):
+               """
+               @returns a dictionary mapping call back numbers to descriptions
+               """
                retval = {}
 
                self._lastData = self._browser.download(GCDialer._forwardselectURL)
@@ -137,7 +135,6 @@ class GCDialer(object):
                set the number that grandcental calls
                this should be a proper 10 digit number
                """
-
                callbackPostData = urllib.urlencode({'a_t' : self._accessToken, 'default_number' : callbacknumber })
                self._lastData = self._browser.download(GCDialer._setforwardURL, callbackPostData)
                self._browser.cookies.save()
@@ -156,14 +153,12 @@ class GCDialer(object):
                """
                Can this number be called ( syntax validation only )
                """
-
                return GCDialer._validateRe.match(number) is not None
 
        def dial(self, number):
                """
                This is the main function responsible for initating the callback
                """
-
                # If the number is not valid throw exception
                if self.validate(number) is False:
                        raise ValueError('number is not valid')
@@ -178,17 +173,16 @@ class GCDialer(object):
 
                self._lastData = self._browser.download(
                        GCDialer._clicktocallURL % (self._accessToken, number),
-                       None, {'Referer' : 'http://www.grandcentral.com/mobile/messages'} )
+                       None, {'Referer' : 'http://www.grandcentral.com/mobile/messages'}
+               )
 
-               if GCDialer._wgetOKstrRe.search(self._lastData) != None:
+               if GCDialer._gcDialingStrRe.search(self._lastData) is not None:
                        return True
                else:
                        return False
 
        def get_recent(self):
-               retval = []
                self._lastData = self._browser.download(GCDialer._inboxallURL)
                for match in self._inboxRe.finditer(self._lastData):
                        #print "type: %s date: %s person: %s number: %s" % (match.group(1), match.group(2), match.group(3), match.group(4))
-                       retval.append([match.group(4), "%s on %s from/to %s - %s" % (match.group(1).capitalize(), match.group(2), match.group(3), match.group(4))])
-               return retval
+                       yield (match.group(4), "%s on %s from/to %s - %s" % (match.group(1).capitalize(), match.group(2), match.group(3), match.group(4)))