MCPcopy Index your code
hub / github.com/praw-dev/praw / _objectify_dict

Method _objectify_dict

praw/objector.py:59–213  ·  view source on GitHub ↗

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])

Source from the content-addressed store, hash-verified

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):

Callers 1

objectifyMethod · 0.95

Calls 5

objectifyMethod · 0.95
snake_case_keysFunction · 0.90
updateMethod · 0.45
parseMethod · 0.45

Tested by

no test coverage detected