def __init__(self, log_level=logging.DEBUG): logging.basicConfig(level=log_level) self.queue = Queue.Queue() self.log = logging.getLogger('Core') self.log.debug('Started') self.config = AppConfig() self.accman = AccountManager(self.config) self.load_registered_accounts() self.load_registered_columns()
class Core: '''Turpial core''' def __init__(self, log_level=logging.DEBUG): logging.basicConfig(level=log_level) self.queue = Queue.Queue() self.log = logging.getLogger('Core') self.log.debug('Started') self.config = AppConfig() self.accman = AccountManager(self.config) self.load_registered_accounts() self.load_registered_columns() def __print_traceback(self): if self.log.getEffectiveLevel() == logging.DEBUG: print traceback.print_exc() def __handle_exception(self, exc, extra_info=''): self.__print_traceback() _type = type(exc) print "Exception type: %s" % (str(_type)) response = None if _type == urllib2.URLError: response = Response(code=801) elif _type == IndexError: return Response(code=808) elif _type == KeyError: response = Response(code=807) elif _type == NotImplementedError: response = Response(code=900) elif _type == ZeroDivisionError: response = Response(code=809) elif _type == urllib2.HTTPError: if exc.code in ERROR_CODES: response = Response(code=exc.code) elif (exc.code == 400): self.log.debug("Error HTTP 400 detected: %s" % exc) response = Response(code=100) response.errmsg = "Sorry, server is limiting your API calls" elif (exc.code == 403): msg = '' errmsg = exc.read() self.log.debug("Error HTTP 403 detected: %s" % errmsg) if type(errmsg) == str: msg = errmsg elif type(errmsg) == dict: if 'error' in errmsg: msg = errmsg['error'] else: msg = errmsg if msg.find("Status is a duplicate.") > 0: response = Response(code=802) elif msg.find("is already on your list.") > 0: response = Response(code=802) elif msg.find("already requested to follow") > 0: response = Response(code=802) elif msg.find("cannot send messages to users who are not following you") > 0: response = Response(code=813) elif msg.find("text of your tweet is too long") > 0: response = Response(code=814) else: response = Response(code=100) response.errmsg = msg elif _type == ValueError: response = Response(code=404) elif _type == ssl.SSLError: response = Response(code=810) elif _type == URLShortenError: response = Response(code=811) elif _type == NoURLException: response = Response(code=812) else: response = Response(code=999) self.log.debug(response.errmsg) return response def __apply_filters(self, statuses): filtered_statuses = [] filtered_terms = self.config.load_filters() if len(filtered_terms) == 0: return statuses for status in statuses: for term in filtered_terms: if term.startswith('@'): if status.username == term[1:]: continue else: if status.text.lower().find(term.lower()) >= 0: continue filtered_statuses.append(status) return filtered_statuses ''' Microblogging ''' def register_account(self, username, protocol_id, password=None, auth=None): self.log.debug('Registering account %s' % username) acc = self.accman.register(username, protocol_id, password, auth) if not acc: self.log.debug('Invalid account %s in %s' % (username, protocol_id)) return acc def unregister_account(self, account_id, delete_all=False): self.log.debug('Unregistering account %s' % account_id) return self.accman.unregister(account_id, delete_all) def load_registered_accounts(self): accounts = self.config.get_stored_accounts() for acc in accounts: self.log.debug('Registering account: %s' % acc) self.accman.load(acc) def register_column(self, column_id): count = len(self.reg_columns) + 1 key = "column%s" % count self.config.write('Columns', key, column_id) self.load_registered_columns() temp = None for col in self.reg_columns: if col.id_ == column_id: temp = col break return temp def unregister_column(self, column_id): index = 0 to_store = {} for col in self.reg_columns: if col.id_ != column_id: index += 1 key = "column%s" % index to_store[key] = col.id_ self.config.write_section('Columns', to_store) self.load_registered_columns() def load_registered_columns(self): self.reg_columns = self.config.get_stored_columns() ''' list_* methods returns arrays of string ''' def list_accounts(self): return self.accman.list() def list_protocols(self): return [ProtocolType.TWITTER, ProtocolType.IDENTICA] ''' all_* methods returns arrays of objects ''' def all_accounts(self): return self.accman.get_all() def name_as_id(self, acc_id): if self.accman.get(acc_id).protocol_id == ProtocolType.TWITTER: return self.accman.change_id(acc_id, self.accman.get(acc_id).profile.username) else: return acc_id def all_columns(self): columns = {} for account in self.all_accounts(): columns[account.id_] = {} if account.logged_in != LoginStatus.DONE: continue for col in account.get_columns(): id_ = "" for reg in self.reg_columns: if account.id_ == reg.account_id and reg.column_name == col: id_ = reg.id_ break item = Column(id_, account.id_, account.protocol_id, col) columns[account.id_][col] = item return columns def all_registered_columns(self): return self.reg_columns def change_login_status(self, acc_id, status): try: account = self.accman.login_status(acc_id, status) except Exception, exc: return self.__handle_exception(exc)
class Core: '''Turpial core''' def __init__(self, log_level=logging.DEBUG): logging.basicConfig(level=log_level) self.queue = Queue.Queue() self.log = logging.getLogger('Core') self.log.debug('Started') self.config = AppConfig() self.accman = AccountManager(self.config) self.load_registered_accounts() self.load_registered_columns() def __print_traceback(self): if self.log.getEffectiveLevel() == logging.DEBUG: print traceback.print_exc() def __handle_exception(self, exc, extra_info=''): self.__print_traceback() _type = type(exc) print "Exception type: %s" % (str(_type)) response = None if _type == urllib2.URLError: response = Response(code=801) elif _type == IndexError: return Response(code=808) elif _type == KeyError: response = Response(code=807) elif _type == NotImplementedError: response = Response(code=900) elif _type == ZeroDivisionError: response = Response(code=809) elif _type == urllib2.HTTPError: if exc.code in ERROR_CODES: response = Response(code=exc.code) elif (exc.code == 400): self.log.debug("Error HTTP 400 detected: %s" % exc) response = Response(code=100) response.errmsg = "Sorry, server is limiting your API calls" elif (exc.code == 403): msg = '' errmsg = exc.read() self.log.debug("Error HTTP 403 detected: %s" % errmsg) if type(errmsg) == str: msg = errmsg elif type(errmsg) == dict: if errmsg.has_key('error'): msg = errmsg['error'] else: msg = errmsg if msg.find("Status is a duplicate.") > 0: response = Response(code=802) elif msg.find("is already on your list.") > 0: response = Response(code=802) elif msg.find("already requested to follow") > 0: response = Response(code=802) elif msg.find( "cannot send messages to users who are not following you" ) > 0: response = Response(code=813) elif msg.find("text of your tweet is too long") > 0: response = Response(code=814) else: response = Response(code=100) response.errmsg = msg elif _type == ValueError: response = Response(code=404) elif _type == ssl.SSLError: response = Response(code=810) elif _type == URLShortenError: response = Response(code=811) elif _type == NoURLException: response = Response(code=812) else: response = Response(code=999) self.log.debug(response.errmsg) return response def __apply_filters(self, statuses): filtered_statuses = [] filtered_terms = self.config.load_filters() if len(filtered_terms) == 0: return statuses for status in statuses: for term in filtered_terms: if term.startswith('@'): if status.username == term[1:]: continue else: if status.text.lower().find(term.lower()) >= 0: continue filtered_statuses.append(status) return filtered_statuses ''' Microblogging ''' def register_account(self, username, protocol_id, password=None, auth=None): self.log.debug('Registering account %s' % username) acc = self.accman.register(username, protocol_id, password, auth) if not acc: self.log.debug('Invalid account %s in %s' % (username, protocol_id)) return acc def unregister_account(self, account_id, delete_all=False): self.log.debug('Unregistering account %s' % account_id) return self.accman.unregister(account_id, delete_all) def load_registered_accounts(self): accounts = self.config.get_stored_accounts() for acc in accounts: self.log.debug('Registering account: %s' % acc) self.accman.load(acc) def register_column(self, column_id): count = len(self.reg_columns) + 1 key = "column%s" % count self.config.write('Columns', key, column_id) self.load_registered_columns() temp = None for col in self.reg_columns: if col.id_ == column_id: temp = col break return temp def unregister_column(self, column_id): index = 0 to_store = {} for col in self.reg_columns: if col.id_ != column_id: index += 1 key = "column%s" % index to_store[key] = col.id_ self.config.write_section('Columns', to_store) self.load_registered_columns() def load_registered_columns(self): self.reg_columns = self.config.get_stored_columns() ''' list_* methods returns arrays of string ''' def list_accounts(self): return self.accman.list() def list_protocols(self): return [ProtocolType.TWITTER, ProtocolType.IDENTICA] ''' all_* methods returns arrays of objects ''' def all_accounts(self): return self.accman.get_all() def name_as_id(self, acc_id): if self.accman.get(acc_id).protocol_id == ProtocolType.TWITTER: return self.accman.change_id( acc_id, self.accman.get(acc_id).profile.username) else: return acc_id def all_columns(self): columns = {} for account in self.all_accounts(): columns[account.id_] = {} if account.logged_in != LoginStatus.DONE: continue for col in account.get_columns(): id_ = "" for reg in self.reg_columns: if account.id_ == reg.account_id and reg.column_name == col: id_ = reg.id_ break item = Column(id_, account.id_, account.protocol_id, col) columns[account.id_][col] = item return columns def all_registered_columns(self): return self.reg_columns def change_login_status(self, acc_id, status): try: account = self.accman.login_status(acc_id, status) except Exception, exc: return self.__handle_exception(exc)