К основному содержимому
Добавление процессоров
Cerebro Support avatar
Автор: Cerebro Support
Обновлено более 2 мес. назад

Для подключения процессоров необходимо в конфигурационном файле (см. раздел Настройка конфигурации) добавить раздел processors.

Структура элемента processors:

{
"soft_name":
{
"open_pre":
{
"script_path": "path/to/script.py",
"function": "open_pre"
},
"open_replace":
{
"script_path": "path/to/script.py",
"function": "open_replace"
},
"open_post":
{
"script_path": "path/to/script.py",
"function": "open_post"
},
"new_pre":
{
"script_path": "path/to/script.py",
"function": "new_pre"
},
"new_replace":
{
"script_path": "path/to/script.py",
"function": "new_replace"
},
"new_post":
{
"script_path": "path/to/script.py",
"function": "new_post"
},
"link_pre":
{
"script_path": "path/to/script.py",
"function": "link_pre"
},
"link_replace":
{
"script_path": "path/to/script.py",
"function": "link_replace"
},
"link_post":
{
"script_path": "path/to/script.py",
"function": "link_post"
},
"embed_pre":
{
"script_path": "path/to/script.py",
"function": "embed_pre"
},
"embed_replace":
{
"script_path": "path/to/script.py",
"function": "embed_replace"
},
"embed_post":
{
"script_path": "path/to/script.py",
"function": "embed_post"
},
"check_reference_pre":
{
"script_path": "path/to/script.py",
"function": "check_reference_pre"
},
"check_reference_replace":
{
"script_path": "path/to/script.py",
"function": "check_reference_replace"
},
"check_reference_post":
{
"script_path": "path/to/script.py",
"function": "check_reference_post"
},
"reload_reference_pre":
{
"script_path": "path/to/script.py",
"function": "reload_reference_pre"
},
"reload_reference_replace":
{
"script_path": "path/to/script.py",
"function": "reload_reference_replace"
},
"reload_reference_post":
{
"script_path": "path/to/script.py",
"function": "reload_reference_post"
},
"version_pre":
{
"script_path": "path/to/script.py",
"function": "version_pre"
},
"version_replace":
{
"script_path": "path/to/script.py",
"function": "version_post"
},
"publish_pre":
{
"script_path": "path/to/script.py",
"function": "publish_pre"
},
"publish_replace":
{
"script_path": "path/to/script.py",
"function": "publish_replace"
},
"publish_post":
{
"script_path": "path/to/script.py",
"function": "publish_post"
},
"link_pre":
{
"script_path": "path/to/script.py",
"function": "link_pre"
},
"link_replace":
{
"script_path": "path/to/script.py",
"function": "link_replace"
},
"link_post":
{
"script_path": "path/to/script.py",
"function": "link_post"
},
"embed_pre":
{
"script_path": "path/to/script.py",
"function": "embed_pre"
},
"embed_replace":
{
"script_path": "path/to/script.py",
"function": "embed_replace"
},
"embed_post":
{
"script_path": "path/to/script.py",
"function": "embed_post"
},
"indicator_task":
{
"script_path": "path/to/script.py",
"function": "indicator_task"
},
"menu_task":
{
"script_path": "path/to/script.py",
"function": "menu_task"
},
"menu_file":
{
"script_path": "path/to/script.py",
"function": "menu_file"
}
"search_task":
{
"script_path": "path/to/script.py",
"function": "search_task"
},
"screenshot_pre":
{
"script_path": "path/to/script.py",
"function": "screenshot_pre"
},
"screenshot_replace":
{
"script_path": "path/to/script.py",
"function": "screenshot_replace"
},
"screenshot_post":
{
"script_path": "path/to/script.py",
"function": "screenshot_post"
}
}
}

Ключ soft_name

Внутреннее название одного из поддерживаемых приложений, например maya, nuke, houdini, blender, cinema4d, 3dsmax и тп.

Переменная script_path

Задает полный путь до Python-скрипта. Переменная пути может содержать переменные окружения, а также специфическую переменную $(cerebro_plugins).

$(cerebro_plugins) - определяет путь до папки плагинов Cerebro, которые поставляются с помощью встроенной системы распространения плагинов. Таким образом вы можете загружать процессоры в качестве плагинов Cerebro и они будут использоваться в Tentaculo.

Переменная function

Название вызываемой функции. Вызываемая функция должна принимать в качестве аргументов два параметра-словаря и возвращать второй из них, при необходимости модифицированный.

Первый аргумент - словарь, является общим для всех процессоров, и содержит следующие ключи:

  • task_id - ID задачи;

  • task_name - Название задачи;

  • task_parent_id - ID родительской задачи;

  • task_parent_path - Путь родительской задачи в Cerebro;

  • task_status_id - ID текущего статуса задачи;

  • task_status_name - Название текущего статуса задачи;

  • task_activity_id - ID вида деятельности задачи;

  • task_activity_name - Название вида деятельности задачи;

  • task_unid - ID вселенной задачи;

  • current_user_id - ID текущего пользователя;

  • current_user_name - Отображаемое имя текущего пользователя.

Второй аргумент зависит от конкретного процессора.

Создание нового файла

Процессоры на создание нового файла вызываются при начале работы с задачей, в которой еще нет ни одной версии, то есть создается пустой файл.

new_pre - Вызывается непосредственно перед созданием файла;

new_replace - Вызывается вместо штатной процедуры создания файла;

new_post - Вызывается сразу после процедуры создания файла.

{
"local_file_path": "", # полный путь до рабочей версии файла
"original_file_path": "" # полный путь до исходной версии файла
}

Открытие файла

Процессоры на открытие файла вызываются на открытие уже существующей версии в задаче, через пункты меню Start working и Open to review (safe mode). Пункт Open to view процессоры не вызывает.

open_pre - Вызывается непосредственно перед открытием файла;

open_replace - Вызывается вместо штатной процедуры открытия файла;

open_post - Вызывается сразу после процедуры открытия файла.

{
"local_file_path": "", # полный путь до рабочей версии файла
"original_file_path": "" # полный путь до исходной версии файла
"review": false # переменная, означающая, для чего открывается файл. false - взятие в работу, true - просмотр(ревью)
}

Если вам требуется изменить какой-либо либо ключ, вы должны заменить значение этого ключа(ей) и вернуть аргумент.

Например вы хотите заменить исходную версию для задачи с именем test каким-то другим файлом, чтобы открыть его вместо выбранной пользователем.

Для этого вам нужно написать процессор open_pre:

def open_pre(task_info, arg):
if task_info['name'] == 'test':
arg['original_file_path'] = 'C:/test_file.ma'

return arg

Сохранение версии

Сохранение нумерованной версии файла.Процессоры на сохранение версии вызываются на сохранение версии с публикацией отчета.

version_pre - Вызывается непосредственно перед сохранением версии;

version_replace - Вызывается вместо штатной процедуры сохранения версии и публикации отчета;

version_post - Вызывается сразу после процедуры сохранения версии и публикации отчета.

{
"local_file_path": "", # полный путь до рабочей версии файла
"version_file_path": "", # полный путь до сохраняемой версии файла
"report": # полный путь до сохраняемой версии файла
{
"plain_text": "", # текст отчёта
"hashtags": [], # список хештегов отчёта
"work_time": "" # время работы в минутах
},
"attachments": # набор файлов, прикрепляемых к отчету через Cargador
{
"file_path": [ paths to file thumbnails ], # file_path - путь до файла
...
},

"links": # набор файлов, прикрепляемых к отчету по ссылке
{
"file_path": [ paths to file thumbnails ],
...
},
"new_status_id" : "", # ID нового статуса задачи, Значение None означает не переключать статус задачи)
"screenshot": "", # путь до тамбнейла версии
"send_version": True # определяет нужно ли прикреплять файл версии к отчёту в Cerebro)


}

Примечание:

В тентакуло предусмотрено сохранение версии без публикации отчета, в этом случае значение ключей "report": {}, "attachments": {}, "links": {} будет пустым.

Если вам требуется изменить какой-либо либо ключ, вы должны заменить значение этого ключа(ей) и вернуть аргумент.

(вставить как код)

arg['report']['plain_text'] += ' Path to file ' + arg['version_file_path']
arg['report']['hashtags'] = ['version']

return arg

Публикация файла

Сохранение основной версии файла. При публикации, обычно, создаются: версия файла с номером и основная версия без номера.

Процессоры вызываются на публикацию файла с отчётом.

publish_pre - Вызывается непосредственно перед публикацией файла.

publish_replace - Вызывается вместо штатной процедуры публикации файла и публикации отчета.

publish_post - Вызывается сразу после процедуры публикации файла и публикации отчета.

{
"local_file_path": "", # полный путь до рабочей версии файла
"version_file_path": "", # полный путь до сохраняемой версии файла
"publish_file_path": "", # полный путь до публикуемого финального (основного) файла
"report":
{
"plain_text": "", # текст отчёта
"hashtags": [], # список хештегов отчёта
"work_time": "" # время работы в минутах
},
"attachments": # набор файлов, прикрепляемых к отчету через Cargador
{
"file_path": [ paths to file thumbnails ], # file_path - путь до файла
...
},
"links": # набор файлов, прикрепляемых к отчету по ссылке
{
"file_path": [ paths to file thumbnails ],
...
}
}

Если вам требуется изменить какой-либо либо ключ, вы должны заменить значение этого ключа(ей) и вернуть аргумент.

arg['attachments'].setdefault("c:\image.png", [])
arg['report']['hashtags'] = ['publish', 'version']

return arg

Расширение меню задачи

Процессор вызывается при открытии пользователем контекстного меню задачи в ToDo листе и позволяет добавить свои пункты в данное меню.

menu_task - Вызывается перед показом пользователю контекстного меню задачи. Второй аргумент для процессора - словарь:

{
"option_list":
[
{"text": "Open in Cerebro...", "index": 0},
{"text": None, "index": 1},
{"text": "Copy local path to Clipboard", "index": 2},
{"text": "Show in Explorer...", "index": 3}
]
}

'option_list' содержит список штатных пунктов меню задачи, с индексами их позиций в меню. 'text' - название пункта. Если названия нет, пункт считается сепаратором(разделителем в меню).

Возвращаемое значение для данного процессора должно содержать список словарей встраиваемых пунктов меню:

[
{
"text": "", # название пункта меню
"index": 0, # индекс позиции в меню
"script_path": "", # путь до Python-скрипта
"function": "" # название вызываемой функции на срабатывание пункта меню
},
...
]

Указанная в "function" функция принимает два аргумента.

Первый аргумент - словарь с информацией по выбранной задаче, такой же как в процессоре.

Второй аргумент - словарь:

{
'option_list':
[
# полный список пунктов меню
]
, 'option': "" # название выбранного пункта меню
}

Например, вам нужен пункт меню, который выводит полный путь до задачи.

def menu_task(task_info, arg): 

my_action = {}
my_action.setdefault('text', 'My Action - print task path')
my_action.setdefault('index', len(arg['option_list']))
my_action.setdefault('script_path', os.path.abspath(__file__.replace('.pyc', '.py')))
my_action.setdefault('function', 'my_action')

return [my_action,]

# функция вызываемая, при нажатии на пункт меню "My Action - print task path"

def my_action(task_info, arg):
print('Task Path {0}/{1}'.format(task_info['task_parent_path'], task_info['task_name']))

Расширение меню файла

Процессор вызывается при открытии пользователем контекстного меню файла в выбранной задачи и позволяет добавить свои пункты в данное меню.

menu_file - Вызывается перед показом пользователю контекстного меню файла.

Первый аргумент - словарь с информацией по выбранной задаче.

{	
"file_path" "", # полный путь до выбранного файла
"option_list":
[
{"text": "Start working on this file", "index": 0},
{"text": "Open without Starting the Task", "index": 1},
{"text": None, "index": 2},
{"text": "Link", "index": 3},
{"text": "Embed", "index": 4},
{"text": None, "index": 5},
{"text": "Show in Explorer...", "index": 6},
{"text": "Copy file path to Clipboard", "index": 7}
],
}

'option_list' содержит список штатных пунктов меню файла, с индексами их позиций в меню. 'text' - название пункта. Если названия нет, пункт считается сепаратором(разделителем в меню).

Возвращаемое значение для данного процессора должно содержать список словарей встраиваемых пунктов меню:

[
{
"text": "", # название пункта меню
"index": 0, # индекс позиции в меню
"script_path": "", # путь до Python-скрипта
"function": "" # название вызываемой функции на срабатывание пункта меню
},
...
]

Указанная в "function" функция принимает два аргумента.

Первый аргумент - словарь с информацией по выбранной задаче, такой же, как в процессоре.

Второй аргумент - словарь:

{
'option_list':
[
# полный список пунктов меню
]
, 'option': "" # название выбранного пункта меню
, 'file_path': "" # полный путь до выбранного файла
}

Например, вам нужен пункт меню, который выводит полный путь до файла.

def menu_file(task_info, arg):

my_action = {}
my_action.setdefault('text', 'My Action - print file path')
my_action.setdefault('index', len(arg['option_list']))
my_action.setdefault('script_path', os.path.abspath(__file__))
my_action.setdefault(function, 'my_action_file')

return [my_action,]

# функция вызываемая, при нажатии на пункт меню "My Action - print file path"

def my_action_file(task_info, arg):
print('File Path {0}'.format(arg['file_path']))

Цветовая индикация задач

Процессор вызывается при отображении каждой из задач в ToDo листе и позволяет назначить цвет ей цвет.

indicator_task - Вызывается на отрисовку задачи в интерфейсе.

Второй аргумент - строка:

task_hex - цвет задачи в формате HEX

task_hex всегда приходит значением None. Чтобы задать цветовой индикатор, нужно указать цвет в формате HEX в качестве возвращаемого значения.

def indicator_task(task_info, arg):
return "white" if task_info["task_name"] == "animation" else "green"

Поиск задач

Процессор вызывается при вводе текста в строку поиска браузера задач и нажатию на клавишу Enter.

Второй аргумент - словарь:

{
'projects_set':
{
# набор идентификаторов проектов, по которым будет производиться поиск
}
, 'query': "" # Строка, по которой и будет производиться поиск
}

В процессоре вы можете заменить текст, который ввел пользователь или изменить набор проектов в которых будет вестись поиск задач.

Например, для ускорения поиска сцен по номеру, вы можете условится с пользователем о том, что для поиска сцены, ему достаточно ввести номер сцены. А в процессоре будет добавляться остальная часть имени.

def search_task(task_info, arg):
if arg["query"].isdigit():
arg["query"] = "scene_" + arg["query"]

return arg

Примечание: поиск ведется по всему пути задачи.


Снимок экрана для публикации версии

Снимок экрана прилагается к файлу в качестве тамбнейла при публикации версии в Cerebro.

Процессоры:

screenshot_pre - Вызывается непосредственно перед снимком экрана;

screenshot_replace - Вызывается вместо снимка экрана;

screenshot_post - Вызывается сразу после процедуры снимка экрана для публикации версии.

Нашли ответ на свой вопрос?