From d7873f412b71d63c1cf7cd6971f9a505fb240019 Mon Sep 17 00:00:00 2001 From: John Nagle Date: Wed, 22 Jun 2016 22:48:44 -0700 Subject: [PATCH] Remove last vestiges of Google Voice support --- messager/aethericmsgfeed.py | 72 ---------------------------- messager/pygooglevoicepatches.py | 82 -------------------------------- messager/twiliofeed.py | 2 +- messager/userinterface.py | 1 - 4 files changed, 1 insertion(+), 156 deletions(-) delete mode 100644 messager/aethericmsgfeed.py delete mode 100644 messager/pygooglevoicepatches.py diff --git a/messager/aethericmsgfeed.py b/messager/aethericmsgfeed.py deleted file mode 100644 index 9bf110d..0000000 --- a/messager/aethericmsgfeed.py +++ /dev/null @@ -1,72 +0,0 @@ -# -# aethericmsgfeed.py - fetch SMS messages via Google Voice, as steampunk "Aetheric Message" machine. -# -# John Nagle -# January, 2010 -# -# Subclass of SMSfeed that uses "Aetheric Message" machine processing. -# -# License: LGPL -# -# -import smsfeed -import re - -kaethericmsgre = re.compile(r'\s*TO\s+(.+)[:\-](.+)',re.IGNORECASE) # TO: name : content -# -# class AethericMessageFeed -- read SMS messages from a Google Voice account, "Aetheric Message" processing -# -class AethericMessageFeed(smsfeed.SMSfeed) : - - kheadertext = "\n\n\a\n\a. . . THE AETHERIC MESSAGE MACHINE COMPANY, LTD. . . ." # printed as header - ktrailertext = ". . . END OF MESSAGE . . .\n\n" - kerrormsg1 = 'Aetheric messages, to be delivered, must begin "TO full name :". The ":" is required. Please try again.' - kerrormsg1s = 'No "TO name "' # note problem - kackmsg1 = 'Yr. message to "%s" received for delivery by The Aetheric Msg Machine Co, Ltd and St.Clair Aeronauts.' - kenablesmsreplies = True # true to send SMS replies for errors and acks - kenableprintrejects = False # true if we will print rejected messages - - # - # Called from outside the thread - # - def __init__(self, username, password, persistentdir, logger) : - smsfeed.SMSfeed.__init__(self, username, password, persistentdir, logger ) - self.hdrtitle = "Aetheric Message" - self.url = self.hdrtitle - self.hdrtext = self.kheadertext # default header, can be replaced - self.trailertext = self.ktrailertext # default trailer - self.enablesmsreplies = self.kenablesmsreplies # send SMS replies? - - - # Doitem -- called for each item to be printed - # - # Overriding standard processing to reply to sender - # - def doitem(self, msgitem, convs) : - msgitem = self.processitem(msgitem, convs) # make into a message item - if msgitem : # if got an item - if msgitem.errmsg : # if error, handle as error - self.inqueue.put(msgitem) # enqueue it - return - # Non-error. Check formatting. - # Messages must be of the form "To <: or -> " - matchitem = kaethericmsgre.match(msgitem.body) # parse SMS message content - if matchitem : - (topart, contentpart) = matchitem.group(1,2) # decompose message - if not topart is None and not contentpart is None : # if valid - msgitem.msgdeliverto = topart.strip() # break body field into TO and body fields - msgitem.body = contentpart # delete TO info from body field - self.inqueue.put(msgitem) # process item - replytext = self.kackmsg1 % (topart,) # format reply - if self.enablesmsreplies : - self.sendSMS(msgitem.msgfrom, replytext) # send ack to sender - return - # Trouble - not valid - # Prints on Teletype as normal message, but the error is noted - if self.enablesmsreplies : - self.sendSMS(msgitem.msgfrom, self.kerrormsg1) # reply to caller - msgitem.body = "ERROR: %s\n\n%s" % (self.kerrormsg1s, msgitem.body) - if self.kenableprintrejects : # if printing rejected messages - self.inqueue.put(msgitem) # still print, but as error - - \ No newline at end of file diff --git a/messager/pygooglevoicepatches.py b/messager/pygooglevoicepatches.py deleted file mode 100644 index eea983c..0000000 --- a/messager/pygooglevoicepatches.py +++ /dev/null @@ -1,82 +0,0 @@ -# -# Temporary fixes to PyGoogleVoice to allow reading more than one page from input. -# -# These are TEMPORARY FIXES until something better can be implemented by the project developer. -# -# Apply to pygooglevoice 0.5 only. -# -# John Nagle -# January, 2009 -# nagle@animats.com -# -import googlevoice -from googlevoice.util import * -settings = googlevoice.settings -log = googlevoice.voice.log - -# -# Replacing voice.py / __do_page: -# -def do_page(self, page, data=None, headers={}): - """ - Loads a page out of the settings and pass it on to urllib Request - """ - ####print("PATCHED version of __do_page") # ***TEMP*** - page = page.upper() - doget = False # do POST or GET? - # Hokey fix. if this is a request for a second page, do a GET, not a POST - if page in ('DOWNLOAD','XML_SEARCH') or (isinstance(data,dict) and "page" in data) : - doget = True - if isinstance(data, dict) or isinstance(data, tuple): - data = urlencode(data) - headers.update({'User-Agent': 'PyGoogleVoice/0.5'}) - if log: - log.debug('%s?%s - %s' % (getattr(settings, page)[22:], data or '', headers)) - if doget : # if doing GET, not POST - url = getattr(settings, page) # construct URL - if data != "" : # if URLencoded data - url += "?" + data # append, with preceding "?" - return urlopen(Request(url, None, headers)) - if data: - headers.update({'Content-type': 'application/x-www-form-urlencoded;charset=utf-8'}) - return urlopen(Request(getattr(settings, page), data, headers)) -# -# Replacing util.py / __call__: -# -def call(self): - ####print("PATCHED version of __call__") #### ***TEMP*** - self.json, self.html = '','' - parser = ParserCreate() - parser.StartElementHandler = self.start_element - parser.EndElementHandler = self.end_element - parser.CharacterDataHandler = self.char_data - data = self.datafunc() # fetch data outside try block, so network exceptions propagate - try: - parser.Parse(data, 1) - except: - raise ParsingError # parsing errors only, not HTTP errors - return self.folder - -# -# Apply patches, replacing functions within pygooglevoice -# -googlevoice.Voice._Voice__do_page = do_page -googlevoice.util.XMLParser.__call__ = call - -# -# fetchfolderpage -- workaround for "pygooglevoice" issue #22 -# -# Google Voice folders are returned 10 entries at a time, so getting them all requires -# multiple reads -# -def fetchfolderpage(voice, pagetype, pagenumber=1) : # fetch page N (starting from 1) of inbox - params = None # params for fetching page, if any - if pagenumber > 1 : # if not first page, must put page number in URL - params = {'page' : "p" + str(pagenumber)} # get page "p2", etc. - xmlparser = voice._Voice__get_xml_page(pagetype, params) # violate class privacy per developer instructions - return (xmlparser) # return XML parser object - - -# Patch for 2012 - Google changed the login URL. -googlevoice.settings.LOGIN = 'https://accounts.google.com/ServiceLogin?service=grandcentral' - diff --git a/messager/twiliofeed.py b/messager/twiliofeed.py index 54ca7c6..facfe54 100644 --- a/messager/twiliofeed.py +++ b/messager/twiliofeed.py @@ -87,7 +87,7 @@ def doservercmd(logger, accountsid, ourphoneno, cmd, v1=None, v2=None) : fd.close() # done with open return(result) # return result # -# class SMSfeed -- read SMS messages from a Google Voice account. +# class SMSfeed -- read SMS messages from our server, which has an API. # class Twiliofeed(feedmanager.Feed) : diff --git a/messager/userinterface.py b/messager/userinterface.py index 1a9b089..d4c49f9 100644 --- a/messager/userinterface.py +++ b/messager/userinterface.py @@ -29,7 +29,6 @@ # # Globals # -DEFAULTCONFIG = "configdefault.cfg" LONGPROMPT = "\nType N for news, W for weather, S to send, O for off, CR to wait: " SHORTPROMPT = "\nN, W, S, O, or CR: "