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)
пока не используется
пока не используется
-
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: |
|
list_group: |
|
dict_by_name: |
|
dict_by_id: |
|
dict_by_type: |
|
Методы¶
-
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)
- task_data (dict) - требуется если не инициализирован task
-
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))
- task_data (dict) - требуется если не инициализирован task
-
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
- input_task (task / False) входящая задача
-
_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
- removed_tasks_list (list) - содержит словари удаляемых из инпута задач
-
_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, коммент)
- removed_task_data (dict) - удаляемая задача
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)
- action (bool / str / list) если False - то возврат для всех action, если list - то будет использован оператор
-
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)
- task_data (bool/dict) - если False - значит читается self.task
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)
- task_data (bool/dict) - если False - значит читается self.task
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)
- task_data (bool/dict) - если False - если False - значит читается self.task
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)
- input_keys (dict) - словарь по studio.chats_keys - обязательные ключи: ‘topic’,’color’,’status’, ‘reading_status’
-
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)
- group_name (str) - имя группы, не требуется если группа инициализирована
-
remove
([group_name = False])¶ удаление списка ассетов данной группы.
Параметры:
- group_name (str) - имя группы, не требуется если группа инициализирована
лучше не использовать
- return (True, ‘ok’) или (False, comment)
- group_name (str) - имя группы, не требуется если группа инициализирована
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
, locationslocation
- ассеты - topor, vedro, (
props
) location_01 (locations
) - исполнители - vofka
root
, dimka, slavkausers
(все пароли 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
.
- Если branch = False - запись в
Commit Pull Push Publish¶
Commit¶
Cоздание локальной версии.
- место хранения
work
директория, определяется в set studio, методstudio.set_work_folder()
Pull¶
Загрузка push версии в локальную work директорию.
- Нумерация версий общая с commit.
Работник студии:
- Заливка из локального сервера студии.
Аутсорс:
- Заливка из временного файла облака.
- Требуется предварительная загрузка в облако менеджером.
- Удаляется из облака после выполнения pull
- Скетч:
- Заливаются все ветки, каждая в свою новую версию по порядку.
- Не скетч:
- Заливается в новую версию.
Push¶
Создание версии на сервере.
- операция не создаёт новый commit
- для sketch - сразу создавать png
- загружается последняя или кастомная версия указанной ветки из work
- для sketch - только последние версии всех веток подлежащих пушингу.
- проверка на совпадение с последней push версией по атрибуту
source
- для sketch - проверка на совпадение по всем версиям последнего пуша.
- проверка на совпадение с последней push версией по атрибуту
- место хранения в
project/assets
- нумерация отличается от commit (своя параллельная нумерация).
- атрибут
source
- локальная версия откуда был push - для sketch: - список версий по каждой ветки откуда пуш, порядок совпадает с порядком записи наименований веток в
branch
- для sketch: - список версий по каждой ветки откуда пуш, порядок совпадает с порядком записи наименований веток в
- атрибут
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
+
- запись при каждом коммите
- Добавить в Class Log затраченое время - атрибут
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 - добавить атрибут
- artist_editor - инструменты для работы с пиктограмками.
- Возможность оставлять коментарии под сообщением (с прикреплением изображений).
- Загружать несколько файлов в строку сообщения (не обязательно картинки).
- Оповещения о наличии непрочитанных сообщений в каком-либо из чатов.
- привязать к открытию файла задачи (user, manager, blender).
New Types of Assets¶
Object¶
Типы ассетов char
и obj
превращаются в object
object
- это и пропс и персонаж, с ригом или без.- Тип загрузки и активити определяется параметром ассета
loading_type
: - mesh - загрузка меша из активити
model
- group - загрузка группы из активити
model
- rig - загрузка группы рига из активити
rig
- mesh - загрузка меша из активити
- Тип загрузки и активити определяется параметром ассета
- Данный параметр редактируется менеджером, и задаётся при создании ассета, связан с
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¶
Help Links¶
- Set_of_tasks Editor / Edit of Loading Type / loading types (кнопка возле раскрывающегося списка)
- Set_of_tasks Editor / Edit Asset Type / Asset types (кнопка возле раскрывающегося списка)
- Group Editor / Create Group / Group Types (кнопка возле раскрывающегося списка)
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
- только
- Структура названия ассета шота -