Source code for redditwarp.models.subreddit


from __future__ import annotations
from typing import Mapping, Any, Optional

from datetime import datetime, timezone

from .datamemento import DatamementoPropertiesMixin

[docs]class Subreddit(DatamementoPropertiesMixin):
[docs] class Me:
[docs] class Flair: def __init__(self, d: Mapping[str, Any]) -> None: self.shown: bool = False if (x := d['user_sr_flair_enabled']) is None else x ("""Whether the current user has their flair enabled in the subreddit. Value is `False` if the subreddit object comes from a search item.""") flair_text: Optional[str] = d['user_flair_text'] flair_css_class: Optional[str] = d['user_flair_css_class'] self.template_uuid: Optional[str] = x if (x := d['user_flair_template_id']) else None (""" The current user's flair template UUID in the subreddit. Value is `None` if no flair template is being used. """) self.text_mode: str = d['user_flair_type'] (""" Either `text` or `richtext`. """) self.text: str = flair_text or '' (""" The flair text. Check if the value is an empty string to tell if a flair is being used. """) self.css_class: str = flair_css_class or '' (""" The current user's flair CSS class. When a flair template is being used, the value of this field will be that of the CSS class designated by the template. If the flair template does not specify a CSS class then the value will be an empty string. """) self.bg_color: str = '' if (x := d['user_flair_background_color']) == 'transparent' else x (""" A background color hex string. E.g., `#46d160`. If a flair template is not being used then the value will be an empty string. If a flair template is being used and the background color is unset then the value is an empty string. """) self.fg_color_scheme: str = d['user_flair_text_color'] or '' (""" Either `dark` or `light`, or empty string. Value is empty string if a flair template is not being used. """) self.has_had_flair_assigned_before_in_subreddit: bool = flair_text is not None (""" Because of quirks in the API, we can tell if the user has ever had flair assigned before in the subreddit. """) self.has_had_flair_css_class_assigned_before_in_subreddit_when_no_flair_template_assigned: bool = flair_css_class is not None (""" Because of quirks in the API, we can tell if the user has ever had a flair CSS class assigned before in the subreddit, but this only works if a flair template is not being used. """)
def __init__(self, d: Mapping[str, Any]) -> None: self.favorited: bool = d['user_has_favorited'] ("") self.is_banned: bool = d['user_is_banned'] ("") self.is_approved_user: bool = d['user_is_contributor'] ("") self.is_moderator: bool = d['user_is_moderator'] (""" Whether the current user is a moderator of the subreddit. """) self.is_muted: bool = d['user_is_muted'] ("") self.is_subscribed: bool = d['user_is_subscriber'] ("") self.sr_theme_enabled: bool = d['user_sr_theme_enabled'] (""" Whether the current user allows subreddit custom CSS. This is the "allow subreddits to show me custom themes" preference in old reddit. """) self.flair: Subreddit.Me.Flair = self.Flair(d) (""" Information about the current user's flair settings in the subreddit. """)
[docs] class SubredditFlair: def __init__(self, d: Mapping[str, Any]) -> None: self.user_flair_enabled: bool = d['user_flair_enabled_in_sr'] (""" Whether user flairs are enabled in the subreddit. In old Reddit this is the flair option that says "enable user flair in this subreddit". Caution: Value is false if object was retrieved from a search. This isn't the case with the other variables. """) self.user_flair_position: str = d['user_flair_position'] (""" Either `left` or `right`, or empty string. Starts off as `right` in new subreddits. Can be set to an empty string via API calls (see :meth:`~.redditwarp.siteprocs.flair.SYNC.FlairProcedures.configure_subreddit_flair_settings`) but not through the UI. If an empty string then all user flairs are hidden, despite the :attr:`user_flair_enabled` setting. """) self.user_flair_self_assign: bool = d['can_assign_user_flair'] (""" Whether or not users can assign a flair to themselves in this subreddit. If false, only a moderator can assign flairs to users. In old Reddit this is the flair option that says "allow users to assign their own flair". """) self.post_flair_enabled: bool = d['link_flair_enabled'] ("""Whether post flairs are enabled in the subreddit. In old Reddit, this field is tied to the 'link flair position' flair setting: the value is false when set to `none`. """) self.post_flair_position: str = d['link_flair_position'] (""" Either `left` or `right`, or empty string. Value is empty string if :attr:`post_flair_enabled` is false (the 'none' option in the old Reddit UI). """) self.post_flair_self_assign: bool = d['can_assign_link_flair'] (""" Whether or not users can assign a flair to their submission in this subreddit. If false, only a moderator can assign flairs to submissions. In old Reddit this is the flair option that says "allow submitters to assign their own link flair". """)
def __init__(self, d: Mapping[str, Any]) -> None: self.d: Mapping[str, Any] = d ("") self.id36: str = d['id'] (""" The ID of the subreddit as a base 36 number. """) self.idn: int = int(self.id36, 36) (""" The subreddit ID. """) self.id: int = self.idn (""" Same as :attr:`idn`. """) self.name: str = d['display_name'] (""" The name of the subreddit. """) self.openness: str = d['subreddit_type'] (""" Either: `public`, `private`, `restricted`, `archived`, `employees_only`, `gold_only`, `gold_restricted`, or `user`. """) self.created_ut: int = int(d['created_utc']) (""" Unix timestamp of when the subreddit was created. """) self.created_at: datetime = datetime.fromtimestamp(self.created_ut, timezone.utc) (""" When the subreddit was created. """) self.title: str = d['title'] (""" The title of the subreddit. Max. chars.: 100. """) self.public_description: str = d['public_description'] ("") self.public_description_html: str = d['public_description_html'] ("") self.sidebar_description: str = d['description'] ("") self.sidebar_description_html: str = d['description_html'] ("") self.submitting_form_note: str = d['submit_text'] ("") self.submitting_form_note_html: str = d['submit_text_html'] ("") self.submit_text_label: str = d['submit_text_label'] or '' (""" Custom label text for the "Submit a new text post" button. In old Reddit this is the "Custom label for submit text post button" subreddit option. """) self.submit_link_label: str = d['submit_link_label'] or '' (""" Custom label text for the "Custom label for submit link button" button. In old Reddit this is the "Custom label for submit text post button" subreddit option. """) self.subscriber_count: int = d['subscribers'] ("") self.viewing_count: int = -1 if (x := d['active_user_count']) is None else x (""" The number of online users who are subscribed to the subreddit. Value is `-1` if object was retrieved from a search. """) submission_type: str = d['submission_type'] self.accepts_text_submissions: bool = submission_type in ('any', 'self') ("") self.accepts_link_submissions: bool = submission_type in ('any', 'link') ("") self.accepts_gallery_submissions: bool = d['allow_galleries'] ("") self.accepts_poll_submissions: bool = d['allow_polls'] ("") self.suggested_comment_sort: str = d['suggested_comment_sort'] or '' (""" Either: `confidence` (best), `new`, `old`, `top`, `qa`, `controversial`, or `live`. Value is empty string if not set. """) self.nsfw: bool = d['over18'] ("") self.quarantined: bool = d['quarantine'] ("") self.me: Optional[Subreddit.Me] = None (""" Attributes related to the current user. """) if d['user_is_moderator'] is not None: self.me = self.Me(d) self.flair: Subreddit.SubredditFlair = self.SubredditFlair(d) ("") self.has_menu_widget: bool = d['has_menu_widget'] (""" True if the subreddit has a menu widget active, otherwise false. Value is false if the object was retrieved from a search. """)
Community = Subreddit
[docs]class InaccessibleSubreddit(DatamementoPropertiesMixin): def __init__(self, d: Mapping[str, Any]) -> None: self.d: Mapping[str, Any] = d ("") self.id36: str = d['id'] ("") self.idn: int = int(self.id36, 36) ("") self.id: int = self.idn ("") self.created_ut: int = int(d['created_utc']) ("") self.created_at: datetime = datetime.fromtimestamp(self.created_ut, timezone.utc) ("") self.name: str = d['display_name'] ("") self.openness: str = d['subreddit_type'] ("") self.title: str = d['title'] ("")
InaccessibleCommunity = InaccessibleSubreddit