Merge branch 'master' of https://github.com/snipem/python-feedgen into merge-test

This commit is contained in:
Lars Kiesow 2014-05-11 18:04:24 +02:00
commit a787b22b7f
3 changed files with 55 additions and 19 deletions

View file

@ -11,6 +11,14 @@
from feedgen.feed import FeedGenerator from feedgen.feed import FeedGenerator
import sys import sys
def print_enc(string):
version = sys.version_info[0]
if version == 2:
print(string)
elif version == 3:
sys.stdout.buffer.write(string)
if __name__ == '__main__': if __name__ == '__main__':
@ -18,15 +26,15 @@ if __name__ == '__main__':
sys.argv[1].endswith('rss') \ sys.argv[1].endswith('rss') \
or sys.argv[1].endswith('atom') \ or sys.argv[1].endswith('atom') \
or sys.argv[1].endswith('podcast') ): or sys.argv[1].endswith('podcast') ):
print 'Usage: %s ( <file>.atom | atom | <file>.rss | rss | podcast )' % \ print_enc ('Usage: %s ( <file>.atom | atom | <file>.rss | rss | podcast )' % \
'pythom -m feedgen' 'pythom -m feedgen')
print '' print_enc ('')
print ' atom -- Generate ATOM test output and print it to stdout.' print_enc (' atom -- Generate ATOM test output and print it to stdout.')
print ' rss -- Generate RSS test output and print it to stdout.' print_enc (' rss -- Generate RSS test output and print it to stdout.')
print ' <file>.atom -- Generate ATOM test feed and write it to file.atom.' print_enc (' <file>.atom -- Generate ATOM test feed and write it to file.atom.')
print ' <file>.rss -- Generate RSS test teed and write it to file.rss.' print_enc (' <file>.rss -- Generate RSS test teed and write it to file.rss.')
print ' podcast -- Generator Podcast test output and print it to stdout.' print_enc (' podcast -- Generator Podcast test output and print it to stdout.')
print '' print_enc ('')
exit() exit()
arg = sys.argv[1] arg = sys.argv[1]
@ -59,9 +67,9 @@ if __name__ == '__main__':
fe.author( name='Lars Kiesow', email='lkiesow@uos.de' ) fe.author( name='Lars Kiesow', email='lkiesow@uos.de' )
if arg == 'atom': if arg == 'atom':
print fg.atom_str(pretty=True) print_enc (fg.atom_str(pretty=True))
elif arg == 'rss': elif arg == 'rss':
print fg.rss_str(pretty=True) print_enc (fg.rss_str(pretty=True))
elif arg == 'podcast': elif arg == 'podcast':
# Load the podcast extension. It will automatically be loaded for all # Load the podcast extension. It will automatically be loaded for all
# entries in the feed, too. Thus also for our “fe”. # entries in the feed, too. Thus also for our “fe”.
@ -76,18 +84,18 @@ if __name__ == '__main__':
'consectetur adipiscing elit. ' + \ 'consectetur adipiscing elit. ' + \
'Verba tu fingas et ea dicas, quae non sentias?') 'Verba tu fingas et ea dicas, quae non sentias?')
fe.podcast.itunes_author('Lars Kiesow') fe.podcast.itunes_author('Lars Kiesow')
print fg.rss_str(pretty=True) print_enc (fg.rss_str(pretty=True))
elif arg == 'dc.atom': elif arg == 'dc.atom':
fg.load_extension('dc') fg.load_extension('dc')
fg.dc.dc_contributor('Lars Kiesow') fg.dc.dc_contributor('Lars Kiesow')
fe.dc.dc_contributor('Lars Kiesow') fe.dc.dc_contributor('Lars Kiesow')
print fg.atom_str(pretty=True) print_enc (fg.atom_str(pretty=True))
elif arg == 'dc.rss': elif arg == 'dc.rss':
fg.load_extension('dc') fg.load_extension('dc')
fg.dc.dc_contributor('Lars Kiesow') fg.dc.dc_contributor('Lars Kiesow')
print fg.rss_str(pretty=True) print_enc (fg.rss_str(pretty=True))
elif arg.endswith('atom'): elif arg.endswith('atom'):
fg.atom_file(arg) fg.atom_file(arg)

View file

@ -16,6 +16,7 @@ import dateutil.tz
from feedgen.entry import FeedEntry from feedgen.entry import FeedEntry
from feedgen.util import ensure_format from feedgen.util import ensure_format
import feedgen.version import feedgen.version
import sys
_feedgen_version = feedgen.version.version_str _feedgen_version = feedgen.version.version_str
@ -977,8 +978,15 @@ class FeedGenerator(object):
if feedEntry is None: if feedEntry is None:
feedEntry = FeedEntry() feedEntry = FeedEntry()
version = sys.version_info[0]
if version == 2:
items = self.__extensions.iteritems()
else:
items = self.__extensions.items()
# Try to load extensions: # Try to load extensions:
for extname,ext in self.__extensions.iteritems(): for extname,ext in items:
try: try:
feedEntry.load_extension( extname, ext['atom'], ext['rss'] ) feedEntry.load_extension( extname, ext['atom'], ext['rss'] )
except ImportError: except ImportError:
@ -1011,10 +1019,16 @@ class FeedGenerator(object):
if replace: if replace:
self.__feed_entries = [] self.__feed_entries = []
version = sys.version_info[0]
if version == 2:
items = self.__extensions.iteritems()
else:
items = self.__extensions.items()
# Try to load extensions: # Try to load extensions:
for e in entry: for e in entry:
for extname,ext in self.__extensions.iteritems(): for extname,ext in items:
try: try:
e.load_extension( extname, ext['atom'], ext['rss'] ) e.load_extension( extname, ext['atom'], ext['rss'] )
except ImportError: except ImportError:

View file

@ -8,7 +8,7 @@
:copyright: 2013, Lars Kiesow <lkiesow@uos.de> :copyright: 2013, Lars Kiesow <lkiesow@uos.de>
:license: FreeBSD and LGPL, see license.* for more details. :license: FreeBSD and LGPL, see license.* for more details.
''' '''
import sys
def ensure_format(val, allowed, required, allowed_values=None, defaults=None): def ensure_format(val, allowed, required, allowed_values=None, defaults=None):
@ -36,13 +36,27 @@ def ensure_format(val, allowed, required, allowed_values=None, defaults=None):
if not isinstance(elem, dict): if not isinstance(elem, dict):
raise ValueError('Invalid data (value is no dictionary)') raise ValueError('Invalid data (value is no dictionary)')
# Set default values # Set default values
for k,v in defaults.iteritems():
version = sys.version_info[0]
if version == 2:
items = defaults.iteritems()
else:
items = defaults.items()
for k,v in items:
elem[k] = elem.get(k, v) elem[k] = elem.get(k, v)
if not set(elem.keys()) <= allowed: if not set(elem.keys()) <= allowed:
raise ValueError('Data contains invalid keys') raise ValueError('Data contains invalid keys')
if not set(elem.keys()) >= required: if not set(elem.keys()) >= required:
raise ValueError('Data contains not all required keys') raise ValueError('Data contains not all required keys')
for k,v in allowed_values.iteritems():
if version == 2:
values = allowed_values.iteritems()
else:
values = allowed_values.items()
for k,v in values:
if elem.get(k) and not elem[k] in v: if elem.get(k) and not elem[k] in v:
raise ValueError('Invalid value for %s' % k ) raise ValueError('Invalid value for %s' % k )
return val return val