class Server(object): def __init__(self): self.__theme = Theme() self.__key_words_manager = KeyWordsManager() self.__email_manager = EmailManager() self.__email = None self.__pass = None self.__account = None self.__index_html = None self.__error_description = "" def prepate_loop(self): while True: self.prepate() time.sleep(REFRESH_TIME_SECONDS) def codify(self, name): if not isinstance(name, str): return name new = "" for letter in name[: name.index("@")]: new += chr(int(ord(letter) + time.time()) % 122) return new + name[name.index("@") :] def prepate(self): try: # f = open("debug.txt", "a") # f.write("----Prepare-----\n") emails = self.__account.get_emails() # f.write("emails count:%s\n" % emails.__len__()) remaining = self.__account.emails_to_fetch_count() # f.write("remaining count:%s\n" % remaining) self.__email_manager.add_emails(emails) timeline = self.__email_manager.emails_timeline # for year in timeline: # f.write("%s:\n" % year) # for month in timeline[year]: # f.write("\t%s:\n" % month) # for type in timeline[year][month]: # f.write("\t\t%s:\n" % type) # for contact in timeline[year][month][type]: # f.write("\t\t\t%s:%s\n" % (self.codify(contact), timeline[year][month][type][contact].__len__())) contacts_mapping = self.__account.get_contacts_mapping() # f.write("contacts mapping count:%s\n" % str(contacts_mapping.keys().__len__())) contacts_list = self.__account.get_contacts_list() # f.write("contacts list count:%s\n" % contacts_list.__len__()) self.__index_html = self.__theme.get_index_html( remaining, self.__email_manager, timeline, contacts_mapping, contacts_list, self.__key_words_manager ) # f.write("----------------\n\n") # f.close() except Exception as e: if DEBUG_FLAG: f = open("debug.txt", "a") import traceback traceback.print_exc(None, f) f.write("----------------\n\n") f.close() return @cherrypy.expose def index(self): if self.__email is None or self.__pass is None: return self.__theme.get_login_html() else: if self.__account == None: self.__account = GmailAccount(self.__key_words_manager) try: self.__account.login(self.__email, self.__pass) except LanguageNotSupported as e: return self.__theme.get_language_not_supported_html(e.available_boxes) except WrongUsernameAndOrPasswordException: self.__account = None return self.__theme.get_login_html(wrong_credentials=True) except LoginException as e: self.__account = None return self.__theme.get_login_html(login_exception_message=e.message) except SearchException as e: self.__account = None self.raiseOops(e) except Exception as e: if DEBUG_FLAG: f = open("debug.txt", "a") import traceback traceback.print_exc(None, f) f.write("----------------\n\n") f.close() self.__account = None self.raiseOops(e) try: self.__account.start_fetch_all(asynchronous=True) import threading th = threading.Thread(target=self.prepate_loop) th.start() except LanguageNotSupported as e: return self.__theme.get_language_not_supported_html(e.available_boxes) except Exception as e: if DEBUG_FLAG: f = open("debug.txt", "a") import traceback traceback.print_exc(None, f) f.write("----------------\n\n") f.close() self.raiseOops(e) if self.__index_html is None or self.__index_html.__len__() == 0: time.sleep(1) raise cherrypy.HTTPRedirect("./index") else: try: return self.__index_html except Exception as e: if DEBUG_FLAG: f = open("debug.txt", "a") import traceback traceback.print_exc(None, f) f.write("----------------\n\n") f.close() self.raiseOops(e) @cherrypy.expose def choose_label_action(self, allLabel, sentLabel): try: self.__account.SUPORTED_ALL_MAIL_LABELS.append(allLabel) self.__account.SUPORTED_SENT_MAIL_LABELS.append(sentLabel) self.__account = None except Exception as e: self.raiseOops(e) raise cherrypy.HTTPRedirect("./index") @cherrypy.expose def login_action(self, mail, password): try: self.__email = mail self.__pass = password except Exception as e: if DEBUG_FLAG: f = open("debug.txt", "a") import traceback traceback.print_exc(None, f) f.write("----------------\n\n") f.close() self.raiseOops(e) raise cherrypy.HTTPRedirect("./index") @cherrypy.expose def logout_action(self): try: self.__email = None self.__pass = None except Exception as e: self.raiseOops(e) raise cherrypy.HTTPRedirect("./index") def raiseOops(self, exception): msg = str(exception) if msg.__len__() == 0: msg = "no description" encrypte_msg = bz2.compress(msg) self.__error_description = encrypte_msg raise cherrypy.HTTPRedirect("./oops") @cherrypy.expose def oops(self): return self.__theme.get_oops_html(self.__error_description)
from services import htmlGenerator, cookiesManager # log to stderr logging.basicConfig(level=logging.DEBUG) print "Content-Type: text/html\n" print """<!DOCTYPE html> <html lang="en"> """ htmlGenerator.print_header() loginCookies = cookiesManager.get_login_cookies() if loginCookies != None: g = GmailAccount() try: resp = g.login(loginCookies.mail,loginCookies.password) htmlGenerator.print_main_page() except Exception, e: #nothing so far print "Wrong username and/or password." htmlGenerator.print_page("login.html") else: htmlGenerator.print_page("login.html") print "</html>"
def index(self): if self.__email is None or self.__pass is None: return self.__theme.get_login_html() else: if self.__account == None: self.__account = GmailAccount(self.__key_words_manager) try: self.__account.login(self.__email, self.__pass) except LanguageNotSupported as e: return self.__theme.get_language_not_supported_html(e.available_boxes) except WrongUsernameAndOrPasswordException: self.__account = None return self.__theme.get_login_html(wrong_credentials=True) except LoginException as e: self.__account = None return self.__theme.get_login_html(login_exception_message=e.message) except SearchException as e: self.__account = None self.raiseOops(e) except Exception as e: if DEBUG_FLAG: f = open("debug.txt", "a") import traceback traceback.print_exc(None, f) f.write("----------------\n\n") f.close() self.__account = None self.raiseOops(e) try: self.__account.start_fetch_all(asynchronous=True) import threading th = threading.Thread(target=self.prepate_loop) th.start() except LanguageNotSupported as e: return self.__theme.get_language_not_supported_html(e.available_boxes) except Exception as e: if DEBUG_FLAG: f = open("debug.txt", "a") import traceback traceback.print_exc(None, f) f.write("----------------\n\n") f.close() self.raiseOops(e) if self.__index_html is None or self.__index_html.__len__() == 0: time.sleep(1) raise cherrypy.HTTPRedirect("./index") else: try: return self.__index_html except Exception as e: if DEBUG_FLAG: f = open("debug.txt", "a") import traceback traceback.print_exc(None, f) f.write("----------------\n\n") f.close() self.raiseOops(e)