Example #1
0
    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"
Example #2
0
 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")
Example #3
0
File: api.py Project: guigui64/wok
 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"
Example #4
0
File: job.py Project: guigui64/wok
 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",
     )
Example #5
0
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))
Example #6
0
 def setUp(self):
     self.task = Task("tested_task")
Example #7
0
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)
Example #8
0
 def setUp(self):
     self.job = Job("tested_job")
     self.task = Task("task")
Example #9
0
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()