Модуль pycerebro.database содержит описание классов, используемых для осуществления доступа к базе данных.
classpycerebro.database.Database(db_host = "", db_port = None, db_timeout=5, db_reconn_count=3)
Параметры: |
|
Класс Database предназначен для установления соединения с базой данных, содержит набор методов, выполняющих стандартные запросы системы Cerebro, а также возможность выполнения произвольных SQL-запросов.
import pycerebro
# Устанавливаем соединение с базой данных
db = pycerebro.database.Database()
if db.connect_from_cerebro_client() != 0: # Пробуем установить соединение с помощью запущенного клиента Cerebro.
# Если не выходит, устанавливаем соединение с помощью логина и пароля
db.connect('user', 'password')
Примечание
В классе существуют функции изменяющие свойства задач, которые могут принимать на вход массив идентификаторов. Если необходимо установить нескольким задачам одинаковое значение свойства, предпочитайте использовать передачу массива идентификаторов в качестве аргумента вместо использования циклов. Это значительно повысит производительность.
to_do_task_list = db.to_do_task_list(db.current_user_id(), True) # получаем список задач текущего пользователя
tsks = set()
for task in to_do_task_list:
tsks.add(task[dbtypes.TASK_DATA_ID])
db.task_set_priority(tsks,
dbtypes.TASK_PRIORITY_ABOVE_NORMAL) # установили сразу нескольким задачам приоритет выше обычного
activities()
Результат: | таблица видов деятельности |
Поля таблицы описаны в модуле dbtypes: ACTIVITY_DATA_...
add_attachment()
add_attachment(message_id, carga, filename, thumbnails, description, as_link)
Параметры: |
|
Если файл является изображением или видео, то можно добавить для него уменьшенные эскизы. Можно добавить до 3-х эскизов (первый, средний, последний кадры). Для генерации эскизов можно использовать программу Mirada. Она поставляется вместе с дистрибутивом Cerebro.
#Пример генерации эскизов с помощью Mirada.
gen_path = os.path.dirname(filename) # В качестве директории для генерации эскизов возьмем директорию добавляемого файла
mirada_path = './mirada' # путь до исполняемого файла программы Mirada
# Запускаем мираду с необходимыми ключами
res_code = subprocess.call([mirada_path, filename, '--temp', gen_path, '--hide', '--mode', 'thumbstandalone'])
#--temp - директория для генерации эскизов
#--hide --mode thumbstandalone- ключ запуска мирады в скрытом режиме (без загрузки графического интерфейса) для генерации тамбнейлов.
if res_code != 0:
raise Exception("Mirada returned bad exit-status.\n" + mirada_path);
#Ищем сгенерированные мирадой эскизы.
#Имени эскиза формируется из имени файла, даты и времени генерации - filename_yyyymmdd_hhmmss_thumb[number].jpg
#Например: test.mov_20120305_112354_thumb1.jpg - первый эскиз видео-файла test.mov
thumbnails = list()
for f in os.listdir(gen_path):
if fnmatch.fnmatch(f, os.path.basename(filename) + '.thumb*.jpg'):
thumbnails.append(gen_path + '/' + f)
thumbnails.sort()
Можно использовать и другие программы для генерации, например, ffmpeg.
#Пример генерации эскизов с помощью ffmpeg.
#Для того, чтобы генерировать эскизы с помощью ffmpeg, нужно заранее знать длительность видео,
#чтобы корректно получить средний и последний кадры.
#Возьмем к примеру ролик длительностью в 30 секунд.
thumbnails = list() # список файлов для эскизов
thumbnails.append(filename + '_thumb1.jpg')
thumbnails.append(filename + '_thumb2.jpg')
thumbnails.append(filename + '_thumb3.jpg')
subprocess.call(['ffmpeg', '-i', filename, '-s', '512x512', '-an', '-ss', '00:00:00', '-r', 1, '-vframes', 1, '-y', thumbnails[0]])
subprocess.call(['ffmpeg', '-i', filename, '-s', '512x512', '-an', '-ss', '15:00:00', '-r', 1, '-vframes', 1, '-y', thumbnails[1]])
subprocess.call(['ffmpeg', '-i', filename, '-s', '512x512', '-an', '-ss', '30:00:00', '-r', 1, '-vframes', 1, '-y', thumbnails[2]])
# Описание ключей вы можете посмотреть в документации к ffmpeg
add_client_review()
add_client_review(task_id, message_id, text)
Параметры: |
|
Результат: | идентификатор нового сообщения. |
Тип результата: | int |
Добавляет сообщение типа «Рецензия клиента».
add_definition()
add_definition(task_id, text)
Параметры: |
|
Результат: | идентификатор нового сообщения. |
Тип результата: | int |
Добавляет сообщение типа «Постановка задачи».
add_note()
add_note(task_id, message_id, text)
Параметры: |
|
Результат: | идентификатор нового сообщения. |
Тип результата: | int |
Добавляет сообщение типа «Заметка».
add_report()
add_report(task_id, message_id, text, minutes)
Параметры: |
|
Результат: | идентификатор нового сообщения. |
Тип результата: | int |
Очень важно устанавливать время в отчетах. Если minutes имеет значение 0 или None, отчет не попадет в статистику.
Добавляет сообщение типа «Отчет».
add_resource_report()
add_resource_report(task_id, message_id, resource_id, text, minutes)
Параметры: |
|
Результат: | идентификатор нового сообщения. |
Тип результата: | int |
Добавляет сообщение типа «Отчет за ресурс».
add_review()
add_review(task_id, message_id, text, minutes=None)
Параметры: |
|
Результат: | идентификатор нового сообщения. |
Тип результата: | int |
Добавляет сообщение типа «Рецензия».
add_task()
add_task(parent_id, name, activity_id=0)
Параметры: |
|
Результат: | идентификатор новой задачи. |
Создание новой задачи. Имя задачи не может содержать символы: \ / # : ? & „ » , + |.
Примечание
Для отправки уведомления пользователю о новой задаче требуется создать в задаче сообщение типа "Постановка задачи".
attachment_hashtags(attachment_id)
Параметры: | attachment_id (int, set(int, ) или list(int,)) – идентификатор вложения или массив идентификаторов вложений. |
Примечание
Рекомендуется для вложений со значением тега ATTACHMENT_DATA_TAG: ATTACHMENT_TAG_FILE или ATTACHMENT_TAG_LINK.
attachment_remove_hashtags(attachment_id, hashtags)
Параметры: |
|
Примечание
Рекомендуется для вложений со значением тега ATTACHMENT_DATA_TAG: ATTACHMENT_TAG_FILE или ATTACHMENT_TAG_LINK.
attachment_set_hashtags(attachment_id, hashtags)
Параметры: |
|
Примечание
Рекомендуется для вложений со значением тега ATTACHMENT_DATA_TAG: ATTACHMENT_TAG_FILE или ATTACHMENT_TAG_LINK.
connect()
connect(db_user, db_password)
Параметры: |
|
См.также
connect_from_cerebro_client()
connect_from_cerebro_client()
Соединение с базой данных с уже авторизованным пользователем в клиенте Cerebro. Такое соединения возможно, если на том же компьютере уже запущен клиент Cerebro, и произведен вход. В этом случае произойдет соединение с базой данных из-под пользователя, вошедшего в клиент. При этом соединение в клиенте не прервется.
Результат: | статус соединения: 0 - соединение установлено; 1 - соединение не установлено (клиент Cerebro запущен, но не произведен вход); 2 - соединение не установлено (клиент Cerebro не запущен). |
# Устанавливаем соединение с базой данных
if db.connect_from_cerebro_client() != 0: # Пробуем установить соединение с помощью запущенного клиента Cerebro.
# Если не выходит, устанавливаем соединение с помощью логина и пароля
db.connect(db_user, db_password)
См.также
copy_tasks()
copy_tasks(task_id, tasks_list, flags = COPY_TASKS_SUB_TASKS|COPY_TASKS_INTERNAL_LINKS|COPY_TASKS_TAGS|COPY_TASKS_ASSIGNED_USERS|COPY_TASKS_EVENTS)
Параметры: |
|
Результат: | список идентификаторов новых задач. |
Копирует задачи.
Подробное описание флагов находится в модуле dbtypes: COPY_TASKS_...
Если одну задачу нужно скопировать несколько раз (реплицировать), то необходимо передать в tasks_list список кортежей с одинаковыми идентификаторами и разными именами. Например:
[(123, „test_task02“), (123, „test_task03“), (123, „test_task04“), (123, „test_task05“)]
123 - идентификатор задачи, которую нужно скопировать. „test_task02“, „test_task03“, … - имена новых задач.
# Копируем в задачу 0 задачи 1(2 копии), 2 и 3
to_do_task_list = db.to_do_task_list(db.current_user_id(), True)
lst_copy = [(to_do_task_list[1][dbtypes.TASK_DATA_ID], 'Копия задачи 1(1)'),
(to_do_task_list[1][dbtypes.TASK_DATA_ID], 'Копия задачи 1(2)'),
(to_do_task_list[2][dbtypes.TASK_DATA_ID], 'Копия задачи 2'),
(to_do_task_list[3][dbtypes.TASK_DATA_ID], 'Копия задачи 3')]
db.copy_tasks(to_do_task_list[0][dbtypes.TASK_DATA_ID], lst_copy)
# В задачу 0 добавлено 4 новых задачи
current_user_id()
current_user_id()
Результат: | идентификатор пользователя, из-под которого произошёл логин. |
drop_link_tasks()
drop_link_tasks(link_id)
Параметры: | link_id (int) – идентификатор связи. |
execute()
execute(query, *parameters)
Параметры: |
|
message()
message(message_id)
Параметры: | message_id (int) – идентификатор сообщения. |
Результат: | данные сообщения. |
Поля таблицы описаны в модуле dbtypes: MESSAGE_DATA_... Типы сообщений описаны в модуле dbtypes: MESSAGE_TYPE_...
message_attachments()
message_attachments(message_id)
Параметры: | message_id (int, set(int, ) или list(int, )) – идентификатор сообщения или массив идентификаторов сообщений. |
Результат: | таблица файловых вложений сообщения(ий). |
Поля таблицы описаны описаны в модуле dbtypes: ATTACHMENT_DATA_...
Одно вложение может представлять собой от 1-й до 5-ти записей в таблице. Объединены записи вложения идентификатором группы - ATTACHMENT_DATA_GROUP_ID. Записи одного вложения отличаются тегом ATTACHMENT_DATA_TAG, и означают то или иное свойство вложения.
Вложение бывает двух видов: файл и ссылка на файл. В первом случаи у вложения присутствует запись с тегом ATTACHMENT_TAG_FILE, которая содержит хеш файла, лежащего в файловом хранилище Cargador. В случае если файл приложен к сообщению как ссылка, то присутствует запись с тегом ATTACHMENT_TAG_LINK. Эта запись не имеет хеша и в поле имени ATTACHMENT_DATA_FILE_NAME у неё прописан полный путь до файла. Запись с тегом ATTACHMENT_TAG_REVIEW присутствует только если к файлу добавлена рецензия из инструмента рецензирования Mirada. Записи с тегом эскизов ATTACHMENT_TAG_THUMB..., присутствуют только, если файл является изображением или видео. В случае изображения присутствует только одна запись ATTACHMENT_TAG_THUMB1, если видеофайл – три записи.
message_hashtags(message_id)
Параметры: | message_id (int, set(int, ) или list(int, )) – идентификатор сообщения или массив идентификаторов сообщений. |
message_remove_hashtags(message_id, hashtags)
Параметры: |
|
message_set_hashtags(message_id, hashtags)
Параметры: |
|
messages()
messages(message_ids)
Параметры: | message_id (int, set(int, ) или list(int, )) – идентификатор сообщения(сообщений). |
Результат: | данные сообщения(сообщений). |
Поля таблицы описаны в модуле dbtypes: MESSAGE_DATA_... Типы сообщений описаны в модуле dbtypes: MESSAGE_TYPE_...
project_tags(project_id)
Параметры: | project_id (int) – идентификатор проекта. |
Результат: | таблица тегов проекта. Таблица содержит все теги, которые можно задавать на задачах проекта. |
Поля таблицы описаны в модуле dbtypes: TAG_DATA_...
root_tasks()
root_tasks()
Результат: | таблица корневых задач. |
Поля таблицы описаны в модуле dbtypes: TASK_DATA_...
set_link_tasks()
set_link_tasks(first_task_id, second_task_id)
Параметры: |
|
Результат: | идентификатор связи. |
Тип результата: | int |
Создает связь между двумя задачами.
statuses()
statuses()
Результат: | таблица всех статусов. |
Поля таблицы описаны в модуле dbtypes: STATUS_DATA_...
tag_enums()
tag_enums(tag_id)
Параметры: | tag_id (int) – идентификатор тега. |
Результат: | таблица перечислений тега. Таблица содержит перечисления, которые можно установить в качестве значения тега. |
Поля таблицы описаны в модуле dbtypes: TAG_ENUM_DATA_...
task()
task(task_id)
Параметры: | task_id (int) – идентификатор задачи |
Результат: | данные по задаче |
Поля таблицы описаны в модуле dbtypes: TASK_DATA_...
См.также
task_allocated()
task_allocated(task_id)
Параметры: | task_id (int) – идентификатор задачи. |
Результат: | таблица назначенных пользователей (исполнителей) на задачу. |
Поля таблицы описаны в модуле dbtypes: TASK_ALLOCATED_...
task_attachments()
task_attachments(task_id)
Параметры: | task_id (int, set(int, ) или list(int, )) – идентификатор задачи или массив идентификаторов задач. |
Результат: | таблица файловых вложений задач(и). |
Поля таблицы описаны описаны в модуле dbtypes: ATTACHMENT_DATA_...
Одно вложение может представлять собой от 1-й до 5-ти записей в таблице. Объединены записи вложения идентификатором группы - ATTACHMENT_DATA_GROUP_ID. Записи одного вложения отличаются тегом ATTACHMENT_DATA_TAG, и означают то или иное свойство вложения.
Вложение бывает двух видов: файл и ссылка на файл. В первом случаи у вложения присутствует запись с тегом ATTACHMENT_TAG_FILE, которая содержит хеш файла, лежащего в файловом хранилище Cargador. В случае если файл приложен к сообщению как ссылка, то присутствует запись с тегом ATTACHMENT_TAG_LINK. Эта запись не имеет хеша и в поле имени ATTACHMENT_DATA_FILE_NAME у неё прописан полный путь до файла. Запись с тегом ATTACHMENT_TAG_REVIEW присутствует только если к файлу добавлена рецензия из инструмента рецензирования Mirada. Записи с тегом эскизов ATTACHMENT_TAG_THUMB..., присутствуют только, если файл является изображением или видео. В случае изображения присутствует только одна запись ATTACHMENT_TAG_THUMB1, если видеофайл – три записи.
task_by_url()
task_by_url(url)
Параметры: | url (string) – путь до задачи. |
Результат: | ID задачи. |
Примечание
Пути к задаче регистрозависимы.
task_children()
task_children(task_id)
Параметры: | task_id (int) – идентификатор задачи. |
Результат: | таблица подзадач. |
Поля таблицы описаны в модуле dbtypes: TASK_DATA_...
task_definition()
task_definition(task_id)
Если задача содержит несколько сообщений Постановка задачи, в результате вернется одно последнее по дате создания сообщение Постановка задачи.
Параметры: | task_id (int) – идентификатор задачи. |
Результат: | данные сообщения типа "Постановка задачи". |
Поля таблицы описаны в модуле dbtypes: MESSAGE_DATA_...
task_hashtags(task_id)
Параметры: | task_id (int, set(int, ) или list(int, )) – идентификатор задачи или массив идентификаторов задач. |
# Работа с хэштегами задачи
to_do_task_list = db.to_do_task_list(db.current_user_id(), True)
db.task_set_hashtags(to_do_task_list[0][dbtypes.TASK_DATA_ID], {'хэштег1', 'хэштег2', 'хэштег3'}) # присваиваем задаче массив хэштегов
db.task_remove_hashtags(to_do_task_list[0][dbtypes.TASK_DATA_ID], 'хэштег2') # удаляем хэштег
hashtags = db.task_hashtags(to_do_task_list[0][dbtypes.TASK_DATA_ID]) # получаем хэштеги задачи
print('Хэштеги задачи ', hashtags) # распечатываем хэштеги
task_links()
task_links(task_id)
Параметры: | task_id (int) – идентификатор задачи. |
Результат: | таблица связей задачи. |
Поля таблицы описаны в модуле dbtypes: TASK_LINK_...
task_messages()
task_messages(task_id)
Параметры: | task_id (int) – идентификатор задачи. |
Результат: | таблица сообщений задачи. |
Поля таблицы описаны в модуле dbtypes: MESSAGE_DATA_... Типы сообщений описаны в модуле dbtypes: MESSAGE_TYPE_...
task_possible_statuses()
task_possible_statuses(task_id)
Параметры: | task_id (int) – идентификатор задачи. |
Результат: | таблица статусов, которые можно установить задаче. |
Поля таблицы описаны в модуле dbtypes: STATUS_DATA_...
В системе Cerebro для каждого статуса настраиваются разрешения на переключение для каждого статуса. Кроме того, у каждого статуса есть флаг наследственности. На задачи-контейнеры можно устанавливать только те статусы, у которых включен этот флаг. Поэтому список возможных статусов зависит от прав пользователя, текущего статуса, а так же наличия/отсутствия подзадач у задачи.
task_remove_allocated()
task_remove_allocated(task_id, user_id)
Параметры: |
|
task_remove_hashtags(task_id, hashtags)
Параметры: |
|
task_set_activity()
task_set_activity(task_id, activity_id)
Параметры: |
|
task_set_allocated()
task_set_allocated(task_id, user_id)
Параметры: |
|
Примечание
Для отправки уведомления исполнителю о назначенной задаче необходимо наличие в задаче сообщения типа "Постановка задачи".
task_set_budget()
task_set_budget(task_id, budget)
Параметры: |
|
При установке бюджета в None, собственный бюджет задачи сбрасывается и рассчитывается из подзадач.
task_set_finish()
task_set_finish(task_id, time)
Параметры: |
|
Аргумент time = None сбрасывает установленное время окончания задачи, в этом случае время окончания рассчитывается исходя из запланированного времени на задачу и расписания.
db.task_set_finish(task_id, 4506.75) # время окончания 03.05.2012 18:00 UTC
Пример установки времени окончания задачи через 3 дня от текущего
import datetime
datetime_now = datetime.datetime.utcnow()
datetime_2000 = datetime.datetime(2000, 1, 1)
timedelta = datetime_now - datetime_2000
days = timedelta.total_seconds()/(24*60*60) + 3
db.task_set_finish(task_id, days)
task_set_flag()
task_set_flag(task_id, flag, is_set)
Параметры: |
|
# Пометить задачу как архивную
db.task_set_flag(task_id, dbtypes.TASK_FLAG_ARCHIVED, True)
Значения флагов задачи описаны в модуле dbtypes: TASK_FLAG_...
task_set_hashtags(task_id, hashtags)
Параметры: |
|
task_set_name()
task_set_name(task_id, name)
Параметры: |
|
task_set_planned_time()
task_set_planned_time(task_id, hours)
Параметры: |
|
Устанавливает запланированное время задач(и) в часах. При установке аргумента hours в None, запланированное время задачи сбрасывается. После сброса запланированное время рассчитывается исходя из календарных сроков задачи и расписания.
task_set_priority()
task_set_priority(task_id, prior)
Параметры: |
|
Значения приоритета описаны в модуле dbtypes: TASK_PRIORITY_...
task_set_progress()
task_set_progress(task_id, progress)
Параметры: |
|
task_set_start()
task_set_start(task_id, time)
Параметры: |
|
Аргумент time = None сбрасывает установленное время начала задачи. После сброса время начала рассчитывается исходя из связей задачи и расписания.
db.task_set_start({task_id, task_id1}, 4506.375) # время старта 03.05.2012 9:00 UTC
Пример установки времени начала задачи в текущее
import datetime
datetime_now = datetime.datetime.utcnow()
datetime_2000 = datetime.datetime(2000, 1, 1)
timedelta = datetime_now - datetime_2000
days = timedelta.total_seconds()/(24*60*60)
db.task_set_start(task_id, days)
task_set_status()
task_set_status(task_id, status_id)
Параметры: |
|
task_set_tag_enum()
task_set_tag_enum(task_id, enum_id, is_set)
Параметры: |
|
task_set_tag_float()
task_set_tag_float(task_id, tag_id, value)
Параметры: |
|
task_set_tag_int()
task_set_tag_int(task_id, tag_id, value)
Параметры: |
|
task_set_tag_string()
task_set_tag_string(task_id, tag_id, value)
Параметры: |
|
task_tag_enums()
task_tag_enums(task_id, tag_id)
Параметры: |
|
Результат: | таблица установленных на задачу перечислений тега. |
Поля таблицы описаны в модуле dbtypes: TASK_TAG_ENUM_...
task_tag_reset()
task_tag_reset(task_id, tag_id)
Параметры: |
|
task_tags(task_id)
Параметры: | task_id (int) – идентификатор задачи. |
Результат: | таблица установленных на задачу значений тегов. |
Поля таблицы описаны в модуле dbtypes: TASK_TAG_DATA_...
tasks()
tasks(task_ids)
Параметры: | task_id (int, set(int, ) или list(int, )) – идентификатор задачи или массив идентификаторов задач. |
Результат: | данные по задаче(задачам). |
Поля таблицы описаны в модуле dbtypes: TASK_DATA_...
См.также
to_do_task_list()
to_do_task_list(user_id, with_done_task)
Параметры: |
|
Результат: | таблица задач, на которых пользователь назначен исполнителем. |
Поля таблицы описаны в модуле dbtypes: TASK_DATA_...
users()
users()
Результат: | таблица пользователей/материальных ресурсов. |
Поля таблицы описаны в модуле dbtypes: USER_DATA_...
У материального ресурса выставлен флаг USER_FLAG_IS_RESOURCE. Проверить этот флаг можно с помощью функции cclib.has_flag:
if cclib.has_flag(user[dbtypes.USER_DATA_FLAGS], dbtypes.USER_FLAG_IS_RESOURCE): #если материальный ресурс
# действия