def __init__(self, game_name, user_agent='pymetabans'):
     self._game_name = self._getMetabansGameName(game_name)
     self._metabans = Metabans(user_agent=user_agent)
class MetabansProxy(object):
    _reColor = re.compile(r'(\^[0-9])')
    group_name = None
    
    def __init__(self, game_name, user_agent='pymetabans'):
        self._game_name = self._getMetabansGameName(game_name)
        self._metabans = Metabans(user_agent=user_agent)
        
    
    @property
    def username(self):
        return self._metabans.username

    @username.setter
    def username(self, value):
        self._metabans.username = value
    
    @property
    def apikey(self):
        return self._metabans.apikey

    @apikey.setter
    def apikey(self, value):
        self._metabans.apikey = value
    
    def _getMetabansGameName(self, B3_game_name):
        if B3_game_name == 'bfbc2':
            return "BF_BC2"
        elif B3_game_name == 'moh':
            return "MOH_2010"
        elif B3_game_name == 'cod4':
            return "COD_4"
        elif B3_game_name == 'cod5':
            return "COD_5"
        elif B3_game_name == 'cod6':
            return "COD_6"
        elif B3_game_name == 'cod7':
            return "COD_7"
        elif B3_game_name == 'homefront':
            return "HOMEFRONT"
        elif B3_game_name == 'bf3':
            return "BF_3"
        else:
            raise UnsupportedGameError, "unsupported game %s" % B3_game_name
            
    def _stripColors(self, text):
        return re.sub(self._reColor, '', text).strip()
    
    def sight(self, client):
        if client:
            metabans_player = Player(client.guid, client.name, client.ip, client.pbid)
            return self._metabans.mb_sight_player(self._game_name, 
                                                  metabans_player,
                                                  self.group_name)
    def check(self, client):
        if client:
            return self._metabans.mbo_player_status(self._game_name, client.guid)



    def clear(self, client, reason=None):
        """remove any assessment on the client"""
        if client:
            return self._metabans.mb_assess_player(game_name=self._game_name,
                                                   player_uid=client.guid, 
                                                   assessment_type='none',
                                                   reason=self._stripColors(reason))

    def watch(self, client, duration=None, reason=None):
        """set the 'watch' assessment on the client
        duration is in second"""
        if client:
            return self._metabans.mb_assess_player(game_name=self._game_name,
                                                   player_uid=client.guid, 
                                                   assessment_type='watch',
                                                   assessment_length=duration,
                                                   reason=self._stripColors(reason))

    def ban(self, client, duration=None, reason=None):
        """set the 'black' assessment on the client
        duration is in second"""
        if client:
            return self._metabans.mb_assess_player(game_name=self._game_name,
                                                   player_uid=client.guid, 
                                                   assessment_type='black',
                                                   assessment_length=duration,
                                                   reason=self._stripColors(reason))

    def protect(self, client, duration=None, reason=None):
        """set the 'white' assessment on the client
        duration is in second"""
        if client:
            return self._metabans.mb_assess_player(game_name=self._game_name,
                                                   player_uid=client.guid, 
                                                   assessment_type='white',
                                                   assessment_length=duration,
                                                   reason=self._stripColors(reason))


    def send_bulk_queries(self, queries):
        """send a bunch of queries in one single call to the metabans API"""
        nb_queries = 0
        query_parameters = {}
        for query in queries:
            for k, v in query.iteritems():
                query_parameters['requests[%d][%s]' % (nb_queries, k)] = v
            nb_queries += 1
        responses = self._metabans._query(query_parameters)
        errors = []
        success = []
        fetch_times = {}
        for r in responses:
            if 'status' in r and r['status'] == 'OK':
                success.append(r)
                key = r['request']['action']
            else:
                errors.append(r)
                key = r['request']['action'] + '_error_%s' % r['error']['code']
            if not key in fetch_times:
                fetch_times[key] = []
            fetch_times[key].append(float(r['fetch_time'].rstrip(' s')) * 1000)
        return (success, errors, fetch_times)