[#4347] ticket:82 add validator, fix command
diff --git a/ForgeBlog/forgeblog/command/rssfeeds.py b/ForgeBlog/forgeblog/command/rssfeeds.py
index 715afae..965c54f 100644
--- a/ForgeBlog/forgeblog/command/rssfeeds.py
+++ b/ForgeBlog/forgeblog/command/rssfeeds.py
@@ -116,7 +116,7 @@
class RssFeedsCommand(base.BlogCommand):
summary = 'Rss feed client'
- parser = base.Command.standard_parser(verbose=True)
+ parser = base.BlogCommand.standard_parser(verbose=True)
parser.add_option('-a', '--appid', dest='appid', default='',
help='application id')
parser.add_option('-u', '--username', dest='username', default='root',
@@ -160,7 +160,7 @@
allura_base.log.info("Get feed: %s" % feed_url)
f = feedparser.parse(feed_url)
if f.bozo:
- base.log.exception("%s: %s" % (feed_url, f.bozo_exception))
+ allura_base.log.exception("%s: %s" % (feed_url, f.bozo_exception))
return
for e in f.entries:
title = e.title
diff --git a/ForgeBlog/forgeblog/main.py b/ForgeBlog/forgeblog/main.py
index 1a3becb..fe94841 100644
--- a/ForgeBlog/forgeblog/main.py
+++ b/ForgeBlog/forgeblog/main.py
@@ -9,6 +9,7 @@
from tg import expose, validate, redirect, flash
from tg.decorators import with_trailing_slash, without_trailing_slash
from pylons import g, c, request, response
+import formencode
from formencode import validators
from webob import exc
@@ -401,18 +402,30 @@
@without_trailing_slash
@expose()
@require_post()
- def set_exfeed(self, **kw):
- new_exfeed = kw.get('new_exfeed', None)
+ def set_exfeed(self, new_exfeed=None, **kw):
exfeed_val = kw.get('exfeed', [])
if type(exfeed_val) == unicode:
- exfeed_list = []
- exfeed_list.append(exfeed_val)
+ tmp_exfeed_list = []
+ tmp_exfeed_list.append(exfeed_val)
else:
- exfeed_list = exfeed_val
+ tmp_exfeed_list = exfeed_val
if new_exfeed is not None and new_exfeed != '':
- exfeed_list.append(new_exfeed)
+ tmp_exfeed_list.append(new_exfeed)
+
+ exfeed_list = []
+ invalid_list = []
+ v = validators.URL()
+ for link in tmp_exfeed_list:
+ try:
+ v.to_python(link)
+ exfeed_list.append(link)
+ except formencode.api.Invalid:
+ invalid_list.append(link)
self.app.external_feeds_list = exfeed_list
flash('External feeds updated')
+ if len(invalid_list) > 0:
+ flash('Invalid link(s): %s' % ','.join(link for link in invalid_list))
+
redirect(c.project.url()+'admin/tools')
diff --git a/ForgeBlog/forgeblog/templates/blog/admin_exfeed.html b/ForgeBlog/forgeblog/templates/blog/admin_exfeed.html
index 2c337bc..e87c891 100644
--- a/ForgeBlog/forgeblog/templates/blog/admin_exfeed.html
+++ b/ForgeBlog/forgeblog/templates/blog/admin_exfeed.html
@@ -15,7 +15,7 @@
{% if allow_config %}
<div class="grid-13"> </div>
<div class="grid-13">
- <input type="text" name="new_exfeed" id="new_exfeed" value=""/>
+ <label>Add RSS/Atom feed URL:</label> <input type="text" name="new_exfeed" id="new_exfeed" value=""/>
</div>
<div class="grid-13"> </div>
<hr>