Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Commit

Permalink
#663 - Added basic integration methods
Browse files Browse the repository at this point in the history
  • Loading branch information
kalisp committed Oct 27, 2020
1 parent 1d2973c commit 02e906d
Showing 1 changed file with 69 additions and 9 deletions.
78 changes: 69 additions & 9 deletions pype/modules/websocket_server/stubs/aftereffects_server_stub.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,25 +27,31 @@ def open(self, path):
Returns: None
"""
self.websocketserver.call(self.client.call
('Photoshop.open', path=path)
('AfterEffects.open', path=path)
)

def read(self, layer, layers_meta=None):
"""
Parses layer metadata from Headline field of active document
Parses layer metadata from Label field of active document
Args:
layer: <namedTuple Layer("id":XX, "name":"YYY")
layers_meta: full list from Headline (for performance in loops)
Returns:
"""
if layers_meta is None:
layers_meta = self.get_layers_metadata()
layers_meta = self.get_metadata()

return layers_meta.get(str(layer.id))

def get_metadata(self):
res = self.websocketserver.call(self.client.call
('AfterEffects.get_metadata')
)
return self._to_records(res)

def imprint(self, layer, data, all_layers=None, layers_meta=None):
"""
Save layer metadata to Headline field of active document
Save layer metadata to Label field of metadata of active document
Args:
layer (namedtuple): Layer("id": XXX, "name":'YYY')
data(string): json representation for single layer
Expand All @@ -58,7 +64,7 @@ def imprint(self, layer, data, all_layers=None, layers_meta=None):
Returns: None
"""
if not layers_meta:
layers_meta = self.get_layers_metadata()
layers_meta = self.get_metadata()
# json.dumps writes integer values in a dictionary to string, so
# anticipating it here.
if str(layer.id) in layers_meta and layers_meta[str(layer.id)]:
Expand All @@ -71,20 +77,72 @@ def imprint(self, layer, data, all_layers=None, layers_meta=None):

# Ensure only valid ids are stored.
if not all_layers:
all_layers = self.get_layers()
layer_ids = [layer.id for layer in all_layers]
all_layers = self.get_items(False)
item_ids = [item.id for item in all_layers]
cleaned_data = {}

for id in layers_meta:
if int(id) in layer_ids:
if int(id) in item_ids:
cleaned_data[id] = layers_meta[id]

payload = json.dumps(cleaned_data, indent=4)

self.websocketserver.call(self.client.call
('Photoshop.imprint', payload=payload)
('AfterEffects.imprint', payload=payload)
)

def get_active_document_full_name(self):
"""
Returns just a name of active document via ws call
Returns(string): file name
"""
res = self.websocketserver.call(self.client.call
('AfterEffects.get_active_document_full_name'))

return res

def get_active_document_name(self):
"""
Returns just a name of active document via ws call
Returns(string): file name
"""
res = self.websocketserver.call(self.client.call
('AfterEffects.get_active_document_name'))

return res

def get_items(self, layers=True):
res = self.websocketserver.call(self.client.call
('AfterEffects.get_items',
layers=layers)
)
return self._to_records(res)

def is_saved(self):
# TODO
return True

def save(self):
"""
Saves active document
Returns: None
"""
self.websocketserver.call(self.client.call
('AfterEffects.save'))

def saveAs(self, project_path, as_copy):
"""
Saves active project to aep (copy) or png or jpg
Args:
project_path(string): full local path
as_copy: <boolean>
Returns: None
"""
self.websocketserver.call(self.client.call
('AfterEffects.saveAs',
image_path=project_path,
as_copy=as_copy))

def close(self):
self.client.close()

Expand All @@ -99,6 +157,8 @@ def _to_records(self, res):
layers_data = json.loads(res)
except json.decoder.JSONDecodeError:
raise ValueError("Received broken JSON {}".format(res))
if not layers_data:
return []
ret = []
# convert to namedtuple to use dot donation
if isinstance(layers_data, dict): # TODO refactore
Expand Down

0 comments on commit 02e906d

Please sign in to comment.