diff --git a/src/utilities/feedfile.py b/src/utilities/feedfile.py new file mode 100644 index 0000000..95c7f41 --- /dev/null +++ b/src/utilities/feedfile.py @@ -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) \ No newline at end of file diff --git a/src/utilities/serializer.py b/src/utilities/serializer.py new file mode 100644 index 0000000..e8728fc --- /dev/null +++ b/src/utilities/serializer.py @@ -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) \ No newline at end of file diff --git a/testenv/tests/utilities/testfeedfile.py b/testenv/tests/utilities/testfeedfile.py new file mode 100644 index 0000000..8f9a555 --- /dev/null +++ b/testenv/tests/utilities/testfeedfile.py @@ -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() diff --git a/testenv/tests/utilities/testserializer.py b/testenv/tests/utilities/testserializer.py new file mode 100644 index 0000000..1bb8fe5 --- /dev/null +++ b/testenv/tests/utilities/testserializer.py @@ -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()