# :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