本文整理汇总了Python中r2.models.wiki.WikiPage类的典型用法代码示例。如果您正苦于以下问题:Python WikiPage类的具体用法?Python WikiPage怎么用?Python WikiPage使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了WikiPage类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: GET_wiki_create
def GET_wiki_create(self, may_create, page, view=False):
api = c.extension == 'json'
if c.error and c.error['reason'] == 'PAGE_EXISTS':
return self.redirect(join_urls(c.wiki_base_url, page))
elif not may_create or api:
if may_create and c.error:
self.handle_error(403, **c.error)
else:
self.handle_error(404, 'PAGE_NOT_FOUND', may_create=may_create)
elif c.error:
error = ''
if c.error['reason'] == 'PAGE_NAME_LENGTH':
error = _("this wiki cannot handle page names of that magnitude! please select a page name shorter than %d characters") % c.error['max_length']
elif c.error['reason'] == 'PAGE_CREATED_ELSEWHERE':
error = _("this page is a special page, please go into the subreddit settings and save the field once to create this special page")
elif c.error['reason'] == 'PAGE_NAME_MAX_SEPARATORS':
error = _('a max of %d separators "/" are allowed in a wiki page name.') % c.error['MAX_SEPARATORS']
return BoringPage(_("Wiki error"), infotext=error).render()
elif view:
return WikiNotFound().render()
elif may_create:
WikiPage.create(c.site, page)
url = join_urls(c.wiki_base_url, '/edit/', page)
return self.redirect(url)
示例2: post_if_goal_reached
def post_if_goal_reached(date):
# bail out if this day's already been submitted
for link in get_recent_name_submissions():
if link.revenue_date == date:
return
revenue = gold_revenue_multi([date]).get(date, 0)
goal = gold_goal_on(date)
percent = revenue / float(goal)
bucket = int(percent)
if bucket == 0:
return
buyer_count = len(gold_buyers_on(date))
template_wp = WikiPage.get(SERVERNAME_SR, "templates/selftext")
template = random.choice(template_wp._get("content").split("\r\n---\r\n"))
boilerplate = WikiPage.get(SERVERNAME_SR, "templates/boilerplate")._get("content")
selftext_template = template + "\n\n---\n\n" + boilerplate
link = Link._submit(
is_self=True,
title=date.strftime("%a %Y-%m-%d"),
content=selftext_template % {
"percent": int(percent * 100),
"buyers": buyer_count,
},
author=SYSTEM_ACCOUNT,
sr=SERVERNAME_SR,
ip="127.0.0.1",
spam=False,
)
link.flair_text = "Name pending..."
link.flair_css_class = "goal-bucket-%d-active" % bucket
link.revenue_date = date
link.revenue_bucket = bucket
link.server_names = []
link._commit()
UPVOTE = True
queries.queue_vote(SYSTEM_ACCOUNT, link, UPVOTE, "127.0.0.1")
queries.new_link(link)
link.update_search_index()
template = WikiPage.get(SERVERNAME_SR, "templates/notification-message")._get("content")
subject_template, sep, body_template = template.partition("\r\n")
for id in gold_buyers_on(date):
recipient = Account._byID(id, data=True)
send_system_message(
recipient,
subject_template,
body_template % {
"percent": int(percent * 100),
"buyers": buyer_count,
"user": recipient.name,
"link": link.url,
},
)
示例3: may_not_create
def may_not_create(self, page):
if c.is_wiki_mod and WikiPage.is_special(page):
return {'reason': 'PAGE_CREATED_ELSEWHERE'}
elif (not c.user_is_admin) and WikiPage.is_restricted(page):
self.set_error('RESTRICTED_PAGE', code=403)
return
elif page.count('/') > MAX_SEPARATORS:
return {'reason': 'PAGE_NAME_MAX_SEPARATORS', 'max_separators': MAX_SEPARATORS}
elif len(page) > MAX_PAGE_NAME_LENGTH:
return {'reason': 'PAGE_NAME_LENGTH', 'max_length': MAX_PAGE_NAME_LENGTH}
示例4: activate_names
def activate_names(link, names):
for comment, name in names:
# find a slot to assign a name to. we'll prefer nodes that are
# currently empty, and failing that find the least-recently-modified
# node.
ROOT = "/gold/server-names"
slot_names = g.zookeeper.get_children(ROOT)
slots = [(slot_name, g.zookeeper.get(os.path.join(ROOT, slot_name)))
for slot_name in slot_names]
slots.sort(key=lambda (path, (data, stat)): (bool(data), stat.mtime))
slot_path = os.path.join(ROOT, slots[0][0])
comment_data = {'name': str(name),
'permalink': comment.make_permalink_slow()}
g.zookeeper.set(slot_path, json.dumps(comment_data))
lock = g.zookeeper.Lock(slot_path)
lock_contenders = lock.contenders()
old_name = lock_contenders[0] if lock_contenders else ""
old_name = old_name or "one of our servers"
# reply to the user
wp = WikiPage.get(SERVERNAME_SR, "templates/success-reply")
template = random.choice(wp._get("content").split("\r\n---\r\n"))
comment, inbox_rel = Comment._new(
author=SYSTEM_ACCOUNT,
link=link,
parent=comment,
body=template % {
"old-name": old_name,
"new-name": name,
},
ip="127.0.0.1",
)
queries.queue_vote(SYSTEM_ACCOUNT, comment, dir=True, ip="127.0.0.1")
queries.new_comment(comment, inbox_rel)
# update the link's text
wp = WikiPage.get(SERVERNAME_SR, "templates/goldisms")
goldism = random.choice(wp._get("content").split("\r\n---\r\n"))
wp = WikiPage.get(SERVERNAME_SR, "templates/selftext-success")
template = wp._get("content")
link.selftext = template % {
"old-name": old_name,
"new-name": name,
"goldism": goldism,
}
link._commit()
示例5: run
def run(self, page):
original_page = page
if not page:
# If no page is specified, give the index page
page = "index"
try:
page = str(page)
except UnicodeEncodeError:
return self.set_error('INVALID_PAGE_NAME', code=400)
if ' ' in page:
page = page.replace(' ', '_')
if not page_match_regex.match(page):
return self.set_error('INVALID_PAGE_NAME', code=400)
page = normalize_page(page)
if WikiPage.is_impossible(page):
return self.set_error('INVALID_PAGE_NAME', code=400)
if self.error_on_name_normalized and page != original_page:
self.set_error('PAGE_NAME_NORMALIZED')
return page
示例6: run
def run(self, page):
wp = VWikiPage.run(self, page)
if c.errors:
return
if wp:
c.error = {"reason": "PAGE_EXISTS"}
elif c.is_wiki_mod and WikiPage.is_special(page):
c.error = {"reason": "PAGE_CREATED_ELSEWHERE"}
elif WikiPage.is_restricted(page):
self.set_error("RESTRICTED_PAGE", code=403)
return
elif page.count("/") > MAX_SEPARATORS:
c.error = {"reason": "PAGE_NAME_MAX_SEPARATORS", "MAX_SEPARATORS": MAX_SEPARATORS}
elif len(page) > MAX_PAGE_NAME_LENGTH:
c.error = {"reason": "PAGE_NAME_LENGTH", "max_length": MAX_PAGE_NAME_LENGTH}
return this_may_revise()
示例7: POST_wiki_edit
def POST_wiki_edit(self, pageandprevious, content, page_name, reason):
"""Edit a wiki `page`"""
page, previous = pageandprevious
if not page:
error = c.errors.get(("WIKI_CREATE_ERROR", "page"))
if error:
self.handle_error(403, **(error.msg_params or {}))
if not c.user._spam:
page = WikiPage.create(c.site, page_name)
if c.user._spam:
error = _("You are doing that too much, please try again later.")
self.handle_error(415, "SPECIAL_ERRORS", special_errors=[error])
renderer = RENDERERS_BY_PAGE.get(page.name, "wiki")
if renderer in ("wiki", "reddit"):
content = VMarkdown(("content"), renderer=renderer).run(content)
# Use the raw POST value as we need to tell the difference between
# None/Undefined and an empty string. The validators use a default
# value with both of those cases and would need to be changed.
# In order to avoid breaking functionality, this was done instead.
previous = previous._id if previous else request.POST.get("previous")
try:
# special validation methods
if page.name == "config/stylesheet":
css_errors, parsed = c.site.parse_css(content, verify=False)
if g.css_killswitch:
self.handle_error(403, "STYLESHEET_EDIT_DENIED")
if css_errors:
error_items = [CssError(x).message for x in css_errors]
self.handle_error(415, "SPECIAL_ERRORS", special_errors=error_items)
elif page.name == "config/automoderator":
try:
rules = Ruleset(content)
except ValueError as e:
error_items = [e.message]
self.handle_error(415, "SPECIAL_ERRORS", special_errors=error_items)
# special saving methods
if page.name == "config/stylesheet":
c.site.change_css(content, parsed, previous, reason=reason)
else:
try:
page.revise(content, previous, c.user._id36, reason=reason)
except ContentLengthError as e:
self.handle_error(403, "CONTENT_LENGTH_ERROR", max_length=e.max_length)
# continue storing the special pages as data attributes on the subreddit
# object. TODO: change this to minimize subreddit get sizes.
if page.special and page.name in ATTRIBUTE_BY_PAGE:
setattr(c.site, ATTRIBUTE_BY_PAGE[page.name], content)
c.site._commit()
if page.special or c.is_wiki_mod:
description = modactions.get(page.name, "Page %s edited" % page.name)
ModAction.create(c.site, c.user, "wikirevise", details=description)
except ConflictException as e:
self.handle_error(409, "EDIT_CONFLICT", newcontent=e.new, newrevision=page.revision, diffcontent=e.htmldiff)
return json.dumps({})
示例8: may_view
def may_view(sr, user, page):
# User being None means not logged in
mod = sr.is_moderator_with_perms(user, 'wiki') if user else False
if mod:
# Mods may always view
return True
if page.special:
level = WikiPage.get_special_view_permlevel(page.name)
else:
level = page.permlevel
if level < 2:
# Everyone may view in levels below 2
return True
if level == 2:
# Only mods may view in level 2
return mod
# In any other obscure level,
# (This should not happen but just in case)
# nobody may view.
return False
示例9: change_css
def change_css(self, content, parsed, prev=None, reason=None, author=None, force=False):
from r2.models import ModAction
author = author if author else c.user.name
if content is None:
content = ''
try:
wiki = WikiPage.get(self, 'config/stylesheet')
except tdb_cassandra.NotFound:
wiki = WikiPage.create(self, 'config/stylesheet')
wr = wiki.revise(content, previous=prev, author=author, reason=reason, force=force)
self.stylesheet_contents = parsed
self.stylesheet_hash = md5(parsed).hexdigest()
set_last_modified(self, 'stylesheet_contents')
c.site._commit()
ModAction.create(self, c.user, action='wikirevise', details='Updated subreddit stylesheet')
return wr
示例10: GET_policy_page
def GET_policy_page(self, page, requested_rev):
if c.render_style == 'compact':
self.redirect('/wiki/' + page)
if page == 'privacypolicy':
wiki_name = g.wiki_page_privacy_policy
pagename = _('privacy policy')
elif page == 'useragreement':
wiki_name = g.wiki_page_user_agreement
pagename = _('user agreement')
elif page == 'contentpolicy':
wiki_name = g.wiki_page_content_policy
pagename = _('content policy')
else:
abort(404)
wp = WikiPage.get(Frontpage, wiki_name)
revs = list(wp.get_revisions())
# collapse minor edits into revisions with reasons
rev_info = []
last_edit = None
for rev in revs:
if rev.is_hidden:
continue
if not last_edit:
last_edit = rev
if rev._get('reason'):
rev_info.append({
'id': str(last_edit._id),
'title': rev._get('reason'),
})
last_edit = None
if requested_rev:
try:
display_rev = WikiRevision.get(requested_rev, wp._id)
except (tdb_cassandra.NotFound, WikiBadRevision):
abort(404)
else:
display_rev = revs[0]
doc_html = wikimarkdown(display_rev.content, include_toc=False)
soup = BeautifulSoup(doc_html.decode('utf-8'))
toc = generate_table_of_contents(soup, prefix='section')
self._number_sections(soup)
self._linkify_headings(soup)
content = PolicyView(
body_html=unsafe(soup),
toc_html=unsafe(toc),
revs=rev_info,
display_rev=str(display_rev._id),
)
return PolicyPage(
pagename=pagename,
content=content,
).render()
示例11: may_not_create
def may_not_create(self, page):
if not page:
# Should not happen, but just in case
self.set_error("EMPTY_PAGE_NAME", 403)
return
page = normalize_page(page)
if c.is_wiki_mod and WikiPage.is_special(page):
return {"reason": "PAGE_CREATED_ELSEWHERE"}
elif (not c.user_is_admin) and WikiPage.is_restricted(page):
self.set_error("RESTRICTED_PAGE", code=403)
return
elif page.count("/") > MAX_SEPARATORS:
return {"reason": "PAGE_NAME_MAX_SEPARATORS", "max_separators": MAX_SEPARATORS}
elif len(page) > MAX_PAGE_NAME_LENGTH:
return {"reason": "PAGE_NAME_LENGTH", "max_length": MAX_PAGE_NAME_LENGTH}
示例12: GET_wiki_listing
def GET_wiki_listing(self):
"""Retrieve a list of wiki pages in this subreddit"""
def check_hidden(page):
return page.listed and this_may_view(page)
pages, linear_pages = WikiPage.get_listing(c.site, filter_check=check_hidden)
return WikiListing(pages, linear_pages).render()
示例13: change_css
def change_css(self, content, parsed, prev=None, reason=None, author=None, force=False):
from r2.models import ModAction
author = author if author else c.user.name
if content is None:
content = ""
try:
wiki = WikiPage.get(self, "config/stylesheet")
except tdb_cassandra.NotFound:
wiki = WikiPage.create(self, "config/stylesheet")
wr = wiki.revise(content, previous=prev, author=author, reason=reason, force=force)
minified = cssmin(parsed)
if minified:
if g.static_stylesheet_bucket:
digest = hashlib.sha1(minified).digest()
self.stylesheet_hash = base64.urlsafe_b64encode(digest).rstrip("=")
s3cp.send_file(
g.static_stylesheet_bucket,
self.static_stylesheet_name,
minified,
content_type="text/css",
never_expire=True,
replace=False,
)
self.stylesheet_contents = ""
self.stylesheet_modified = None
else:
self.stylesheet_hash = hashlib.md5(minified).hexdigest()
self.stylesheet_contents = minified
self.stylesheet_modified = datetime.datetime.now(g.tz)
else:
self.stylesheet_contents = ""
self.stylesheet_hash = ""
self.stylesheet_modified = datetime.datetime.now(g.tz)
self.stylesheet_contents_user = "" # reads from wiki; ensure pg clean
self._commit()
ModAction.create(self, c.user, action="wikirevise", details="Updated subreddit stylesheet")
return wr
示例14: wiki_template
def wiki_template(template_slug, sr=None):
"""Pull content from a subreddit's wiki page for internal use."""
if not sr:
sr = Subreddit._by_name(g.default_sr)
try:
wiki = WikiPage.get(sr, "templates/%s" % template_slug)
except tdb_cassandra.NotFound:
return None
return wiki._get("content")
示例15: may_not_create
def may_not_create(self, page):
if not page:
# Should not happen, but just in case
self.set_error('EMPTY_PAGE_NAME', 403)
return
page = normalize_page(page)
if WikiPage.is_automatically_created(page):
return {'reason': 'PAGE_CREATED_ELSEWHERE'}
elif WikiPage.is_special(page):
if not (c.user_is_admin or
c.site.is_moderator_with_perms(c.user, 'config')):
self.set_error('RESTRICTED_PAGE', code=403)
return
elif (not c.user_is_admin) and WikiPage.is_restricted(page):
self.set_error('RESTRICTED_PAGE', code=403)
return
elif page.count('/') > MAX_SEPARATORS:
return {'reason': 'PAGE_NAME_MAX_SEPARATORS', 'max_separators': MAX_SEPARATORS}
elif len(page) > MAX_PAGE_NAME_LENGTH:
return {'reason': 'PAGE_NAME_LENGTH', 'max_length': MAX_PAGE_NAME_LENGTH}