Finish Feature-Feedfiles

This commit is contained in:
stubbfel
2014-06-06 10:54:39 +02:00
4 changed files with 114 additions and 0 deletions

38
src/utilities/feedfile.py Normal file
View File

@@ -0,0 +1,38 @@
__author__ = 'stubbfel'
import feedparser
from utilities.textfile import TextFile
from utilities.serializer import Serializer
class FeedFile(TextFile):
def __init__(self, filename):
"""
init class
:param filename: path to the file
"""
super(FeedFile, self).__init__(filename)
def read_feed_file(self):
"""
method read and convert the content of the file to a FeedParserDict
:return: dict - feed object
"""
feed_str = self.read_text_file()
return feedparser.parse(feed_str)
def write_feed_file(self, feed, serializer=None):
"""
method write a feedparpser object to a text file. It use a certain serializer or the default serializer
if type of the serializer is none
:param feed: expetc FeedparserDict
:param serializer: None or a subclass of Serializer
"""
assert isinstance(feed, feedparser.FeedParserDict)
if serializer is None:
serializer = Serializer()
feed_string = serializer.serialize(feed)
else:
feed_string = serializer.toString(feed)
self.write_text_file(feed_string)

View File

@@ -0,0 +1,14 @@
__author__ = 'stubbfel'
class Serializer():
def serialize(self, dict_object):
"""
method convert i dict to a string.
this method should be override by any subclasses
:param dict_object: object wich his to bee convert to a string
:return: rhe string reprasention of the dict_object
"""
assert isinstance(dict_object, dict)
return str(dict_object)

View File

@@ -0,0 +1,34 @@
__author__ = 'stubbfel'
import unittest
import feedparser
from utilities.feedfile import FeedFile
class FeedUtilitiesTest(unittest.TestCase):
def setUp(self):
self.__ff = FeedFile("testfeeds/rss/feed.xml")
def test_read_feed_file(self):
feed = self.__ff.read_feed_file()
self.assertTrue(isinstance(feed, feedparser.FeedParserDict))
def test_write_feed_file(self):
feed = self.__ff.read_feed_file()
ff2 = FeedFile("testfeed.xml")
serializer = None
ff2.write_feed_file(feed, serializer)
feed2 = ff2.read_feed_file()
self.assertTrue(isinstance(feed2, feedparser.FeedParserDict))
ff2.check_and_remove_file()
# self.assertDictEqual(feed, feed2)
def test_write_feed_file_none_feedparser_object(self):
feed = "Fail"
ff2 = FeedFile("testfeed.xml")
serializer = None
self.assertRaises(AssertionError, ff2.write_feed_file, feed, serializer)
ff2.check_and_remove_file()
if __name__ == '__main__':
unittest.main()

View File

@@ -0,0 +1,28 @@
__author__ = 'stubbfel'
import unittest
from utilities.serializer import Serializer
class SerializerUtilitiesTest(unittest.TestCase):
def setUp(self):
self.__testdict = {"test": "1234", "0815": "Hallo Welt"}
self.__serializer = Serializer()
def test_serialize(self):
test_string = self.__serializer.serialize(self.__testdict)
test_string2 = str(self.__testdict)
self.assertEqual(test_string, test_string2)
def test_serialize_error_not_equal(self):
test_string = self.__serializer.serialize(self.__testdict)
test_string2 = ""
self.assertNotEqual(test_string, test_string2)
def test_serialize_error_raise_assert(self):
self.assertRaises(AssertionError, self.__serializer.serialize, "")
if __name__ == '__main__':
unittest.main()