def load(self, dir: Path = default_dir) -> Tuple[bool, str]: """Load the WoK from the dir folder :param dir: Default value = default_dir :return: True if success + message :rtype: boolean, string """ if not Wok.check_dir(dir): return False, "Could not load (see previous error)" # Now dir exists and is a directory current_job_name = None try: current_job_file = [ x for x in dir.iterdir() if not x.is_dir() and x.name == "current_job" ][0] current_job_name = current_job_file.read_text().strip() except IndexError: pass for job_file in [x for x in dir.iterdir() if x.is_dir()]: job = Job(job_file.name) for task_file in job_file.iterdir(): task = Task(task_file.name) task.load(task_file.read_text().split("\n")) job.add_task(task) self.jobs.append(job) if job.name == current_job_name: self.current_job_idx = len(self.jobs) - 1 return True, "Loaded successfully"
def test_save_load(self): task1 = Task("task1") start = datetime(2019, 1, 10, 11, 11) end = datetime(2019, 1, 10, 11, 22) task1.start(dt=start) task1.end(dt=end) task2 = Task("task2") task3 = Task("task3") wok1 = Wok() job1 = Job("job1") wok1.jobs.append(job1) wok1.current_job_idx = 0 job2 = Job("job2") wok1.jobs.append(job2) job1.add_task(task1) job1.add_task(task2) job2.add_task(task3) path = Path.cwd() / ".wok_test" wok1.save(dir=path) wok2 = Wok() wok2.load(dir=path) self.assertEqual(wok2.jobs[wok2.current_job_idx].name, "job1") self.assertEqual(len(wok2.jobs), 2) out = (path / "job1" / "task1").read_text() self.assertEqual( out, "2019-01-10T11:11:00.000000->2019-01-10T11:22:00.000000")
def add_task(self, name: str) -> ApiRtype: if not WokApi.__validate_name(name): return False, f"Task name {name} is invalid" job = self.get_current_job() if job is None: return False, "No current job to add a task to" if any([task.name == name for task in job.tasks]): return False, f"Task with name '{name}' already exists in job '{job.name}'" task = Task(name) job.add_task(task) return True, f"Task '{name}' created"
def detailed_table(self, title: str = "Job", suffix: List[str] = []) -> str: tasks = [(t, t.get_total_duration()) for t in self.tasks] total = sum([d for (t, d) in tasks], timedelta(0)) tasks_data = [[ t.name, "yes" if t.is_running() else "no", Task.duration_to_str(d), "N/A" if total == 0 else f"{d / total:.2%}", ] for (t, d) in tasks] tasks_table = tabulate(tasks_data, ["name", "running", "duration", "ratio"], tablefmt="fancy_grid") return tabulate( [["tasks", tasks_table], ["total duration", Task.duration_to_str(total)]] + suffix, [title, self.name], tablefmt="fancy_grid", )
from random import random from wok.task import Task task = Task() @task.generator() def sequence(value_port): # get the configuration conf = task.conf # get parameters # get N as an integer, it defaults to 100 N = conf.get("N", 100, dtype = int) # get the MIN, it defaults to 1 MIN = conf.get("MIN", 1.0, dtype = float) # get the MAX, it defaults to 1 MAX = conf.get("MAX", 4.0, dtype = float) # get logger log = task.logger() log.debug("<<<DEBUG>>>") log.info("<<<INFO>>>") log.warn("<<<WARN>>>") log.error("<<<ERROR>>>") log.info("N = {}, MIN = {}, MAX = {}".format(N, MIN, MAX))
def setUp(self): self.task = Task("tested_task")
class TestTask(unittest.TestCase): def setUp(self): self.task = Task("tested_task") def test_init(self): self.assertEqual(self.task.name, "tested_task") self.assertEqual(self.task.datetimes, []) self.assertFalse(self.task.is_running()) def test_start(self): now = datetime.now() res = self.task.start(dt=now) self.assertTrue(res) self.assertEqual(self.task.current_datetime, now) self.assertTrue(self.task.is_running()) def test_start_twice(self): now = datetime.now() res = self.task.start(dt=now) self.assertTrue(res) self.assertTrue(self.task.is_running()) res, _ = self.task.start(dt=now) self.assertFalse(res) def test_end(self): res, _ = self.task.end() self.assertFalse(res) self.assertFalse(self.task.is_running()) def test_start_end_save(self): start = datetime(2019, 1, 10, 11, 11) end = datetime(2019, 1, 10, 11, 22) self.task.start(dt=start) self.task.end(dt=end) self.assertEqual(self.task.datetimes, [(start, end)]) self.assertEqual(self.task.current_datetime, None) out = self.task.save() self.assertEqual( out, "2019-01-10T11:11:00.000000->2019-01-10T11:22:00.000000") start2 = datetime(2019, 1, 10, 11, 23) self.task.start(dt=start2) self.assertEqual(self.task.datetimes, [(start, end)]) self.assertEqual(self.task.current_datetime, start2) out = self.task.save() self.assertEqual( out, "2019-01-10T11:11:00.000000->2019-01-10T11:22:00.000000\nC:2019-01-10T11:23:00.000000", ) def test_load(self): start = datetime(2019, 1, 10, 11, 11) end = datetime(2019, 1, 10, 11, 22) self.task.load( ["2019-01-10T11:11:00.000000->2019-01-10T11:22:00.000000"]) self.assertEqual(self.task.datetimes, [(start, end)]) self.assertEqual(self.task.current_datetime, None)
def setUp(self): self.job = Job("tested_job") self.task = Task("task")
from wok.task import Task task = Task() log = task.logger() @task.foreach() def square(x): square = x * x log.info("x = {0}, x^2 = {1}".format(x, square)) return square task.start()