Snippets
Revised by
Carl Claesson
830376b
Edit meta data on entity
Running the action
Start the listener from the terminal using the following command:
python edit_meta_data_action.py
If you wish to see debugging information, set the verbosity level by appending -v debug to the command.
For more information, see the documentation on using actions.
Using the action
Navigate to a project in the web interface and select a few items in the spreadsheet and select Actions from the context menu. Click on Write notes and add your text and optionally select a note category.
Notes created are copies, and any replies will only show up on one of the notes.
1 2 3 4 5 6 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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | # :coding: utf-8
# :copyright: Copyright (c) 2015 ftrack
import sys
import argparse
import logging
import ftrack
def get_entity(entityId, entityType):
'''Return entity based on *entityId* and *entityType*.'''
entity = None
if entityType == ftrack.Project._type:
entity = ftrack.Project(entityId)
elif entityType == ftrack.Task._type:
entity = ftrack.Task(entityId)
elif entityType == 'assetversion':
entity = ftrack.AssetVersion(entityId)
if not entity:
logging.warning(
u'Entity ({0}, {1}) not a valid type, skipping..'
.format(entityId, entityType)
)
return entity
class EditMetaData(ftrack.Action):
'''EditMetaData.'''
#: Action identifier.
identifier = 'ftrack.edit.meta.data'
#: Action label.
label = 'Edit metadata'
def discover(self, event):
'''Return if action is valid.'''
selection = event['data']['selection']
# If selection contains more than one item return early since
# metadata cannot be edited for several entites at the same time.
self.logger.info('Got selection: {0}'.format(selection))
if (len(selection) != 1):
return
if not get_entity(
selection[0]['entityId'], selection[0]['entityType']
):
return
return {
'items': [{
'label': self.label,
'actionIdentifier': self.identifier
}]
}
def launch(self, event):
'''Launch edit meta data action.'''
selection = event['data']['selection']
try:
input_values = event['data']['values']
except KeyError:
input_values = None
entity = get_entity(
selection[0]['entityId'], selection[0]['entityType']
)
if input_values:
for key in input_values.keys():
entity.setMeta(key, input_values[key])
metaKeys = entity.metaKeys()
items = []
for metaKey in metaKeys:
items.append({
'label': metaKey,
'type': 'textarea',
'name': metaKey,
'value': entity.getMeta(metaKey)
})
if not items:
items.append({
'type': 'label',
'value': '*No metadata found on entity.*'
})
return {
'items': items
}
def main(arguments=None):
'''Set up logging and register action.'''
if arguments is None:
arguments = []
parser = argparse.ArgumentParser()
# Allow setting of logging level from arguments.
loggingLevels = {}
for level in (
logging.NOTSET, logging.DEBUG, logging.INFO, logging.WARNING,
logging.ERROR, logging.CRITICAL
):
loggingLevels[logging.getLevelName(level).lower()] = level
parser.add_argument(
'-v', '--verbosity',
help='Set the logging output verbosity.',
choices=loggingLevels.keys(),
default='info'
)
namespace = parser.parse_args(arguments)
# Set up basic logging
logging.basicConfig(level=loggingLevels[namespace.verbosity])
# Subscribe to action.
ftrack.setup()
action = EditMetaData()
action.register()
# Wait for events
ftrack.EVENT_HUB.wait()
if __name__ == '__main__':
raise SystemExit(main(sys.argv[1:]))
|
You can clone a snippet to your computer for local editing. Learn more.