Finish Feature-Feedfiles
This commit is contained in:
38
src/utilities/feedfile.py
Normal file
38
src/utilities/feedfile.py
Normal 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)
|
||||
14
src/utilities/serializer.py
Normal file
14
src/utilities/serializer.py
Normal 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)
|
||||
34
testenv/tests/utilities/testfeedfile.py
Normal file
34
testenv/tests/utilities/testfeedfile.py
Normal 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()
|
||||
28
testenv/tests/utilities/testserializer.py
Normal file
28
testenv/tests/utilities/testserializer.py
Normal 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()
|
||||
Reference in New Issue
Block a user