Skip to content

actions

InventoryAction

Bases: object

A custom action for the scene inventory tool

If registered the action will be visible in the Right Mouse Button menu under the submenu "Actions".

Source code in client/ayon_core/pipeline/actions.py
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
class InventoryAction(object):
    """A custom action for the scene inventory tool

    If registered the action will be visible in the Right Mouse Button menu
    under the submenu "Actions".

    """

    label = None
    icon = None
    color = None
    order = 0

    log = logging.getLogger("InventoryAction")
    log.propagate = True

    @staticmethod
    def is_compatible(container):
        """Override function in a custom class

        This method is specifically used to ensure the action can operate on
        the container.

        Args:
            container(dict): the data of a loaded asset, see host.ls()

        Returns:
            bool
        """
        return bool(container.get("objectName"))

    def process(self, containers):
        """Override function in a custom class

        This method will receive all containers even those which are
        incompatible. It is advised to create a small filter along the lines
        of this example:

        valid_containers = filter(self.is_compatible(c) for c in containers)

        The return value will need to be a True-ish value to trigger
        the data_changed signal in order to refresh the view.

        You can return a list of container names to trigger GUI to select
        treeview items.

        You can return a dict to carry extra GUI options. For example:
            {
                "objectNames": [container names...],
                "options": {"mode": "toggle",
                            "clear": False}
            }
        Currently workable GUI options are:
            - clear (bool): Clear current selection before selecting by action.
                            Default `True`.
            - mode (str): selection mode, use one of these:
                          "select", "deselect", "toggle". Default is "select".

        Args:
            containers (list): list of dictionaries

        Return:
            bool, list or dict

        """
        return True

    @classmethod
    def filepath_from_context(cls, context):
        return get_representation_path_from_context(context)

is_compatible(container) staticmethod

Override function in a custom class

This method is specifically used to ensure the action can operate on the container.

Parameters:

Name Type Description Default
container(dict)

the data of a loaded asset, see host.ls()

required

Returns:

Type Description

bool

Source code in client/ayon_core/pipeline/actions.py
366
367
368
369
370
371
372
373
374
375
376
377
378
379
@staticmethod
def is_compatible(container):
    """Override function in a custom class

    This method is specifically used to ensure the action can operate on
    the container.

    Args:
        container(dict): the data of a loaded asset, see host.ls()

    Returns:
        bool
    """
    return bool(container.get("objectName"))

process(containers)

Override function in a custom class

This method will receive all containers even those which are incompatible. It is advised to create a small filter along the lines of this example:

valid_containers = filter(self.is_compatible(c) for c in containers)

The return value will need to be a True-ish value to trigger the data_changed signal in order to refresh the view.

You can return a list of container names to trigger GUI to select treeview items.

You can return a dict to carry extra GUI options. For example: { "objectNames": [container names...], "options": {"mode": "toggle", "clear": False} } Currently workable GUI options are: - clear (bool): Clear current selection before selecting by action. Default True. - mode (str): selection mode, use one of these: "select", "deselect", "toggle". Default is "select".

Parameters:

Name Type Description Default
containers list

list of dictionaries

required
Return

bool, list or dict

Source code in client/ayon_core/pipeline/actions.py
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
def process(self, containers):
    """Override function in a custom class

    This method will receive all containers even those which are
    incompatible. It is advised to create a small filter along the lines
    of this example:

    valid_containers = filter(self.is_compatible(c) for c in containers)

    The return value will need to be a True-ish value to trigger
    the data_changed signal in order to refresh the view.

    You can return a list of container names to trigger GUI to select
    treeview items.

    You can return a dict to carry extra GUI options. For example:
        {
            "objectNames": [container names...],
            "options": {"mode": "toggle",
                        "clear": False}
        }
    Currently workable GUI options are:
        - clear (bool): Clear current selection before selecting by action.
                        Default `True`.
        - mode (str): selection mode, use one of these:
                      "select", "deselect", "toggle". Default is "select".

    Args:
        containers (list): list of dictionaries

    Return:
        bool, list or dict

    """
    return True

LauncherAction

Bases: object

A custom action available

Source code in client/ayon_core/pipeline/actions.py
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
class LauncherAction(object):
    """A custom action available"""
    name = None
    label = None
    icon = None
    color = None
    order = 0

    log = logging.getLogger("LauncherAction")
    log.propagate = True

    def is_compatible(self, selection):
        """Return whether the class is compatible with the Session.

        Args:
            selection (LauncherActionSelection): Data with selection.

        """
        return True

    def process(self, selection, **kwargs):
        """Process the action.

        Args:
            selection (LauncherActionSelection): Data with selection.
            **kwargs: Additional arguments.

        """
        pass

is_compatible(selection)

Return whether the class is compatible with the Session.

Parameters:

Name Type Description Default
selection LauncherActionSelection

Data with selection.

required
Source code in client/ayon_core/pipeline/actions.py
330
331
332
333
334
335
336
337
def is_compatible(self, selection):
    """Return whether the class is compatible with the Session.

    Args:
        selection (LauncherActionSelection): Data with selection.

    """
    return True

process(selection, **kwargs)

Process the action.

Parameters:

Name Type Description Default
selection LauncherActionSelection

Data with selection.

required
**kwargs

Additional arguments.

{}
Source code in client/ayon_core/pipeline/actions.py
339
340
341
342
343
344
345
346
347
def process(self, selection, **kwargs):
    """Process the action.

    Args:
        selection (LauncherActionSelection): Data with selection.
        **kwargs: Additional arguments.

    """
    pass

LauncherActionSelection

Object helper to pass selection to actions.

Object support backwards compatibility for 'session' from OpenPype where environment variable keys were used to define selection.

Parameters:

Name Type Description Default
project_name str

Selected project name.

required
folder_id str

Selected folder id.

required
task_id str

Selected task id.

required
folder_path Optional[str]

Selected folder path.

None
task_name Optional[str]

Selected task name.

None
project_entity Optional[dict[str, Any]]

Project entity.

None
folder_entity Optional[dict[str, Any]]

Folder entity.

None
task_entity Optional[dict[str, Any]]

Task entity.

None
Source code in client/ayon_core/pipeline/actions.py
 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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
class LauncherActionSelection:
    """Object helper to pass selection to actions.

    Object support backwards compatibility for 'session' from OpenPype where
    environment variable keys were used to define selection.

    Args:
        project_name (str): Selected project name.
        folder_id (str): Selected folder id.
        task_id (str): Selected task id.
        folder_path (Optional[str]): Selected folder path.
        task_name (Optional[str]): Selected task name.
        project_entity (Optional[dict[str, Any]]): Project entity.
        folder_entity (Optional[dict[str, Any]]): Folder entity.
        task_entity (Optional[dict[str, Any]]): Task entity.

    """
    def __init__(
        self,
        project_name,
        folder_id,
        task_id,
        folder_path=None,
        task_name=None,
        project_entity=None,
        folder_entity=None,
        task_entity=None,
        project_settings=None,
    ):
        self._project_name = project_name
        self._folder_id = folder_id
        self._task_id = task_id

        self._folder_path = folder_path
        self._task_name = task_name

        self._project_entity = project_entity
        self._folder_entity = folder_entity
        self._task_entity = task_entity

        self._project_settings = project_settings

    def __getitem__(self, key):
        warnings.warn(
            (
                "Using deprecated access to selection data. Please use"
                " attributes and methods"
                " defined by 'LauncherActionSelection'."
            ),
            category=DeprecationWarning
        )
        if key in {"AYON_PROJECT_NAME", "AVALON_PROJECT"}:
            return self.project_name
        if key in {"AYON_FOLDER_PATH", "AVALON_ASSET"}:
            return self.folder_path
        if key in {"AYON_TASK_NAME", "AVALON_TASK"}:
            return self.task_name
        raise KeyError(f"Key: {key} not found")

    def __iter__(self):
        for key in self.keys():
            yield key

    def __contains__(self, key):
        warnings.warn(
            (
                "Using deprecated access to selection data. Please use"
                " attributes and methods"
                " defined by 'LauncherActionSelection'."
            ),
            category=DeprecationWarning
        )
        # Fake missing keys check for backwards compatibility
        if key in {
            "AYON_PROJECT_NAME",
            "AVALON_PROJECT",
        }:
            return self._project_name is not None
        if key in {
            "AYON_FOLDER_PATH",
            "AVALON_ASSET",
        }:
            return self._folder_id is not None
        if key in {
            "AYON_TASK_NAME",
            "AVALON_TASK",
        }:
            return self._task_id is not None
        return False

    def get(self, key, default=None):
        """

        Deprecated:
            Added for backwards compatibility with older actions.

        """
        warnings.warn(
            (
                "Using deprecated access to selection data. Please use"
                " attributes and methods"
                " defined by 'LauncherActionSelection'."
            ),
            category=DeprecationWarning
        )
        try:
            return self[key]
        except KeyError:
            return default

    def items(self):
        """

        Deprecated:
            Added for backwards compatibility with older actions.

        """
        for key, value in (
            ("AYON_PROJECT_NAME", self.project_name),
            ("AYON_FOLDER_PATH", self.folder_path),
            ("AYON_TASK_NAME", self.task_name),
        ):
            if value is not None:
                yield (key, value)

    def keys(self):
        """

        Deprecated:
            Added for backwards compatibility with older actions.

        """
        for key, _ in self.items():
            yield key

    def values(self):
        """

        Deprecated:
            Added for backwards compatibility with older actions.

        """
        for _, value in self.items():
            yield value

    def get_project_name(self):
        """Selected project name.

        Returns:
            Union[str, None]: Selected project name.

        """
        return self._project_name

    def get_folder_id(self):
        """Selected folder id.

        Returns:
            Union[str, None]: Selected folder id.

        """
        return self._folder_id

    def get_folder_path(self):
        """Selected folder path.

        Returns:
            Union[str, None]: Selected folder path.

        """
        if self._folder_id is None:
            return None
        if self._folder_path is None:
            self._folder_path = self.folder_entity["path"]
        return self._folder_path

    def get_task_id(self):
        """Selected task id.

        Returns:
            Union[str, None]: Selected task id.

        """
        return self._task_id

    def get_task_name(self):
        """Selected task name.

        Returns:
            Union[str, None]: Selected task name.

        """
        if self._task_id is None:
            return None
        if self._task_name is None:
            self._task_name = self.task_entity["name"]
        return self._task_name

    def get_project_entity(self):
        """Project entity for the selection.

        Returns:
            Union[dict[str, Any], None]: Project entity.

        """
        if self._project_name is None:
            return None
        if self._project_entity is None:
            self._project_entity = ayon_api.get_project(self._project_name)
        return self._project_entity

    def get_folder_entity(self):
        """Folder entity for the selection.

        Returns:
            Union[dict[str, Any], None]: Folder entity.

        """
        if self._project_name is None or self._folder_id is None:
            return None
        if self._folder_entity is None:
            self._folder_entity = ayon_api.get_folder_by_id(
                self._project_name, self._folder_id
            )
        return self._folder_entity

    def get_task_entity(self):
        """Task entity for the selection.

        Returns:
            Union[dict[str, Any], None]: Task entity.

        """
        if (
            self._project_name is None
            or self._task_id is None
        ):
            return None
        if self._task_entity is None:
            self._task_entity = ayon_api.get_task_by_id(
                self._project_name, self._task_id
            )
        return self._task_entity

    def get_project_settings(self):
        """Project settings for the selection.

        Returns:
            dict[str, Any]: Project settings or studio settings if
                project is not selected.

        """
        if self._project_settings is None:
            if self._project_name is None:
                settings = get_studio_settings()
            else:
                settings = get_project_settings(self._project_name)
            self._project_settings = settings
        return self._project_settings

    @property
    def is_project_selected(self):
        """Return whether a project is selected.

        Returns:
            bool: Whether a project is selected.

        """
        return self._project_name is not None

    @property
    def is_folder_selected(self):
        """Return whether a folder is selected.

        Returns:
            bool: Whether a folder is selected.

        """
        return self._folder_id is not None

    @property
    def is_task_selected(self):
        """Return whether a task is selected.

        Returns:
            bool: Whether a task is selected.

        """
        return self._task_id is not None

    project_name = property(get_project_name)
    folder_id = property(get_folder_id)
    task_id = property(get_task_id)
    folder_path = property(get_folder_path)
    task_name = property(get_task_name)

    project_entity = property(get_project_entity)
    folder_entity = property(get_folder_entity)
    task_entity = property(get_task_entity)

is_folder_selected property

Return whether a folder is selected.

Returns:

Name Type Description
bool

Whether a folder is selected.

is_project_selected property

Return whether a project is selected.

Returns:

Name Type Description
bool

Whether a project is selected.

is_task_selected property

Return whether a task is selected.

Returns:

Name Type Description
bool

Whether a task is selected.

get(key, default=None)

Deprecated

Added for backwards compatibility with older actions.

Source code in client/ayon_core/pipeline/actions.py
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
def get(self, key, default=None):
    """

    Deprecated:
        Added for backwards compatibility with older actions.

    """
    warnings.warn(
        (
            "Using deprecated access to selection data. Please use"
            " attributes and methods"
            " defined by 'LauncherActionSelection'."
        ),
        category=DeprecationWarning
    )
    try:
        return self[key]
    except KeyError:
        return default

get_folder_entity()

Folder entity for the selection.

Returns:

Type Description

Union[dict[str, Any], None]: Folder entity.

Source code in client/ayon_core/pipeline/actions.py
229
230
231
232
233
234
235
236
237
238
239
240
241
242
def get_folder_entity(self):
    """Folder entity for the selection.

    Returns:
        Union[dict[str, Any], None]: Folder entity.

    """
    if self._project_name is None or self._folder_id is None:
        return None
    if self._folder_entity is None:
        self._folder_entity = ayon_api.get_folder_by_id(
            self._project_name, self._folder_id
        )
    return self._folder_entity

get_folder_id()

Selected folder id.

Returns:

Type Description

Union[str, None]: Selected folder id.

Source code in client/ayon_core/pipeline/actions.py
172
173
174
175
176
177
178
179
def get_folder_id(self):
    """Selected folder id.

    Returns:
        Union[str, None]: Selected folder id.

    """
    return self._folder_id

get_folder_path()

Selected folder path.

Returns:

Type Description

Union[str, None]: Selected folder path.

Source code in client/ayon_core/pipeline/actions.py
181
182
183
184
185
186
187
188
189
190
191
192
def get_folder_path(self):
    """Selected folder path.

    Returns:
        Union[str, None]: Selected folder path.

    """
    if self._folder_id is None:
        return None
    if self._folder_path is None:
        self._folder_path = self.folder_entity["path"]
    return self._folder_path

get_project_entity()

Project entity for the selection.

Returns:

Type Description

Union[dict[str, Any], None]: Project entity.

Source code in client/ayon_core/pipeline/actions.py
216
217
218
219
220
221
222
223
224
225
226
227
def get_project_entity(self):
    """Project entity for the selection.

    Returns:
        Union[dict[str, Any], None]: Project entity.

    """
    if self._project_name is None:
        return None
    if self._project_entity is None:
        self._project_entity = ayon_api.get_project(self._project_name)
    return self._project_entity

get_project_name()

Selected project name.

Returns:

Type Description

Union[str, None]: Selected project name.

Source code in client/ayon_core/pipeline/actions.py
163
164
165
166
167
168
169
170
def get_project_name(self):
    """Selected project name.

    Returns:
        Union[str, None]: Selected project name.

    """
    return self._project_name

get_project_settings()

Project settings for the selection.

Returns:

Type Description

dict[str, Any]: Project settings or studio settings if project is not selected.

Source code in client/ayon_core/pipeline/actions.py
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
def get_project_settings(self):
    """Project settings for the selection.

    Returns:
        dict[str, Any]: Project settings or studio settings if
            project is not selected.

    """
    if self._project_settings is None:
        if self._project_name is None:
            settings = get_studio_settings()
        else:
            settings = get_project_settings(self._project_name)
        self._project_settings = settings
    return self._project_settings

get_task_entity()

Task entity for the selection.

Returns:

Type Description

Union[dict[str, Any], None]: Task entity.

Source code in client/ayon_core/pipeline/actions.py
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
def get_task_entity(self):
    """Task entity for the selection.

    Returns:
        Union[dict[str, Any], None]: Task entity.

    """
    if (
        self._project_name is None
        or self._task_id is None
    ):
        return None
    if self._task_entity is None:
        self._task_entity = ayon_api.get_task_by_id(
            self._project_name, self._task_id
        )
    return self._task_entity

get_task_id()

Selected task id.

Returns:

Type Description

Union[str, None]: Selected task id.

Source code in client/ayon_core/pipeline/actions.py
194
195
196
197
198
199
200
201
def get_task_id(self):
    """Selected task id.

    Returns:
        Union[str, None]: Selected task id.

    """
    return self._task_id

get_task_name()

Selected task name.

Returns:

Type Description

Union[str, None]: Selected task name.

Source code in client/ayon_core/pipeline/actions.py
203
204
205
206
207
208
209
210
211
212
213
214
def get_task_name(self):
    """Selected task name.

    Returns:
        Union[str, None]: Selected task name.

    """
    if self._task_id is None:
        return None
    if self._task_name is None:
        self._task_name = self.task_entity["name"]
    return self._task_name

items()

Deprecated

Added for backwards compatibility with older actions.

Source code in client/ayon_core/pipeline/actions.py
128
129
130
131
132
133
134
135
136
137
138
139
140
141
def items(self):
    """

    Deprecated:
        Added for backwards compatibility with older actions.

    """
    for key, value in (
        ("AYON_PROJECT_NAME", self.project_name),
        ("AYON_FOLDER_PATH", self.folder_path),
        ("AYON_TASK_NAME", self.task_name),
    ):
        if value is not None:
            yield (key, value)

keys()

Deprecated

Added for backwards compatibility with older actions.

Source code in client/ayon_core/pipeline/actions.py
143
144
145
146
147
148
149
150
151
def keys(self):
    """

    Deprecated:
        Added for backwards compatibility with older actions.

    """
    for key, _ in self.items():
        yield key

values()

Deprecated

Added for backwards compatibility with older actions.

Source code in client/ayon_core/pipeline/actions.py
153
154
155
156
157
158
159
160
161
def values(self):
    """

    Deprecated:
        Added for backwards compatibility with older actions.

    """
    for _, value in self.items():
        yield value