from django.core.management.base import BaseCommand from judge.models import * from collections import defaultdict import csv import os from django.conf import settings def gen_submissions(): headers = ["uid", "pid"] with open(os.path.join(settings.ML_DATA_PATH, "submissions.csv"), "w") as csvfile: f = csv.writer(csvfile) f.writerow(headers) last_pid = defaultdict(int) for u in Profile.objects.all(): used = set() print("Processing user", u.id) for s in Submission.objects.filter(user=u).order_by("-date"): if s.problem.id not in used: used.add(s.problem.id) f.writerow([u.id, s.problem.id]) def gen_users(): headers = ["uid", "username", "rating", "points"] with open(os.path.join(settings.ML_DATA_PATH, "profiles.csv"), "w") as csvfile: f = csv.writer(csvfile) f.writerow(headers) for u in Profile.objects.all(): f.writerow([u.id, u.username, u.rating, u.performance_points]) def gen_problems(): headers = ["pid", "code", "name", "points", "url"] with open(os.path.join(settings.ML_DATA_PATH, "problems.csv"), "w") as csvfile: f = csv.writer(csvfile) f.writerow(headers) for p in Problem.objects.all(): f.writerow( [p.id, p.code, p.name, p.points, "lqdoj.edu.vn/problem/" + p.code] ) class Command(BaseCommand): help = "generate data for ML" def handle(self, *args, **options): gen_users() gen_problems() gen_submissions()