Source code for mwdblib.share

import datetime
from typing import TYPE_CHECKING, Optional, cast

from .object import MWDBElement, MWDBObject

if TYPE_CHECKING:
    from .api import APIClient
    from .object import MWDBElementData


[docs]class MWDBShareReason: """ Represents the reason why object was shared with specified group """ def __init__(self, api: "APIClient", share_data: "MWDBElementData") -> None: self.api = api self._data = share_data self._related_object: Optional[MWDBObject] = None @property def what(self) -> MWDBObject: """ Returns what was shared """ if self._related_object is None: self._related_object = MWDBObject.create( self.api, { "id": self._data["related_object_dhash"], "type": self._data["related_object_type"], }, ) return self._related_object @property def why(self) -> str: """ Returns why it was shared :return: One of actions: 'queried', 'shared', 'added', 'migrated' """ return cast(str, self._data["reason_type"]) @property def who(self) -> str: """ Returns who caused action returned by :py:attr:`why` property. :return: User login """ return cast(str, self._data["related_user_login"]) def __str__(self) -> str: """ Returns str with unparsed reason string """ return "{} {}:{} by {}".format( self._data["reason_type"], self._data["related_object_type"], self._data["related_object_dhash"], self._data["related_user_login"], )
[docs]class MWDBShare(MWDBElement): """ Represents share entry in MWDB object """ def __init__( self, api: "APIClient", data: "MWDBElementData", parent: MWDBObject ) -> None: super().__init__(api, data) self.parent = parent @property def timestamp(self) -> "datetime.datetime": """ Returns timestamp of share :return: datetime object with object share timestamp """ return datetime.datetime.fromisoformat(self.data["access_time"]) @property def group(self) -> str: """ Returns a group name that object is shared with :return: Group name """ return cast(str, self.data["group_name"]) @property def reason(self) -> MWDBShareReason: """ Returns why object was shared """ return MWDBShareReason(self.api, self.data)