Welcome to lineyka_doc’s documentation!

Contents:

Class Studio

studio()

level = ‘studio’

Атрибуты

task_status:(tuple) - все возможные статусы задач: ('null','ready', 'ready_to_send', 'work', 'work_to_outsorce', 'pause', 'recast', 'checking', 'done', 'close')
working_statuses:
 (list) - рабочие статусы (задачи с этими статусами отображаются в списке задач исполнителя) ['ready', 'ready_to_send', 'work', 'work_to_outsorce', 'pause', 'recast']
end_statuses:(tuple) - статусы завершения работы над задачами (задачи с этими статусами не отображаются в списке задач исполнителей) ('done', 'close')
studio_database:
 (list) - параметры используемой базы данных, по умолчанию: ['sqlite3', False]
studio_folder:(str) - атрибут класса путь к директории хранения мета данных студии.
tmp_folder:(str) - атрибут класса путь к директории хранения временных рабочих файлов.
convert_exe:(str) - атрибут класса путь к exe файлу convert приложения Image Magick.

Методы

set_studio(path)

определяет директорию для хранения мета данных студии. Заполняет атрибут класса studio_folder. (см. Атрибуты )

Note

в редких случаях там же могут создаваться и директории проектов (временные студии для аутсорса).

Параметры:

  • path (str) - путь к директории студии
  • return - (True, ‘Ok!’) или (False, Comment)
set_tmp_dir(path)

определяет директорию для расположения временных рабочих файлов, по умолчанию системная темп директория. Заполняет атрибут класса tmp_folder. (см. Атрибуты )

Параметры:

  • path (str) - путь к директории
  • return - (True, ‘Ok!’) или (False, Comment)
set_convert_exe_path(path)

определяет путь к exe файлу convert приложения Image Magick. Заполняет атрибут класса convert_exe. (см. Атрибуты )

Note

Приложение Image Magick используется для редактирования картинок: конвертирование в .png при паблише и создания превью.

Параметры:

  • path (str) - путь к файлу convert.exe
  • return - (True, ‘Ok!’) или (False, Comment)
set_share_dir(path)

пока не используется

get_share_dir()

пока не используется

get_extension_dict()

возвращает словарь соответствия расширений файлов и соответствующих им приложений. extension_dict - это словарь: ключи - расширения файлов, значения - экзешники для открытия этих типов файлов.

Параметры:

  • return - (True, extension_dict) или (False, Comment)
edit_extension_dict(key, path)

редактирование словаря соответствия расширений файлов и соответствующих им приложений extension_dict.

Параметры:

  • key (str) - расширение файла с точкой, например: ‘.blend’
  • path (str) - путь к исполняемому файлу приложения, или имя исполняемого файла (если позволяют настройки переменной PATH системы)
  • return - (True, ‘Ok!’) или (False, Comment)
edit_extension(extension, action[, new_extension = False])

редактирование ключей словаря соответствия расширений файлов и соответствующих им приложений, добавляет новые расширения, удаляет расширения, меняет расширения на другие, оставляя содержание.

Параметры:

  • extension (str) - расширение файлов (запись с точкой, например ‘.blend’)
  • action (str) - действие из списка [‘ADD’, ‘REMOVE’, ‘EDIT’]
    • ADD - будет добавлен новое расширение по значению extension
    • REMOVE - будет удалено расширение по значению extension
    • EDIT - расширение по значению extension будет заменено на расширение по значению new_extension - при этом приложение для открытия файлов удаляемого расширения будет перезаписано на новое расширение
  • new_extension (str) - новое расширение на замену старому. Имет смысл только когда action = EDIT
  • return - (True, ‘Ok!’) или (False, Comment)
set_work_folder(path)

определение пути до рабочей директории пользователя, заполнение поля studio.work_folder. Пользовательская настройка запись в .init.py

Параметры:

  • path (str) - путь до директории.
  • return - (True, ok) или (False, comment)
_template_version_num(version)

преобразование номера версии к правильному строковому формату

Параметры:

  • version (int / str) - номер версии число или строка, преобразуемая в строку
  • return (True, version_str) или (False, comment) - если переданная строка не преобразуется в число.
_template_get_work_path(c_task[, version=False])

получение шаблоного пути до commit или pull версии рабочего файла или пути к его активити (в локальной work директории).

Параметры:

  • c_task (task) - задача, для которой ищется файл.
  • version (False / int / str) - номер версии или False - в этом случае возврат только пути до активити.
  • return - (True, path) или (False, Comment)
_template_get_push_path(c_task[, version=False, branches=False, look=False])

получение шаблоного пути до push версии файла или пути к его активити на сервере студии.

Параметры:

  • c_task (task) - задача, для которой ищется файл.
  • version (False / int / str) - номер версии или False - в этом случае возврат только пути до активити.
  • branches (bool / list) - список веток из которых делался push - для task_type = sketch
  • look (bool) - рассматривается только при task_type = sketch, если False - то используется c_task.extension, если True - то используется studio.look_extension (список путей для просмотра)
  • return - (True, path или path_dict - ключи имена веток) или (False, Comment)
_template_get_publish_path(c_task[, version=False, branches=False, look=False])

получение шаблонных путей для publish версий на сервере студии.

Note

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

  • c_task (task) - задача, для которой ищется файл.
  • version (False / int / str) - номер версии или False - в этом случае путь до финальной версии (файлы сверху директорий версий).
  • branches (bool / list) - список веток из которых делался push или publish (в случае репаблиша) - для мультипаблиша (например task_type = sketch)
  • look (bool) - рассматривается только при task_type = sketch, если False - то используется c_task.extension, если True - то используется studio.look_extension (список путей для просмотра)
  • return - (True, (path или path_dict - ключи имена веток)) или (False, Comment)

Class Database

database(studio)

Методы

get(level, read_ob, table_name, com[, table_root=False])

чтение БД.

Параметры:

  • level (str) - ‘studio’ or ‘project’
  • read_ob (studio/project) - экземпляр класса студии или проекта
  • com (str) - команда для базы данных mysql
  • table_root (str) - для тех случаев когда имя файла ДБ(sqlite3) не соответствует имени таблицы, если есть table_root - имя файла ДБ будет определяться по нему table_root - * может быть как именем таблицы - например: ‘assets’, так и именем файла - .assets.db
  • return - (True, [строки таблицы базы данных - словари]) или (False, comment)
set_db(level, read_ob, table_name, com[, data_com=False, table_root=False])

внесение изменений в таблицу базы данных.

Параметры:

  • level (str)- ‘studio’ or ‘project’
  • read_ob (studio/project) - экземпляр класса студии или проекта
  • com (str)- команда для базы данных mysql
  • data_com (tuple)- кортеж значений для com
  • table_root (str)- для тех случаев когда имя файла ДБ(sqlite3) не соответствует имени таблицы, если есть table_root - имя файла ДБ будет определяться по нему. table_root - может быть как именем таблицы - например: ‘assets’, так и именем файла - .assets.db
  • return - (True, ‘Ok!’) или (False, comment)
create_table(level, read_ob, table_name, keys[, table_root = False])

создание таблицы при её отсутствии.

Параметры:

  • level (str)- ‘studio’ or ‘project’
  • read_ob (studio/project) - экземпляр класса студии или проекта
  • table_name (str)- имя таблицы
  • keys (dict)- словарь ключей данного типа таблицы, например tasks_keys
  • table_root (str)- для тех случаев когда имя файла ДБ(sqlite3) не соответствует имени таблицы, если есть table_root - имя файла ДБ будет определяться по нему table_root - может быть как именем таблицы - например: ‘assets’, так и именем файла - .assets.db
  • return - (True, ‘Ok!’) или (False, comment)
insert(level, read_ob, table_name, keys, write_data[, table_root=False])

запись строк в таблицу, перед записью запускает процедуру создания таблицы - create_table.

Параметры:

  • level (str)- ‘studio’ or ‘project’
  • read_ob (studio/project) - экземпляр класса студии или проекта
  • table_name (str)- имя таблицы
  • keys (dict)- словарь ключей данного типа таблицы, например tasks_keys
  • write_data (dict)- словарь по ключам keys, также может быть списком словарей, для записи нескольких строк
  • table_root (str)- для тех случаев когда имя файла ДБ(sqlite3) не соответствует имени таблицы, если есть table_root - имя файла ДБ будет определяться по нему table_root - может быть как именем таблицы - например: ‘assets’, так и именем файла - .assets.db
  • return - (True, ‘Ok!’) или (False, comment)
read(level, read_ob, table_name, keys[, columns = False, where=False, table_root=False])

чтение таблицы бд.

Параметры:

  • level (str)- ‘studio’ or ‘project’
  • read_ob (studio/project) - экземпляр класса студии или проекта
  • table_name (str)- имя таблицы
  • keys (dict)- словарь ключей данного типа таблицы, например tasks_keys
  • columns (dict)- False - означает все столбцы если не False - то список столбцов
  • where (dict)- 1) строка условия, 2) словарь по keys, может иметь ключ условия - ‘condition’ значения из [or, end] 3) False - значит выделяется всё
  • table_root (str)- для тех случаев когда имя файла ДБ(sqlite3) не соответствует имени таблицы, если есть table_root - имя файла ДБ будет определяться по нему. table_root - может быть как именем таблицы - например: ‘assets’, так и именем файла - .assets.db
  • return - (True, [строки таблицы базы данных - словари]) или (False, comment)

Note

при остутсвии таблицы вернёт - (True, [])

update(level, read_ob, table_name, keys, update_data, where[, table_root=False])

внесение изменений в таблицу бд.

Параметры:

  • level (str)- ‘studio’ or ‘project’
  • read_ob (studio/project) - экземпляр класса студии или проекта
  • table_name (str)- имя таблицы
  • keys (dict)- словарь ключей данного типа таблицы, например tasks_keys
  • update_data (dict)- словарь по ключам из keys
  • where (dict)- словарь по ключам, так как значения маскируются под “?” не может быть None или False
  • table_root (str)- для тех случаев когда имя файла ДБ(sqlite3) не соответствует имени таблицы, если есть table_root - имя файла ДБ будет определяться по нему. table_root - может быть как именем таблицы - например: ‘assets’, так и именем файла - .assets.db
  • return - (True, ‘Ok!’) или (False, comment)
delete(level, read_ob, table_name, where[, table_root=False])

удаление строкит из таблицы БД.

Параметры:

  • level (str)- ‘studio’ or ‘project’
  • read_ob (studio/project) - экземпляр класса студии или проекта
  • table_name (str)- имя таблицы
  • where (dict)- словарь по ключам, так как значения маскируются под “?” не может быть None или False
  • table_root (str)- для тех случаев когда имя файла ДБ(sqlite3) не соответствует имени таблицы, если есть table_root - имя файла ДБ будет определяться по нему. table_root - может быть как именем таблицы - например: ‘assets’, так и именем файла - .assets.db
  • return - (True, ‘Ok!’) или (False, comment)

Class Artist

artist(studio)

level = ‘studio’

Данные хранимые в БД (имя столбца : тип данных):

artists_keys = {
'nik_name': 'text',
'user_name': 'text',
'password': 'text',
'date_time': 'timestamp',
'email': 'text',
'phone': 'text',
'specialty': 'text',
'outsource': 'integer',
'workroom': 'json', # список id отделов
'level': 'text',
'share_dir': 'text',
'status': 'text',
'working_tasks': 'json',# словарь списков имён назначенных задач, по именам отделов.
'checking_tasks': 'json',# словарь списков имён назначенных на проверку задач, по именам отделов.
}

Создание экземпляра класса:

import edit_db as db

artist = db.artist()

Атрибуты

nik_name:(str) - никнейм (уникально).
user_name:(str) - юзернейм в текущей системе, откуда сделан вход.
password:(str) -
date_time:(timestamp) - дата и время регистрации в студии.
email:(str) -
phone:(str) -
specialty:(str) -
outsource:(int) - 0 или 1
workroom:(list) - список id отделов
level:(str) - уровень, значение из studio.user_levels
share_dir:(str) - путь к директории обмена пока не используется
status:(str) - значение из [‘active’, ‘none’]
working_tasks:(dict) - словарь списков имён назначенных задач, по именам отделов ? на счёт того что по именам отделов.
checking_tasks:(dict) - словарь списков имён назначенных на проверку задач, по именам отделов ? на счёт того что по именам отделов.

Методы

init(nik_name[, new = True])

инициализация (заполнение полей экземпляра соответственно данного артиста) по nik_name

Параметры:

  • nik_name (str) - никнейм
  • new (bool) - если True - то возвращается новый инициализированный экземпляр класса artist, если False - то инициализируется текущий экземпляр
  • return - new_artist (artist) / (True, ‘Ok!’) или (False, comment)
init_by_keys(keys[, new = True])

инициализация (заполнение полей экземпляра соответственно данного артиста) по словарю

Параметры:

  • keys (dict) - словарь по studio.artists_keys
  • new (bool) - если True - то возвращается новый инициализированный экземпляр класса artist, если False - то инициализируется текущий экземпляр
  • return - new_artist (artist) / (True, ‘Ok!’) или (False, comment)
add_artist(keys[, registration = True])

добавление нового пользователя

Параметры:

  • keys (dict) - словарь по ключам artists_keys, обязательные значения - nik_name и password.
  • registration (bool) если =*True* - произойдёт заполнение полей artists_keys экземпляра класса, поле user_name будет заполнено, если registration*=*False - поля artists_keys заполняться не будут, поле user_name - останется пустым.
  • return - (True, ‘Ok!’) или (False, comment)
read_artist(keys[, objects=True])

чтение списка данных артистов

Параметры:

  • keys (dict) - словарь по ключам artists_keys - критерии для поиска, если keys= ‘all’ вернёт данные по всем артистам.
  • objects (bool) - если True - то возвращаются экземпляры, если False - то словари.
  • return - (True, [артисты - словари или экземпляры]) или (False, comment)
read_artist_of_workroom(workroom_id[, objects=True])

чтение списка данных артистов по id отдела

Параметры:

  • workroom_id (str) - id отдела
  • objects (bool) - если True - то возвращаются экземпляры, если False - то словари.
  • return - (True, [артисты - словари или экземпляры]) или (False, comment)
get_artists_for_task_type(task_type, workroom_ob)

сортированный список активных артистов подходящих для данного типа задачи.

Параметры:

  • task_type (str) - тип задачи
  • workroom_ob (workroom) - предполагается что выполнена процедура workroom.get_list() и заполнено поле list_workroom (список всех отделов)
  • rturn - (True, сортированный список имён артистов, словарь артистов по именам.) или (False, comment)
login_user(nik_name, password)

Логин юзера. Перезаписывает текущее имя пользователя пк, в соответствие указанного ник-нейма, при этом проверит и удалит данное имя пользователя из под других ник-неймов. Произойдёт заполнение полей artists_keys экземпляра класса.

Параметры:

  • nik_name (str) - никнейм
  • password (str) - пароль
  • return - (True, (nik_name, user_name)) или (False, comment)
get_user([outsource = False])

определение текущего пользователя, заполнение полей artists_keys экземпляра класса.

Параметры:

  • outsource (bool)- с точки зрения удалённого пользователя или нет.
  • return -(True, (nik_name, user_name, outsource, {данные артиста - словарь})) или (False, comment)
edit_artist(key_data[, current_user=False])

редактирование данного (инициализированного) экземпляра артиста.

Параметры:

  • keys (dict) - данные на замену - nik_name - не редактируется, поэтому удаляется из данных перед записью.
  • current_user (artist) - редактор - залогиненный пользователь, если False - то будет создан новый экземпляр и произведено get_user() (лишнее обращени е к БД) . если force - проверки уровней и доступов не выполняются.
  • return - (True, ‘Ok!’) или (False, comment)
get_working_tasks(project_ob[, statuses=False])

получение словаря задач (назначенных на артиста) по именам.

Параметры:

  • project_ob (project) - текущий проект
  • statuses (bool / list) - False или список статусов задач
  • return (True, {task_name: task_ob, …}) или (False, comment)
get_reading_tasks(project_ob[, status=False])

получение словаря задач (назначенных на артиста в качестве проверяющего) по именам.

Параметры:

  • project_ob (project) - текущий проект
  • status (bool/ str) - если не False, то возвращает только задачи соответствующие данному статусу.
  • return (True, {task_name: task_ob, …}) или (False, comment)

Note

add_stat(), read_stat(), edit_stat() - не правились, возможно будут удалены.

Class Workroom

workroom(studio)

level = ‘studio’

редактирование отделов

Данные хранимые в БД (имя столбца : тип данных):

workroom_keys = {
'name': 'text',
'id': 'text',
'type': 'json' # список типов задач, которые выполняются данным отделом.
}

Создание экземпляра класса:

import edit_db as db

workroom = db.workroom()

Атрибуты

name:(str) - имя отдела (уникально).
id:(str) - hex
type:(json) - список типов задач из studio.task_types, которые выполняются данным отделом.
list_workroom:(list) - атрибут класса список отделов даной студии (экземпляры). Заполняется привыполнеии метода get_list, значение по умолчанию - [].
dict_by_name:(dict) - атрибут класса словарь отделов даной студии (экземпляры) с ключами по именам. Заполняется привыполнеии метода get_list, значение по умолчанию - {}.
dict_by_id:(dict) - атрибут класса словарь отделов даной студии (экземпляры) с ключами по id. Заполняется привыполнеии метода get_list, значение по умолчанию - {}.

Методы

init_by_keys(keys[, new = True])

заполнение полей экземпляра по ключам из keys, если new=True - то возвращает новый экземпляр.

Параметры:

  • keys (dict) - словарь по workroom_keys
  • new (bool) - если True - то возвращается новый инициализированный экземпляр класса workroom, если False - то инициализируется текущий экземпляр
  • return - (True, ‘Ok!’) / workroom - новый инициализированный экземпляр, или (False, comment)
add(keys[, new=False])

создание отдела.

Параметры:

  • keys (dict) - словарь ключей по workroom_keys, name - обязательный параметр.
  • new (bool) - если True - то возвращает инициализированный экземпляр.
  • return - (True, ‘Ok!’) / workroom - новый инициализированный экземпляр, или (False, comment)
get_list([return_type = False, objects=True])

получение списка отделов.

Note

Заполняет атрибуты класса: list_workroom, dict_by_name, dict_by_id (см. Атрибуты )

Параметры:

  • return_type - параметр определяющий структуру возвращаемой информации:
    False:возврат (True, [список отделов - экземпляры или словари])
    ‘by_name’:возврат - (True, {словарь по именам - значения отделы})
    ‘by_id’:возврат- (True, {словарь по id - значения отделы})
  • objects (bool) - определяет в каком виде возвращаются отделы, если False - то словари, а если True - то экземпляры класса workroom
  • return - (True, data) , или (False, comment)
get_name_by_id(id)

возвращает имя отдела по его id.

Note

возможно лучше не использовать

Параметры:

  • id (str)- id отдела
  • return - (True, workroom_name) или (False, комментарий).
get_id_by_name(name)

возвращает id отдела по его имени.

Note

возможно лучше не использовать

Параметры:

  • name (str)- имя отдела.
  • return - (True, workroom_id) или (False, комментарий).
name_list_to_id_list(name_list)

возвращает список id по списку имён

Note

возможно лучше не использовать

Параметры:

  • name_list (list)- список имён
  • return - (True, list_of_id) или (False, комментарий).
id_list_to_name_list(id_list)

возвращает список имён по списку id

Note

нужен при записи

Параметры:

  • id_list (list)- список id
  • return - (True, name_list) или (False, комментарий).
rename_workroom(new_name)

переименование отдела (текущего экземпляра). перезапись параметра name.

Параметры:

  • new_name (str)- новое имя отдела.
  • return - (True, ‘Ok!’) или (False, комментарий).
edit_type(new_type_list)

замена типов отдела (текущего экземпляра). перезапись параметра type. Отделу присваивается один или несколько типов задач - для которых он предназначен.

Параметры:

  • new_type_list (list)- список типов из task_types
  • return - (True, ‘Ok!’) или (False, комментарий).

Class Project

project(studio)

level = ‘studio’

Данные хранимые в БД (имя столбца : тип данных):

projects_keys = {
'name': 'text',
'path': 'text',
'status': 'text',
'project_database': 'json',
'chat_img_path': 'text',
'list_of_assets_path': 'text',
'preview_img_path': 'text',
'fps': 'real',
'units': 'text',
}

Создание экземпляра класса:

import edit_db as db

project = db.project()

Атрибуты

name:(str) - имя проекта (уникально).
path:(str) - путь до директории проекта.
status:(str) - ['active', 'none']
project_database:
 (list) - параметры используемой базы данных, по умолчанию: ['sqlite3', False]
chat_img_path:(str) - путь до директории с картинками чата.
list_of_assets_path:
 (str) - путь до файла с временными данными создаваемых ассетов.
preview_img_path:
 (str) - путь до директории с превью картинок чата.
fps:(float) - fps проекта (по умолчанию 24).
units:(str) - юниты 3d сцен ['m', 'cm', 'mm'] по умолчанию 'm'
list_active_projects:
 (list) - атрибут класса список активных проектов, только имена. . Заполняется при выполнеии метода get_list, значение по умолчанию - [].
list_projects:(list) - атрибут класса список всех проектов (экземпляры). Заполняется при выполнеии метода get_list, значение по умолчанию - [].
dict_projects:(dict) - атрибут класса словарь содержащий все проекты (экземпляры) с ключами по именам. . Заполняется при выполнеии метода get_list, значение по умолчанию - {}.

Методы

add_project(project_name, project_path)

создаёт проект.

Note

при создании проекта новый экземпляр не возвращается, заполняются поля текущего экземпляра.

Параметры:

  • project_name (str) - имя проекта, если имя не указано, но указана директория, проект будет назван именем директории
  • project_path (str - path) - путь к директории проекта, если путь не указан, директория проекта будет создана в директории студии
  • return - (True, ‘Ok!’) или (False, comment)
init(name[, new=True])

инициализирует экземпляр по имени (заполняет поля экземпляра), чтение БД.

Параметры:

  • name (str) - имя проекта
  • new (bool) - если new= True - возвращает новый инициализированный экземпляр, если False то инициализирует текущий экземпляр
  • return - новый экземпляр (project) / (True, ‘Ok!’) или (False, comment)
init_by_keys(keys[, new=True])

инициализирует экземпляр по словарю (заполняет поля экземпляра), без чтения БД

Параметры:

  • keys (dict) - словарь по projects_keys
  • new (bool) - если new= True - возвращает новый инициализированный экземпляр, если False то инициализирует текущий экземпляр
  • return - новый экземпляр (project) / (True, ‘Ok!’) или (False, comment)
get_list()

чтение существующих проектов.

Note

не возвращает экземпляры, только заполняет поля класса: list_active_projects, list_projects, dict_projects. (см. Атрибуты )

  • return - (True, ‘Ok!’) или (False, comment)
rename_project(new_name)

переименование проекта (данного экземпляра), заполняются поля экземпляра, перезагружает studio.list_projects. ????

Параметры:

  • new_name (str) - новое имя отдела
  • return - (True, ‘Ok!’) или (False, comment).
remove_project()

удаляет проект из БД (не удаляя файловую структуру), перезагружает studio.list_projects ???, приводит экземпляр к сосотоянию empty (все поля по projects_keys = False).

Параметры:

  • return - (True, ‘Ok!’) или (False, comment).
edit_status(status)

изменение статуса проекта.

Параметры:

  • status (str) - присваиваемый статус
  • return - (True, ‘Ok!’) или (False, comment)
change_fps(fps)

изменение fps проекта, предполагается автоматическое назначение этого параметра в сценах.

Параметры:

  • fps (float) - fps
  • return - (True, ‘Ok!’) или (False, comment)
change_units(fps)

изменение юнитов проекта, параметр для 3d сцен. Предполагается автоматическое назначение этого параметра в сценах.

Параметры:

  • units (str) - юниты для 3d сцен, значение из studio.projects_units
  • return - (True, ‘Ok!’) или (False, comment)

Служебные

__make_folders(root)

создаёт файловую структуру проекта, при отсутствии.

Параметры:

  • root (str - path) - корневой каталог проекта
  • return - None.
_write_settings()

запись настроек проекта в файл project_path/studio.PROJECT_SETTING

Note

Выполнять в каждой процедуре по редактированию параметров проекта.

Параметры:

  • return - (True, ‘Ok!’) или (False, comment)
_read_settings()

чтение словаря параметров проекта из файла project_path/studio.PROJECT_SETTING

Параметры:

  • return:
    • data - словарь по ключам studio.projects_keys
    • None в случае остутствия файла.

Class Set_of_tasks

set_of_tasks(studio)

level = ‘studio’

Редактирование наборов задач.

Данные хранимые в БД (имя столбца : тип данных):

set_of_tasks_keys = {
'name':'text',
'asset_type': 'text',
'loading_type': 'text',
'sets':'json',
'edit_time': 'timestamp',
}

Структура словарей атрибута sets:

sets_keys = [
'task_name',
'input',
'activity',
'tz',
'cost',
'standart_time',
'task_type',
'extension',
]

Атрибуты

name:(str) - имя сета (уникально)
asset_type:(str) - тип ассета из studio.asset_types
loading_type:(str) - # способ загрузки ассета для типа *object*, значения из studio.loading_types
sets:(list) - сами задачи, список словарей с ключами по sets_keys (ключи соответсвую атрибутам класса Task).
edit_time:(timestamp) - дата и время последних изменений.

Методы

init_by_keys(keys[, new=True])

инициализация по словарю.

Параметры:

  • keys (dict) - словарь по set_of_tasks_keys
  • new (bool) - если True - то возврат нового объекта, если False - то инициализация текущего
  • return - new_ob или (True, ‘Ok!’)
create(name, asset_type[, loading_type=False, keys = False, force=False])

создание набора задач.

Параметры:

  • name (str) - имя набора
  • asset_type (str) - должен быть из studio.asset_types
  • loading_type (str) - тип загрузки для object ассета, из studio.loading_types
  • keys (list/ bool) - список задач(словари по sets_keys), если False - будет создан пустой набор
  • force (bool) - если False - то будет давать ошибку при совпадении имени, если True - то будет принудительно перименовывать с подбором номера
  • return - (True, new_ob) или (False, comment)
get_list([f = False, path = False])

чтение всех наборов (объекты).

Параметры:

  • f (dict) - фильтр ро ключам set_of_tasks_keys, используется только для чтения из базы данных при path= False
  • path (bool / str) - если указан - то чтение из файла .json, если - False - то чтение из базы данных
  • return - (True, [список объектов]) или (False, comment)
get_list_by_type(asset_type)

чтение наборов (объекты) определённого типа.

Note

обёртка на get_list(f)

Параметры:

  • asset_type (str) - должен быть из studio.asset_types
  • return - (True, [список объектов]) или (False, comment)
get_dict_by_all_types()

чтение всех наборов (объекты) в словарь с ключами по типам ассетов.

Параметры:

  • return - (True, {тип ассета : {имя сета: объект, …}, …}) или (False, comment)
get(name)

чтение набора по имени.

Note

обёртка на get_list(f)

Параметры:

  • name (str) - имя набора
  • return - (True, объект) или (False, comment)
remove([name=False])

удаление набора.

Параметры:

  • name* (str) - если False - то удаляется текущий инициализированный объект: удаляется строка из БД - поля объекта переписываются на False
  • return - (True, ‘ok’) или (False, comment)
rename(new_name[, name=False])

переименование набора.

Параметры:

  • new_name (str) - новое имя сета
  • name (str) - имя переименоваваемого сета, если False - переименовывается текущий объект
  • return - (True, ‘ok’) или (False, comment)
edit_asset_type(asset_type[, name=False])

смена типа набора.

Параметры:

  • asset_type (str) - новый тип, должен быть из studio.asset_types
  • name (str/bool) - имя изменяемого сета, если False - то редактируется текущий объект
  • return - (True, ‘ok’) или (False, comment)
edit_loading_type(loading_type)

редактирование параметра loading_type.

Note

только для ассетов типа "object"

Параметры:

  • loading_type (str) - значение из studio.loading_types
  • return - (True, ‘ok’) или (False, comment)
edit_sets(data[, name=False])

редактирование значения sets

Параметры:

  • data (list) - список словарей по sets_keys
  • name (bool/str) - имя изменяемого сета, если False - то редактируется текущий объект
  • return - (True, ‘ok’) или (False, comment)
copy(new_name[, old_name=False])

создание копии сета.

Параметры:

  • new_name (str) - имя создаваемого сета
  • old_name (bool / str) - имя копируемого сета, если False - то копируется текущий
  • return - (True, объект) или (False, comment)
save_to_library(path[, save_objects=False])

запись библиотеки наборов задач в .json файл.

Параметры:

  • path (str) - путь сохранения
  • save_objects (bool / list) - список объектов (set_of_tasks) - если False - то сохраняет всю библиотеку
  • return - (True, ‘ok’) или (False, comment)
load_from_library(data)

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

Note

возможно больше не нужно / это сочетание get_list(path) + create()

Параметры:

  • data - словарь из внешнего файла, по структуре аналогичен словарю set_of_tasks в системе происходит запись данных в set_of_tasks, при этом данные по совпадающим ключам перезаписываются на новые.
  • return - (True, ‘ok’) или (False, comment)

Class Group

group(studio)

level = ‘project’

Данные хранимые в БД (имя столбца : тип данных):

group_keys = {
'name': 'text',
'type': 'text',
'season': 'text',
'description': 'text',
'id': 'text',
}

Создание экземпляра класса:

import edit_db as db

project = db.project()
group = db.group(project) # project - обязательный параметр при создании экземпляра group
# доступ ко всем параметрам и методам принимаемого экземпляра project через group.project

Атрибуты

name:

(str) - имя группы (уникально).

type:

(str) - тип ассетов данной группы, из studio.asset_types

season:

(str) - id сезона ?

description:

(str) -

id:

(str) - hex

project:
  • экземпляр Class Project, принимаемый при создании экземпляра класса, содержит все атрибуты и методы Class Project.
list_group:
  • атрибут класса список групп (экземпляры) даного проекта. Заполняется привыполнеии метода get_list, значение по умолчанию - False.
dict_by_name:
  • атрибут класса словарь групп (экземпляры) с ключами по именам. Заполняется привыполнеии метода get_list, значение по умолчанию - False.
dict_by_id:
  • атрибут класса словарь групп (экземпляры) с ключами по id. Заполняется привыполнеии метода get_list, значение по умолчанию - False.
dict_by_type:
  • атрибут класса словарь групп: ключи - type, значения - списки групп (экземпляры). Заполняется привыполнеии метода get_list, значение по умолчанию - False.

Методы

init(group_name[, new = True])

заполнение полей экземпляра по group_keys.

Параметры:

  • group_name (str) - имя группы. данные группы будут считаны из базы данных
  • new (bool) - если True - то возвращается новый инициализированный экземпляр класса group, если False - то инициализируется текущий экземпляр
  • return:
    если new= True:
    • инициализированный экземпляр,
    если new= False:
     
    • (True, ‘Ok!’) / или (False, comment)
init_by_keys(keys[, new=True])

заполнение полей экземпляра по group_keys.

Параметры:

  • keys (dict) - словарь данных группы по group_keys
  • new (bool) - если True - то возвращается новый инициализированный экземпляр класса group, если False - то инициализируется текущий экземпляр
  • return:
    если new= True:
    • инициализированный экземпляр
    если new= False:
     
    • (True, ‘Ok!’)
create(keys[, new=True])

создание группы

Параметры:

  • keys (dict) - словарь по group_keys (name и type (тип ассетов) - обязательные ключи)

Note

если type подразумевает привязку к сезону(type из studio.asset_types_with_season), то season - так же обязательный параметр.

  • new (bool) - возвращать новый экземпляр или инициализировать текущий
  • return:
    если new = True:
     
    • (True, new_group (group))
    если new = False:
     
    • (True, ‘Ok!’) или (False, comment)
create_recycle_bin()

создание группы - корзина, для удалённых ассетов. Процедура выполняется при создании проекта.

Параметры:

  • return - (True, ‘Ok!’) или (False, comment).
get_list([f = False])

возвращает список групп (экземпляры) согласно фильтру f.

Note

заполняет атрибуты класса: list_group, dict_by_name, dict_by_id, dict_by_type (см. Атрибуты )

Параметры:

  • f (list / bool) - False или список типов(типы ассета)
  • return (True, [список групп - экземпляры]) или (False, comment).
get_by_keys(keys)

возвращает список групп(экземпляры) удовлетворяющих keys.

Параметры:

  • keys (dict) - словарь по group_keys
  • return (True, [список групп - экземпляры]) или (False, comment)
get_by_name(name)

возвращает группу(экземпляр) по имени.

Note

Обёртка на get_by_keys()

Параметры:

  • name (str) - имя группы
  • return (True, группа - экземпляр) или (False, comment)
get_by_id(id)

возвращает группу(экземпляр) по id.

Note

Обёртка на get_by_keys()

Параметры:

  • id (str) - id группы
  • return (True, группа - экземпляр) или (False, comment)
get_by_season(season)

возвращает список групп(экземпляры) данного сезона.

Note

Обёртка на get_by_keys()

Параметры:

  • season (str) - сезон
  • return (True, [список групп - экземпляры]) или (False, comment)
get_by_type_list(type_list)

возвращает список групп(словари) по списку типов.

Note

Обёртка на get_list()

Параметры:

  • type_list (list) - список типов ассетов из asset_types
  • return (True, [список групп - экземпляры]) или (False, comment)
rename(new_name)

переименование текущего объекта группы.

Параметры:

  • new_name (str) - новое имя группы
  • return - (True, ‘Ok!’) или (False, comment)
edit_comment(comment)

редактирование комментария текущего объекта группы.

Параметры:

  • comment (str) - текст коментария
  • return - (True, ‘Ok!’) или (False, comment)

Class Season

season(studio)

level = ‘project’

Сезон это группа серий, для сериала. Не создаёт файловую структуру.

Данные хранимые в БД (имя столбца : тип данных):

season_keys = {
'name': 'text',
'status':'text',
'id': 'text',
}

Создание экземпляра класса:

import edit_db as db

project = db.project()

season = db.season(project) # project - обязательный параметр при создании экземпляра season
# доступ ко всем параметрам и методам принимаемого экземпляра project через season.project

Атрибуты

name:(str) - имя сезона (уникально).
status:(str) - [‘active’, ‘none’]
id:(str) - hex
project:(project) - экземпляр Class Project, принимаемый при создании экземпляра класса, содержит все атрибуты и методы Class Project.
seasons_list:(list) - атрибут класса список сезонов (экземпляры) даного проекта. Заполняется при выполнеии метода get_list, значение по умолчанию - [].
dict_by_name:(dict) - атрибут класса словарь сезонов (экземпляры) с ключами по именам. Заполняется при выполнеии метода get_list, значение по умолчанию - {}.
dict_by_id:(dict) - атрибут класса словарь сезонов (экземпляры) с ключами по id. Заполняется при выполнеии метода get_list, значение по умолчанию - {}.

Методы

init(name[, new=True])

инициализация (заполнение полей по season_keys) по имени.

Параметры:

  • name (str) - имя серии
  • new (bool) - если True - вернёт новый экземпляр, если False - инициализирует текущий
  • return:
    если new = True:
     
    • season (экземпляр), None (при отсутствии данного сезона)
    если new = False:
     
    • (True, ‘Ok!’) или (False, коммент)
init_by_keys(keys[, new=True])

инициализация (заполнение полей по season_keys) по словарю.

Параметры:

  • keys (dict) словарь по season_keys
  • new (bool) - если True - вернёт новый экземпляр, если False - инициализирует текущий
  • return
    если new = True:
     
    • season (экземпляр)
    если new = False:
     
    • (True, ‘Ok!’) или (False, коммент)
create(name)

создаёт сезон.

Параметры:

  • name (str) - имя сезона, должно быть уникально, иначе будет ошибка
  • return - (True, season (экземпляр)) или (False, comment)
get_list([status='all'])

возвращает список сезонов (экземпляры). заполняет атрибуты класса: seasons_list, dict_by_name, dict_by_id. (см. Атрибуты )

Параметры:

  • status (str) - значения из [‘all’, ‘active’, ‘none’]
  • return - (True, [список сезонов - экземпляры]) или (False, comment)
rename(new_name)

переименовывает текущий сезон.

Параметры:

  • new_name (str) - новое имя сезона
  • return - (True, ‘ok’) или (False, comment)
stop()

деактивация текущего сезона. Замена статуса на ‘none’.

Параметры:

  • name (str) - имя сезона
  • return - (True, ‘ok’) или (False, comment)
start()

активация текущего сезона. Замена статуса на ‘active’.

Параметры:

  • name (str) - имя сезона
  • return - (True, ‘ok’) или (False, comment)

Class Asset

asset(studio)

level = ‘project’

Данные хранимые в БД (имя столбца : тип данных):

asset_keys = {
'name': 'text',
'group': 'text',
'type': 'text',
'loading_type': 'text', # способ загрузки ассета object в анимационную сцену, значения из studio.loading_types
'season': 'text', # ``?``
'priority': 'integer',
'description': 'text',
'content': 'text',
'id': 'text',
'status': 'text',
'parent': 'json' # {'name':asset_name, 'id': asset_id} - возможно не нужно
}

Создание экземпляра класса:

import edit_db as db

project = db.project()

asset = db.asset(project) # project - обязательный параметр при создании экземпляра asset
# доступ ко всем параметрам и методам принимаемого экземпляра project через asset.project

Атрибуты

name:(str) - имя ассета (уникально)
group:(str) - id группы
type:(str) - тип ассета из studio.asset_types
loading_type:(str) - тип загрузки в анимационную сцену, варианты: mesh - загрузка меша из активити model, group - загрузка группы из активити model, rig - загрузка группы рига из активити rig
season:(str) - id сезона ?
priority:(int) - [0 - inf]
description:(str) -
content:(str) - ?
id:(str) - hex
status:(str) - [‘active’, ‘none’]
parent’:(dict) - ?
project:(project) - экземпляр Class Project принимаемый при создании экземпляра класса, содержит все атрибуты и методы Class Project.
path:(str) - путь к директории ассета на сервере (заполняется при инициализации объекта).

Методы

init(asset_name, new = True)

заполнение полей экземпляра по studio.asset_keys

Параметры:

  • asset_name (str) - имя ассета. данные ассета будут считаны из базы данных
  • new (bool) - если True - то возвращается новый инициализированный экземпляр класса asset, если False - то инициализируется текущий экземпляр
  • return:
    • если new=True - инициализированный экземпляр
    • если new=False - (True, ‘Ok!’) / или (False, comment)
init_by_keys(keys, new=True)

заполнение полей экземпляра по studio.asset_keys.

Параметры:

  • keys (dict) - словарь данных ассета, получаемый в из БД
  • new (bool) - если True - то возвращается новый инициализированный экземпляр класса asset, если False - то инициализируется текущий экземпляр.
  • return:
    • если new=True - инициализированный экземпляр,
    • если new=False - (True, ‘Ok!’)
create(asset_type, list_keys)

создание ассетов по списку.

Параметры:

  • asset_type (str) - тип для всех ассетов из studio.asset_types
  • list_keys (list) - список словарей по ключам asset_keys обязательные параметры в keys (list_keys): name, group(id). важный параметр set_of_tasks - имя набора задач
  • return - (True, assets_data) или (False, comment)
    • assets_data (dict) - словарь создаваемых асетов(экземпляры) по именам.
remove()

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

Параметры:

  • return - (True, ‘Ok!’) или (False, comment).
copy_of_asset(new_group_name, new_asset_name, new_asset_type, set_of_tasks)

копирование текущего ассета.

Параметры:

  • new_group_name (str) - имя группы для создаваемого ассета
  • new_asset_name (str) - имя создаваемого ассета
  • new_asset_type (str) из studio.asset_types - тип создаваемого ассета
  • set_of_tasks (str) - имя набора задач
  • return - (True, ‘Ok!’) или (False, comment)
get_list_by_type(asset_type= False)

возвращает ассеты (экземпляры) по типу. Если не указывать тип ассета, вернёт ассеты по всем типам.

Параметры:

  • asset_type (str) - тип ассета. Если не указывать тип ассета, вернёт ассеты по всем типам
  • return (True, [instances]) или (False, comment)
get_list_by_all_types()

возвращает ассеты (экземпляры) по всем типам.

Note

Обёртка на get_list_by_type()

Параметры:

  • return - (True, [instances]) или (False, comment)
get_list_by_group(group)

возвращает список ассетов (экземпляры) данной группы.

Параметры:

  • group (group) - экземпляр группы
  • return - (True, [instances]) или (False, comment)
get_dict_by_name_by_all_types()

возвращает словарь ассетов (экземпляры) по именам, по всем типам.

Параметры:

  • return (True, {asset_name: экземпляр}) или (False, comment)
change_group(new_group_id)

изменение группы текущего ассета (ассет должен быть инициализирован).

Параметры:

  • new_group_id (str) - id новой группы
  • return - (True, ‘Ok!’) или (False, comment)
change_priority(priority)

изменение приоритета текущего ассета (ассет должен быть инициализирован).

Параметры:

  • priority (int) - новый приоритет
  • return_data - (True, ‘Ok!’) или (False, comment)
change_description(description)

изменение описания текущего ассета (ассет должен быть инициализирован).

Параметры:

  • description (str) - новое описание
  • return - (True, ‘Ok!’) или (False, comment)
change_loading_type(loading_type)

Смена типа загрузки ассета, для типа object (ассет должен быть инициализирован).

Параметры:

  • loading_type (str) - тип загрузки, значение из studio.loading_types
  • return - (True, ‘Ok!’) или (False, comment)

Class Task

task(studio)

level = ‘project’

Данные хранимые в БД (имя столбца : тип данных):

tasks_keys = {
  'activity': 'text',
  'task_name': 'text',
  'task_type': 'text',
  'source': 'json',
  'input': 'json',
  'status': 'text',
  'outsource': 'integer',
  'artist': 'text',           # nik_name
  'level': 'text',            # пользовательский уровень сложности задачи.
  'planned_time': 'real',
  'price': 'real',
  'time': 'json',             # словарь: ключи - nik_name, значения - ссумарное время атриста по этой задаче (ед. измерения - секунда).
  'full_time': 'real',        # ссумарное время всех атристов по этой задаче (ед. измерения - секунда).
  'deadline': 'timestamp',    # расчётная дата окончания работ.
  'start': 'timestamp',
  'end': 'timestamp',
  'specification': 'text',
  'chat_local': 'json',
  'web_chat': 'text',
  'supervisor': 'text',
  'readers': 'json',          # словарь: ключ - nik_name, значение - 0 или 1 (статус проверки),  плюс одна запись: ключ - 'first_reader', значение - nik_name - это первый проверяющий - пока он не проверит даннаня задача не будет видна у других проверяющих в списке на проверку.
  'output': 'json',
  'priority':'integer',
  'extension': 'text',
  'description': 'text',      # описание задачи
  }

Создание экземпляра класса:

import edit_db as db

project = db.project()
asset = db.asset(project)

task = db.task(asset) # asset - обязательный параметр при создании экземпляра task
# доступ ко всем параметрам и методам принимаемого экземпляра asset - через task.asset

Атрибуты

activity:(str) - активити из asset.ACTIVITY_FOLDER[asset_type]
task_name:(str) - имя задачи, структура имени: asset_name:task_name
task_type:(str) - тип задачи из studio.task_types + service
source:(list) - имена задач, объекты из активити которых используются как исходники.
input:(str / list) - для сервисной задачи (task_type=service) - это список имён входящих задач. для не сервисной задачи - это имя входящей задачи.
status:(str) - статус задачи из studio.task_status
outsource:(int) - значение из [0, 1] если = 1 - задача на аутсорсе.
artist:(str) - nik_name исполнителя.
level:(text) - пользовательский уровень сложности задачи.
planned_time:(float) - планируемое время (ед. измерения - час).
price:(float) - стоимость работ по задаче (ед. измерения - юнит).
time:(dict) - словарь: ключи - nik_name, значения - ссумарное время атриста по этой задаче (ед. измерения - секунда).
full_time:(real) - ссумарное время всех атристов по этой задаче (ед. измерения - секунда).
deadline:(timestamp) - расчётная дата окончания работ.
start:(timestamp) - дата и время взятия задачи в работу.
end:(timestamp) - дата и время приёма задачи.
specification:(str) - ссылка на техническое задание.
chat_local:?
web_chat:?
supervisor:?
readers:(dict) - словарь: ключ - nik_name, значение - 0 или 1 (статус проверки), плюс одна запись: ключ - ‘first_reader’, значение - nik_name - это первый проверяющий - пока он не проверит даннаня задача не будет видна у других проверяющих в списке на проверку.
output:(list) - список имён исходящих задач.
priority:(int) - приоритет.
extension:(str) - расширение файла для работы над данной задачей, начинается с точки, например: ‘.blend’
approved_date:(timestamp) - дата планируемого окончания работ (вычисляется при создании экземпляра)
asset:(asset) - экземпляр Class Asset принимаемый при создании экземпляра класса, содержит все атрибуты и методы Class Asset.
description:(text) - описание задачи
branches:(list) - атрибут класса список веток активити задачи. Заполняется при выполнении метода _set_branches

Методы

Чтение

init(task_name[, new = True])

заполнение полей экземпляра по studio.tasks_keys

Параметры:

  • task_name (str) - имя задачи. данные задачи будут считаны из базы данных
  • new (bool) - если True - то возвращается новый инициализированный экземпляр класса task, если False - то инициализируется текущий экземпляр
  • return:
    • если new=True - инициализированный экземпляр,
    • если new=False - (True, ‘Ok!’) / или (False, comment)
init_by_keys(keys[, new=True])

заполнение полей экземпляра по studio.tasks_keys

Параметры:

  • keys (dict) - словарь данных задачи, получаемый в функции _read_task ()
  • new (bool) - если True - то возвращается новый инициализированный экземпляр класса task, если False - то инициализируется текущий экземпляр
  • return:
    • если new=True - инициализированный экземпляр,
    • если new=False - (True, ‘Ok!’)
get_list([asset_id=False, task_status = False, artist = False])

получение списка задач ассета (экземпляры).

Параметры:

  • asset_id (str) - требуется если экземпляр task.asset не инициализирован, либо требуется список задач не для этого инициализированного ассета
  • task_status (str) - фильтр по статусам задач
  • artist (str) - фильтр по имени
  • return - (True, task_list(список задач - экземпляры)) или (False, коммент)
get_tasks_by_name_list(task_name_list[, assets_data = False])

возвращает задачи (экземпляры) по списку имён задач, из различных ассетов данного проекта.

Note

task.asset.project - инициализирован

Параметры:

  • task_name_list (list) - список имён задач
  • assets_data (dict) - dict{asset_name: asset(экземпляр),…} результат функции asset.get_dict_by_name_by_all_types(), если не передавать - будет произведено чтение БД
  • return - (True, { task_name: task(экземпляр), … }) или (False, коммент)

Work пути

get_final_work_file_path([current_artist=False])

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

Параметры:

  • current_artist (artist) - текущий пользователь, если не передавать, будет сделано get_user
  • return - (True, (path, version)) или (False, comment)
    • если нет ни одного лога - (True, (‘’,’‘))
get_version_work_file_path(version)

возвращает путь до указанной версии рабочего файла.

Параметры:

  • version (int / str) - номер версии
  • return - (True, path) - или (false, comment)
get_new_work_file_path()

создание пути для новой commit или pull версии файла.

Параметры:

  • return - (True, (path, version)) или (False, comment)

Push пути

get_final_push_file_path([current_artist=False])

возвращает путь и версию финальной push версии файла.

Параметры:

  • current_artist (artist) - текущий пользователь, если не передавать, будет сделано get_user()
  • return
    • для sketch - (True, ( {словарь - ключи: типы путей look_path, push_path, значение: {словарь - пути по веткам}}, version ))
    • для остальных - (True, (path, version)) - или (false, comment)
get_version_push_file_path(version[, current_artist=False])

возвращает путь до указанной push версии файла.

Параметры:

  • version (int / str) - номер версии
  • current_artist (artist) - текущий пользователь, если не передавать, будет сделано get_user()
  • return
    • для sketch - (True, {словарь - ключи: типы путей look_path или push_path, значение: {словарь - пути по веткам}})
    • для остальных - (True, path) - или (false, comment)
get_new_push_file_path([version=False, current_artist=False])

возвращает пути и версию до новой push версии

Параметры:

  • version (int / str) - номер версии исходника (pull или commit) при отсутствии push последней версии. Для мультипаблиша (sketch) всегда только из последних версий веток.
  • current_artist (artist) - текущий пользователь, если не передавать, будет сделано get_user()
  • return
    • для sketch - (True, ({словарь с ключами: source_path, source_versions, push_path, look_path - значения словари по веткам}, new_version)
    • для остальных (True, (source_path, source_version, source_branch, new_path, new_version))

Publish пути

get_version_publish_file_path([version=False, branches=False, version_log=False])

пути до файлов указанной publish версии.

Параметры

  • version (int / str) - номер publish версии
  • branches (bool / list) - список веток данного паблиша, для мультипаблиша.
  • version_log (bool / dict) - словарь лога данной версии, если его передавать, то branches и version не имеют смысла.
  • return (True, *r_data) или (False, comment)
  • структура r_data:
    • для мультипаблиша - словарь с ключами look_path, publish_path, значения - словари путей по веткам.
    • не для мультипаблиша - путь к файлу.
get_final_publish_file_path()

пути к top версии паблиш файлов

Параметры

  • return (True, (*r_data, version)) или (False, comment)
  • структура r_data:
    • для мультипаблиша - словарь с ключами look_path, publish_path, значения - словари путей по веткам.
    • не для мультипаблиша - путь к файлу.
get_new_publish_file_path([republish=False, source_log=False, source_version=False])

пути до файлов новой publish версии (и top, и версию)

Параметры

  • republish (bool) - репаблиш или нет.
  • source_log (bool / dict) - лог источника для паблиша (push или publish), при наличие этого лога версия source_version передавать не имеет смысла.
  • source_version (bool / str) - версия исходника (push или publish) если False - последняя версия.
  • return:
    • для мультипаблиш (true, (dict_path, version, source, branches)) или (False, comment):
      • структура dict_path:
        • ключи - top_path, top_look_path, version_path, version_look_path, source_path, source_look_path
        • значения - пути или словари путей по веткам.
      • version - новая версия
      • source - версия (push или publish) от куда делается паблиш.
      • branches - ветки которые паблишатся.
    • для не мультипаблиша (true, (dict_path, version, source)) или (False, comment):
      • структура dict_path:
        • ключи - top_path, version_path, source_path
        • значения - пути.
      • version - новая версия.
      • source - версия (push или publish) от куда делается паблиш.

Пути (old)

get_final_file_path([task_data=False])

Danger

Устарело!

получение пути к последней версии файла задачи.

Параметры:

  • task_data (dict) - требуется если не инициализирован task лучше не использовать
  • return_data - (True, final_file_path, asset_path) или (False, comment)
get_version_file_path(version[, task_data=False])

Danger

Устарело!

получение пути к файлу задачи по указанной версии.

Параметры:

  • version (str) - hex 4 символа
  • task_data (dict) - требуется если не инициализирован task лучше не использовать
  • return - (True, version_file_path) или (False, comment)
get_new_file_path([task_data=False])

Danger

Устарело!

получение пути к файлу задачи для новой версии

Параметры:

  • task_data (dict) - требуется если не инициализирован task лучше не использовать
  • return - (True, (new_dir_path, new_file_path))
get_publish_file_path(activity)

Danger

Устарело!

получение пути к паблиш версии файла активити.

Параметры:

  • activity (str) - активити
  • return - (True, publish_file_path) или (False, comment)

Операции commit/look/open/push/publish

commit(work_path, description[, branch=False, artist_ob=False])

запись новой рабочей версии в work директорию.

Note

заполнение: task.open_time, task.start. Выполнение log.artist_start_log() (создание, при отсутствии, артист лога на эту задачу).

Параметры:

  • work_path (unicode) - путь к текущему рабочему файлу
  • description (unicode) - коммент
  • branch (unicode) - наименование ветки, если не передавать - то master
  • artist_ob (artist) - если не передовать, то будет выполнен get_user()
  • return (True, path - путь до сохранённого файла) или (False, comment)
run_file(path[, viewer=False])

запуск файлов редактором или вьювером, создание tmp копии файла.

Параметры:

  • path (str) - путь до оригинального файла.
  • viewer (bool):
    • если True - открытие вьювером по оригинальному пути.
    • если False - открытие редактором tmp копии файла.
  • return (True, path) или (False, comment)
look([action='push', version=False, launch=True])

просмотр какой-либо версии файла для менеджеров (push, publish версии)

Note

если тип задачи из studio.multi_publish_task_types (например sketch) то запуска не будет, но будут возвращены пути.

Параметры:

  • action (str) - экшен из [push, publish]
  • version (bool / str / int) - версия, если False - то открывается последняя.
  • launch (bool) - False - возвращает только путь, иначе запуск редактором по расширению (для не скетч).
  • return (True, path) или (False, comment)
open_file([look=False, current_artist=False, tasks=False, input_task=False, open_path=False, version=False, launch=True])

откроет файл в приложении - согласно расширению.

Note

заполнение: task.time, task.full_time, artist_log.full_time

Параметры:

  • look (bool) - если True - то статусы меняться не будут, если False - то статусы меняться будут
  • current_artist (artist) - если не передавать, то в случае look=False - будет выполняться get_user() - лишнее обращение к БД
  • tasks (dict) - словарь задач данного артиста по именам (результат функции artist.get_working_tasks()). - нужен для случая когда look=False, при отсутствии будет считан - лишнее обращение к БД
  • input_task (task) - входящая задача - для open_from_input (если передавать - то имеется ввиду открытие из активити входящей задачи)
  • open_path (unicode/str) - путь к файлу - указывается для open_from_file (открытие из указанного файла)
  • version (bool/str) - версия рабочего файла активити - если указать то будет открытие рабочего файла этой версии
  • launch (bool) - если True - то будет произведён запуск приложением, которое установлено в соответствии с данным расширением файла (для универсальной юзерской панели и для менеджерской панели, при открытии на проверку), если False - то запуска не будет, но все смены статусов произойдут и будет возвращён путь к файлу - для запуска из плагина
  • return (True, file_path - куда открывается файл) или (False, coment)
push(description[, version=False, current_artist=False])
создание новой push версии на сервере студии, или выгрузка архива в облако для создания push версии на сервере студии (для аутсорса)

Attention

Для аутсорса пока не сделано, только для работников студии.

Параметры:

  • version (str/int) - work версия из которой делается push, не имеет смысла для мультипуша (sketch) там только из последней версии.
  • **return* (True, message) или (False, message)
push_file(description, current_file[, current_artist=False])

Danger

Устарело!

запись новой рабочей версии файла, сохранение версии + запись push лога.

Параметры:

  • description (str) - комментарий к версии
  • current_file (unicode/str) - текущее местоположение рабочего файла (как правило в темп)
  • current_artist (artist) - если не передавать, то будет выполняться get_user() - лишнее обращение к БД
  • return (True, new_file_path) или (False, comment)
publish_task([description=False, republish=False, source_version=False, source_log=False, current_artist=False])

перекладывание паблиш версии файлов (в том числе top версии), запись лога.

Параметры:

  • description (str) - не обязательный параметр, при отсутствии составляется автоматически - техническое описание: что, откуда, куда.
  • source_version (int, str) - версия push или publish (при репаблише), если False при паблише - то паблиш из последней пуш версии.
  • source_log (bool / dict) - лог версии источника, при его наличии source_version не имеет смысла.
  • current_artist (artist) - если не передавать, то будет выполняться get_user() - лишнее обращение к БД.
  • return (True, comment) или (False, comment)

Кеш

get_versions_list_of_cache_by_object(ob_name[, activity = 'cache', extension = '.pc2', task_data=False])

список версий кеша для меш объекта.

Параметры:

  • ob_name (str) - имя 3d объекта
  • activity (str) - по умолчанию “cache” (для blender) - для других программ может быть другим, например “maya_cache”
  • extension (str) - расширение файла кеша
  • task_data (dict) - читаемая задача(словарь), если False - значит предполагается, что task инициализирован. лучше не использовать
  • return:
    • (True, cache_versions_list) где cache_versions_list список кортежей - [(num (str), ob_name, path), …]
    • (False, коммент)
get_final_cache_file_path(cache_dir_name[, activity = 'cache', extension = '.pc2', task_data=False])

путь к последней версии кеша для меш объекта.

Параметры:

  • cache_dir_name (str) - “asset_name” + “_” + “ob_name
  • activity (str) - по умолчанию “cache” (для blender) - для других программ может быть другим, например “maya_cache
  • extension (str) - расширение файла кеша
  • task_data (dict) - читаемая задача, если False - значит предполагается, что task инициализирован. лучше не использовать
  • return - (True, path) или (False, коммент)
get_new_cache_file_path(cache_dir_name[, activity = 'cache', extension = '.pc2', task_data=False])

путь к новой версии кеша для меш объекта.

Параметры:

  • cache_dir_name (str) - “asset_name” + “_” + “ob_name
  • activity (str) - по умолчанию “cache” (для blender) - для других программ может быть другим, например “maya_cache
  • extension (str) - расширение файла кеша
  • task_data (dict) - читаемая задача, если False - значит предполагается, что task инициализирован. лучше не использовать
  • return - (True, (new_dir_path, new_file_path)) или (False, коммент)
get_version_cache_file_path(version, cache_dir_name[, activity = 'cache', extension = '.pc2', task_data=False])

путь к определённой версии файла кеша меш объекта.

Параметры:

  • version (str) - hex 4 символа
  • cache_dir_name (str) - “asset_name” + “_” + “ob_name
  • activity (str) - по умолчанию “cache” (для blender) - для других программ может быть другим, например “maya_cache”
  • extension (str) - расширение файла кеша
  • task_data (dict) - читаемая задача, , если False - значит предполагается, что task инициализирован. лучше не использовать
  • return_data - (True, path) или (False, коммент)

Создание задач

create_tasks_from_list(list_of_tasks)

создание задач ассета по списку.

Note

task.asset - должен быть инициализирован

Параметры:

  • list_of_tasks (list) - список задач (словари по tasks_keys, обязательные параметры: task_name)
  • return - (True, ‘ok’) или (False, коммент)
add_single_task(task_data)

создание одной задачи.

Note

task.asset - должен быть инициализирован.

Note

обязательные поля в task_data: activity, task_name, task_type, extension, если передать поля input, output - то будут установлены соединения и призведены проверки, и смены статусов

Параметры:

  • return - (True, ‘ok’) или (False, коммент)

Редактирование

change_activity(new_activity)

замена активити текущей задачи

Note

task - должен быть инициализирован

Параметры:

  • new_activity (str)
  • return_data - (True, task_data) или (False, коммент)
change_price(new_price)

замена стоимости текущей задачи

Note

task - должен быть инициализирован

Параметры:

  • new_price (float)
  • return - (True, task_data) или (False, коммент)
changes_without_a_change_of_status(key, new_data, task_data=False)

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

Параметры:

  • key (str) - ключ для которого идёт замена
    • допустимые ключи для замены:
      • activity
      • task_type
      • season
      • price
      • specification
      • extension
      • start
      • end
      • time
      • full_time
      • deadline
      • planned_time
      • level
  • new_data (по типу ключа) - данные на замену
  • task_data (bool/dict) - изменяемая задача, если False - значит предполагается, что task инициализирован. лучше не использовать
  • return - (True, ‘ok’) или (False, коммент)
add_readers(add_readers_list)

добавление проверяющих для текущей задачи.

Note

task - должен быть инициализирован

Параметры:

  • add_readers_list (list) - список никнеймов проверяющих
  • return - (True, readers(dict - в формате записи как в задаче), change_status(bool)) или (False, коммент)
make_first_reader(nik_name)

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

Note

task - должен быть инициализирован

Параметры:

  • nik_name (str) - никнейм артиста
  • return - (True, readers(dict - в формате записи как в задаче)) или (False, коммент)
remove_readers(remove_readers_list)

удаляет проверяющего из списка проверяющих, а также удалит его как первого проверяющего, если он таковой.

Note

task - должен быть инициализирован

Параметры:

  • remove_readers_list (list) - список никнеймов удаляемых из списка читателей
  • return - (True, readers(dict - в формате записи как в задаче), change_status(bool)) или (False, коммент)
change_artist(new_artist)

замена артиста и возможная замена при этом статуса.

Note

task - должен быть инициализирован

Параметры:

  • new_artist (str/artist) - nik_name или artist (экземпляр), лучше передавать экземпляр для экономии запросов
  • return_data - (True, (new_status, int(artist_outsource))) или (False, коммент)
change_input(new_input)

изменение входа не сервисной задачи, с вытикающими изменениями статусов.

Note

task - должен быть инициализирован

Параметры:

  • new_input (str) - имя новой входящей задачи
  • return - (True, (new_status, old_input_task_data, new_input_task_data)) или (False, коммент)
accept_task()

приём задачи, статус на done (со всеми вытикающими сменами статусов), создание паблиш версии, заполнение artist_tasks_log (finish, price), выполнение хуков.

Note

task - должен быть инициализирован

Параметры:

  • return - (True, ‘ok’) или (False, коммент)
readers_accept_task(current_artist)

приём задачи текущим проверяющим, изменение статуса в task.readers, если он последний то смена статуса задачи на done (со всеми вытикающими сменами статусов).

Note

task - должен быть инициализирован.

Параметры:

  • current_artist (artist) - экземпляр класса артист, должен быть инициализирован - artist.get_user()
  • return - (True, ‘ok’) или (False, коммент)
close_task()

закрытие задачи, смена статуса на close (со всеми вытикающими сменами статусов)

Note

task - должен быть инициализирован

Параметры:

  • return - (True, ‘ok’) или (False, коммент)
rework_task(current_user)

отправка задачи на переработку из статуса на проверке, при этом проверяется наличие свежего (последние 30 минут) коментария от проверяющего.

Note

task должен быть инициализирован

Параметры:

  • current_user (artist) - экземпляр класса артист, должен быть инициализирован - artist.get_user() - если False - то задача отправится на переделку без проверки чата (для тех нужд)
  • return - (True, ‘ok’) или (False, коммент)
return_a_job_task([task_data=False])

возврат в работу задачи из завершённых статусов (done, close).

Параметры:

  • task_data (dict) - изменяемая задача, если False - значит предполагается, что task инициализирован
  • return - (True, new_status) или (False, коммент)
change_work_statuses(change_statuses)

тупо смена статусов в пределах рабочих, что не приводит к смене статусов исходящих задач.

Note

task - должен быть инициализирован

Параметры:

  • change_statuses (list) - [(task_ob, new_status), …]
  • return_data - (True, {task_name: new_status, … } *) или (*False, коммент)
to_checking()

отправка текущей задачи на проверку

Note

task должен быть инициализирован, обёртка на task.change_work_statuses()

Параметры:

  • return - (True, ‘ok’) или (False, коммент)

Служебные

Хуки

_pre_commit(work_path, save_path)

вызов одноимённого хука. Вызывается из commit

Параметры:

  • work_path (unicode) - путь текущего рабочего файла
  • save_path (unicode) - путь сохранения файла
  • return - (True, ‘Ok!’) или (False, coment)
_post_commit(work_path, save_path)

вызов одноимённого хука. Вызывается из commit

Параметры:

  • work_path (unicode) - путь текущего рабочего файла
  • save_path (unicode) - путь сохранения файла
  • return - (True, ‘Ok!’) или (False, coment)
Чтение
_read_task(task_name)

возврат словаря задачи (по ключам из tasks_keys, чтение БД) по имени задачи. если нужен объект используем task.init(name).

Параметры:

  • task_name (str) - имя задачи
  • return - (True, task_data(словарь)) или (False, коммент)
Смены статусов
_service_input_to_end(assets)

изменение статуса текущей сервис задачи (задача инициализирована), по проверке статусов входящих задач. и далее задач по цепочке.

Note

данный экземпляр task инициализирован.

Параметры:

  • assets (dict) - словарь всех ассетов по всем типам (ключи - имена, данные - ассеты экземпляры) - результат функции asset.get_dict_by_name_by_all_types()
  • return - (True, new_status) или (False, коммент)
_from_input_status(input_task[, this_task=False])

возвращает новый статус задачи (текущей - если this_task=False), на основе входящей задачи, ?? не меняя статуса данной задачи.

Параметры:

  • input_task (task / False) входящая задача ?? зачем вообще передавать, если есть есть атрибут input
  • this_task (task / False) - если False - то предполагается текущая задача
  • return - new_status
_this_change_from_end([this_task=False, assets = False])

замена статусов исходящих задач при изменении статуса текущей задачи с done или с close.

Параметры:

  • this_task (task / False) - если False то текущая задача
  • assets (dict) - словарь всех ассетов по всем типам (ключи - имена, данные - ассеты (объекты)) - результат функции asset.get_dict_by_name_by_all_types()
  • return - (True, ‘Ok!’) / или (False, comment)
_this_change_to_end(self[, assets = False])

замена статусов исходящих задач при изменении статуса текущей задачи на done или close.

Note

данный экземпляр task инициализирован

Параметры:

  • assets (dict) - словарь всех ассетов по всем типам (ключи - имена, данные - ассеты (объекты)) - результат функции asset.get_dict_by_name_by_all_types()
  • return - (True, ‘Ok!’) / или (False, comment)
_service_add_list_to_input(input_task_list)

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

Note

данный экземпляр task инициализирован

Параметры:

  • input_task_list (list) - список задач (экземпляры)
  • return - (True, (new_ststus, append_task_name_list)) или (False, коммент)
_service_add_list_to_input_from_asset_list(asset_list[, task_data=False])

добавление задач во входящие сервисной задаче из списка ассетов. Какую именно добавлять задачу из ассета, определяет алгоритм.

Параметры:

  • asset_list (list) - подсоединяемые ассеты (словари, или экземпляры)
  • task_data (dict) - изменяемая задача, если False - значит предполагается, что task инициализирован лучше не использовать
  • return - (True, (this_task_data, append_task_name_list)) ?? пересмотреть или (False, коммент)
_service_remove_task_from_input(removed_tasks_list[, task_data=False, change_status = True])

удаление списка задач из входящих сервисной задачи.

Параметры:

  • removed_tasks_list (list) - содержит словари удаляемых из инпута задач ?? переработать - заменить на объекты
  • task_data (dict) - изменяемая задача, если False - значит предполагается, что task инициализирован лучше не использовать
  • return - (True, (new_status, input_list)) или (False, коммент)
    • new_status (str)- новый статтус данной задачи
    • input_list (list) - фактически task.input
_service_change_task_in_input(removed_task_data, added_task_data[, task_data=False])

замена входящей задачи одной на другую для сервисной задачи.

Параметры:

  • removed_task_data (dict) - удаляемая задача ?? или экземпляр - возможно переработать - заменить на объекты
  • added_task_data (dict) - добавляемая задача ?? или экземпляр - возможно переработать - заменить на объекты
  • task_data (dict) - изменяемая задача, если False - значит предполагается, что task инициализирован. лучше не использовать
  • return - (True, (this_task_data, append_task_name_list)) или (False, коммент)
Прочее
_set_branches(branches)

заполнение атрибута класса branches

Параметры:

  • branches (list) - список веток получаемый при выполнении log.read_log()
  • return - None

Class Log

log(studio)

level = ‘studio’/’project’

Данные хранимые в БД (имя столбца : тип данных):

# level: project
# file_name: .tasks_logs.db
# table_name: [asset id]:[activity name]:logs
logs_keys = {
  'version': 'text',              # hex 4 символа
  'date_time': 'timestamp',       # время и дата записи
  'activity': 'text',             # ативити задачи
  'task_name': 'text',            # имя задачи
  'action': 'text',               # тип записи из log.log_actions
  'artist': 'text',               # nik_name артиста, кто делает запись
  'description': 'text',          # коментарий
  'source': 'json',               # для push - версия коммита источника (в случае sketch - список версий по всем веткам, порядок совпадает с порядком записи веток в branch), для publish - версия push источника.
  'branch' : 'text',              # ветка - в случае push, publish (для sketch - список веток).
  'time' : 'integer',             # время затраченное на commit, ед. измерения секунда.
  }

# level: studio
# file_name: .artists_logs.db
# table_name: [nik name]_tasks_logs
artists_logs_keys = {
  'project_name': 'text',
  'task_name': 'text',
  'full_time': 'integer',         # суммарное время затраченое артистом на задачу, ед. измерения секунда. Суммируется при каждом коммите.
  'price': 'real',                # сумма начисленная за выполнение задачи. вносится по принятию задачи.
  'start': 'timestamp',           # дата-время создания записи, запись создаётся при первом open задачи.
  'finish': 'timestamp',          # дата-время принятия задачи.
  }

Создание экземпляра класса:

import edit_db as db

project = db.project()
asset = db.asset(project)
task = db.task(asset)

log = db.log(task) # task - обязательный параметр при создании экземпляра log
# доступ ко всем параметрам и методам принимаемого экземпляра task - через log.task

Атрибуты

log_actions:(list) - [‘commit’, ‘push’, ‘publish’, ‘open’, ‘report’,’recast’ , ‘change_artist’, ‘close’, ‘done’, ‘return_a_job’, ‘send_to_outsource’, ‘load_from_outsource’]
task:(task) - экземпляр Class Task принимаемый при создании экземпляра класса, содержит все атрибуты и методы Class Task.

Методы

Tasks logs

write_log(logs_keys[, artist_ob=False])

запись лога активити задачи.

Note

self.task - должен быть инициализирован

Параметры:

  • logs_keys (dict) - словарь по studio.logs_keys - обязательные ключи: description, version, action
  • artist_ob (bool/artist) - если False - значит создаётся новый объект artist() и определяется текущий пользователь
  • return - (True, ‘Ok!’) или (False, comment)
read_log([action=False])

чтение лога активити задачи.

Note

заполняет атрибут класса self.task.branches

Параметры:

  • action (bool / str / list) если False - то возврат для всех action, если list - то будет использован оператор WHERE OR тоесть возврат по всем перечисленным экшенам.
  • branch (bool / str / unicode) - фильтр по веткам, если False - то вернёт логи для всех веток.
  • return - (True, ([список словарей логов, сотрирован по порядку], [список наименований веток])) или (False, comment)
get_push_logs([task_data=False, time_to_str = False])

возврат списка push логов для задачи.

Note

Возможно устаревшая

Параметры:

  • task_data (bool/dict) - если False - значит читается self.task лучше не использовать
  • time_to_str (bool) - если True - то преобразует дату в строку
  • return - (True, ([список словарей логов, сотрирован по порядку], [список наименований веток])) или (False, comment)

Artists logs

artist_start_log([artist_ob=False])

создание, при отсутствии, лога артиста по данной задаче, заполнение artist_log.start

Параметры:

  • artist_ob (bool/artist) - если False - значит создаётся новый объект artist и определяется текущий пользователь.
  • return - (True, ‘ok!’) или (False, comment)
artist_read_log([all=False, artist_ob=False])

чтение логов артиста.

Параметры:

  • all (bool) - если True - то все логи этого артиста, если False - То только по этой задаче.
  • artist_ob (bool/artist) - если False - значит создаётся новый объект artist и определяется текущий пользователь.
  • return:
    • all = True - (True, [список логов - словари])
    • all = False - (True, {log})
    • или (False, coment)
artist_write_log(keys[, artist_ob=False])

внесение изменений в лог артиста по задаче (кроме параметров из no_editable_keys)

Параметры:

  • keys (dict) - словарь данных на замену по ключам artists_logs_keys
  • artist_ob (bool/artist) - если False - значит создаётся новый объект artist и определяется текущий пользователь.
  • return - (True, ‘ok!’) или (False, comment)
artist_add_full_time(time[, artist_ob=False])

добавление временик full_time.

  • time (float) - время затраченное на commit (секунды)
  • artist_ob (bool/artist) - если False - значит создаётся новый объект artist и определяется текущий пользователь.
  • return - (True, ‘ok!’) или (False, comment)

Cameras logs

camera_write_log(artist_ob, comment, version[, task_data=False])

запись лога для сохраняемой камеры шота.

Параметры:

  • artist_ob - (artist) - объект artist, его никнейм записывается в лог
  • comment (str) - комментарий
  • version (str/int) - номер версии <= 9999 ``возможно должно быть автоопределение ``
  • task_data (bool/dict) - если False - значит читается self.task лучше не использовать
  • return - (True, ‘Ok!’) или (False, comment)
camera_read_log([task_data=False])

чтение логов камеры шота.

Параметры:

  • task_data (bool/dict) - если False - значит читается self.task лучше не использовать
  • return - (True, [{camera_log}, … ]) (возвращаемый список сортирован по порядку) или (False, comment)

Playblasts logs

playblast_write_log(artist_ob, comment, version[, task_data=False])

запись лога создаваемого плейбласта шота.

Параметры:

  • artist_ob - (artist) - объект artist, его никнейм записывается в лог
  • comment (str) - комментарий
  • version (str/int) - номер версии <= 9999 ``возможно должно быть автоопределение ``
  • task_data (bool/dict) - если False - значит читается self.task лучше не использовать
  • return - (True, ‘Ok!’) или (False, comment)
playblast_read_log([task_data=False])

чтение логов плейбластов шота.

Параметры:

  • task_data (bool/dict) - если False - если False - значит читается self.task лучше не использовать
  • return - (True, [{playblast_log}, … ]) (возвращаемый список сортирован по порядку) или (False, comment)

Class Chat

chat(studio)

level = ‘project’

Данные хранимые в БД (имя столбца : тип данных):

chats_keys = {
  'message_id':'text',
  'date_time': 'timestamp',
  'date_time_of_edit': 'timestamp',
  'author': 'text',
  'topic': 'json',
  'color': 'json',
  'status': 'text',
  'reading_status': 'json',
  }

Создание экземпляра класса:

import edit_db as db

project = db.project()
asset = db.asset(project)
task = db.task(asset)

chat = db.chat(task) # task - обязательный параметр при создании экземпляра chat
# доступ ко всем параметрам и методам принимаемого экземпляра task - через chat.task

Атрибуты

message_id:(str) -
date_time:(timestamp) - время и дата создания записи
date_time_of_edit:
 (timestamp) - время и дата изменения записи
author:(str) - nik_name автора записи
topic:(dict) - словарь данных сообщения, ключи - номера строк в ковычках, значения - список из трёх значений: путь к изображению, путь к иконке изображения, сообщение. {‘num_line’: [path_to_img, path_to_icon, message], …}
color:(list) - [r,g,b] значения цвета от 0 до 1.
status:(str) -
reading_status:(dict) - ??
task:(task) - экземпляр Class Task принимаемый при создании экземпляра класса, содержит все атрибуты и методы Class Task.

Методы

record_messages(input_keys[, artist_ob=False])

запись сообщения в чат для задачи.

Note

self.task - должен быть инициализирован

Параметры:

  • input_keys (dict) - словарь по studio.chats_keys - обязательные ключи: ‘topic’,’color’,’status’, ‘reading_status’ ??????? список обязательных полей будет пересмотрен
  • artist_ob (bool/artist) - если False - значит создаётся новый объект artist и определяется текущий пользователь
  • return - (True, ‘Ok!’) или (False, comment)
read_the_chat([message_id=False, sort_key=False, reverse = False])

чтение сообщений чата задачи.

Note

self.task - должен быть инициализирован

Параметры:

  • message_id (hex/bool) - id читаемого сообщения, если False - то читаются все сообщения чата
  • sort_key (str) - ключ по которому сортируется список. Если False то сортировки не происходит
  • reverse (bool) - пока никак не используется
  • return - (True, [messages]) или (False, comment)
edit_message(message_id, new_data[, artist_ob=False])

изменение записи автором сообщения.

Note

self.task - должен быть инициализирован

Параметры:

  • artist_ob (bool/artist) - если False - значит создаётся новый объект artist и определяется текущий пользователь
  • message_id (hex) - id изменяемого сообщения
  • new_data (dict) - словарь данных на замену - topic, color
  • return - (True, ‘Ok!’) или (False, comment)

Class List_of_assets

list_of_assets(studio)

level = ‘project’

Запись и редактирование временного списка ассетов {имя, тип, set_of_tasks} из редактора создания асетов. Запись в формат json, после создания ассетов, список очищается.

Данные хранимые в БД (имя столбца : тип данных):

list_of_assets_keys = [
  'asset_name', # text
  'asset_type', # text
  'set_of_tasks', # text
  ]

Создание экземпляра класса:

import edit_db as db

project = db.project()
group = db.group(project)

list_of_assets = db.list_of_assets(group) # group - обязательный параметр при создании экземпляра list_of_assets
# доступ ко всем параметрам и методам принимаемого экземпляра group - через list_of_assets.group

Атрибуты

asset_name:(str) - имя ассета
asset_type:(str) - тип ассета
set_of_tasks:(str) - название набора задач
group:(group) - экземпляр Class Group принимаемый при создании экземпляра класса, содержит все атрибуты и методы Class Group.

Методы

save_list(rows[, group_name = False])

запись списка ассетов.

Параметры:

  • rows (list) - список ассетов (словари по list_of_assets_keys)
  • group_name (str) - имя группы, не требуется если группа инициализирована лучше не использовать
  • return (True, ‘ok’) или (False, comment)
get_list()

чтение всех данных в словарь по группам.

Параметры:

  • return (True, {имя группы: [список ассетов(словари), …], …}) или (False, comment)
get([group_name = False])

чтение списка ассетов данной группы.

Параметры:

  • group_name (str) - имя группы, не требуется если группа инициализирована лучше не использовать
  • return (True, [список ассетов (словари)]) или (False, comment)
remove([group_name = False])

удаление списка ассетов данной группы.

Параметры:

  • group_name (str) - имя группы, не требуется если группа инициализирована лучше не использовать
  • return (True, ‘ok’) или (False, comment)

Examples

Здесь содержится необходимый минимум для написания плагина lineyka пользовательского уровня: доступ к задачам, доступ к файлам задач, доступ к чату, отправка задач на проверку (для приложения поддерживающего python)

Требования

  • модуль плагина должен содержать следующие файлы из lineyka:
    • edit_db.py
    • lineyka_chat.py
    • run_chat.py
    • run2_chat.py
  • в python приложения или системы должен быть установлен PySide
    • версия python 2.7+
  • в сиситеме должен быть установлен imagemagick

Создание тестового проекта

Запуск и тесты пользовательского плагина имеет смысл лишь при созданном проекте, ассетах, задачах и назначенных на них исполнителях, чтобы создать всё это не вдаваясь во все тонкости работы с менеджерской панелью предлагаются нижеследующие команды, которые надо выполнить в терминале:

Note

предполагается что git установлен

# клонирование lineyka в домашнюю директорию
cd ~
git clone https://github.com/volodya-renderberg/lineyka.git

# переключение ветки
cd ~/lineyka
git checkout database

# создание ярлыков рабочего стола (linux)
python setup.py

# создание проекта, ассетов, задач, назначение исполнителей на задачи
python test.py
Студия, проект и ассеты создаются в системной tmp директории:
  • проект - Project
  • группы - props obj, locations location
  • ассеты - topor, vedro, (props) location_01 (locations)
  • исполнители - vofka root, dimka, slavka users (все пароли 1234)

Команды python api

Note

все методы как правило возвращают кортежи, первый элемент которых булевское значение, если оно True - то выполнение процедуры удалось, если False - то выполнение не удалось, и вторым элементом кортежа, в этом случае, будет сообщение о данной ошибке. Более подробно о каждой процедуре смотрите в описании методов классов.

Студия

подробнее о Class Studio

import edit_db as db

# создание экземпляра класса
# при создании экземпляра выполняется чтение настроек, заполнение поллей класса и экземпляра.
# создание экземпляра обязательно при запуске полагина.
studio = db.studio()

# изменение студийных настроек:
# (1) установка директории студии, где будет хранится метадата
studio.set_studio(path_to_studio_folder)
# после выполнения этой процедуры бывает лучше перезапустить плагин

# (2) определение пути до файла convert.exe, приложения *imagemagick* - для линукса это '/usr/bin/convert'
path_to_convert_exe = '/usr/bin/convert' # или другой путь
studio.set_convert_exe_path(path_to_convert_exe)

# (3) определение пути до tmp директории, где будут находится временные версии рабочих файлов
# по умолчанию это системная tmp директория
# является настройкой пользователя, определяется по его желанию
studio.set_tmp_dir(path) # path путь до пользовательской tmp директории

Артист

подробнее о Class Artist

Авторизация
artist = db.artist() # создание экземпляра

artist.get_user() # инициализация текущего пользователя - заполнение полей экземпляра.
                  # если нет авторизованного пользователя, то artist.nikname останется False
                  # тогда надо будет выполнить авторизацию.

artist.login_user(nik_name, password) # авторизация пользователя
Списки задач артиста
# получение списка задач назначенных на исполнение артисту (для данного проекта)
task_list = artist.get_working_tasks(project, statuses=artist.working_statuses.append('checking'))[1] # project - это экземпляр класса project
                                                                                                      # task_list - это список экземпляров класса task

# получение списка задач назначенных на проверку артисту (для данного проекта)
task_list = artist.get_reading_tasks(project, statuses='checking')[1] # project - это экземпляр класса project
                                                                      # task_list - это список экземпляров класса task

Ассет

подробнее о Class Asset

подробнее о Class Group

Списки ассетов
# (1) создание экземпляра
asset = db.asset(project) # project - это экземпляр класса project

# (2) получение списка ассетов по типу
assets_list = asset.get_list_by_type(asset_type = type)[1] # type - тип из studio.asset_types
                                                           # assets_list - это список экземпляров класса asset

# (3) получение списка ассетов группы

# (3.1) получение списка групп
group = db.group(project) # project - это экземпляр класса project
groups_list = group.get_list(f = list_of_types)[1] # list_of_types - это список типов ассетов из studio.asset_types
                                                   # groups_list - это список экземпляров групп

# (3.2) получение списка ассетов группы
assets_list = asset.get_list_by_group(group)[1] # group - это экземпляр класса group из groups_list, полученный выше
                                                # assets_list - это список экземпляров класса asset
Списки задач ассетов
task = db.task(asset) # asset - это экземпляр класса asset, любой из списка assets_list, полученный выше

tasks_list = task.get_list()[1] # tasks_list - это список задач данного ассета, экземпляры класса task

Note

Среди задач будут и задачи с типом ‘service’, они не содержат файловой структуры и не используются артистом.

Задачи

подробнее о Class Task

Создание экземпляра
task = db.task(asset) # asset - это экземпляр класса asset
Открытие или просмотр файла задачи
Отличие просмотра от открытия файла задачи
  • Открытие (open) - открываются рабочие файлы только тех задач, которые назначенны на авторизированного пользователя (из списка рабочих задач артиста) (см. Списки задач артиста ). Статус открываемой задачи меняется на work, и если у данного пользователя есть какая-либо другая задача со статусом work - её статус меняется на pause
  • Просмотр (look) - открываются файлы любых задач, не зависимо от пользователя. Статусы задач не меняются. Используется проверяющими или для получения чего либо из файла задачи.

Note

В обеих случаях (открытие или просмотр) файл из активити задачи будет скопирован в studio_tmp директорию (определяется в studio.set_tmp_dir()) и открыт от туда, таким образом оригиналы версий рабочих файлов защищены от нежелательных правок.

Открытие или просмотр последней версии рабочего файла задачи
# запуск последней версии рабочего файла задачи

# (1) получение пути к файлу (и смена статусов для open):
# (1.1) open
open_path = task.open_file(launch=False)[1] # будут произведены все смены статусов, последняя версия файла активити будет скопирована в tmp
                                            # open_path - это путь до копии файла в tmp
                                            # task - экземпляр данной задачи
# (1.2) look
look_path = task.open_file(look=True, launch=False)[1] # смены статусов не будет, последняя версия файла активити будет скопирована в tmp
                                            # look_path - это путь до копии файла в tmp
                                            # task - экземпляр данной задачи
# (2) Далее надо открыть look_path или open_path методом данного приложения.
Открытие или просмотр произвольной версии рабочего файла задачи
# запуск произвольной версии рабочего файла задачи

# (1) получение списка версий (чтение push логов)
log = db.log(task) # создание экземпляра класса log
                   # task - экземпляр текущей задачи

logs_list = log.get_push_logs()[1] # logs_list - это список словарей [log_dict, ...] по ключам studio.logs_keys
                                   # каждый словарь log_dict - это и есть запись лога хранимая в БД
                                   # данные этих словарей можно отображать в таблице, для выбора версии
                                   # версия лога - это значение log_dict['version'] - (hex 4 символа)

# (2) получение пути к файлу (и смена статусов для open):
# (2.1) open
open_path = task.open_file(version=log_dict['version'], launch=False)[1] # будут произведены все смены статусов, указанная версия файла активити будет скопирована в tmp
                                                                         # open_path - это путь до копии файла в tmp
                                                                         # task - экземпляр данной задачи
                                                                         # log_dict - словарь лога, полученный в процедуре log.get_push_logs() (пункт 1)
# (2.2) look
look_path = task.open_file(version=log_dict['version'], look=True, launch=False)[1] # смены статусов не будет, указанная версия файла активити будет скопирована в tmp
                                                                                    # look_path - это путь до копии файла в tmp
                                                                                    # task - экземпляр данной задачи
                                                                                    # log_dict - словарь лога, полученный в процедуре log.get_push_logs() (пункт 1)

# (3) Далее надо открыть look_path или open_path методом данного приложения.

подробнее о Class Log

Открытие или просмотр файла задачи из указанного файла
# запуск рабочего файла задачи по указанному пути (this_path)

# (1) копирование указаного файла в tmp и получение пути (смена статусов для open):
# (1.1) open
open_path = task.open_file(open_path=this_path, launch=False)[1] # будут произведены все смены статусов, последняя версия файла активити будет скопирована в tmp
                                            # open_path - это путь до копии файла в tmp
                                            # this_path - это путь до указанного файла
                                            # task - экземпляр данной задачи
# (1.2) look
look_path = task.open_file(open_path=this_path, look=True, launch=False)[1] # смены статусов не будет, последняя версия файла активити будет скопирована в tmp
                                            # look_path - это путь до копии файла в tmp
                                            # this_path - это путь до указанного файла
                                            # task - экземпляр данной задачи
# (2) Далее надо открыть look_path или open_path методом данного приложения.
Push новой версии рабочего файла
push_path = task.push_file(description, current_file, current_artist=current_artist)[1] # текущий рабочий файл будет скопирован в новую версию активити данной задачи
                                            # push_path - путь до созданного файла в директории активити задачи
                                            # task - экземпляр данной задачи
                                            # description - комментарий к версии (обязательный параметр)
                                            # current_file - путь к текущему рабочему файлу (получить методом данного приложения)
                                            # current_artist - текущий пользователь, экземпляр класса artist
Отправка задачи на проверку
task.to_checking() # task - экземпляр текущей задачи
                   # статус задачи поменяется на 'checking'
                   # данная задача будет отображаться в списке на проверку в user интерфейсе
Отправка на переделку или приём задачи проверяющим

Note

Речь идёт о задачах из списка на проверку данного артиста: Списки задач артиста

task.rework_task(current_artist) # отправка задачи на переделку
                                 # при этом проверяется наличие свежего (последние 30 минут) коментария в чате от проверяющего
                                 # task - экземпляр данной задачи
                                 # current_artist - экземпляр класса artist (текущий юзер)
                                 # статус задачи поменяется на 'recast'

task.readers_accept_task(current_artist) # приём задачи проверяющим
                                 # task - экземпляр данной задачи
                                 # current_artist - экземпляр класса artist (текущий юзер)
                                 # если данный проверяющий единственный или последний - то статус задачи поменяется на 'done'
                                 # если проверяющий не последний - то изменится лишь статус проверки

Чат

Запуск чата задачи:
Для случая когда python приложения содержит библиотеку PySide
import sys
import run_chat

sys.call_tracing(run_chat.run, (task,)) # запустится интерфейс(PySide) чата задачи
                                        # task - экземпляр текущей задачи
Для случая когда python приложения не содержит PySide

Note

PySyde должен быть установлен в python системы.

import sys
import run2_chat

sys.call_tracing(run2_chat.run, (project.name, task.task_name)) # запустится интерфейс(PySide) чата задачи
                                        # project - экземпляр текущего проекта
                                        # task - экземпляр текущей задачи

Specifications:

Contents:

Branch

Общее

  • Атрибут log.branch (json)
  • master по умолчанию
  • у всех кроме task, только master
  • Создаются в Gui
  • Удалять нельзя
  • При комммите предлагается ветка последнего коммита.
  • Параметр branch передаётся при всех трёх операциях: commit, push, publish.

Push

  • для sketch:
    • тип данных list - список передаваемых веток.
    • не передаёт ветки содержащие символ # предполагается, что это тестовые ветки.
    • Имя файла в активити asset_name#branch_name.ext
    • Подгрузка на bg модели из ветки master
  • для остальных активити:
    • тип данных str - имя ветки.
    • имя файла asset_name.ext

Publish

  • branch перезаписывается.

Методы - изменения

  • read_log - возвращает (True, [список словарей логов, список имён веток]).
  • write_log -
    • Если branch = False - запись в master.

Commit Pull Push Publish

Общее

  • Все экшены пишутся в один лог Class Log.
  • Уйти от 16-тиричной нумерации версий ?

Commit

Cоздание локальной версии.

  • место хранения work директория, определяется в set studio, метод studio.set_work_folder()

Pull

Загрузка push версии в локальную work директорию.

  • Нумерация версий общая с commit.

Работник студии:

  • Заливка из локального сервера студии.

Аутсорс:

  • Заливка из временного файла облака.
  • Требуется предварительная загрузка в облако менеджером.
  • Удаляется из облака после выполнения pull
  • Скетч:
    • Заливаются все ветки, каждая в свою новую версию по порядку.
  • Не скетч:
    • Заливается в новую версию.

Push

Создание версии на сервере.

  • операция не создаёт новый commit
  • для sketch - сразу создавать png
  • загружается последняя или кастомная версия указанной ветки из work
    • для sketch - только последние версии всех веток подлежащих пушингу.
  • проверка на совпадение с последней push версией по атрибуту source
    • для sketch - проверка на совпадение по всем версиям последнего пуша.
  • место хранения в project/assets
  • нумерация отличается от commit (своя параллельная нумерация).
  • атрибут source - локальная версия откуда был push
    • для sketch: - список версий по каждой ветки откуда пуш, порядок совпадает с порядком записи наименований веток в branch
  • branch - соответствует локальному.
    • для sketch: - список передаваемых веток.
Файловая структура:
  • Файлы в директориях версий:
    • asset_name.ext (для всех что не sketch)
    • asset_name#branch_name.ext (для sketch)
    • asset_name#branch_name.png (для sketch) - создавать тут для облегчения просмтотров, в паблише лишь перезапись.

Publish

Публикация финальной версии на сервере.

  • последняя или по выбору push версия
  • нумерация отличается от push (своя параллельная нумерация).
  • атрибут source - номер push версии
  • атрибут branch - записывается из push
  • самостоятельное выполнение, не связанное с приёмом задачи.
  • приёмка задачи не запускает publish
Файловая структура:
  • Сверху файлы последней версии:
    • asset_name.ext (для всех что не sketch)
    • asset_name#branch_name.ext (для sketch)
    • asset_name#branch_name.png (для sketch)
  • Директории:
    • version_num - содержат весь набор файлов версии.

Time Logs

Атрибуты в task:

  • open_time:
    • не имеет значения записывается или нет в бд
    • время открытия задачи, назначается в функции open
  • time - стнет json - {юзер: время (итоговое)}
  • full_time - Время общее всех юзеров

task_log (project-level)

На самом деле лог активити ассета, с фильтром по задачам.

  • Добавить в Class Log затраченое время - атрибут time +
    • запись при каждом коммите +
    • при открытии задачи заполнять атрибут task.open_time +
    • при комите записывать разницу в commit_log.time и обновлять task.open_time временем коммита. +
    • после внесения записи в commit_log.time суммирование в: task.time, task.full_time, artist_log.full_time +

artist_task_log (studio-level)

Note

Class Log добавить методы для чтения-записи, принимающие объект artist. +

  • table_name: [nik_name]_tasks_logs +
  • table_columns: [project_name, task_name, full_time, price, start, finish] (словарь studio.artists_logs_keys) +
  • запись создаётся при первом выполнении task.open и далее редактируется: +
    • start - время создания записи.
    • full_time - ссумируется при каждом коммите, ед. измерения секунда.
    • price - вносится по принятию задачи (task.accept_task()).
    • finish - вносится по принятию задачи (task.accept_task()) (Время принятия, чтобы не было проблем с оплатой за период).

artist_time_log (studio-level)

  • table_name: [nik_name]_time_logs
  • table_columns: [project_name, task_name, date, time] (словарь studio.artists_time_logs_keys)
  • все записи создаются вручную, с привязкой к задаче.
    • нужно создание и редактирование записей.
    • чтение:
      • чтение по данной таблице (с фильтрами: проект, временной интервал, задача?).
      • глобальное чтение для вывода в юзер_тайм_лог (с фильтрами: проект, временной интервал).
        • список задач из artist_tasks_logs
        • чтение task_log по полученному списку задач
        • чтение artist_time_log
        • составление общей таблицы

Statistics

Артист:

  • Возможность доставать информацию:
    • Заработок за временной промежуток
    • Перечень задач и затраченное время
    • Сравнивать кто эффективнее (исполнители)
    • Сравнивать эффективность аутсорс к студии
  • Добавить параметры артисту (для расчёта бюджета):
    • rate (тариф) (json) , данные - [вид оплаты (сдельная, понедельная, помесячная), ставка (для повремённой), налоговый коэффициент]
    • efficiency (json) коэффициэнты эффективрости, дифференциация по типам и уровням сложности задач
      • упрощённая формула - awerage(planned_time/time),

Ассет:

  • расчёт ресурсов по типам и уровням сложности. Надо ли выделять во что-то отдельное?

Проект:

  • Расчёт дедлайна.
  • Расчёт требуемых ресурсов (люди, финансы) для изменения дедлайна.
  • Планирование бюджета.
  • Составление и визуализация графика.
  • Визуализация следования графику.

Обще студийное:

  • Распределение ресурсов по проектам

Тарификация задач по типам и уровням:

  • Новая таблица данных: [task_type/level/level_description/planed_time/price]
    • Не првязывать к set_of_tasks, к созданию ассета (только к task_manager)
    • Хранение в БД.
    • Студийная (дефолтная) таблица (хранится в .json ?) - копируется в проект и там редактируется
    • Наличие редактора в studio_manager из project_manager или отдельный - level_manager. ??
    • Любое количество уровней, с комментами
    • Возможность возврата к дефолту
    • Возможность импорта из другого проекта
  • в gui:
    • Меню для выбора level в task_manager.
      • должно быть отображение всей инфы.
    • При выборе уровня, заполняется и level и planned_time, и price, при этом все эти параметры можно менять отдельно вручную.
  • Добавить в task атрибут level
  • Технически:
    • методы чтения и редактирования добавить в Class Project
    • в процедуру создания нового проекта включить поиск дефолтной таблицы и при её наличии - копировать данные в проектную таблицу.

Общее линеечное:

  • Выведение начальных средних коэффициэнтов.???
  • Расчёт изначального бюджета по хронометражу и типу фильма.
    • Создать начальные цены.
    • Перерасчитывать по факту, выводить среднее.

Time Zone

Запись в utc.
  • Во всех write функциях использовать datetime.datetime.utcnow()
При чтении конвертировать в локальную таймзону.
  • В database.read() - переводить utc в локальное время, в том же цикле, где форматируется json.
import tzlocal
import pytz

utc=pytz.utc
tz_local=tzlocal.get_localzone()

# в цикле
# локализация времени из базы данных к utc
utc_datetime=utc.localize(datetime_from_database)
# конвертирование ко времени локальной таймзоны
local_datetime=utc_datetime.astimezone(tz_local)

Input Output

  • Все операции по взаимосвязям переместить в task_manager.
  • Скрыть все действия с сервисными задачами.
  • Операции из контекстного меню и из панельки.
  • Хороший поиск.
  • Удалить использование all_input.
    • Назначение входящих напрямую.
    • Общий список входящих читать по инпутам всех задач.
  • Список входящих задач:
    • если на входе сервисная, то инпут сервисной.
    • если не сервисная, то она самая.

Task

New Attributes

source

Note

параметр (json) Список имён задач - исходников.

  • Запись только в принимающей задаче.

  • Подтягивать в сцену объекты в зависимости от типа ассета, задачи и активити.
    • Редактируемый словарь:
      { app_name :

      { this_task_type : { source_activity : тип подгружаемого объекта ( group или mesh или ещё что-то) } } –//–

      }

    • хранение .json

    • Иметь дефолт.

    • Редактор:
      • редактирование,
      • возможность отката до дефолта,
      • возможность импорта из другого проекта.
description

Note

параметр (text) Описание задачи.

  • Колонку в set_of_tasks
  • Поле ввода в панели создания единичной задачи.
  • Редактор в task_manager
level

Note

параметр (text) Пользовательский уровень задачи, с привязкой к planned_time и price

  • Выбор и назначение level в task_manager
    • максимальное отображение инфы о level в gui
    • при назначении так же заполняются planned_time и price
    • при этом остаётся возможность изменения вручную этих параметров.
open_time

Note

параметр (timestamp) Время открытия задачи.

  • Не имеет значения записан или нет в БД.
  • Заполняется при открытии задачи (взятии в работу)
time

Note

параметр (json) Словарь: ключи - nik_name, значения - ссумарное время атриста по этой задаче.

  • заполняется при выполнении commit (ссумирование к сущестующему значению)
  • получается разница между open_time и временем выполнения commit
full_time

Note

параметр (?) Общее время затраченное на задачу всеми артистами, кто вёл работу над ней.

  • заполняется при выполнении commit (ссумирование к сущестующему значению)
  • получается разница между open_time и временем выполнения commit
deadline

Note

параметр (timestamp) дата окончания работ по задаче.

  • расчитывается один раз при первом open на основе planned_time. ?
  • возможно делать перерасчёт по всем дедлайнам не выполненных задач, в случае перерасчёта общего дедлайна проекта. ?

New Methods

Work пути
get_final_work_file_path()

Путь до финальной версии, чтобы взять в работу.

Студийный работник:

  • загрузка push + commit + pull списков без учёта пользователя.
  • если последняя запись commit или pull - то берём по этой версии.
    • если файл этой версии не в work директории данного пользователя, то будет предложено сделать push.
  • если последняя запись push:
    • не sketch:
      • если commit версия этого push находится в work директории данного пользователя - то эта commit версия.
      • иначе - push версия.
    • sketch:
      • выбираем последний номер версии из log.source:
        • если данный файл есть в рабочей директории данного пользователя - то это он
        • если его нет - то предлагать сделать pull.
  • return - (path, номер версии)

Аутсорс:

  • загрузка push + commit + pull списков без учёта пользователя.
  • если последняя запись commit или pull - то берём эту версию.
    • если файл этой версии не в work директории данного пользователя, то будет предложено сделать push.
  • если последняя запись push:
    • не sketch:
      • если commit версия этого push находится в work директории данного пользователя - то эта commit версия.
      • иначе - предлагается обратится к менеджеру, чтобы выгрузить последнюю push версию в облако и затем сделать pull.
    • sketch:
      • если файл последней версии из log.source есть в рабочей директории данного пользователя - то это он.
      • иначе - предлагается обратится к менеджеру, чтобы выгрузить последнюю push версию в облако и затем сделать pull.
get_version_work_file_path()
  • обёртка на studio.template_get_work_path()
  • получение шаблонного пути версии данной задачи, с проверкой существования.
  • возврат path без номера версии.
get_new_work_file_path()
  • определение новой версии по pull + commit логам, чтение бд.
  • return - (path, version) - версия нужна для создания лога.
Push пути
get_final_push_file_path()

Студийный работник:

  • Загрузка push списка без учёта пользователя
  • По последнему push
  • return:
    • для sketch: ({словарь - return_data}, номер версии)
      • структура return_data:
        • ключ: push_path, значение - словарь путей файлов по именам веток.
        • ключ: look_path, значение - словарь путей look версий файлов по именам веток.
    • для всех остальных: (path, номер версии)

Аутсорс:

  • игнор
get_version_push_file_path()

Студийный работник:

  • Загрузка push списка без учёта пользователя
  • По указанной версии
  • return:
    • для sketch: {словарь - ключ branch: значение path}
    • для всех остальных: path

Аутсорс:

  • игнор
get_new_push_file_path()
  • push - это перезапись + создание look версий для sketch
  • что надо:
    • путь откуда пишем (указанная или последняя commit,pull версия)
    • путь куда пишем (определение новой версии по push логу)
    • проверка на совпадение версии commit,pull источника с версией источника последнего push
  • return:
    • для sketch: ({словарь - return_data}, номер версии)
      • структура return_data:
        • ключ: source_path, значение - словарь путей исходников по именам веток.
        • ключ: source_versions, значение - словарь версий исходников по именам веток.
        • ключ: push_path, значение - словарь новых путей для файлов по именам веток.
        • ключ: look_path, значение - словарь новых путей look версий файлов по именам веток.
    • для всех остальных: ((source_path, new_push_path), номер версии)
  • для аутсорса иная история, связанная с выгрузкой на сервер.
Паблиш пути
get_version_publish_file_path()
  • Путь до файлов в директории.
  • Для скеча весь набор
get_final_publish_file_path()
  • Путь до файлов, которые сверху в директории publish
  • Если нужны пути из директории версии, то это version path
get_new_publish_file_path()
  • Новые пути
  • Пути исодников это version_push_path или version_publish_path в случае перепаблиша.
  • Структура данных должна совпадать со структурой push.

Chat

  • Использование пиктограмок:
    • Отображать пиктограмки тех кто прочитал сообщение.
    • пиктограмку автора в заголовок сообщения.
    • artist - добавить атрибут pict (text) - путь к пиктограмке.
      • если project.project_database[0] = 'sqlite3' - это путь к локальному файлу.
      • во всех остальных случаях - это web ссылка.
    • artist_editor - инструменты для работы с пиктограмками.
  • Возможность оставлять коментарии под сообщением (с прикреплением изображений).
  • Загружать несколько файлов в строку сообщения (не обязательно картинки).
  • Оповещения о наличии непрочитанных сообщений в каком-либо из чатов.
    • привязать к открытию файла задачи (user, manager, blender).

New Types of Assets

Object

Типы ассетов char и obj превращаются в object

  • object - это и пропс и персонаж, с ригом или без.
    • Тип загрузки и активити определяется параметром ассета loading_type:
      • mesh - загрузка меша из активити model
      • group - загрузка группы из активити model
      • rig - загрузка группы рига из активити rig
    • Данный параметр редактируется менеджером, и задаётся при создании ассета, связан с set_of_tasks.
Сопутствующие переделки
  • loading_type в asset_keys +
  • Редактирование loading_type в Group Content Editor +
  • Редактирование loading_type в таск манагере +
  • Указание типа загрузки ассета в сет оф таскс, поле loading_type в set_of_tasks_keys. +
  • Упрощение операции change_group x
  • Упрощение операции copy_asset x
  • Что-то там во взаимосвязях, но их всё равно от нуля вести.
  • Изменения в test.py +

Set

Hooks

Процедуры проектного уровня.

Хранение:

  • дефолтные хуки в - lineyka/hooks/
  • для студийных работников - studio/project/hooks/
  • для аутсорсеров - work_folder/project/hooks/

Функционал:

  • При создании нового проекта хуки загружаются из приложения.
  • Импорт экспорт из проекта в проект (по аналогии с set_of_tasks)
  • Аутсорсеру:
    • заливается при создании проекта.
    • функция обновления.
  • Обнуление до дефолта(загрузка из приложения) по типам процессов.

Виды хуков:

  • pre - Проверка удовлетворения условиям, возврат (False, message) или (True, ‘Ok!’)
  • post - Совершение действий с файлами.

Процессы для которых используются хуки:

  • look
  • open
  • commit
  • push
  • publish
  • send_to_report
  • accept

Запускаются в task:

  • pre_commit(),
  • post_commit()
  • Итд

Начинка.

  • Передаваемые данные в хук:
    • task
    • source_path - путь откуда копируется файл (структура зависит от типа задачи).
    • target_path - путь куда перекладывается файл (структура зависит от типа задачи).
  • Импорты библиотек приложений через try/except.
    • None по умолчанию.
    • В зависимости от значения библиотек выбирать действия.
    • Если библиотека None значит открыто через юзер интерфейс, возможно обращение к файлу в фоне.

Оперативка:

  • look/open/commit/push/publish - включить ранее написанное перетаскивание кеша .pc2

Additional Activities

Доп активити на проект.

дополнения в api.

  • project - новый атрибут additional_activities
    • Словарь по типу asset.ACTIVITY_FOLDER
    • Добавить методы и инструменты редактирования. (api, gui)
    • Применение: редактирование словаря при инициализации ассета:
      • asset.ACTIVITY_FOLDER дополняется из asset.project.additional_activities
  • Убрать псевдонимы
  • Возможно добавить описание активити (вместо псевдонима)

дополнения в gui

  • Добавляются по типам ассетов:
  • Появляются в списке предлагаемых активити set_of_tasks manager
  • Появятся в списке активити, в task_manager

Server

  • регистрация, авторизация пользователей
  • python api
  • оптимизация загружаемого медиа контента
    • всё что для чата
    • плейбласты
  • загрузка мета-даты студии в облако и обратно
  • загрузка мета-даты проекта в облако и обратно

Season Episode Sequence Shot

Season

  • Сезон это - группа с типом film
  • Ограничить длинну названия 3-мя символами - может сделать длинну настраиваемой. (gui, api)
    • название не должно содержать символы: _ , # , .
    • Структура названия группы сезона: s + num (num - 2 символа) Например: s01
  • Переименовывать группу сезона нельзя. (api, gui) в gui - возможно сразу блокировать функцию rename

Episode

  • Серия это - ассет с типом film
  • Структура названия ассета - season_name + _ + episode_name
    • при создании ассета данного типа season_name - будет присутствовать по умолчанию, поле ввода будет только для episode_name (gui)
    • episode_name не должно содержать символы: _ , # , . (api)
    • Ограничить длинну episode_name для серии 4-мя символами. (gui, api)
    • Структура episode_name : e + num (num - 3 символа цифры - проверять в (gui, api)) Например: e001

Sequence

  • Секвенция это - группа шотов монтажной фразы, одна - реже несколько локаций.
  • создать класс Sequence - взять Season (учитывая, что он больше не нужен) и переделать.
    • название таблицы БД: group_id:episode_asset_name или episode_asset_name ???
    • имя файла для sqlite3 - .sequences.db
  • в рабочем файле с типом film при создании шота необходимо указать секвенцию, для которой он создаётся.
  • там же в блендере должен быть функционал для создания секвенций. (gui, api)
  • Структура названия секвенции (sequence_name): sq + num (num - 3 символа цифры - проверять в (gui, api)) Например: sq001

Shot

  • Шот - это ассет с типом shot_animation
  • Структура названия ассета шота - season_name + _ + episode_anme + _ + sequence_name + _ + shot_num
    • только shot_num подлежит редактированию пользователем.
    • Структура shot_num - строка 4 символа: по умолчанию будет предлагаться номер 3 символа (числа - проверять в (gui, api) ?) + один символ на выбор пользователя, для subShot.
    • Например: 001 или 001a

Indices and tables