Source code for redditwarp.models.subreddit_rules
from __future__ import annotations
from typing import Mapping, Any, Sequence, Iterator, overload, Union
from enum import Enum, auto
[docs]class Rule:
def __init__(self, d: Mapping[str, Any]) -> None:
self.scope: RuleScope = {
'all': RuleScope.ALL,
'link': RuleScope.SUBMISSION,
'comment': RuleScope.COMMENT,
}[d['kind']]
("""
Content this rule applies to.
Enum: :class:`.RuleScope`.
""")
self.short_name: str = d['short_name']
("""
Short description.
Up to 100 characters.
""")
self.description: str = d['description']
("""
Description.
Up to 500 characters.
""")
self.description_html: str = d.get('description_html', '')
("""
Same as :attr:`description` but HTML formatted.
""")
self.violation_reason: str = d['violation_reason']
("""
Violation reason text.
Up to 100 characters.
Value matches `short_name` if left empty in the UI. It's unfortunately not possible
to tell if this field is empty through the API.
""")
self.created_ut: int = int(d['created_utc'])
("""
Unix timestamp of when the rule was created.
""")
[docs]class SubredditRules(Sequence[Rule]):
def __init__(self, d: Mapping[str, Any]) -> None:
self.d: Mapping[str, Any] = d
("")
self._rules = [Rule(o) for o in d['rules']]
def __len__(self) -> int:
return len(self._rules)
def __contains__(self, item: object) -> bool:
return item in self._rules
def __iter__(self) -> Iterator[Rule]:
return iter(self._rules)
@overload
def __getitem__(self, index: int) -> Rule: ...
@overload
def __getitem__(self, index: slice) -> Sequence[Rule]: ...
def __getitem__(self, index: Union[int, slice]) -> Union[Rule, Sequence[Rule]]:
return self._rules[index]