summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsyn <isaqtm@gmail.com>2020-01-14 23:03:45 +0300
committersyn <isaqtm@gmail.com>2020-01-14 23:03:45 +0300
commitc6481661571e00e264beeb9a21ae916792a4d3be (patch)
treed439c7386d16419ab71ca6170f9074c9b70cf47a /src
parent0356b707e99910a2896f48dfba29894ffa206b25 (diff)
downloadevr-c6481661571e00e264beeb9a21ae916792a4d3be.tar.gz
Mo refactor
Diffstat (limited to 'src')
-rw-r--r--src/backends/python.rs30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/backends/python.rs b/src/backends/python.rs
index 0b081b9..2f37ae6 100644
--- a/src/backends/python.rs
+++ b/src/backends/python.rs
@@ -4,14 +4,29 @@ use std::process::{ Command, Stdio };
use std::path::Path;
use std::io::{ Error, ErrorKind };
use std::fs::File;
-use log::trace;
+use log::{ trace, warn, error };
+use wait_timeout::ChildExt;
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct PythonBackend {
template: Option<String>,
version: Option<String>,
+ timeout: Option<f32>,
}
+
+impl PythonBackend {
+ fn get_interpreter(&self) -> String {
+ format!(
+ "python{}",
+ self.version
+ .as_ref()
+ .unwrap_or(&String::new())
+ )
+ }
+}
+
+
impl Backend for PythonBackend {
fn get_template(&self) -> Option<&str> {
match self.template {
@@ -21,13 +36,20 @@ impl Backend for PythonBackend {
}
fn run(&self, fname: &Path) -> std::io::Result<()> {
- let interpreter = format!("python{}", self.version.as_ref().unwrap_or(&String::new()));
let stdio = match self.try_guess_test_file(fname) {
- Some(test_file) => Stdio::from(File::open(test_file)?),
+ Some(test_filename) => match File::open(test_filename) {
+ Ok(test_content) => Stdio::from(test_content),
+ Err(err) => {
+ warn!("Could not open test file. Fallback to piped: {}", err);
+ Stdio::piped()
+ }
+ },
None => Stdio::piped()
};
+
let timer = std::time::SystemTime::now();
- let mut child = Command::new(interpreter)
+
+ let mut child = Command::new(self.get_interpreter())
.arg(fname.as_os_str())
.stdin(stdio)
.spawn()?;