Skip to content

Commit

Permalink
Add _type to all Telegram API objects in ndjson (#368)
Browse files Browse the repository at this point in the history
* Add "_type" to *all* telethon.tl.types objects in ndjson

Previously SearchTelegram.serialize_obj would only add the "_type" tag to the JSON object representing a TLObject if that object was an immediate child property of another TLObject - other cases would not add the _type, in particular

- where a TLObject has a property whose value is a *list* of other TLObjects, the members of the list would not have a _type in the JSON - this is most noticeable for things like Message.entities, Page.blocks, etc.
- the initial object passed in to serialize_obj did not have a _type added

* Removed some redundant if branches.

- 'if type(value).__module__[0:8] == "telethon"' is subsumed by 'if type(value) not in scalars and value is not None'
- 'if type(value) is dict' is unreachable since dict is not in scalars, so the loop will already have continue-d at the previous condition
  • Loading branch information
ianroberts authored Aug 22, 2023
1 parent 8dca115 commit b3f0097
Showing 1 changed file with 3 additions and 8 deletions.
11 changes: 3 additions & 8 deletions datasources/telegram/search_telegram.py
Original file line number Diff line number Diff line change
Expand Up @@ -676,24 +676,19 @@ def serialize_obj(input_obj):
mapped_obj[item] = value.timestamp()
elif type(value).__module__ in ("telethon.tl.types", "telethon.tl.custom.forward"):
mapped_obj[item] = SearchTelegram.serialize_obj(value)
if type(obj[item]) is not dict:
mapped_obj[item]["_type"] = type(value).__name__
elif type(value) is list:
mapped_obj[item] = [SearchTelegram.serialize_obj(item) for item in value]
elif type(value).__module__[0:8] == "telethon":
# some type of internal telethon struct
continue
elif type(value) is bytes:
mapped_obj[item] = value.hex()
elif type(value) not in scalars and value is not None:
# type we can't make sense of here
continue
elif type(value) is dict:
for key, vvalue in value:
mapped_obj[item][key] = SearchTelegram.serialize_obj(vvalue)
else:
mapped_obj[item] = value

# Add the _type if the original object was a telethon type
if type(input_obj).__module__ in ("telethon.tl.types", "telethon.tl.custom.forward"):
mapped_obj["_type"] = type(input_obj).__name__
return mapped_obj

@staticmethod
Expand Down

0 comments on commit b3f0097

Please sign in to comment.