Speedup of collect_instances.py

This commit is contained in:
Petr Kalis 2020-08-20 10:52:18 +02:00
parent 180035731b
commit de9aca5f8f
2 changed files with 19 additions and 20 deletions

View file

@ -18,17 +18,19 @@ class PhotoshopClientStub():
self.websocketserver = WebSocketServer.get_instance() self.websocketserver = WebSocketServer.get_instance()
self.client = self.websocketserver.get_client() self.client = self.websocketserver.get_client()
def read(self, layer): def read(self, layer, layers_meta=None):
""" """
Parses layer metadata from Headline field of active document Parses layer metadata from Headline field of active document
:param layer: :param layer: <namedTuple Layer("id":XX, "name":"YYY")
:param layers_meta: full list from Headline (for performance in loops)
:return: :return:
""" """
layers_data = self._get_layers_metadata() if layers_meta is None:
layers_meta = self._get_layers_metadata()
return layers_data.get(str(layer.id)) return layers_meta.get(str(layer.id))
def imprint(self, layer, data, all_layers=None): def imprint(self, layer, data, all_layers=None, layers_meta=None):
""" """
Save layer metadata to Headline field of active document Save layer metadata to Headline field of active document
:param layer: <namedTuple> Layer("id": XXX, "name":'YYY') :param layer: <namedTuple> Layer("id": XXX, "name":'YYY')
@ -38,13 +40,14 @@ class PhotoshopClientStub():
triggered triggered
:return: None :return: None
""" """
layers_data = self._get_layers_metadata() if not layers_meta:
layers_meta = self._get_layers_metadata()
# json.dumps writes integer values in a dictionary to string, so # json.dumps writes integer values in a dictionary to string, so
# anticipating it here. # anticipating it here.
if str(layer.id) in layers_data: if str(layer.id) in layers_meta and layers_meta[str(layer.id)]:
layers_data[str(layer.id)].update(data) layers_meta[str(layer.id)].update(data)
else: else:
layers_data[str(layer.id)] = data layers_meta[str(layer.id)] = data
# Ensure only valid ids are stored. # Ensure only valid ids are stored.
if not all_layers: if not all_layers:
@ -52,9 +55,9 @@ class PhotoshopClientStub():
layer_ids = [layer.id for layer in all_layers] layer_ids = [layer.id for layer in all_layers]
cleaned_data = {} cleaned_data = {}
for id in layers_data: for id in layers_meta:
if int(id) in layer_ids: if int(id) in layer_ids:
cleaned_data[id] = layers_data[id] cleaned_data[id] = layers_meta[id]
payload = json.dumps(cleaned_data, indent=4) payload = json.dumps(cleaned_data, indent=4)

View file

@ -2,8 +2,9 @@ import pythoncom
import pyblish.api import pyblish.api
from pype.modules.websocket_server.clients.photoshop_client \ from pype.modules.websocket_server.clients.photoshop_client import (
import PhotoshopClientStub PhotoshopClientStub
)
class CollectInstances(pyblish.api.ContextPlugin): class CollectInstances(pyblish.api.ContextPlugin):
@ -30,14 +31,9 @@ class CollectInstances(pyblish.api.ContextPlugin):
photoshop_client = PhotoshopClientStub() photoshop_client = PhotoshopClientStub()
layers = photoshop_client.get_layers() layers = photoshop_client.get_layers()
layers_meta = photoshop_client._get_layers_metadata()
for layer in layers: for layer in layers:
layer_data = photoshop_client.read(layer) layer_data = photoshop_client.read(layer, layers_meta)
self.log.info("layer_data {}".format(layer_data))
photoshop_client.imprint(layer, layer_data, layers)
new_layer_data = photoshop_client.read(layer)
assert layer_data == new_layer_data
# Skip layers without metadata. # Skip layers without metadata.
if layer_data is None: if layer_data is None: