def _get_user(self): (value, isId) = self.req['args'] orig_value = value reg = region if isId: value = str(int(value)) else: if reg == "CT": suf = value[-3:] if suf in ('_RU', '_EU', '_NA', '_US', '_SG'): reg = value[-2:] value = value[:-3] if reg == 'US': reg = 'NA' else: reg = "RU" cacheKey = "%s/%s" % ("ID" if isId else reg, value) data = None if cacheKey not in self.cacheUser: try: tdata = getXvmStatActiveTokenData() if tdata is None or not 'token' in tdata: err('No valid token for XVM statistics (key=%s)' % cacheKey) else: tok = tdata['token'].encode('ascii') if isId: req = "user/%s/%s" % (tok, value) else: req = "nick/%s/%s/%s" % (tok, reg, value) server = XVM_STAT_SERVERS[randint( 0, len(XVM_STAT_SERVERS) - 1)] (response, duration) = loadUrl(server, req) if not response: #err('Empty response or parsing error') pass else: try: data = None if response in ( '', '[]') else json.loads(response)[0] except Exception, ex: err(' Bad answer: ' + response) if data is not None: self._fix(data, None if isId else orig_value) if 'nm' in data and '_id' in data: self.cacheUser[reg + "/" + data['nm']] = data self.cacheUser["ID/" + str(data['_id'])] = data elif response == '[]': self.cacheUser[cacheKey] = {} except Exception, ex: err('_get_user() exception: ' + traceback.format_exc())
def _get_user(self): (value, isId) = self.req['args'] orig_value = value reg = region if isId: value = str(int(value)) else: if reg == "CT": suf = value[-3:] if suf in ('_RU', '_EU', '_NA', '_US', '_SG'): reg = value[-2:] value = value[:-3] if reg == 'US': reg = 'NA' else: reg = "RU" cacheKey = "%s/%s" % ("ID" if isId else reg, value) data = None if cacheKey not in self.cacheUser: try: tdata = getXvmStatActiveTokenData() if tdata is None or not 'token' in tdata: err('No valid token for XVM statistics (key=%s)' % cacheKey) else: tok = tdata['token'].encode('ascii') if isId: req = "user/%s/%s" % (tok, value) else: req = "nick/%s/%s/%s" % (tok, reg, value) server = XVM_STAT_SERVERS[randint(0, len(XVM_STAT_SERVERS) - 1)] (response, duration) = loadUrl(server, req) if not response: #err('Empty response or parsing error') pass else: try: data = None if response in ('', '[]') else json.loads(response)[0] except Exception, ex: err(' Bad answer: ' + response) if data is not None: self._fix(data, None if isId else orig_value) if 'nm' in data and '_id' in data: self.cacheUser[reg + "/" + data['nm']] = data self.cacheUser["ID/" + str(data['_id'])] = data elif response == '[]': self.cacheUser[cacheKey] = {} except Exception, ex: err('_get_user() exception: ' + traceback.format_exc())
def _load_stat(self, playerVehicleID, allowNetwork=True): requestList = [] replay = isReplay() for vehId in self.players: pl = self.players[vehId] cacheKey = "%d=%d" % (pl.playerId, pl.vId) if cacheKey in self.cache: continue if str(pl.playerId) in self.playersSkip: continue #if pl.vId in [None, '', 'UNKNOWN']: # requestList.append(str(pl.playerId)) #else: requestList.append( "%d=%d%s" % (pl.playerId, pl.vId, '=1' if not replay and pl.vehId == playerVehicleID else '')) if not requestList: return try: if allowNetwork: tdata = getXvmStatActiveTokenData() if tdata is None or not 'token' in tdata: err('No valid token for XVM statistics (id=%s)' % playerVehicleID) return updateRequest = 'stat/%s/%s' % (tdata['token'].encode('ascii'), ','.join(requestList)) if XVM_STAT_SERVERS is None or len(XVM_STAT_SERVERS) <= 0: err('Cannot read statistics: no suitable server was found.' ) return server = XVM_STAT_SERVERS[randint(0, len(XVM_STAT_SERVERS) - 1)] (response, duration) = loadUrl(server, updateRequest) if not response: #err('Empty response or parsing error') return data = json.loads(response) else: players = [] for vehId in self.players: players.append(self._get_battle_stub(self.players[vehId])) data = {'players': players} if 'info' in data and region in data['info']: self.info = data['info'][region] if 'players' not in data: err('Stat request failed: ' + str(response)) return for stat in data['players']: #debug(json.dumps(stat)) self._fix(stat, None) #pprint(stat) if 'nm' not in stat or not stat['nm']: continue if 'b' not in stat or stat['b'] <= 0: continue cacheKey = "%d=%d" % (stat['_id'], stat.get('v', {}).get( 'id', 0)) self.cache[cacheKey] = stat except Exception, ex: err('_load_stat() exception: ' + traceback.format_exc())
def _load_stat(self, playerVehicleID, allowNetwork=True): requestList = [] tdata = getXvmStatActiveTokenData() if tdata is None or not 'token' in tdata: err('No valid token for XVM statistics (id=%s)' % playerVehicleID) return isReplay = utils.is_replay() for vehId in self.players: pl = self.players[vehId] cacheKey = "%d=%d" % (pl.playerId, pl.vId) if cacheKey in self.cache: continue if str(pl.playerId) in self.playersSkip: continue #if pl.vId in [None, '', 'UNKNOWN']: # requestList.append(str(pl.playerId)) #else: requestList.append("%d=%d%s" % (pl.playerId, pl.vId, '=1' if not isReplay and pl.vehId == playerVehicleID else '')) if not requestList: return updateRequest = 'stat/%s/%s' % (tdata['token'].encode('ascii'), ','.join(requestList)) if XVM_STAT_SERVERS is None or len(XVM_STAT_SERVERS) <= 0: err('Cannot read statistics: no suitable server was found.') return try: if allowNetwork: server = XVM_STAT_SERVERS[randint(0, len(XVM_STAT_SERVERS) - 1)] (response, duration) = loadUrl(server, updateRequest) if not response: #err('Empty response or parsing error') return data = json.loads(response) else: players = [] for vehId in self.players: players.append(self._get_battle_stub(self.players[vehId])) data = {'players':players} if 'info' in data and region in data['info']: self.info = data['info'][region] if 'players' not in data: err('Stat request failed: ' + str(response)) return for stat in data['players']: #debug(json.dumps(stat)) self._fix(stat, None) #pprint(stat) if 'nm' not in stat or not stat['nm']: continue if 'b' not in stat or stat['b'] <= 0: continue cacheKey = "%d=%d" % (stat['_id'], stat.get('v', {}).get('id', 0)) self.cache[cacheKey] = stat except Exception, ex: err('_load_stat() exception: ' + traceback.format_exc())