Skip to content

rest_api

TimersManagerModuleRestApi

REST API endpoint used for calling from hosts when context change happens in Workfile app.

Source code in client/ayon_timers_manager/rest_api.py
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class TimersManagerModuleRestApi:
    """
        REST API endpoint used for calling from hosts when context change
        happens in Workfile app.
    """
    def __init__(self, user_module, server_manager):
        self._log = None
        self.module = user_module
        self.server_manager = server_manager

        self.prefix = "/timers_manager"

        self.register()

    @property
    def log(self):
        if self._log is None:
            self._log = Logger.get_logger(self.__class__.__name__)
        return self._log

    def register(self):
        self.server_manager.add_route(
            "POST",
            self.prefix + "/start_timer",
            self.start_timer
        )
        self.server_manager.add_route(
            "POST",
            self.prefix + "/stop_timer",
            self.stop_timer
        )
        self.server_manager.add_route(
            "GET",
            self.prefix + "/get_task_time",
            self.get_task_time
        )

    async def start_timer(self, request):
        data = await request.json()
        try:
            project_name = data["project_name"]
            folder_path = data["folder_path"]
            task_name = data["task_name"]
        except KeyError:
            msg = (
                "Payload must contain fields 'project_name,"
                " 'folder_path' and 'task_name'"
            )
            self.log.error(msg)
            return Response(status=400, message=msg)

        self.module.stop_timers()
        try:
            self.module.start_timer(project_name, folder_path, task_name)
        except Exception as exc:
            return Response(status=404, message=str(exc))

        return Response(status=200)

    async def stop_timer(self, request):
        self.module.stop_timers()
        return Response(status=200)

    async def get_task_time(self, request):
        data = await request.json()
        try:
            project_name = data["project_name"]
            folder_path = data["folder_path"]
            task_name = data["task_name"]
        except KeyError:
            message = (
                "Payload must contain fields 'project_name, 'folder_path',"
                " 'task_name'"
            )
            self.log.warning(message)
            return Response(text=message, status=404)

        time = self.module.get_task_time(project_name, folder_path, task_name)
        return Response(text=json.dumps(time))