[deviantart] improve handling of statuses

- recursively yield statuses
- ignore items with missing or unexpected field(s)
This commit is contained in:
ClosedPort22
2023-01-19 11:43:45 +08:00
parent 3b32671fbd
commit c4aeca7a5a

View File

@@ -786,16 +786,21 @@ class DeviantartStatusExtractor(DeviantartExtractor):
def deviations(self): def deviations(self):
for status in self.api.user_statuses(self.user, self.offset): for status in self.api.user_statuses(self.user, self.offset):
for item in status.get("items", ()): # do not trust is_share yield from self.status(status)
# shared deviations/statuses
key = "deviation" if "deviation" in item else "status" def status(self, status):
yield item[key].copy() for item in status.get("items", ()): # do not trust is_share
# assume is_deleted == true means necessary fields are missing # shared deviations/statuses
if status["is_deleted"]: if "deviation" in item:
self.log.warning( yield item["deviation"].copy()
"Skipping status %s (deleted)", status.get("statusid")) if "status" in item:
continue yield from self.status(item["status"].copy())
yield status # assume is_deleted == true means necessary fields are missing
if status["is_deleted"]:
self.log.warning(
"Skipping status %s (deleted)", status.get("statusid"))
return
yield status
def prepare(self, deviation): def prepare(self, deviation):
if "deviationid" in deviation: if "deviationid" in deviation: