Skip to content

Instantly share code, notes, and snippets.

@smrfeld
Created December 16, 2021 19:39
Show Gist options
  • Select an option

  • Save smrfeld/54d38e3dfdec72b1b8e5553448353098 to your computer and use it in GitHub Desktop.

Select an option

Save smrfeld/54d38e3dfdec72b1b8e5553448353098 to your computer and use it in GitHub Desktop.
Convert reading list to custom objects
@dataclass
class ReadingListItem(json.JSONEncoder):
title: str
ServerID: str
neverFetchMetadata: bool
WebBookmarkType: str
WebBookmarkUUID: str
URLString: str
DateAdded: datetime.datetime
Data: Union[str,None] = None
siteName: Union[str,None] = None
PreviewText: Union[str,None] = None
DateLastFetched: Union[datetime.datetime,None] = None
imageURL: Union[str,None] = None
didAttemptToFetchIconFromImageUrlKey: Union[bool,None] = None
NumberOfFailedLoadsWithUnknownOrNonRecoverableError: Union[int,None] = None
FetchResult: Union[int,None] = None
AddedLocally: Union[bool,None] = None
def to_json(self):
df = "%Y-%m-%d %H:%M:%S"
res = {
"title": self.title,
"ServerID": self.ServerID,
"neverFetchMetadata": self.neverFetchMetadata,
"WebBookmarkType": self.WebBookmarkType,
"WebBookmarkUUID": self.WebBookmarkUUID,
"URLString": self.URLString,
"DateAdded": self.DateAdded.strftime(df)
}
if self.Data != None:
res["Data"] = base64.b64encode(self.Data).decode('utf-8')
if self.siteName != None:
res["siteName"] = self.siteName
if self.PreviewText != None:
res["PreviewText"] = self.PreviewText
if self.DateLastFetched != None:
res["DateLastFetched"] = self.DateLastFetched.strftime(df)
if self.imageURL != None:
res["imageURL"] = self.imageURL
if self.didAttemptToFetchIconFromImageUrlKey != None:
res['didAttemptToFetchIconFromImageUrlKey'] = self.didAttemptToFetchIconFromImageUrlKey
if self.FetchResult != None:
res["FetchResult"] = self.FetchResult
if self.AddedLocally != None:
res["AddedLocally"] = self.AddedLocally
if self.NumberOfFailedLoadsWithUnknownOrNonRecoverableError != None:
res["NumberOfFailedLoadsWithUnknownOrNonRecoverableError"] = self.NumberOfFailedLoadsWithUnknownOrNonRecoverableError
return res
def to_json_full(self):
df = "%Y-%m-%d %H:%M:%S"
res = {
"title": self.title,
"ServerID": self.ServerID,
"neverFetchMetadata": self.neverFetchMetadata,
"WebBookmarkType": self.WebBookmarkType,
"WebBookmarkUUID": self.WebBookmarkUUID,
"URLString": self.URLString,
"siteName": self.siteName,
"PreviewText": self.PreviewText,
"imageURL": self.imageURL,
"didAttemptToFetchIconFromImageUrlKey": self.didAttemptToFetchIconFromImageUrlKey,
"FetchResult": self.FetchResult,
"AddedLocally": self.AddedLocally,
"NumberOfFailedLoadsWithUnknownOrNonRecoverableError": self.NumberOfFailedLoadsWithUnknownOrNonRecoverableError
}
if self.Data != None:
res["Data"] = base64.b64encode(self.Data).decode('utf-8')
else:
res["Data"] = None
if self.DateAdded != None:
res["DateAdded"] = self.DateAdded.strftime(df)
else:
res["DateAdded"] = None
if self.DateLastFetched != None:
res["DateLastFetched"] = self.DateLastFetched.strftime(df)
else:
res["DateLastFetched"] = None
return res
@classmethod
def fromRDict(cls, r, include_data):
ritem = cls(
title=r['URIDictionary']['title'],
ServerID=r['Sync']['ServerID'],
neverFetchMetadata=r['ReadingListNonSync']['neverFetchMetadata'],
WebBookmarkType=r['WebBookmarkType'],
WebBookmarkUUID=r['WebBookmarkUUID'],
URLString=r['URLString'],
DateAdded=r['ReadingList']['DateAdded']
)
if include_data:
ritem.Data = r['Sync']['Data']
if 'ReadingListNonSync' in r and 'siteName' in r['ReadingListNonSync']:
ritem.siteName = r['ReadingListNonSync']['siteName']
if 'ReadingList' in r and 'PreviewText' in r['ReadingList']:
ritem.PreviewText = r['ReadingList']['PreviewText']
if 'ReadingListNonSync' in r and 'DateLastFetched' in r['ReadingListNonSync']:
ritem.DateLastFetched = r['ReadingListNonSync']['DateLastFetched']
if 'imageURL' in r:
ritem.imageURL = r['imageURL']
if 'ReadingListNonSync' in r \
and 'didAttemptToFetchIconFromImageUrlKey' in r['ReadingListNonSync']:
ritem.didAttemptToFetchIconFromImageUrlKey = \
r['ReadingListNonSync']['didAttemptToFetchIconFromImageUrlKey']
if 'ReadingListNonSync' in r \
and 'NumberOfFailedLoadsWithUnknownOrNonRecoverableError' in r['ReadingListNonSync']:
ritem.NumberOfFailedLoadsWithUnknownOrNonRecoverableError = \
r['ReadingListNonSync']['NumberOfFailedLoadsWithUnknownOrNonRecoverableError']
if 'ReadingListNonSync' in r and 'FetchResult' in r['ReadingListNonSync']:
ritem.FetchResult = r['ReadingListNonSync']['FetchResult']
if 'ReadingListNonSync' in r and 'AddedLocally' in r['ReadingListNonSync']:
ritem.AddedLocally = r['ReadingListNonSync']['AddedLocally']
return ritem
# Iterate over reading list items
ritems = [ ReadingListItem.fromRDict(r,args.include_data) for r in rlist ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment