Source code for dtlpy.entities.annotation_definitions.note

import numpy as np
import time

from . import Box
from ...services.api_client import client as api_client


[docs]class Note(Box): """ Note annotation object """ def __init__( self, left, top, right, bottom, label, attributes=None, messages=None, status='issue', assignee=None, create_time=None, creator=None, description=None ): super(Note, self).__init__( left=left, top=top, right=right, bottom=bottom, label=label, attributes=attributes, description=description ) self.type = "note" if messages is None: messages = [] if not isinstance(messages, list): messages = [messages] for msg_index in range(len(messages)): if not isinstance(messages[msg_index], Message): messages[msg_index] = Message(body=messages[msg_index]) self.messages = messages self.status = status self.create_time = create_time self.creator = creator if self.creator is None: self.creator = api_client.info()['user_email'] self.assignee = assignee if self.assignee is None: self.assignee = self.creator def to_coordinates(self, color): box = super(Note, self).to_coordinates(color=color) note = { 'messages': [msg.to_json() for msg in self.messages], 'status': self.status, 'createTime': self.create_time, 'creator': self.creator, 'assignee': self.assignee } coordinates = { 'box': box, 'note': note } return coordinates @staticmethod def from_coordinates(coordinates): return Box.from_coordinates(coordinates['box']) @classmethod def from_json(cls, _json): if "coordinates" in _json: geo = cls.from_coordinates(_json["coordinates"]) note_data = _json["coordinates"].get('note', dict()) elif "data" in _json: geo = cls.from_coordinates(_json["data"]) note_data = _json["data"].get('note', dict()) else: raise ValueError('can not find "coordinates" or "data" in annotation. id: {}'.format(_json["id"])) left = np.min(geo[:, 0]) top = np.min(geo[:, 1]) right = np.max(geo[:, 0]) bottom = np.max(geo[:, 1]) messages = [Message.from_json(msg) for msg in note_data.get('messages', list())] return cls( left=left, top=top, right=right, bottom=bottom, label=_json["label"], attributes=_json.get("attributes", None), messages=messages, status=note_data.get('status', 'open'), creator=note_data.get('creator', 'me'), assignee=note_data.get('assignee', 'me'), create_time=note_data.get('createTime', 0), ) def add_message(self, body: str = None): self.messages.append(Message(body=body))
[docs]class Message: """ Note message object """ def __init__(self, msg_id: str = None, creator: str = None, msg_time=None, body: str = None): self.id = msg_id self.time = msg_time if msg_time is not None else int(time.time() * 1000) self.body = body self.creator = creator if self.creator is None: self.creator = api_client.info()['user_email'] def to_json(self): _json = { "id": self.id, "creator": self.creator, "time": self.time, "body": self.body } return _json @staticmethod def from_json(_json): return Message( msg_id=_json.get('id', None), msg_time=_json.get('time', None), body=_json.get('body', None), creator=_json.get('creator', None) )