Make it possible to unflair deleted accounts.

This commit is contained in:
Logan Hanks
2011-10-31 10:34:44 -07:00
parent 6930d843d2
commit 1aa8b6fd2b
2 changed files with 23 additions and 8 deletions

View File

@@ -1896,7 +1896,8 @@ class ApiController(RedditController):
@validatedForm(VFlairManager(),
VModhash(),
user = VExistingUname("name"),
user = VExistingUname("name", allow_deleted=True,
prefer_existing=True),
text = VFlairText("text"),
css_class = VFlairCss("css_class"))
def POST_flair(self, form, jquery, user, text, css_class):
@@ -1941,7 +1942,8 @@ class ApiController(RedditController):
@validatedForm(VFlairManager(),
VModhash(),
user = VExistingUname("name"))
user = VExistingUname("name", allow_deleted=True,
prefer_existing=True))
def POST_deleteflair(self, form, jquery, user):
# Check validation.
if form.has_errors('name', errors.USER_DOESNT_EXIST, errors.NO_USER):
@@ -1978,7 +1980,8 @@ class ApiController(RedditController):
line_result.error('row', 'improperly formatted row, ignoring')
continue
user = VExistingUname('name').run(name)
user = VExistingUname('name', allow_deleted=True,
prefer_existing=True).run(name)
if not user:
line_result.error('user',
"unable to resolve user `%s', ignoring"
@@ -2042,7 +2045,8 @@ class ApiController(RedditController):
@paginated_listing(max_page_size=1000)
@validate(VFlairManager(),
user = VOptionalExistingUname('name'))
user = VOptionalExistingUname('name', allow_deleted=True,
prefer_existing=True))
def GET_flairlist(self, num, after, reverse, count, user):
flair = FlairList(num, after, reverse, '', user)
return BoringPage(_("API"), content = flair).render()

View File

@@ -898,26 +898,37 @@ class VUrl(VRequired):
return self.error(errors.BAD_URL)
class VOptionalExistingUname(VRequired):
def __init__(self, item, allow_deleted=False, *a, **kw):
def __init__(self, item, allow_deleted=False, prefer_existing=False,
*a, **kw):
self.allow_deleted = allow_deleted
self.prefer_existing = prefer_existing
VRequired.__init__(self, item, errors.NO_USER, *a, **kw)
def run(self, name):
if self.prefer_existing:
result = self._lookup(name, False)
if not result and self.allow_deleted:
result = self._lookup(name, True)
else:
result = self._lookup(name, self.allow_deleted)
return result or self.error(errors.USER_DOESNT_EXIST)
def _lookup(self, name, allow_deleted):
if name and name.startswith('~') and c.user_is_admin:
try:
user_id = int(name[1:])
return Account._byID(user_id, True)
except (NotFound, ValueError):
return self.error(errors.USER_DOESNT_EXIST)
return None
# make sure the name satisfies our user name regexp before
# bothering to look it up.
name = chkuser(name)
if name:
try:
return Account._by_name(name, allow_deleted=self.allow_deleted)
return Account._by_name(name, allow_deleted=allow_deleted)
except NotFound:
return self.error(errors.USER_DOESNT_EXIST)
return None
class VExistingUname(VOptionalExistingUname):
def run(self, name):