Browse Source

initial commit

main
Martin Dørum 2 years ago
commit
7fbde12b11
2 changed files with 125 additions and 0 deletions
  1. 76
    0
      findvotes.js
  2. 49
    0
      tally.py

+ 76
- 0
findvotes.js View File

@@ -0,0 +1,76 @@
let https = require("https");
let fs = require("fs");

let authorization = "Basic <insert your own base64-encoded username:token>";
let repo = "langjam/jam0001";
let outfile = "rawvotes.txt";

function get(url, accept) {
return new Promise((resolve, reject) => {
let headers = {
"User-Agent": "Reactionator",
"Accept": accept,
"Authorization": authorization,
};

process.stderr.write(Buffer.from("==> GET " + url + "... ", "utf-8"));
let req = https.get(url, {headers}, res => {
let data = "";
res.on("data", d => {
data += d;
});

res.on("end", () => {
if (res.statusCode != 200) {
process.stderr.write(Buffer.from("ERR " + res.statusCode + "\n"));
throw new Error(data);
} else {
process.stderr.write(Buffer.from("OK\n"));
}

resolve(data);
});
}).on("error", reject);
});
}

function apiIssueReactions(repo, comment) {
return `/repos/${repo}/issues/comments/${comment}/reactions`;
}

async function main(repo, stream) {
let votes = [];
for (let pageNum = 1; ; ++pageNum) {
let page = JSON.parse(await get(
`https://api.github.com/repos/${repo}/issues?state=open&page=${pageNum}`,
"application/vnd.github.v3+json"));
if (page.length == 0) {
break;
}

for (let issue of page) {
let count = 0;
let people = [];
for (let reactionPageNum = 1; ; ++reactionPageNum) {
let reactionPage = JSON.parse(await get(
`https://api.github.com/repos/${repo}/issues/${issue.number}/reactions?page=${reactionPageNum}`,
"application/vnd.github.squirrel-girl-preview"));
if (reactionPage.length == 0) {
break;
}

for (let reaction of reactionPage) {
if (reaction.content == "+1") {
count += 1;
people.push(reaction.user.login);
}
}
}

stream.write(issue.title.trim() + ";" + count + ";" + people.join(":") + "\n");
}
}
}

let stream = fs.createWriteStream(outfile);
main(repo, stream).then(() => stream.close());

+ 49
- 0
tally.py View File

@@ -0,0 +1,49 @@
import os

jamdir = "jam0001"
votesfile = "rawvotes.txt"

teams = {}
users = {}
for teamName in os.listdir(jamdir):
if not os.path.exists(f"{jamdir}/{teamName}/TEAM"): continue

teamName = teamName.lower()
team = []
teams[teamName] = team
with open(f"{jamdir}/{teamName}/TEAM") as f:
for line in f:
for name in line.split():
name = name.strip().lower()
if name.startswith("[delete this line"): continue
if name == "": continue
users[name] = teamName
team.append(name)

tallies = []
with open(votesfile) as f:
for line in f:
issueName, count, voters = line[:-1].split(";")
if not issueName.startswith("Team: "): continue
voters = voters.strip()
if voters == "": continue

teamName = issueName.replace("Team: ", "")
rawTeamName = teamName
teamName = teamName.lower()
voters = map(lambda x: x.strip().lower(), voters.split(":"))

tally = 0
for voter in voters:
if voter not in users:
print("Vote from non-participant:", voter, "voted for", rawTeamName)
elif users[voter] == teamName:
print("Self-vote:", voter, "voted for their own team", rawTeamName)
else:
tally += 1

tallies.append((rawTeamName, tally))

tallies.sort(key=lambda x: x[1])
for tally in tallies:
print(tally[0] + ": " + str(tally[1]))

Loading…
Cancel
Save