Create :class:`.RedditBase` objects from dicts. :param data: The structured data, assumed to be a dict. :returns: An instance of :class:`.RedditBase`, or the ``data`` dict.
(self, *, data: dict[str, Any])
| 57 | self._reddit = reddit |
| 58 | |
| 59 | def _objectify_dict(self, *, data: dict[str, Any]) -> RedditBase | dict[str, Any]: |
| 60 | """Create :class:`.RedditBase` objects from dicts. |
| 61 | |
| 62 | :param data: The structured data, assumed to be a dict. |
| 63 | |
| 64 | :returns: An instance of :class:`.RedditBase`, or the ``data`` dict. |
| 65 | |
| 66 | """ |
| 67 | if {"messages", "modActions"}.issubset(data) and { |
| 68 | "conversations", |
| 69 | "conversation", |
| 70 | }.intersection(data): |
| 71 | # fetched conversation |
| 72 | data.update(data.pop("conversation") if "conversation" in data else data.pop("conversations")) |
| 73 | parser = self.parsers["ModmailConversation"] |
| 74 | parser._convert_conversation_objects(data, self._reddit) |
| 75 | elif {"messages", "modActions"}.issubset(data) or { |
| 76 | "legacyFirstMessageId", |
| 77 | "state", |
| 78 | }.issubset(data): |
| 79 | # not fetched conversation i.e., from conversations() |
| 80 | del data["objIds"] # delete objIds since it could be missing data |
| 81 | parser = self.parsers["ModmailConversation"] |
| 82 | elif {"conversationIds", "conversations", "messages"}.issubset(data): |
| 83 | # modmail conversations |
| 84 | conversations = [] |
| 85 | for conversation_id in data["conversationIds"]: |
| 86 | conversation = data["conversations"][conversation_id] |
| 87 | # set if the numMessages is same as number of messages in objIds |
| 88 | if conversation["numMessages"] == len([ |
| 89 | obj for obj in conversation["objIds"] if obj["key"] == "messages" |
| 90 | ]): |
| 91 | conversation["messages"] = [ |
| 92 | self.objectify(data=data["messages"][obj_id["id"]]) for obj_id in conversation["objIds"] |
| 93 | ] |
| 94 | conversations.append(conversation) |
| 95 | data["conversations"] = conversations |
| 96 | data = snake_case_keys(data) |
| 97 | parser = self.parsers["ModmailConversations-list"] |
| 98 | elif {"actionTypeId", "author", "date"}.issubset(data): |
| 99 | # Modmail mod action |
| 100 | data = snake_case_keys(data) |
| 101 | parser = self.parsers["ModmailAction"] |
| 102 | elif {"bodyMarkdown", "isInternal"}.issubset(data): |
| 103 | # Modmail message |
| 104 | data = snake_case_keys(data) |
| 105 | parser = self.parsers["ModmailMessage"] |
| 106 | elif {"kind", "short_name", "violation_reason"}.issubset(data): |
| 107 | # This is a Rule |
| 108 | parser = self.parsers["rule"] |
| 109 | elif {"isAdmin", "isDeleted"}.issubset(data): |
| 110 | # Modmail author |
| 111 | data = snake_case_keys(data) |
| 112 | # Prevent clobbering base-36 id |
| 113 | del data["id"] |
| 114 | data["is_subreddit_mod"] = data.pop("is_mod") |
| 115 | parser = self.parsers[self._reddit.config.kinds["redditor"]] |
| 116 | elif {"banStatus", "muteStatus", "recentComments"}.issubset(data): |
no test coverage detected