class AccountManager: DEFAULT_ACCOUNT_ID = 0 def __init__(self): self.__transmitter = Transmitter() self.__configpath = self.__set_configpath() self.__config = self.__init_config() self.__default_account = AccountManager.get_default_account() self.__accounts = [] self.__load_accounts_from_config() def pass_transmitter(self): return self.__transmitter def reset_config(self): self.__accounts = [] if os.path.exists(self.__configpath): os.remove(self.__configpath) self.__config = self.__init_config() def get_accounts(self): return [self.__default_account] + self.__accounts def add_new_account(self, account): self.__verify_account(account) self.__set_section_id_and_load_account(account) self.__add_account_to_config(account) def get_recent_account(self): id = self.get_recent_id() id = int(id) return self.get_account_by_id(id) def get_recent_id(self): id = self.__config.get('DEFAULT', 'last_profile') return int(id) def get_account_by_id(self, id): self.__record_recent_account(id) if id == 0: account = self.__default_account else: account = self.__accounts[id - 1] self.__transmitter.set_account(account) return account def delete_account_by_id(self, id): offset_id = id - 1 del self.__accounts[offset_id] self.__renumber_accounts() def __set_section_id_and_load_account(self, account): account.set_section_id(self.__next_id()) self.__accounts.append(account) def __load_accounts_from_config(self): for section in self.__config.sections(): section_id = self.__next_id() url = self.__config.get(section, 'url') username = self.__config.get(section, 'username') try: password = self.__config.get(section, 'password') if password == '': password = None except NoOptionError: password = None new_account = Account(url, username, password) new_account.set_section_id(section_id) self.__set_section_id_and_load_account(new_account) def __verify_account(self, account): self.__transmitter.set_account(account) self.__transmitter.check_credentials() def __next_id(self): return len(self.__accounts) + 1 def __add_account_to_config(self, account): id = int(account.get_section_id()) # This will throw an exception if it's not a number id = str(id) try: self.__config.add_section(id) except DuplicateSectionError: # No need to add it if it's already there message = 'a ok' self.__config.set(id, 'url', account.get_url()) self.__config.set(id, 'username', account.get_username()) if account.get_password(): self.__config.set(id, 'password', account.get_password()) self.__save_config_to_file() def __save_config_to_file(self): with open(self.__configpath, 'wb') as handle: self.__config.write(handle) def __record_recent_account(self, id): self.__config.set('DEFAULT', 'last_profile', str(id)) self.__save_config_to_file() def __renumber_accounts(self): counter = 1 renumbered_accounts = [] for account in self.get_accounts(): account.set_section_id(counter) counter += 1 renumbered_accounts.append(account) self.__accounts = renumbered_accounts def __init_config(self): config = ConfigParser.ConfigParser() if not os.path.exists(self.__configpath): # Set up initial config file config.set('DEFAULT', 'delay', '1.0') # wait while showing author info config.set('DEFAULT', 'cut_flag', '#! CUT MATERIAL') # we remove anything after this in the html config.set('DEFAULT', 'last_profile', '0') # use as default input option config.set('DEFAULT', 'next_section_n', '1') # next usable profile section number with open(self.__configpath, 'wb') as f: config.write(f) config.read(self.__configpath) return config def __set_configpath(self): # Determine which operating system is in use platform = sys.platform linux_relative_path = "~/.lyxblogger/config.cfg" try: relative_configpath = {'win32' : "~\\lyxblogger\\config.cfg", 'darwin' : "~/.lyxblogger/config.cfg", 'linux2' : linux_relative_path, 'linux3' : linux_relative_path}[platform] except KeyError: raise SystemNotFoundError(platform) configpath = os.path.expanduser(relative_configpath) configdir = os.path.dirname(configpath) if not os.path.exists(configdir): os.makedirs(configdir) return configpath @classmethod def get_default_account(cls): # we are not going to set the id, because we never save this url = 'blogtest.letseatalready.com' username = '******' password = '******' default_account = Account(url, username, password) default_account.set_section_id(AccountManager.DEFAULT_ACCOUNT_ID) return default_account
class AccountManager: DEFAULT_ACCOUNT_ID = 0 def __init__(self): self.__transmitter = Transmitter() self.__configpath = self.__set_configpath() self.__config = self.__init_config() self.__default_account = AccountManager.get_default_account() self.__accounts = [] self.__load_accounts_from_config() def pass_transmitter(self): return self.__transmitter def reset_config(self): self.__accounts = [] if os.path.exists(self.__configpath): os.remove(self.__configpath) self.__config = self.__init_config() def get_accounts(self): return [self.__default_account] + self.__accounts def add_new_account(self, account): self.__verify_account(account) self.__set_section_id_and_load_account(account) self.__add_account_to_config(account) def get_recent_account(self): id = self.get_recent_id() id = int(id) return self.get_account_by_id(id) def get_recent_id(self): id = self.__config.get('DEFAULT', 'last_profile') return int(id) def get_account_by_id(self, id): self.__record_recent_account(id) if id == 0: account = self.__default_account else: account = self.__accounts[id - 1] self.__transmitter.set_account(account) return account def delete_account_by_id(self, id): offset_id = id - 1 del self.__accounts[offset_id] self.__renumber_accounts() def __set_section_id_and_load_account(self, account): account.set_section_id(self.__next_id()) self.__accounts.append(account) def __load_accounts_from_config(self): for section in self.__config.sections(): section_id = self.__next_id() url = self.__config.get(section, 'url') username = self.__config.get(section, 'username') try: password = self.__config.get(section, 'password') if password == '': password = None except NoOptionError: password = None new_account = Account(url, username, password) new_account.set_section_id(section_id) self.__set_section_id_and_load_account(new_account) def __verify_account(self, account): self.__transmitter.set_account(account) self.__transmitter.check_credentials() def __next_id(self): return len(self.__accounts) + 1 def __add_account_to_config(self, account): id = int(account.get_section_id() ) # This will throw an exception if it's not a number id = str(id) try: self.__config.add_section(id) except DuplicateSectionError: # No need to add it if it's already there message = 'a ok' self.__config.set(id, 'url', account.get_url()) self.__config.set(id, 'username', account.get_username()) if account.get_password(): self.__config.set(id, 'password', account.get_password()) self.__save_config_to_file() def __save_config_to_file(self): with open(self.__configpath, 'wb') as handle: self.__config.write(handle) def __record_recent_account(self, id): self.__config.set('DEFAULT', 'last_profile', str(id)) self.__save_config_to_file() def __renumber_accounts(self): counter = 1 renumbered_accounts = [] for account in self.get_accounts(): account.set_section_id(counter) counter += 1 renumbered_accounts.append(account) self.__accounts = renumbered_accounts def __init_config(self): config = ConfigParser.ConfigParser() if not os.path.exists(self.__configpath): # Set up initial config file config.set('DEFAULT', 'delay', '1.0') # wait while showing author info config.set( 'DEFAULT', 'cut_flag', '#! CUT MATERIAL') # we remove anything after this in the html config.set('DEFAULT', 'last_profile', '0') # use as default input option config.set('DEFAULT', 'next_section_n', '1') # next usable profile section number with open(self.__configpath, 'wb') as f: config.write(f) config.read(self.__configpath) return config def __set_configpath(self): # Determine which operating system is in use platform = sys.platform linux_relative_path = "~/.lyxblogger/config.cfg" try: relative_configpath = { 'win32': "~\\lyxblogger\\config.cfg", 'darwin': "~/.lyxblogger/config.cfg", 'linux2': linux_relative_path, 'linux3': linux_relative_path }[platform] except KeyError: raise SystemNotFoundError(platform) configpath = os.path.expanduser(relative_configpath) configdir = os.path.dirname(configpath) if not os.path.exists(configdir): os.makedirs(configdir) return configpath @classmethod def get_default_account(cls): # we are not going to set the id, because we never save this url = 'blogtest.letseatalready.com' username = '******' password = '******' default_account = Account(url, username, password) default_account.set_section_id(AccountManager.DEFAULT_ACCOUNT_ID) return default_account
def test_check_credentials_bad_password(self): tt = Transmitter() tt.set_account(self.account_with_bad_password) self.assertEquals(tt.check_credentials(), 'username/password error')
def test_check_credentials_no_password(self): tt = Transmitter() tt.set_account(self.account_with_no_password) self.assertEquals(tt.check_credentials(), True)
def test_check_credentials_bogus(self): tt = Transmitter() tt.set_account(self.bogus_account) self.assertEquals(tt.check_credentials(), 'host not found')