From dd4b5144a95997c3fe9b6a0819a69e6412683a20 Mon Sep 17 00:00:00 2001 From: Joscha Date: Mon, 27 Mar 2017 20:37:39 +0000 Subject: [PATCH] Reorganize Message and SessionView into basic_types --- yaboli/__init__.py | 11 +-- yaboli/basic_types.py | 169 ++++++++++++++++++++++++++++++++++++++++++ yaboli/message.py | 99 ------------------------- yaboli/session.py | 71 ------------------ 4 files changed, 170 insertions(+), 180 deletions(-) create mode 100644 yaboli/basic_types.py delete mode 100644 yaboli/message.py delete mode 100644 yaboli/session.py diff --git a/yaboli/__init__.py b/yaboli/__init__.py index 8aed845..5404e3c 100644 --- a/yaboli/__init__.py +++ b/yaboli/__init__.py @@ -1,10 +1 @@ -from .bot import Bot -from .botmanager import BotManager -from .callbacks import Callbacks -from .connection import Connection -from .exceptions import * -from .session import Session -from .message import Message -from .sessions import Sessions -from .messages import Messages -from .room import Room +from .basic_types import Message, SessionView diff --git a/yaboli/basic_types.py b/yaboli/basic_types.py new file mode 100644 index 0000000..e9c4de9 --- /dev/null +++ b/yaboli/basic_types.py @@ -0,0 +1,169 @@ +import time + +class SessionView(): + """ + This class keeps track of session details. + http://api.euphoria.io/#sessionview + """ + + def __init__(self, id, name, server_id, server_era, session_id, is_staff=None, is_manager=None): + """ + id - agent/account id + name - name of the client when the SessionView was captured + server_id - id of the server + server_era - era of the server + session_id - session id (unique across euphoria) + is_staff - client is staff + is_manager - client is manager + """ + + self.id = id + self.name = name + self.server_id = server_id + self.server_era = server_era + self.session_id = session_id + self.staff = is_staff + self.manager = is_manager + + @classmethod + def from_data(self, data): + """ + Creates and returns a session created from the data. + + data - a euphoria SessionView + """ + + is_staff = data["is_staff"] if "is_staff" in data else None + is_manager = data["is_manager"] if "is_manager" in data else None + + return self( + data["id"], + data["name"], + data["server_id"], + data["server_era"], + data["session_id"], + is_staff, + is_manager + ) + + def session_type(self): + """ + session_type() -> str + + The session's type (bot, account, agent). + """ + + return self.id.split(":")[0] if ":" in self.id else None + +class Message(): + """ + This class represents a single euphoria message. + http://api.euphoria.io/#message + """ + + def __init__(self, id, time, sender, content, parent=None, edited=None, previous_edit_id=None, + deleted=None, truncated=None, encryption_key_id=None): + """ + id - message id + time - time the message was sent (epoch) + sender - session of the sender + content - content of the message + parent - id of the parent message, or None + edited - time of last edit (epoch) + previous_edit_id - edit id of the most recent edit of this message + deleted - time of deletion (epoch) + truncated - message was truncated + encryption_key_id - id of the key that encrypts the message in storage + """ + + self.id = id + self.time = time + self.sender = sender + self.content = content + self.parent = parent + self.edited = edited + self.previous_edit_id = previous_edit_id + self.deleted = deleted + self.truncated = truncated + self.encryption_key_id = encryption_key_id + + @classmethod + def from_data(self, data): + """ + Creates and returns a message created from the data. + NOTE: This also creates a session object using the data in "sender". + + data - a euphoria message: http://api.euphoria.io/#message + """ + + sender = SessionView.from_data(data["sender"]) + parent = data["parent"] if "parent" in data else None + edited = data["edited"] if "edited" in data else None + deleted = data["deleted"] if "deleted" in data else None + truncated = data["truncated"] if "truncated" in data else None + previous_edit_id = data["previous_edit_id"] if "previous_edit_id" in data else None + encryption_key_id = data["encryption_key_id"] if "encryption_key_id" in data else None + + return self( + data["id"], + data["time"], + sender, + data["content"], + parent=parent, + edited=edited, + deleted=deleted, + truncated=truncated, + previous_edit_id=previous_edit_id, + encryption_key_id=encryption_key_id + ) + + def time_formatted(self, date=True): + """ + time_formatted(date=True) -> str + + date - include date in format + + Time in a readable format: + With date: YYYY-MM-DD HH:MM:SS + Without date: HH:MM:SS + """ + + if date: + return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(self.time)) + else: + return time.strftime("%H:%M:%S", time.gmtime(self.time)) + + def formatted(self, show_time=False, date=True, insert_string=None, repeat_insert_string=True): + """ + formatted() -> strftime + + The message contents in the following format (does not end on a newline): +