# -*- coding: utf-8 -*-
"""
Модуль cerebro.events содержит описание классов и типов событий,
передаваемых в функции :ref:`модуля обработки событий event <capi-event>`.
Типы событий описаны в :py:const:`базовом классе события Event <cerebro.events.Event.EVENT_>`.
.. rubric:: Классы
* :py:class:`cerebro.events.AfterEventChangingOfAttachments`
* :py:class:`cerebro.events.AfterEventChangingOfMessage`
* :py:class:`cerebro.events.AfterEventChangingOfMessages`
* :py:class:`cerebro.events.AfterEventChangingOfTasks`
* :py:class:`cerebro.events.AfterEventChangingOfTasksTag`
* :py:class:`cerebro.events.AfterEventCreationOfMessage`
* :py:class:`cerebro.events.AfterEventCreationOfTask`
* :py:class:`cerebro.events.AfterEventMessage`
* :py:class:`cerebro.events.BeforeEventChangingOfAttachments`
* :py:class:`cerebro.events.BeforeEventChangingOfAttachmentsHashtags`
* :py:class:`cerebro.events.BeforeEventChangingOfMessage`
* :py:class:`cerebro.events.BeforeEventChangingOfMessages`
* :py:class:`cerebro.events.BeforeEventChangingOfMessagesHashtags`
* :py:class:`cerebro.events.BeforeEventChangingOfTasks`
* :py:class:`cerebro.events.BeforeEventChangingOfTasksAllocated`
* :py:class:`cerebro.events.BeforeEventChangingOfTasksHashtags`
* :py:class:`cerebro.events.BeforeEventChangingOfTasksTag`
* :py:class:`cerebro.events.BeforeEventCreationOfMessage`
* :py:class:`cerebro.events.BeforeEventCreationOfTask`
* :py:class:`cerebro.events.BeforeEventMessage`
* :py:class:`cerebro.events.Event`
* :py:class:`cerebro.events.EventChangingOfAttachments`
* :py:class:`cerebro.events.EventChangingOfMessages`
* :py:class:`cerebro.events.EventChangingOfTasks`
* :py:class:`cerebro.events.EventError`
* :py:class:`cerebro.events.TestEvent`
"""
import cerebro
import py_cerebro_classes
def get_val_by_type(val_id):
pass
class TypeEvent:
#Класс типа события. Для внутреннего использования.
def __init__(self, type, id):
self.type = type
self.id = id
[документация]class Event:
"""
Базовый класс события.
От этого класса наследуются все классы событий.
.. rubric:: Методы
* :py:meth:`event_type() <cerebro.events.Event.event_type>`
* :py:meth:`type_str() <cerebro.events.Event.type_str>`
"""
EVENT_ = ''
"""
.. rubric:: Типы событий
"""
EVENT_TEST =0
"""
Тестовое событие. Генерируется по нажатию на кнопку :ref:`генерации тестового события <capi_test_btn>`.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`Event <cerebro.events.Event>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`Event <cerebro.events.Event>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`Event <cerebro.events.Event>`)
"""
EVENT_CREATION_OF_MESSAGE =1
"""
Cобытие создания сообщения. Генерируется при нажатии кнопки "Отправить" в интерфейсе создания сообщения.
.. note::
Событие генерируется только при непосредственном создании сообщения.
При вставке сообщения скопированного или вырезанного из другого форума
будут генерироваться другие события, которые появятся в будущем.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventCreationOfMessage <cerebro.events.BeforeEventCreationOfMessage>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventCreationOfMessage <cerebro.events.AfterEventCreationOfMessage>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventCreationOfMessage <cerebro.events.BeforeEventCreationOfMessage>`)
"""
EVENT_CHANGING_OF_MESSAGE =10
"""
Cобытие редактирования сообщения. Генерируется в интерфейсе редактирования ранее созданного сообщения.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfMessage <cerebro.events.BeforeEventChangingOfMessage>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfMessage <cerebro.events.AfterEventChangingOfMessage>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfMessage <cerebro.events.BeforeEventChangingOfMessage>`)
"""
EVENT_CHANGING_OF_MESSAGE_HASHTAGS =12
"""
Cобытие редактирования хэштегов сообщения. Генерируется при редактировании хэштегов у сообщения в интерфейсе форума.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfMessagesHashtags <cerebro.events.BeforeEventChangingOfMessageHashtags>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfMessagesHashtags <cerebro.events.BeforeEventChangingOfMessagesHashtags>`)
"""
EVENT_CHANGING_OF_MESSAGE_APPROVED =13
"""
Событие редактирования сообщения.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfMessages <cerebro.events.BeforeEventChangingOfMessages>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfMessages <cerebro.events.BeforeEventChangingOfMessages>`)
"""
EVENT_CHANGING_OF_MESSAGE_CLIENT_VISIBLE =14
"""
Событие редактирования сообщения.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfMessages <cerebro.events.BeforeEventChangingOfMessages>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfMessages <cerebro.events.BeforeEventChangingOfMessages>`)
"""
EVENT_CREATION_OF_TASK =100
"""
Cобытие создания новой задачи. Генерируется при нажатии кнопки "Отправить" в интерфейсе создания задачи.
При создании новой задачи, создается новое сообщение типа "Постановка задачи",
поэтому в событии создания задачи обрабатывается и создание этого сообщения.
.. note::
Событие генерируется только при непосредственном создании задачи.
При дублицировании, вставке задач, а также при добавлении задач
с помощью вставки файлов или текста будут генерироваться другие события,
которые появятся в будущем.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventCreationOfTask <cerebro.events.BeforeEventCreationOfTask>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventCreationOfTask <cerebro.events.AfterEventCreationOfTask>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventCreationOfTask <cerebro.events.BeforeEventCreationOfTask>`)
"""
EVENT_CHANGING_OF_TASKS_NAME =110
"""
Cобытие изменения имени задачи. Генерируется при изменении имени в таблице или в окне свойств задач.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
"""
EVENT_CHANGING_OF_TASKS_ACTIVITY =111
"""
Cобытие изменения вида деятельности задач. Генерируется при изменении вида деятельности в таблице или в окне свойств задач.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
"""
EVENT_CHANGING_OF_TASKS_PRIORITY =112
"""
Cобытие изменения приоритета задач. Генерируется при изменении приоритета в таблице или в окне свойств задач.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
"""
EVENT_CHANGING_OF_TASKS_PROGRESS =113
"""
Cобытие изменения прогресса задач. Генерируется при изменении прогресса задач в таблице или в окне свойств задач, а так же по кнопке "Пометить задачу как выполненную".
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
"""
EVENT_CHANGING_OF_TASKS_PLANNED_TIME =114
"""
Cобытие изменения запланированного времени задач. Генерируется при изменении запланированного времени в таблице или в окне свойств задач.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
"""
EVENT_CHANGING_OF_TASKS_START =115
"""
Cобытие изменения времени начала задач. Генерируется при изменении времени начала в таблице или в окне свойств задач, а также на диаграмме Ганта.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
"""
EVENT_CHANGING_OF_TASKS_FINISH =116
"""
Cобытие изменения времени окончания задач. Генерируется при изменении времени окончания в таблице или в окне свойств задач, а также на диаграмме Ганта.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
"""
EVENT_CHANGING_OF_TASKS_BUDGET =117
"""
Cобытие изменения бюджета задач. Генерируется при изменении бюджета в таблице или в окне свойств задач.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
"""
EVENT_CHANGING_OF_TASKS_ALLOCATED =118
"""
Cобытие добавления/удаления пользователей и материальных ресурсов на задачи. Генерируется при изменении списка исполнителей в таблице или в окне свойств задач.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasksAllocated <cerebro.events.BeforeEventChangingOfTasksAllocated>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasksAllocated <cerebro.events.BeforeEventChangingOfTasksAllocated>`)
"""
EVENT_CHANGING_OF_TASKS_FLAG =119
EVENT_CHANGING_OF_TASKS_PAYMENT =120
EVENT_CHANGING_OF_TASKS_TAG =121
"""
Cобытие изменения значения тега задач. Генерируется при изменении значения тега в таблице или в окне свойств задач.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasksTag <cerebro.events.BeforeEventChangingOfTasksTag>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasksTag <cerebro.events.AfterEventChangingOfTasksTag>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasksTag <cerebro.events.BeforeEventChangingOfTasksTag>`)
"""
EVENT_CHANGING_OF_TASKS_LINK =122
EVENT_CHANGING_OF_TASKS_STATUS =123
"""
Cобытие изменения статуса задач. Генерируется при изменении статуса задачи в таблице или в окне свойств задач,
а также в интерфейсе создания/редактирования сообщения.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
* def :py:func:`after_event <event.after_event>` (:py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`)
"""
EVENT_CHANGING_OF_TASKS_HASHTAGS =124
"""
Cобытие редактирования хэштегов задач. Генерируется при редактировании хэштегов задачи в таблице или в окне свойств задач.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfTasksHashtags <cerebro.events.BeforeEventChangingOfTasksHashtags>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfTasksHashtags <cerebro.events.BeforeEventChangingOfTasksHashtags>`)
"""
EVENT_CHANGING_OF_ATTACHMENT_HASHTAGS =1010
"""
Cобытие редактирования хэштегов вложений. Генерируется при редактировании хэштегов вложений в таблице или в окне редактирования хэштегов вложений.
Объекты передаваемые в функции событий:
* def :py:func:`before_event <event.before_event>` (:py:class:`BeforeEventChangingOfAttachmentsHashtags <cerebro.events.BeforeEventChangingOfAttachmentsHashtags>`)
* def :py:func:`error_event <event.error_event>` (:py:class:`EventError <cerebro.events.EventError>`,
:py:class:`BeforeEventChangingOfAttachmentsHashtags <cerebro.events.BeforeEventChangingOfAttachmentsHashtags>`)
"""
EVENT_MANAGE_OF_TASK_REFERENCE =1100
def __init__(self, event_type, event_id):
self.__event = TypeEvent(event_type, event_id)
[документация] def event_type(self):
"""
:returns: :py:const:`тип события <cerebro.events.Event.EVENT_>`.
:rtype: int
"""
return self.__event.type;
[документация] def type_str(self):
"""
:returns: строковое имя типа события.
:rtype: string
"""
if self.__event.type == Event.EVENT_TEST:
return 'EVENT_TEST'
elif self.__event.type == Event.EVENT_CREATION_OF_MESSAGE:
return 'EVENT_CREATION_OF_MESSAGE'
elif self.__event.type == Event.EVENT_CHANGING_OF_MESSAGE:
return 'EVENT_CHANGING_OF_MESSAGE'
elif self.__event.type == Event.EVENT_CHANGING_OF_MESSAGE_APPROVED:
return 'EVENT_CHANGING_OF_MESSAGE_APPROVED'
elif self.__event.type == Event.EVENT_CHANGING_OF_MESSAGE_CLIENT_VISIBLE:
return 'EVENT_CHANGING_OF_MESSAGE_CLIENT_VISIBLE'
elif self.__event.type == Event.EVENT_CREATION_OF_TASK:
return 'EVENT_CREATION_OF_TASK'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_NAME:
return 'EVENT_CHANGING_OF_TASKS_NAME'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_ACTIVITY:
return 'EVENT_CHANGING_OF_TASKS_ACTIVITY'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_PRIORITY:
return 'EVENT_CHANGING_OF_TASKS_PRIORITY'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_PROGRESS:
return 'EVENT_CHANGING_OF_TASKS_PROGRESS'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_PLANNED_TIME:
return 'EVENT_CHANGING_OF_TASKS_PLANNED_TIME'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_START:
return 'EVENT_CHANGING_OF_TASKS_START'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_FINISH:
return 'EVENT_CHANGING_OF_TASKS_FINISH'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_BUDGET:
return 'EVENT_CHANGING_OF_TASKS_BUDGET'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_ALLOCATED:
return 'EVENT_CHANGING_OF_TASKS_ALLOCATED'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_FLAG:
return 'EVENT_CHANGING_OF_TASKS_FLAG'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_PAYMENT:
return 'EVENT_CHANGING_OF_TASKS_PAYMENT'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_TAG:
return 'EVENT_CHANGING_OF_TASKS_TAG'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_LINK:
return 'EVENT_CHANGING_OF_TASKS_LINK'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_STATUS:
return 'EVENT_CHANGING_OF_TASKS_STATUS'
elif self.__event.type == Event.EVENT_CHANGING_OF_MESSAGE_HASHTAGS:
return 'EVENT_CHANGING_OF_MESSAGE_HASHTAGS'
elif self.__event.type == Event.EVENT_CHANGING_OF_TASKS_HASHTAGS:
return 'EVENT_CHANGING_OF_TASKS_HASHTAGS'
elif self.__event.type == Event.EVENT_CHANGING_OF_ATTACHMENT_HASHTAGS:
return 'EVENT_CHANGING_OF_ATTACHMENT_HASHTAGS'
[документация]class EventError:
"""
Класс ошибки события.
Имеет два атрибута:
* code (int) - код ошибки
* text (string) - текст ошибки
Передается в функцию error_event модуля event.
::
def error_event(error, event):
print(error)
print(error.code)
print(error.text)
"""
def __init__(self, code, text):
self.code = code
self.text = text
def __repr__(self):
return "Error_event({0.text!r}. {0.code!r})".format(self)
def __str__(self):
return "Error code {0.code}: {0.text}".format(self)
[документация]class TestEvent(Event):
"""
Класс тестового события.
.. rubric:: Методы
* :py:class:`методы базового класса cerebro.events.Event <cerebro.events.Event>`
Вызов тестого события происходит при нажатии на кнопке :ref:`Вызвать тестовое событие <capi_test_btn>` на панели отладки Python.
Это событие нужно для того чтобы проверить корректность работы событийного механизма.
Объект класса передается в функции :py:func:`before_event <event.before_event>`,
:py:func:`after_event <event.after_event>`
и :py:func:`error_event <event.error_event>`
модуля :ref:`event <capi-event>`.
::
def after_event(event):
if event.event_type() == event.EVENT_TEST:
print('Тестовое событие прошло успешно')
"""
def __init__(self, event_type, event_id):
Event.__init__(self, event_type, event_id)
[документация]class BeforeEventMessage(Event, cerebro.aclasses.AbstractMessage):
"""
Базовый класс для события создания и изменения сообщения.
Предоставляет доступ к данным нового/редактируемого сообщения перед записью в базу данных.
.. rubric:: Методы
* :py:meth:`add_attachment() <cerebro.events.BeforeEventMessage.add_attachment>`
* :py:meth:`add_attachment_as_link() <cerebro.events.BeforeEventMessage.add_attachment_as_link>`
* :py:meth:`new_attachments() <cerebro.events.BeforeEventMessage.new_attachments>`
* :py:meth:`new_task_status() <cerebro.events.BeforeEventMessage.new_task_status>`
* :py:meth:`resources() <cerebro.events.BeforeEventMessage.resources>`
* :py:meth:`set_approved() <cerebro.events.BeforeEventMessage.set_approved>`
* :py:meth:`set_client_visible() <cerebro.events.BeforeEventMessage.set_client_visible>`
* :py:meth:`set_html_text() <cerebro.events.BeforeEventMessage.set_html_text>`
* :py:meth:`set_new_task_status() <cerebro.events.BeforeEventMessage.set_new_task_status>`
* :py:meth:`set_work_time() <cerebro.events.BeforeEventMessage.set_work_time>`
* :py:class:`методы базового класса cerebro.aclasses.AbstractMessage <cerebro.aclasses.AbstractMessage>`
* :py:class:`методы базового класса cerebro.events.Event <cerebro.events.Event>`
.. seealso:: :py:class:`AfterEventMessage <cerebro.events.AfterEventMessage>`.
"""
def __init__(self, event_type, event_id):
Event.__init__(self, event_type, event_id)
cerebro.aclasses.AbstractMessage.__init__(self, event_id, -2)
[документация] def resources(self):
"""
:returns: список материальных ресурсов, за которых производится отчет.
:rtype: list(tuple,) - [(resource_id, resource_name),] - список кортежей из двух полей: идентификатор материального ресурса, имя ресурса.
Ресутсы могут быть только у сообщений :py:const:`типа "Отчет за ресурс" <cerebro.aclasses.AbstractMessage.TYPE_RESOURCE_REPORT>`.
Если :py:const:`тип сообщения <cerebro.aclasses.AbstractMessage.TYPE_>` не "Отчет за ресурс", возвращается None.
::
if event.type() == event.TYPE_RESOURCE_REPORT:
print('resources()', event.resources())
"""
return py_cerebro_classes.message_resources(self._Event__event.id)
[документация] def new_attachments(self):
"""
:returns: список новых вложений в сообщение.
:rtype: list(:py:class:`cerebro.aclasses.NewAttachment`,)
"""
attachs = list()
ids = py_cerebro_classes.message_attach_ids(self._Event__event.id, self._AbstractMessage__message_id)
if ids != None:
for id in ids:
attachs.append(cerebro.aclasses.NewAttachment(self._Event__event.id, self._AbstractMessage__message_id, id))
return attachs
[документация] def add_attachment(self, file_path, comment = '', name= '', hashtags = None):
"""
:param string file_path: путь до файла.
:param string comment: текстовый комментарий.
:param string name: имя вложения. Если имя не задано, в качестве имени вложения берется имя файла.
:param hashtags: хэштег или массив хэштегов (каждый хэштег должен быть одним словом без пробелов).
:type hashtags: string, set(string, ) или list(string, )
Добавляет вложение в сообщение.
::
def before_event(event):
evtype = event.event_type()
if evtype == event.EVENT_CREATION_OF_MESSAGE or evtype == event.EVENT_CHANGING_OF_MESSAGE:
file_path = cerebro.core.python_api_dir() + '/examples/icon.png'
event.add_attachment(file_path, 'Добавлен при помощи Cerebro Python API')
.. seealso:: :py:meth:`add_attachment_as_link() <cerebro.events.BeforeEventMessage.add_attachment_as_link>`.
"""
py_cerebro_classes.message_add_attach(self._Event__event.id, False, file_path, name, comment)
[документация] def add_attachment_as_link(self, file_path, comment = '', hashtags = None):
"""
:param string file_path: путь до файла.
:param string comment: текстовый комментарий.
:param hashtags: хэштег или массив хэштегов (каждый хэштег должен быть одним словом без пробелов).
:type hashtags: string, set(string, ) или list(string, )
Добавляет вложение как линк. Это вложение не попадет в файловое хранилище Cargador, а добавится как ссылка.
Именем вложения будет file_path.
.. seealso:: :py:meth:`add_attachment() <cerebro.events.BeforeEventMessage.add_attachment>`.
"""
py_cerebro_classes.message_add_attach(self._Event__event.id, True, file_path, str(), comment)
[документация] def set_html_text(self, text):
"""
:param string text: текст в формате html. Текст может быть и без форматирования.
Устанавливает новый текст сообщения.
"""
py_cerebro_classes.message_set_html_text(self._Event__event.id, text)
[документация] def set_client_visible(self, is_visible):
"""
:param bool is_visible: Если равен True, сообщение устанавливается как видимое для клиентов, иначе - невидимое.
Устанавливает видимость сообщения для клиентов.
::
def before_event(event):
evtype = event.event_type()
if evtype == event.EVENT_CREATION_OF_MESSAGE:
event.set_client_visible(True)
"""
py_cerebro_classes.message_set_client_visible(self._Event__event.id, is_visible)
[документация] def set_work_time(self, minutes):
"""
:param float minutes: время в минутах.
Устанавливает рабочее время сообщения для клиентов.
Если тип сообщения :py:const:`"Отчет" <cerebro.aclasses.AbstractMessage.TYPE_REPORT>`
или :py:const:`"Отчет за ресурс" <cerebro.aclasses.AbstractMessage.TYPE_RESOURCE_REPORT>`,
рабочее время означает заявленное время работы.
Если тип сообщения :py:const:`"Рецензия" <cerebro.aclasses.AbstractMessage.TYPE_REVIEW>`,
рабочее время означает принятое время работы за предыдущий отчет.
Для остальных типов задавать рабочее время не имеет смысла.
::
if event.type() == event.TYPE_REPORT:
if event.work_time() > 60000: # если время отчета больше 1000 часов
raise Exception('Не много ли?') # генерируем исключение (пользователь увидит окно с этой ошибкой)
else event.work_time() < 60: # если время отчета меньше 1 часа
event.set_work_time(60) # установим, так и быть, 1 час (60 минут)
"""
py_cerebro_classes.message_set_work_time(self._Event__event.id, minutes)
[документация] def set_approved(self, is_approved):
"""
:param bool is_approved: Если равен True, отчету устанавливается состояние 'принято', иначе состояние 'принято' сбрасывается.
Устанавливает отчету статус 'принято'.
Состояние 'принято' означает, что рабочее время отчета становится принятым и в графическом интерфейсе в сообщении появляется зеленая галочка.
Этот статус имеет смысл устанавливать только для сообщений :py:const:`типа "Отчет" <cerebro.aclasses.AbstractMessage.TYPE_REPORT>`
или :py:const:`типа "Отчет за ресурс" <cerebro.aclasses.AbstractMessage.TYPE_RESOURCE_REPORT>`.
::
if event.type() == event.TYPE_REPORT:
event.set_approved(True)
"""
py_cerebro_classes.message_set_approved(self._Event__event.id, is_approved)
[документация] def new_task_status(self):
"""
:returns: новый статус задачи, который задает пользователь при создании/редактировании сообщения.
'(0, '')' означает, что пользователь переводит статус задачи в 'Нет статуса'.
:rtype: tuple(status_id, status_name) - список кортежей из двух полей: идентификатор статуса, имя статуса.
В графическом интерфейсе создания/редактирования сообщения есть возможность выбрать статус, в который перейдет задача после отправки сообщения.
Если пользователь не меняет статус, то новый статус равен :py:meth:'текущему статусу задачи <cerebro.aclasses.Task.status>'.
.. seealso:: :py:meth:`set_new_task_status() <cerebro.events.BeforeEventMessage.set_new_task_status>`.
"""
mdata = py_cerebro_classes.message_data(self._AbstractMessage__event_id, self._AbstractMessage__message_id)
return (mdata[cerebro.aclasses.AbstractMessage.DATA_STATUS_ID], mdata[cerebro.aclasses.AbstractMessage.DATA_STATUS_NAME])
[документация] def set_new_task_status(self, status_id):
"""
:param int status_id: идентификатор статуса.
Устанавливает новый статус, в который перейдет задача после отправки сообщения. '0' переводит статус задачи в 'Нет статуса'.
::
# Если пишется отчет и новый статус не равен 'pending review',
# то устанавливаем этот статус
if event.type() == event.TYPE_REPORT and event.new_task_status()[1] != 'pending review':
task = cerebro.core.task(event.task_id())
possible_statuses = task.possible_statuses()
for status in possible_statuses:
if status[cerebro.aclasses.Statuses.DATA_NAME] == 'pending review': # Поверяем, что пользователь может переключится на статус 'pending review'
event.set_new_task_status(status[cerebro.aclasses.Statuses.DATA_ID])
break
.. seealso:: :py:meth:`new_task_status() <cerebro.events.BeforeEventMessage.new_task_status>`.
"""
return py_cerebro_classes.message_set_new_status(self._Event__event.id, status_id)
[документация]class AfterEventMessage(Event, cerebro.aclasses.Message):
"""
Базовый класс для события создания и изменения сообщения.
Предоставляет доступ к данным созданного/измененного сообщения после записи в базу данных.
.. rubric:: Методы
* :py:meth:`new_attachments() <cerebro.events.AfterEventMessage.new_attachments>`
* :py:meth:`resources() <cerebro.events.AfterEventMessage.resources>`
* :py:class:`методы базового класса cerebro.aclasses.Message <cerebro.aclasses.Message>`
* :py:class:`методы базового класса cerebro.events.Event <cerebro.events.Event>`
.. seealso:: :py:class:`BeforeEventMessage <cerebro.events.BeforeEventMessage>`.
"""
def __init__(self, event_type, event_id):
Event.__init__(self, event_type, event_id)
cerebro.aclasses.Message.__init__(self, py_cerebro_classes.event_message_id(event_id))
[документация] def resources(self):
"""
:returns: список материальных ресурсов, за которых был создан отчет.
:rtype: list(tuple,) - [(resource_id, resource_name),] - список кортежей из двух полей: идентификатор материального ресурса, имя ресурса.
Ресурсы могут быть только у сообщений :py:const:`типа "Отчет за ресурс" <cerebro.aclasses.AbstractMessage.TYPE_RESOURCE_REPORT>`.
Если :py:const:`тип сообщения <cerebro.aclasses.AbstractMessage.TYPE_>` не "Отчет за ресурс", возвращается None.
::
if event.type() == event.TYPE_RESOURCE_REPORT:
print('resources()', event.resources())
"""
return py_cerebro_classes.message_resources(self._Event__event.id)
[документация] def new_attachments(self):
"""
:returns: список новых вложений в сообщение.
:rtype: list(:py:class:`cerebro.aclasses.AbstractAttachment`,)
"""
attachs = list()
ids = py_cerebro_classes.message_attach_ids(self._Event__event.id, -2)
if ids != None:
for id in ids:
attachs.append(cerebro.aclasses.AbstractAttachment(self._Event__event.id, -2, id))
return attachs
[документация]class BeforeEventCreationOfMessage(BeforeEventMessage):
"""
Класс для события создания сообщения.
Предоставляет доступ к данным нового сообщения перед записью в базу данных.
.. rubric:: Методы
* :py:meth:`add_hashtags() <cerebro.events.BeforeEventMessage.add_hashtags>`
* :py:meth:`remove_hashtags() <cerebro.events.BeforeEventMessage.remove_hashtags>`
* :py:class:`методы базового класса cerebro.events.BeforeEventMessage <cerebro.events.BeforeEventMessage>`
Объект класса передается в функции :py:func:`before_event <event.before_event>`
и :py:func:`error_event <event.error_event>` (в случаи возникновения ошибки)
модуля :ref:`event <capi-event>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CREATION_OF_MESSAGE:
...
.. seealso:: :py:class:`AfterEventCreationOfMessage <cerebro.events.AfterEventCreationOfMessage>`.
"""
def __init__(self, event_type, event_id):
BeforeEventMessage.__init__(self, event_type, event_id)
[документация]class AfterEventCreationOfMessage(AfterEventMessage):
"""
Класс для события создания сообщения.
Предоставляет доступ к данным нового сообщения после записи в базу данных.
.. rubric:: Методы
* :py:class:`методы базового класса cerebro.events.AfterEventMessage <cerebro.events.AfterEventMessage>`
Объект класса передается в функцию :py:func:`after_event <event.after_event>`
модуля :ref:`event <capi-event>`.
::
def after_event(event):
if event.event_type() == event.EVENT_CREATION_OF_MESSAGE:
...
.. seealso:: :py:class:`BeforeEventCreationOfMessage <cerebro.events.BeforeEventCreationOfMessage>`.
"""
def __init__(self, event_type, event_id):
AfterEventMessage.__init__(self, event_type, event_id)
[документация]class BeforeEventChangingOfMessage(BeforeEventMessage):
"""
Класс для события редактирования сообщения.
Предоставляет доступ к данным редактируемого сообщения перед записью в базу данных.
.. rubric:: Методы
* :py:meth:`existing_attachments() <cerebro.events.BeforeEventChangingOfMessage.existing_attachments>`
* :py:meth:`original_message() <cerebro.events.BeforeEventChangingOfMessage.original_message>`
* :py:class:`методы базового класса cerebro.events.BeforeEventMessage <cerebro.events.BeforeEventMessage>`
Объект класса передается в функции :py:func:`before_event <event.before_event>`
и :py:func:`error_event <event.error_event>` (в случаи возникновения ошибки)
модуля :ref:`event <capi-event>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_MESSAGE:
...
.. seealso:: :py:class:`AfterEventChangingOfMessage <cerebro.events.AfterEventChangingOfMessage>`.
"""
def __init__(self, event_type, event_id):
BeforeEventMessage.__init__(self, event_type, event_id)
[документация] def existing_attachments(self):
"""
:returns: список существующих вложений, которые были добавлены к сообщению раннее.
:rtype: list(:py:class:`cerebro.aclasses.AbstractAttachment`,)
"""
attachs = list()
ids = py_cerebro_classes.existing_attach_ids(self._Event__event.id)
if ids != None:
for id in ids:
attachs.append(cerebro.aclasses.AbstractAttachment(self._Event__event.id, -2, id))
return attachs
[документация] def original_message(self):
"""
:returns: сообщение в состоянии до начала редактирования пользователем.
:rtype: :py:class:`cerebro.aclasses.Message`
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_MESSAGE:
orig_message = event.original_message()
# Cравниваем текущее рабочее время сообщения и время до редактирования
if event.work_time() != orig_message.work_time():
raise Exception('Рабочее время менять нельзя!')
"""
return cerebro.aclasses.Message(py_cerebro_classes.event_message_id(self._Event__event.id))
[документация]class AfterEventChangingOfMessage(AfterEventMessage):
"""
Класс для события редактирования сообщения.
Предоставляет доступ к данным измененного сообщения после записи в базу данных.
.. rubric:: Методы
* :py:class:`методы базового класса cerebro.events.AfterEventMessage <cerebro.events.AfterEventMessage>`
Объект класса передается в функцию :py:func:`after_event <event.after_event>`
модуля :ref:`event <capi-event>`.
::
def after_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_MESSAGE:
...
.. seealso:: :py:class:`BeforeEventChangingOfMessage <cerebro.events.BeforeEventChangingOfMessage>`.
"""
def __init__(self, event_type, event_id):
AfterEventMessage.__init__(self, event_type, event_id)
[документация]class BeforeEventCreationOfTask(Event, cerebro.aclasses.Task):
"""
Класс для события создания задачи.
Предоставляет доступ к данным новой задачи перед записью в базу данных.
.. rubric:: Методы
* :py:meth:`definition() <cerebro.events.BeforeEventCreationOfTask.definition>`
* :py:class:`методы базового класса cerebro.aclasses.Task <cerebro.aclasses.Task>`
* :py:class:`методы базового класса cerebro.events.Event <cerebro.events.Event>`
Объект класса передается в функции :py:func:`before_event <event.before_event>`
и :py:func:`error_event <event.error_event>` (в случаи возникновения ошибки)
модуля :ref:`event <capi-event>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CREATION_OF_TASK:
...
.. seealso:: :py:class:`AfterEventCreationOfTask <cerebro.events.AfterEventCreationOfTask>`.
"""
def __init__(self, event_type, event_id):
Event.__init__(self, event_type, event_id)
uids = py_cerebro_classes.event_task_ids(event_id);
cerebro.aclasses.Task.__init__(self, uids[0])
self.__event_message = BeforeEventCreationOfMessage(event_type, event_id)
[документация] def definition(self):
"""
:returns: новое сообщение :py:const:`типа "Постановка задачи" <cerebro.aclasses.AbstractMessage.TYPE_DEFINITION>`.
:rtype: :py:class:`cerebro.events.BeforeEventCreationOfMessage`
При создании новой задачи, создается новое сообщение типа "Постановка задачи",
поэтому в событии создания задачи обрабатывается и создание этого сообщения.
::
if event.event_type() == event.EVENT_CREATION_OF_TASK:
message = event.definition()
...
"""
return self.__event_message
[документация]class AfterEventCreationOfTask(Event, cerebro.aclasses.Task):
"""
Класс для события создания задачи.
Предоставляет доступ к данным новой задачи после записи в базу данных.
.. rubric:: Методы
* :py:meth:`definition() <cerebro.events.BeforeEventCreationOfTask.definition>`
* :py:class:`методы базового класса cerebro.aclasses.Task <cerebro.aclasses.Task>`
* :py:class:`методы базового класса cerebro.events.Event <cerebro.events.Event>`
Объект класса передается в функцию :py:func:`after_event <event.after_event>`
модуля :ref:`event <capi-event>`.
::
def after_event(event):
if event.event_type() == event.EVENT_CREATION_OF_TASK:
...
.. seealso:: :py:class:`BeforeEventCreationOfTask <cerebro.events.BeforeEventCreationOfTask>`.
"""
def __init__(self, event_type, event_id):
Event.__init__(self, event_type, event_id)
uids = py_cerebro_classes.event_task_ids(event_id);
cerebro.aclasses.Task.__init__(self, uids[0])
self.__event_message = AfterEventCreationOfMessage(event_type, event_id)
[документация] def definition(self):
"""
:returns: новое сообщение :py:const:`типа "Постановка задачи" <cerebro.aclasses.AbstractMessage.TYPE_DEFINITION>`.
:rtype: :py:class:`cerebro.events.AfterEventCreationOfMessage`
При создании новой задачи, создается новое сообщение типа "Постановка задачи",
поэтому в событии создания задачи обрабатывается и создание этого сообщения.
::
if event.event_type() == event.EVENT_CREATION_OF_TASK:
message = event.definition()
...
"""
return self.__event_message
class EventManageOfTasks(Event):
def __init__(self, event_type, event_id):
Event.__init__(self, event_type, event_id)
def tasks(self):
tasks = list()
ids = py_cerebro_classes.event_task_ids(self._Event__event.id);
if ids != None:
for id in ids:
tasks.append(cerebro.core.task(id))
return tasks
def destination(self):
tasks = list()
ids = py_cerebro_classes.event_to_task_ids(self._Event__event.id);
if ids != None:
for id in ids:
tasks.append(cerebro.core.task(id))
return tasks
[документация]class EventChangingOfTasks(Event):
"""
Базовый класс для события изменения какого-либо свойства у одной или сразу нескольких задач.
Предоставляет доступ к данным редактируемых задач перед записью в базу данных.
.. note:: Изменение может происходить сразу у нескольких задач и для всех однотипных изменений генерируется одно событие.
.. rubric:: Методы
* :py:meth:`tasks() <cerebro.events.EventChangingOfTasks.tasks>`
* :py:class:`методы базового класса cerebro.events.Event <cerebro.events.Event>`
"""
def __init__(self, event_type, event_id):
Event.__init__(self, event_type, event_id)
[документация] def tasks(self):
"""
:returns: список редактируемых пользователем задач.
:rtype: list(:py:class:`cerebro.aclasses.Task`,)
"""
tasks = list()
ids = py_cerebro_classes.event_task_ids(self._Event__event.id);
if ids != None:
for id in ids:
tasks.append(cerebro.core.task(id))
return tasks
[документация]class EventChangingOfMessages(Event):
"""
Базовый класс для события изменения какого-либо свойства у одной или сразу нескольких сообщений.
Предоставляет доступ к данным редактируемых сообщений перед записью в базу данных.
.. note:: Изменение может происходить сразу у нескольких сообщений и для всех однотипных изменений генерируется одно событие.
.. rubric:: Методы
* :py:meth:`messages() <cerebro.events.EventChangingOfMessages.messages>`
* :py:class:`методы базового класса cerebro.events.Event <cerebro.events.Event>`
"""
def __init__(self, event_type, event_id):
Event.__init__(self, event_type, event_id)
[документация] def messages(self):
"""
:returns: список редактируемых пользователем сообщений.
:rtype: list(:py:class:`cerebro.aclasses.Message`,)
"""
pass
[документация]class EventChangingOfAttachments(Event):
"""
Базовый класс для события изменения какого-либо свойства у одного или сразу нескольких вложений.
Предоставляет доступ к данным редактируемых вложений перед записью в базу данных.
.. note:: Изменение может происходить сразу у нескольких вложений и для всех однотипных изменений генерируется одно событие.
.. rubric:: Методы
* :py:meth:`attachments() <cerebro.events.EventChangingOfAttachments.attachments>`
* :py:class:`методы базового класса cerebro.events.Event <cerebro.events.Event>`
"""
def __init__(self, event_type, event_id):
Event.__init__(self, event_type, event_id)
[документация] def attachments(self):
"""
:returns: список редактируемых пользователем вложений.
:rtype: list((attach_id, :py:class:`cerebro.aclasses.Message`),)
"""
pass
[документация]class BeforeEventChangingOfTasks(EventChangingOfTasks):
"""
Класс для события изменения свойства у одной или сразу нескольких задач.
Предоставляет доступ к данным редактируемых задач перед записью в базу данных.
.. rubric:: Методы
* :py:meth:`new_value() <cerebro.events.BeforeEventChangingOfTasks.new_value>`
* :py:meth:`set_new_value() <cerebro.events.BeforeEventChangingOfTasks.set_new_value>`
* :py:class:`методы базового класса cerebro.events.EventChangingOfTasks <cerebro.events.EventChangingOfTasks>`
.. warning:: Этот класс используется при редактировании большинства свойств, но есть и исключения.
При редактировании некоторых свойств, например тегов задачи, используются другие классы.
:py:mod:`Смотрите весь список классов событий <cerebro.events>`.
Объект класса передается в функции :py:func:`before_event <event.before_event>`
и :py:func:`error_event <event.error_event>` (в случаи возникновения ошибки)
модуля :ref:`event <capi-event>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_TASKS_PROGRESS:
...
.. seealso:: :py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`.
"""
def __init__(self, event_type, event_id):
EventChangingOfTasks.__init__(self, event_type, event_id)
[документация] def new_value(self):
"""
:returns: новое значение редактируемого свойства.
Тип возвращаемого значения зависит от редактирумого свойства.
Для определения нужного типа смотрите методы класса :py:class:`cerebro.aclasses.Task`
по получению значений аналогичных свойств.
.. note:: Чтобы узнать текущие значения, возпользуйтесь :py:class:`соответствующими методами <cerebro.aclasses.Task>`
редактируемых задач :py:meth:`tasks() <cerebro.events.EventChangingOfTasks.tasks>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_TASKS_ACTIVITY: # изменяется вид деятельности
tasks = event.tasks()
for task in tasks:
print('Имя задачи', task.name())
print('<Бывший вид деятельности', task.activity())
print('Новый вид деятельности', event.new_value())
"""
return py_cerebro_classes.task_new_value(self._Event__event.id)
[документация] def set_new_value(self, val):
"""
:param val: значение свойства.
Устанавливает новое значение редактируемого свойства.
Тип нового значения зависит от редактируемого свойства.
Для определения нужного типа смотрите методы класса :py:class:`cerebro.aclasses.Task`
по установке значений аналогичных свойств.
::
if event.type() == event.EVENT_CHANGING_OF_TASKS_NAME:
task_name = event.new_value()
if task_name.isupper() == False:
new_name = task_name.upper() # переводим буквы в верхний регистр
event.set_new_value(new_name) # подменяем введенноё пользователем значение на новое
"""
py_cerebro_classes.task_set_new_value(self._Event__event.id, val)
[документация]class AfterEventChangingOfTasks(EventChangingOfTasks):
"""
Класс для события изменения свойства у одной или сразу нескольких задач.
Предоставляет доступ к данным измененных задач после записи в базу данных.
.. warning:: Этот класс используется при редактировании большинства свойств, но есть и исключения.
При редактировании некоторых свойств, например тегов задачи, используются другие классы.
:py:mod:`Смотрите весь список классов событий <cerebro.events>`.
.. rubric:: Методы
* :py:class:`методы базового класса cerebro.events.EventChangingOfTasks <cerebro.events.EventChangingOfTasks>`
Объект класса передается в функцию :py:func:`after_event <event.after_event>`
модуля :ref:`event <capi-event>`.
::
def after_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_TASKS_PROGRESS:
...
.. seealso:: :py:class:`BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`.
"""
def __init__(self, event_type, event_id):
EventChangingOfTasks.__init__(self, event_type, event_id)
[документация]class BeforeEventChangingOfMessages(EventChangingOfMessages):
"""
Класс для события изменения какого-либо свойства у одной или сразу нескольких сообщений.
Предоставляет доступ к данным редактируемых сообщений перед записью в базу данных.
.. note:: Изменение может происходить сразу у нескольких сообщений и для всех однотипных изменений генерируется одно событие.
.. rubric:: Методы
* :py:meth:`new_value() <cerebro.events.BeforeEventChangingOfMessages.new_value>`
* :py:meth:`set_new_value() <cerebro.events.BeforeEventChangingOfMessages.set_new_value>`
* :py:class:`методы базового класса cerebro.events.EventChangingOfMessages <cerebro.events.EventChangingOfMessages>`
.. warning:: Этот класс используется при редактировании большинства свойств, но есть и исключения.
При редактировании некоторых свойств, например тегов задачи, используются другие классы.
:py:mod:`Смотрите весь список классов событий <cerebro.events>`.
Объект класса передается в функции :py:func:`before_event <event.before_event>`
и :py:func:`error_event <event.error_event>` (в случаи возникновения ошибки)
модуля :ref:`event <capi-event>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_MESSAGE_APPROVED:
...
.. seealso:: :py:class:`AfterEventChangingOfMessages <cerebro.events.AfterEventChangingOfMessages>`.
"""
def __init__(self, event_type, event_id):
EventChangingOfMessages.__init__(self, event_type, event_id)
[документация] def new_value(self):
"""
:returns: новое значение редактируемого свойства.
Тип возвращаемого значения зависит от редактирумого свойства.
Для определения нужного типа смотрите методы класса :py:class:`cerebro.aclasses.Message`
по получению значений аналогичных свойств.
.. note:: Чтобы узнать текущие значения, возпользуйтесь :py:class:`соответствующими методами <cerebro.aclasses.Message>`
редактируемых задач :py:meth:`tasks() <cerebro.events.EventChangingOfMessages.messages>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_MESSAGE_HASHTAGS: # хэштеги будут изменены
messages = event.messages()
for message in messages:
print('Имя сообщения', message.name())
print('Предыдущие хэштеги', message.hashtags())
print('Новые хэштеги', event.new_value())
"""
return py_cerebro_classes.message_new_value(self._Event__event.id)
[документация] def set_new_value(self, val):
"""
:param val: значение свойства.
Устанавливает новое значение редактируемого свойства.
Тип нового значения зависит от редактируемого свойства.
Для определения нужного типа смотрите методы класса :py:class:`cerebro.aclasses.Message`
по установке значений аналогичных свойств.
::
if event.type() == event.EVENT_CHANGING_OF_MESSAGE_HASHTAGS:
hashtags = event.new_value()
if len(hashtags) > 1:
event.set_new_value(hashtags[0]) # устанавливаем только первый хэштег
"""
py_cerebro_classes.message_set_new_value(self._Event__event.id, val)
[документация]class AfterEventChangingOfMessages(EventChangingOfMessages):
"""
Класс для события изменения свойства у одного или сразу нескольких сообщений.
Предоставляет доступ к данным измененных сообщений после записи в базу данных.
.. warning:: Этот класс используется при редактировании большинства свойств, но есть и исключения.
При редактировании некоторых свойств, например тегов задачи, используются другие классы.
:py:mod:`Смотрите весь список классов событий <cerebro.events>`.
.. rubric:: Методы
* :py:class:`методы базового класса cerebro.events.EventChangingOfMessages <cerebro.events.EventChangingOfMessages>`
Объект класса передается в функцию :py:func:`after_event <event.after_event>`
модуля :ref:`event <capi-event>`.
::
def after_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_MESSAGE_FLAGS:
...
.. seealso:: :py:class:`BeforeEventChangingOfMessages <cerebro.events.BeforeEventChangingOfMessages>`.
"""
def __init__(self, event_type, event_id):
EventChangingOfMessages.__init__(self, event_type, event_id)
[документация]class AfterEventChangingOfAttachments(EventChangingOfAttachments):
"""
Класс для события изменения свойства у одного или сразу нескольких вложений.
Предоставляет доступ к данным измененных вложений после записи в базу данных.
.. warning:: Этот класс используется при редактировании большинства свойств, но есть и исключения.
При редактировании некоторых свойств, например тегов задачи, используются другие классы.
:py:mod:`Смотрите весь список классов событий <cerebro.events>`.
.. rubric:: Методы
* :py:class:`методы базового класса cerebro.events.EventChangingOfAttachments <cerebro.events.EventChangingOfAttachments>`
Объект класса передается в функцию :py:func:`after_event <event.after_event>`
модуля :ref:`event <capi-event>`.
::
def after_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_ATTACHMENT_HASHTAGS:
...
.. seealso:: :py:class:`BeforeEventChangingOfAttachments <cerebro.events.BeforeEventChangingOfAttachments>`.
"""
def __init__(self, event_type, event_id):
EventChangingOfMessages.__init__(self, event_type, event_id)
[документация]class BeforeEventChangingOfTasksAllocated(BeforeEventChangingOfTasks):
"""
Класс для события добавления/удаления пользователей и материальных ресурсов на одну или сразу несколько задач.
Предоставляет доступ к данным редактируемых задач перед записью в базу данных.
.. rubric:: Методы
* :py:meth:`is_added() <cerebro.events.BeforeEventChangingOfTasksAllocated.is_added>`
* :py:class:`методы базового класса cerebro.events.BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`
Объект класса передается в функции :py:func:`before_event <event.before_event>`
и :py:func:`error_event <event.error_event>` (в случаи возникновения ошибки)
модуля :ref:`event <capi-event>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_TASKS_ALLOCATED:
...
.. seealso:: :py:class:`AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`.
"""
def __init__(self, event_type, event_id):
BeforeEventChangingOfTasks.__init__(self, event_type, event_id)
[документация] def is_added(self):
"""
:returns: True, если пользователи или материальные ресурсы добавляются на задачи. False, если убираются.
:rtype: bool
В случаи добавления пользователей метод
:py:meth:`new_value() <cerebro.events.BeforeEventChangingOfTasks.new_value>`
вернет список добавляемых пользователей. Иначе, список убираемых пользователей.
Для изменения списка добавляемых или убираемых пользователей воспользуйтесь методом
:py:meth:`set_new_value() <cerebro.events.BeforeEventChangingOfTasks.set_new_value>`.
Тип входного аргумента для этого метода - list(user_id,), список идентификаторов пользователей
и материальных ресурсов
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_TASKS_ALLOCATED: # изменяется назначение
if event.is_added() == False: # пользователи убираются с задач
# переспрашиваем пользователя, действительно ли он хочет это сделать
q = 'Вы уверены, что хотите убрать пользователей с задачи?'
if cerebro.gui.question_box('Изменение списка исполнителей', q) == False: # если пользователь неуверен
raise Exception('')
# Пользователи останутся на задаче
"""
return py_cerebro_classes.task_event_flag(self._Event__event.id)!=0
[документация]class BeforeEventChangingOfTasksTag(BeforeEventChangingOfTasks):
"""
Класс для события изменения значения тега у одной или сразу нескольких задач.
Предоставляет доступ к данным редактируемых задач перед записью в базу данных.
.. note:: Теги используются в Cerebro, как дополнительные свойства задач.
При назначении тега на проект, он автоматически становится свойством задачи.
В процесссе работы с задачами теги заполняются значениями.
.. rubric:: Методы
* :py:meth:`is_added_elements() <cerebro.events.BeforeEventChangingOfTasksTag.is_added_elements>`
* :py:meth:`tag() <cerebro.events.BeforeEventChangingOfTasksTag.tag>`
* :py:class:`методы базового класса cerebro.events.BeforeEventChangingOfTasks <cerebro.events.BeforeEventChangingOfTasks>`
Объект класса передается в функции :py:func:`before_event <event.before_event>`
и :py:func:`error_event <event.error_event>` (в случаи возникновения ошибки)
модуля :ref:`event <capi-event>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_TASKS_TAG:
...
.. seealso:: :py:class:`AfterEventChangingOfTasksTag <cerebro.events.AfterEventChangingOfTasksTag>`.
"""
def __init__(self, event_type, event_id):
BeforeEventChangingOfTasks.__init__(self, event_type, event_id)
[документация] def is_added_elements(self):
"""
:returns: True, если тип тега :py:const:`"множественное перечисление" <cerebro.aclasses.AbstractTag.TYPE_MULTI_ENUM>` и элементы добавляются к значению тега. Иначе False.
:rtype: bool
В случаи добавления элементов к значению тега метод
:py:meth:`new_value() <cerebro.events.BeforeEventChangingOfTasks.new_value>`
вернет список добавляемых элементов. Иначе, список убираемых элементов.
Для изменения списка добавляемых или убираемых элементов воспользуйтесь методом
:py:meth:`set_new_value() <cerebro.events.BeforeEventChangingOfTasks.set_new_value>`.
Тип входного аргумента для этого метода - list(tag_element_id,), список идентификаторов элементов тега.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_TASKS_TAG: # изменяется вид деятельности
if event.tag().type() == event.tag().TYPE_MULTI_ENUM and event.is_added_elements():
print('Добавляемые элементы тега', event.new_value())
"""
return py_cerebro_classes.task_event_flag(self._Event__event.id)!=0
[документация] def tag(self):
"""
:returns: редактирумый тег.
:rtype: :py:class:`cerebro.aclasses.AbstractTag`
"""
return cerebro.aclasses.AbstractTag(py_cerebro_classes.task_event_tag(self._Event__event.id))
[документация]class AfterEventChangingOfTasksTag(AfterEventChangingOfTasks):
"""
Класс для события изменения значения тега у одной или сразу нескольких задач.
Предоставляет доступ к данным измененных задач после записи в базу данных.
.. rubric:: Методы
* :py:meth:`tag() <cerebro.events.AfterEventChangingOfTasksTag.tag>`
* :py:class:`методы базового класса cerebro.events.AfterEventChangingOfTasks <cerebro.events.AfterEventChangingOfTasks>`
Объект класса передается в функцию :py:func:`after_event <event.after_event>`
модуля :ref:`event <capi-event>`.
::
def after_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_TASKS_TAG:
...
.. seealso:: :py:class:`BeforeEventChangingOfTasksTag <cerebro.events.BeforeEventChangingOfTasksTag>`.
"""
def __init__(self, event_type, event_id):
AfterEventChangingOfTasks.__init__(self, event_type, event_id)
[документация] def tag(self):
"""
:returns: измененный тег.
:rtype: :py:class:`cerebro.aclasses.AbstractTag`
"""
return cerebro.aclasses.AbstractTag(py_cerebro_classes.task_event_tag(self._Event__event.id))
[документация]class BeforeEventChangingOfAttachments(EventChangingOfAttachments):
"""
Класс для события изменения какого-либо свойства у одной или сразу нескольких вложений.
Предоставляет доступ к данным редактируемых вложений перед записью в базу данных.
.. note:: Изменение может происходить сразу у нескольких сообщений и для всех однотипных изменений генерируется одно событие.
.. rubric:: Методы
* :py:meth:`new_value() <cerebro.events.BeforeEventChangingOfAttachments.new_value>`
* :py:meth:`set_new_value() <cerebro.events.BeforeEventChangingOfAttachments.set_new_value>`
* :py:class:`методы базового класса cerebro.events.EventChangingOfAttachments <cerebro.events.EventChangingOfAttachments>`
.. warning:: Этот класс используется при редактировании большинства свойств, но есть и исключения.
При редактировании некоторых свойств, например тегов задачи, используются другие классы.
:py:mod:`Смотрите весь список классов событий <cerebro.events>`.
Объект класса передается в функции :py:func:`before_event <event.before_event>`
и :py:func:`error_event <event.error_event>` (в случаи возникновения ошибки)
модуля :ref:`event <capi-event>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_MESSAGE_APPROVED:
...
.. seealso:: :py:class:`AfterEventChangingOfAttachments <cerebro.events.AfterEventChangingOfAttachments>`.
"""
def __init__(self, event_type, event_id):
EventChangingOfAttachments.__init__(self, event_type, event_id)
[документация] def new_value(self):
"""
:returns: новое значение редактируемого свойства.
Тип возвращаемого значения зависит от редактирумого свойства.
Для определения нужного типа смотрите методы класса :py:class:`cerebro.aclasses.Attachment`
по получению значений аналогичных свойств.
.. note:: Чтобы узнать текущие значения, возпользуйтесь :py:class:`соответствующими методами <cerebro.aclasses.Attachment>`
редактируемых задач :py:meth:`tasks() <cerebro.events.EventChangingOfAttachments.attachments>`.
::
def before_event(event):
if event.event_type() == event.EVENT_CHANGING_OF_MESSAGE_HASHTAGS: # activity type is being changed
messages = event.messages()
for message in messages:
print('Message name', message.name())
print('<Previous activity type', message.activity())
print('New activity type', event.new_value())
"""
return py_cerebro_classes.attach_new_value(self._Event__event.id)
[документация] def set_new_value(self, val):
"""
:param val: значение свойства.
Устанавливает новое значение редактируемого свойства.
Тип нового значения зависит от редактируемого свойства.
Для определения нужного типа смотрите методы класса :py:class:`cerebro.aclasses.Attachment`
по установке значений аналогичных свойств.
::
if event.type() == event.EVENT_CHANGING_OF_MESSAGE_HASHTAGS:
message_name = event.new_value()
if task_name.isupper() == False:
new_name = task_name.upper() # changing the symbols to the upper register
event.set_new_value(new_name) # substituting the value entered by user for the new one
"""
py_cerebro_classes.attach_set_new_value(self._Event__event.id, val)