# :coding: utf-8
# :copyright: Copyright (c) 2015 ftrack
import warnings
from builtins import object
import ftrack_api.entity.base
[docs]class Note(ftrack_api.entity.base.Entity):
'''Represent a note.'''
[docs] def create_reply(
self, content, author
):
'''Create a reply with *content* and *author*.
.. note::
This is a helper method. To create replies manually use the
standard :meth:`Session.create` method.
'''
reply = self.session.create(
'Note', {
'author': author,
'content': content
}
)
self['replies'].append(reply)
return reply
[docs]class CreateNoteMixin(object):
'''Mixin to add create_note method on entity class.'''
[docs] def create_note(
self, content, author, recipients=None, category=None, labels=None
):
'''Create note with *content*, *author*.
NoteLabels can be set by including *labels*.
Note category can be set by including *category*.
*recipients* can be specified as a list of user or group instances.
'''
note_label_support = 'NoteLabel' in self.session.types
if not labels:
labels = []
if labels and not note_label_support:
raise ValueError(
'NoteLabel is not supported by the current server version.'
)
if category and labels:
raise ValueError(
'Both category and labels cannot be set at the same time.'
)
if not recipients:
recipients = []
data = {
'content': content,
'author': author
}
if category:
if note_label_support:
labels = [category]
warnings.warn(
'category argument will be removed in an upcoming version, '
'please use labels instead.',
PendingDeprecationWarning
)
else:
data['category_id'] = category['id']
note = self.session.create('Note', data)
self['notes'].append(note)
for resource in recipients:
recipient = self.session.create('Recipient', {
'note_id': note['id'],
'resource_id': resource['id']
})
note['recipients'].append(recipient)
for label in labels:
self.session.create(
'NoteLabelLink',
{
'label_id': label['id'],
'note_id': note['id']
}
)
return note