From 01001d94f2f605fe84d821cf7a9978d386ab3cfb Mon Sep 17 00:00:00 2001 From: Pytron Date: Tue, 26 Mar 2019 14:07:36 +0000 Subject: [PATCH] Fix some bugs --- package-lock.json | 21 +++++++++++++++++++++ package.json | 1 + pytron_run/run.py | 4 ++-- server.js | 39 ++++++++++++++++++++++++--------------- views/index.pug | 22 +++++++++++++--------- 5 files changed, 61 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e8e733..1381c7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,11 @@ "@types/babel-types": "*" } }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", @@ -630,6 +635,14 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -999,6 +1012,14 @@ "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + } + }, "traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", diff --git a/package.json b/package.json index faab4ee..96b1328 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "express": "^4.16.4", "express-fileupload": "^1.1.3-alpha.1", "pug": "^2.0.3", + "touch": "^3.1.0", "unzip": "^0.1.11" } } diff --git a/pytron_run/run.py b/pytron_run/run.py index c4b0c59..a7f8a64 100755 --- a/pytron_run/run.py +++ b/pytron_run/run.py @@ -32,8 +32,8 @@ for real_ai in ai_manager.__all__: # It is made to be fast and not to be used by humans. It especially doesn't # display and window and doesn't listen to any keystrokes. -width = 40 -height = 40 +width = 10 +height = 10 def run_battle(ai1, ai2): games = 50 diff --git a/server.js b/server.js index 28cdc88..0346026 100644 --- a/server.js +++ b/server.js @@ -3,16 +3,17 @@ const fs = require('fs'); const process = require('process'); const pathtools = require('path'); const express = require('express'); -const fileUpload = require("express-fileupload"); +const fileUpload = require('express-fileupload'); const { spawn } = require('child_process'); const pug = require('pug'); const unzip = require('unzip'); +const touch = require('touch'); // Consts const port = 8000; -const pythonPath = "/home/pytron/miniconda3/envs/pytron/bin/python" -const aisPath = "pytron_run/ai_manager/" -const aisPathOld = "pytron_run/ai_manager_old" +const pythonPath = '/home/pytron/miniconda3/envs/pytron/bin/python' +const aisPath = 'pytron_run/ai_manager/' +const aisPathOld = 'pytron_run/ai_manager_old' // Create the directories to store the files try { fs.mkdirSync(aisPath); } catch { } @@ -35,19 +36,19 @@ function runPython() { p.stdout.on('data', (data) => { let content = data.toString().split('\n'); for (let line of content) { - console.log("run.py: " + line); + console.log('run.py: ' + line); } }); p.stderr.on('data', (data) => { let content = data.toString().split('\n'); for (let line of content) { - console.log("run.py: " + line); + console.log('run.py: ' + line); } }); p.on('close', (code) => { - process.stdout.write("Python finished executing"); + process.stdout.write('Python finished executing'); if (pythonShouldRun) { process.stdout.write(' but another request arrive, so we will relaunch it\n'); pythonShouldRun = false; @@ -111,7 +112,10 @@ function startServer() { console.log(err); } let parsed = parse(data); - res.render('index', parsed); + res.render('index', { + data: parsed, + running: pythonRunning, + }); }); }); @@ -147,15 +151,20 @@ function startServer() { fs.mkdirSync(path); - let zipfile = pathtools.join(path, "archive.zip"); + let zipfile = pathtools.join(path, 'archive.zip'); req.files.archive.mv(zipfile, (err) => { - console.log(err); + if (err !== null) { + console.log(err); + } fs.createReadStream(zipfile) .pipe(unzip.Extract({path})) .on('close', () => { - // Trigger python_run - runPython(); - res.send('yo'); + // Touch __init__.py + touch(pathtools.join(path, '__init__.py'), () => { + // Trigger python_run + runPython(); + res.redirect('/'); + }); }) .on('error', () => { res.send('an error occured while extracting the archive') @@ -179,8 +188,8 @@ function main() { runPython(); break; default: - console.log("Unknown option: " + process.argv[2]); - console.log("Usage: node server.js start|python") + console.log('Unknown option: ' + process.argv[2]); + console.log('Usage: node server.js start|python') process.exit(1); break; } diff --git a/views/index.pug b/views/index.pug index 45d733c..aeec66e 100644 --- a/views/index.pug +++ b/views/index.pug @@ -3,25 +3,29 @@ extends base block content section.section .container + if running + .columns.is-centered + .column.is-narrow.is-desktop + h5.title.is-5 Some battles are running... .columns.is-centered .column.is-narrow.is-desktop table.table.is-bordered.is-striped.is-narrow.is-hoverable tr th - for ai in ais + for ai in data.ais th.has-text-centered= ai.name - for ai1 in ais + for ai1 in data.ais tr th.has-text-centered= ai1.name - for ai2 in ais + for ai2 in data.ais if ai1.name == ai2.name td - else if battles[ai1.name + "/" + ai2.name] > battles[ai2.name + "/" + ai1.name] - td.has-text-success= battles[ai1.name + "/" + ai2.name] - else if battles[ai1.name + "/" + ai2.name] < battles[ai2.name + "/" + ai1.name] - td.has-text-danger= battles[ai1.name + "/" + ai2.name] + else if data.battles[ai1.name + "/" + ai2.name] > data.battles[ai2.name + "/" + ai1.name] + td.has-text-success= data.battles[ai1.name + "/" + ai2.name] + else if data.battles[ai1.name + "/" + ai2.name] < data.battles[ai2.name + "/" + ai1.name] + td.has-text-danger= data.battles[ai1.name + "/" + ai2.name] else - td= battles[ai1.name + "/" + ai2.name] + td= data.battles[ai1.name + "/" + ai2.name] .column.is-narrow.is-desktop table.table.is-bordered.is-striped.is-hoverable tr @@ -30,7 +34,7 @@ block content th.has-text-centered Nulls th.has-text-centered Defeats th.has-text-centered Score - for ai in sortedAis + for ai in data.sortedAis tr td.has-text-centered strong= ai.name