witchie/toot/tui/entities.py
Denis Laxalde 9d0d1b2dd7
Make "view" action work for reblogged statuses
When the status is a reblog, the URL of the original toot should be used
as the one of reblog is null.

We add a "url" attribute to Status class storing computed URL.
2019-09-06 16:01:04 +02:00

49 lines
1.6 KiB
Python

from collections import namedtuple
from .utils import parse_datetime
Author = namedtuple("Author", ["account", "display_name"])
class Status:
"""
A wrapper around the Status entity data fetched from Mastodon.
https://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md#status
"""
def __init__(self, data, is_mine, default_instance):
self.data = data
self.is_mine = is_mine
self.default_instance = default_instance
# This can be toggled by the user
self.show_sensitive = False
# TODO: make Status immutable?
self.id = self.data["id"]
self.display_name = self.data["account"]["display_name"]
self.account = self.get_account()
self.created_at = parse_datetime(data["created_at"])
self.author = self.get_author()
self.favourited = data.get("favourited", False)
self.reblogged = data.get("reblogged", False)
self.in_reply_to = data.get("in_reply_to_id")
reblog = data.get("reblog")
self.url = reblog.get("url") if reblog else data.get("url")
def get_author(self):
# Show the author, not the persopn who reblogged
data = self.data["reblog"] or self.data
acct = data['account']['acct']
acct = acct if "@" in acct else "{}@{}".format(acct, self.default_instance)
return Author(acct, data['account']['display_name'])
def get_account(self):
acct = self.data['account']['acct']
return acct if "@" in acct else "{}@{}".format(acct, self.default_instance)
def __repr__(self):
return "<Status id={}>".format(self.id)