class AutoTokenGenerator(object):
    
    def __init__(self):
        '''
        Constructor
        '''
        self.db = Database()
        self.logger = Logger.getLogger("AutoTokenGenerator")
    
    def generatorToken(self, site_id):
        '''
        Auto Generator a valid token for different site platform.
        '''
#        tokens = self.__getValidToken(site_id)
        tokens = None
        if tokens != None and  len(tokens) > 0:
            return tokens[0]
        else:
            tokens = self.__generatorValidToken(site_id)
            if tokens != None and  len(tokens) > 0:
                return tokens[0]
            else:
                raise TokenGeneratorError("-1", "没有获取到有效的Token!")
#                self.logger.error("没有获取到有效的Token!")
                return None

    def __getValidToken(self,site_id):
        '''
        get a valid token from database.
        '''
        if self.db is None:
            raise TokenGeneratorError("0", "数据库创建链接失败")
#            self.logger.error("数据库创建链接失败")
            return None
        tokens=[]
        result = self.db.query("SELECT access_token,expires_in FROM tb_account_info WHERE platform_id = " + str(site_id) + " AND is_valid=1 AND rate_limited=0 ORDER BY assign_counter ASC " )
        for token_info in result:
            token = dict([("access_token",token_info["access_token"]),("expires_in",token_info["expires_in"])])
            tokens.append(token)
        return result

    def __generatorValidToken(self,site_id):
        '''
        update a invalid token
        '''
        if self.db is None:
            raise TokenGeneratorError("0", "数据库创建链接失败")
#            self.logger.error("数据库创建链接失败")
            return None
        result = self.db.query("SELECT uid,username,password FROM tb_account_info WHERE platform_id = " + str(site_id) + " AND is_valid=0  ORDER BY assign_counter ASC")
        tokens=[]
        for account_info in result:
            access_token,expires_in = WeiboTokenGenerator.loginAndGetToken(account_info["username"],account_info["password"])
            self.db.update("UPDATE access_token = '" + access_token + "',expires_in='" + expires_in + "' WHERE uid=" + account_info["uid"])
            token = dict([("access_token",access_token),("expires_in",expires_in)])
            tokens.append(token)
        return tokens
 def __init__(self):
     '''
     Constructor
     '''
     self.db = Database()
     self.logger = Logger.getLogger("AutoTokenGenerator")