def get_user_results(self, user): print(user.codeforces_handle) ContestParticipation.objects.filter(user=user).delete() for contest in self.CONTEST_IDS: contest_json_path = os.path.join(self.CODEFORCES_JSON_DIR, str(contest) + '.json') with open(contest_json_path) as stream: data = json.load(stream)['result'] for row in data['rows']: if row['party']['members'][0][ 'handle'] == user.codeforces_handle: participation = ContestParticipation( user=user, place=row['rank'], name=data['contest']['name']) percentile = row['rank'] / len(data['rows']) * 100 participation.score = self.get_score( percentile, 'Div. 1' in participation.name) participation.save() print( participation.name, participation.score, "{0}/{1}".format(participation.place, len(data['rows']))) break
def handle_special_cases(self): """DIV1 people who participated unoficially in div2 competitions""" # codeforces, place, total participants, contest name cases = [ ('Kira96', 195, 7429, 'Codeforces Round #350 (Div. 2) #unofficial'), ('Kira96', 75, 6099, 'Codeforces Round #354 (Div. 2) #unofficial'), ('plus10UltimateOrb', 46, 8527, 'Codeforces Round #353 (Div. 2) #unofficial'), ('plus10UltimateOrb', 11, 5079, 'Codeforces Round #354 (Div. 2) #unofficial'), ] for case in cases: user = DemoUser.objects.get(codeforces_handle=case[0]) participation = ContestParticipation(user=user, place=case[1], name=case[3]) percentile = case[1] / case[2] * 100 participation.score = self.get_score(percentile, False) participation.save()