From 995554cea9a3846555675910110f1ae4c71219df Mon Sep 17 00:00:00 2001 From: Sean Breckenridge Date: Sun, 31 Oct 2021 13:48:29 -0700 Subject: [PATCH] reddit: specify attributes on all protocols --- my/reddit/common.py | 53 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/my/reddit/common.py b/my/reddit/common.py index c4a1f81..a9be43e 100644 --- a/my/reddit/common.py +++ b/my/reddit/common.py @@ -34,24 +34,67 @@ class RedditBase(Protocol): def text(self) -> str: ... +# TODO: is there some way to handle this with subclasses or inhering protocols? +# can't seem to figure it out + + # Note: doesn't include GDPR Save's since they don't have the same metadata -class Save(Protocol, RedditBase): +class Save(Protocol): + @property + def raw(self) -> Json: ... + @property + def created(self) -> datetime_aware: ... + @property + def id(self) -> str: ... + @property + def url(self) -> str: ... + @property + def text(self) -> str: ... @property def subreddit(self) -> str: ... # Note: doesn't include GDPR Upvote's since they don't have the same metadata -class Upvote(Protocol, RedditBase): +class Upvote(Protocol): + @property + def raw(self) -> Json: ... + @property + def created(self) -> datetime_aware: ... + @property + def id(self) -> str: ... + @property + def url(self) -> str: ... + @property + def text(self) -> str: ... @property def title(self) -> str: ... # From rexport, pushshift and the reddit GDPR export -class Comment(Protocol, RedditBase): - pass +class Comment(Protocol): + @property + def raw(self) -> Json: ... + @property + def created(self) -> datetime_aware: ... + @property + def id(self) -> str: ... + @property + def url(self) -> str: ... + @property + def text(self) -> str: ... # From rexport and the GDPR export -class Submission(Protocol, RedditBase): +class Submission(Protocol): + @property + def raw(self) -> Json: ... + @property + def created(self) -> datetime_aware: ... + @property + def id(self) -> str: ... + @property + def url(self) -> str: ... + @property + def text(self) -> str: ... @property def title(self) -> str: ...