diff --git a/pype/lib/avalon_context.py b/pype/lib/avalon_context.py index 9df5754126..dc0ce9a873 100644 --- a/pype/lib/avalon_context.py +++ b/pype/lib/avalon_context.py @@ -1167,7 +1167,8 @@ def change_timer_to_current_context(): data = { "project_name": avalon.io.Session["AVALON_PROJECT"], "asset_name": avalon.io.Session["AVALON_ASSET"], - "task_name": avalon.io.Session["AVALON_TASK"] + "task_name": avalon.io.Session["AVALON_TASK"], + "hierarchy": get_hierarchy() } requests.post(rest_api_url, json=data) diff --git a/pype/modules/timers_manager/rest_api.py b/pype/modules/timers_manager/rest_api.py new file mode 100644 index 0000000000..2247a6f769 --- /dev/null +++ b/pype/modules/timers_manager/rest_api.py @@ -0,0 +1,40 @@ +from aiohttp.web_response import Response +from pype.api import Logger + +log = Logger().get_logger("Event processor") + +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.module = user_module + self.server_manager = server_manager + + self.prefix = "/timers_manager" + + self.register() + + def register(self): + self.server_manager.add_route( + "POST", + self.prefix + "/start_timer", + self.start_timer + ) + + async def start_timer(self, request): + data = await request.json() + try: + project_name = data['project_name'] + asset_name = data['asset_name'] + task_name = data['task_name'] + hierarchy = data['hierarchy'] + except KeyError: + log.error("Payload must contain fields 'project_name, " + + "'asset_name', 'task_name', 'hierarchy'") + return Response(status=400) + + self.module.stop_timers() + self.module.start_timer(project_name, asset_name, task_name, hierarchy) + return Response(status=200) diff --git a/pype/modules/timers_manager/timers_manager.py b/pype/modules/timers_manager/timers_manager.py index 44264042d5..68890640b3 100644 --- a/pype/modules/timers_manager/timers_manager.py +++ b/pype/modules/timers_manager/timers_manager.py @@ -81,7 +81,7 @@ class TimersManager(PypeModule, ITrayService, IIdleManager, IWebServerRoutes): self.rest_api_obj = TimersManagerModuleRestApi(self, server_manager) - def start_timer(self, project_name, asset_name, task_name): + def start_timer(self, project_name, asset_name, task_name, hierarchy): """ Start timer for 'project_name', 'asset_name' and 'task_name' @@ -91,6 +91,7 @@ class TimersManager(PypeModule, ITrayService, IIdleManager, IWebServerRoutes): project_name (string) asset_name (string) task_name (string) + hierarchy (string) """ dbconn = AvalonMongoDB() dbconn.install() @@ -109,7 +110,7 @@ class TimersManager(PypeModule, ITrayService, IIdleManager, IWebServerRoutes): self.log.warning("Couldn't find task_type for {}". format(task_name)) - hierarchy = asset_doc["data"]["hierarchy"].split("\\") + hierarchy = hierarchy.split("\\") hierarchy.append(asset_name) data = {