예제 #1
0
 def _update_wiki_page(self, wiki_page: WikiPage,
                       new_config: Dict) -> NoReturn:
     log.info('Writing new config to %s', wiki_page.subreddit.display_name)
     log.debug('New Config For %s: %s', wiki_page.subreddit.display_name,
               new_config)
     # TODO - Check what exceptions can be thrown here
     wiki_page.edit(json.dumps(new_config))
예제 #2
0
    def test_edit__with_reason(self):
        subreddit = self.reddit.subreddit(pytest.placeholders.test_subreddit)
        page = WikiPage(self.reddit, subreddit, "test")

        self.reddit.read_only = False
        with self.recorder.use_cassette("TestWikiPage.test_edit__with_reason"):
            page.edit("PRAW updated with reason", reason="PRAW testing")
예제 #3
0
    def test_edit__with_reason(self):
        subreddit = self.reddit.subreddit(pytest.placeholders.test_subreddit)
        page = WikiPage(self.reddit, subreddit, 'test')

        self.reddit.read_only = False
        with self.recorder.use_cassette('TestWikiPage.test_edit__with_reason'):
            page.edit('PRAW updated with reason', reason='PRAW testing')
예제 #4
0
    def test_edit(self):
        subreddit = self.reddit.subreddit(pytest.placeholders.test_subreddit)
        page = WikiPage(self.reddit, subreddit, "test")

        self.reddit.read_only = False
        with self.use_cassette():
            page.edit("PRAW updated")
예제 #5
0
    def test_edit__usernotes(self):
        subreddit = self.reddit.subreddit(pytest.placeholders.test_subreddit)
        page = WikiPage(self.reddit, subreddit, "usernotes")
        with open("tests/integration/files/too_large.jpg", "rb") as fp:
            large_content = urlsafe_b64encode(fp.read()).decode()

        self.reddit.read_only = False
        with self.use_cassette():
            page.edit(large_content)
예제 #6
0
def update_or_create(sub: Subreddit, page: WikiPage, new_content: str, dry_run, edit_reason='Automatic update'):
    try:
        if new_content != page.content_md:
            print(diff_strings(page.content_md, new_content))
            if not dry_run:
                page.edit(new_content, reason=edit_reason)
    except NotFound:
        name = page.name
        while name.startswith('/'):
            name = name[1:]
        print(diff_strings("", new_content))
        if not dry_run:
            sub.wiki.create(name, new_content, reason=edit_reason)
예제 #7
0
    def test_edit__usernotes(self):
        subreddit = self.reddit.subreddit(pytest.placeholders.test_subreddit)
        page = WikiPage(self.reddit, subreddit, "usernotes")
        with open("tests/integration/files/too_large.jpg", "rb") as fp:
            large_content = urlsafe_b64encode(fp.read()).decode()

        self.reddit.read_only = False
        with self.use_cassette(placeholders=self.recorder.configure(
        ).default_cassette_options["placeholders"] + [{
                "placeholder": "<CONTENT>",
                "replace": large_content
        }]):
            page.edit(large_content)
예제 #8
0
    def test_revert_css_fail(self, _):
        subreddit = self.reddit.subreddit(pytest.placeholders.test_subreddit)
        page = WikiPage(self.reddit, subreddit, "config/stylesheet")

        self.reddit.read_only = False
        with self.use_cassette():
            subreddit.stylesheet.upload(
                name="css-revert-fail",
                image_path="tests/integration/files/icon.jpg",
            )
            page.edit("div {background: url(%%css-revert-fail%%)}")
            revision_id = next(page.revisions(limit=1))["id"]
            subreddit.stylesheet.delete_image("css-revert-fail")
            with pytest.raises(Forbidden) as exc:
                page.revision(revision_id).mod.revert()
            assert exc.value.response.json() == {
                "reason": "INVALID_CSS",
                "message": "Forbidden",
                "explanation": "%(css_error)s",
            }