From 0750a2545613adc3a8930ac4667d9d740af11fe9 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 4 Aug 2021 10:42:06 +0100 Subject: [PATCH 1/7] Get task time method --- openpype/modules/timers_manager/rest_api.py | 21 +++++++++++++++++++ .../modules/timers_manager/timers_manager.py | 9 ++++++++ 2 files changed, 30 insertions(+) diff --git a/openpype/modules/timers_manager/rest_api.py b/openpype/modules/timers_manager/rest_api.py index ac8d8b7b74..1699179fd6 100644 --- a/openpype/modules/timers_manager/rest_api.py +++ b/openpype/modules/timers_manager/rest_api.py @@ -1,3 +1,5 @@ +import json + from aiohttp.web_response import Response from openpype.api import Logger @@ -28,6 +30,11 @@ class TimersManagerModuleRestApi: 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() @@ -48,3 +55,17 @@ class TimersManagerModuleRestApi: 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'] + asset_name = data['asset_name'] + task_name = data['task_name'] + except KeyError: + log.error("Payload must contain fields 'project_name, " + + "'asset_name', 'task_name'") + return Response(status=400) + + time = self.module.get_task_time(project_name, asset_name, task_name) + return Response(text=json.dumps(time)) diff --git a/openpype/modules/timers_manager/timers_manager.py b/openpype/modules/timers_manager/timers_manager.py index 92edd5aeaa..dfe5e6fc4b 100644 --- a/openpype/modules/timers_manager/timers_manager.py +++ b/openpype/modules/timers_manager/timers_manager.py @@ -124,6 +124,15 @@ class TimersManager(PypeModule, ITrayService, IIdleManager, IWebServerRoutes): } self.timer_started(None, data) + def get_task_time(self, project_name, asset_name, task_name): + time = {} + for module in self.modules: + time[module.name] = module.get_task_time( + project_name, asset_name, task_name + ) + + return time + def timer_started(self, source_id, data): for module in self.modules: if module.id != source_id: From 8ae107f4a40b8b4b60e3f8c396df721a424a77c7 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 4 Aug 2021 10:42:26 +0100 Subject: [PATCH 2/7] Get Ftrack task time --- openpype/modules/ftrack/ftrack_module.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/openpype/modules/ftrack/ftrack_module.py b/openpype/modules/ftrack/ftrack_module.py index ee139a500e..ee58a175f5 100644 --- a/openpype/modules/ftrack/ftrack_module.py +++ b/openpype/modules/ftrack/ftrack_module.py @@ -3,7 +3,7 @@ import json import collections from abc import ABCMeta, abstractmethod import six -import openpype + from openpype.modules import ( PypeModule, ITrayModule, @@ -368,3 +368,14 @@ class FtrackModule( def set_credentials_to_env(self, username, api_key): os.environ["FTRACK_API_USER"] = username or "" os.environ["FTRACK_API_KEY"] = api_key or "" + + def get_task_time(self, project_name, asset_name, task_name): + session = self.create_ftrack_session() + query = ( + 'Task where name is "{}"' + ' and parent.name is "{}"' + ' and project.full_name is "{}"' + ).format(task_name, asset_name, project_name) + task_entity = session.query(query).one() + hours_logged = (task_entity["time_logged"] / 60) / 60 + return hours_logged From d1e8032fcdfb5f1c27872e8c99e07084856e8e55 Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Wed, 1 Sep 2021 09:06:04 +0200 Subject: [PATCH 3/7] Failsafe for not finding the task. Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- openpype/modules/default_modules/ftrack/ftrack_module.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openpype/modules/default_modules/ftrack/ftrack_module.py b/openpype/modules/default_modules/ftrack/ftrack_module.py index 828a7f1cab..0258b0ea1e 100644 --- a/openpype/modules/default_modules/ftrack/ftrack_module.py +++ b/openpype/modules/default_modules/ftrack/ftrack_module.py @@ -364,6 +364,8 @@ class FtrackModule( ' and parent.name is "{}"' ' and project.full_name is "{}"' ).format(task_name, asset_name, project_name) - task_entity = session.query(query).one() + task_entity = session.query(query).first() + if not task_entity: + return 0 hours_logged = (task_entity["time_logged"] / 60) / 60 return hours_logged From 19c058eafd3f6dbda94cef6230612ddb3489cf7c Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Wed, 1 Sep 2021 09:06:51 +0200 Subject: [PATCH 4/7] Respond with error message Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- openpype/modules/default_modules/timers_manager/rest_api.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openpype/modules/default_modules/timers_manager/rest_api.py b/openpype/modules/default_modules/timers_manager/rest_api.py index 1699179fd6..942db60ebc 100644 --- a/openpype/modules/default_modules/timers_manager/rest_api.py +++ b/openpype/modules/default_modules/timers_manager/rest_api.py @@ -63,7 +63,9 @@ class TimersManagerModuleRestApi: asset_name = data['asset_name'] task_name = data['task_name'] except KeyError: - log.error("Payload must contain fields 'project_name, " + + message = "Payload must contain fields 'project_name, 'asset_name', 'task_name'" + log.warning(message) + return Response(text=message, status=404) "'asset_name', 'task_name'") return Response(status=400) From 348274de5050feb94b3e48821baf1720e373e5a6 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 1 Sep 2021 08:22:06 +0100 Subject: [PATCH 5/7] Hound fix --- .../modules/default_modules/timers_manager/rest_api.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/openpype/modules/default_modules/timers_manager/rest_api.py b/openpype/modules/default_modules/timers_manager/rest_api.py index 942db60ebc..19b72d688b 100644 --- a/openpype/modules/default_modules/timers_manager/rest_api.py +++ b/openpype/modules/default_modules/timers_manager/rest_api.py @@ -63,11 +63,12 @@ class TimersManagerModuleRestApi: asset_name = data['asset_name'] task_name = data['task_name'] except KeyError: - message = "Payload must contain fields 'project_name, 'asset_name', 'task_name'" + message = ( + "Payload must contain fields 'project_name, 'asset_name'," + " 'task_name'" + ) log.warning(message) return Response(text=message, status=404) - "'asset_name', 'task_name'") - return Response(status=400) time = self.module.get_task_time(project_name, asset_name, task_name) return Response(text=json.dumps(time)) From b6a4a071f1375b205a7792a3fd5e2cc46e115aad Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 1 Sep 2021 08:26:50 +0100 Subject: [PATCH 6/7] Reset submodule. --- repos/avalon-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/avalon-core b/repos/avalon-core index 91867aeb4b..f48fce09c0 160000 --- a/repos/avalon-core +++ b/repos/avalon-core @@ -1 +1 @@ -Subproject commit 91867aeb4bfde115c0595c683282cc0b8265e694 +Subproject commit f48fce09c0986c1fd7f6731de33907be46b436c5 From 8b11a574c4b504f269c88a347362e3b1e6afa299 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 27 Sep 2021 09:30:51 +0100 Subject: [PATCH 7/7] Update get_task_time --- .../timers_manager/timers_manager.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/openpype/modules/default_modules/timers_manager/timers_manager.py b/openpype/modules/default_modules/timers_manager/timers_manager.py index 69f7c26fc2..829a6badb4 100644 --- a/openpype/modules/default_modules/timers_manager/timers_manager.py +++ b/openpype/modules/default_modules/timers_manager/timers_manager.py @@ -106,13 +106,14 @@ class TimersManager( self.timer_started(None, data) def get_task_time(self, project_name, asset_name, task_name): - time = {} - for module in self.modules: - time[module.name] = module.get_task_time( - project_name, asset_name, task_name - ) - - return time + times = {} + for module_id, connector in self._connectors_by_module_id.items(): + if hasattr(connector, "get_task_time"): + module = self._modules_by_id[module_id] + times[module.name] = connector.get_task_time( + project_name, asset_name, task_name + ) + return times def timer_started(self, source_id, data): for module in self.modules: