diff --git a/shoebox/handlers.py b/shoebox/handlers.py index a6b4cca..c796615 100644 --- a/shoebox/handlers.py +++ b/shoebox/handlers.py @@ -37,11 +37,11 @@ class CallbackList(ArchiveCallback): def __init__(self, **kwargs): super(CallbackList, self).__init__(**kwargs) self.callbacks = [] - self.config = kwargs.get('config', {}) - callback_list_str = self.config.get('callback_list', "") - callback_list = [x.strip() for x in callback_list_str.split(",")] - self.callback_list = [simport.load(c) for c in callback_list] - + self.config = kwargs + callback_str = self.config.get('callback_list', "") + callback_str_list = [x.strip() for x in callback_str.split(",")] + self.callbacks = [simport.load(c)(**self.config) + for c in callback_str_list] # TODO(Sandy): Need some exception handling around these. # The failure of one shouldn't stop processing. def on_open(self, filename): @@ -53,7 +53,7 @@ class CallbackList(ArchiveCallback): c.on_close(filename) -class ChangeExtensionCallback(object): +class ChangeExtensionCallback(ArchiveCallback): """filename.dat becomes filename.dat.done""" def __init__(self, **kwargs): super(ChangeExtensionCallback, self).__init__(**kwargs) @@ -63,7 +63,7 @@ class ChangeExtensionCallback(object): os.rename(filename, "%s.%s" % (filename, self.new_extension)) -class MoveFileCallback(object): +class MoveFileCallback(ArchiveCallback): def __init__(self, **kwargs): super(MoveFileCallback, self).__init__(**kwargs) self.destination_folder = kwargs.get('destination_folder', '.') diff --git a/shoebox/roll_checker.py b/shoebox/roll_checker.py index a59cf79..4cd922c 100644 --- a/shoebox/roll_checker.py +++ b/shoebox/roll_checker.py @@ -13,10 +13,15 @@ # See the License for the specific language governing permissions and # limitations under the License. +import datetime + import notification_utils class RollChecker(object): + def __init__(self, **kwargs): + pass + def start(self, archive): """Called when a new archive is selected.""" pass @@ -32,8 +37,10 @@ class NeverRollChecker(RollChecker): class TimeRollChecker(RollChecker): - def __init__(self, timedelta): - self.timedelta = timedelta + def __init__(self, **kwargs): + super(TimeRollChecker, self).__init__() + minutes = int(kwargs.get('roll_minutes', 60)) + self.timedelta = datetime.timedelta(minutes=minutes) def start(self, archive): self.start_time = notification_utils.now() @@ -44,9 +51,10 @@ class TimeRollChecker(RollChecker): class SizeRollChecker(RollChecker): - def __init__(self, size_in_mb): - self.size_in_mb = size_in_mb + def __init__(self, **kwargs): + super(SizeRollChecker, self).__init__() + self.roll_size_mb = int(kwargs.get('roll_size_mb', 1)) def check(self, archive): size = archive.get_file_handle().tell() - return (size / 1048576) >= self.size_in_mb + return (size / 1048576) >= self.roll_size_mb diff --git a/test/integration/test_rolling.py b/test/integration/test_rolling.py index 3bdd629..fcd25b7 100644 --- a/test/integration/test_rolling.py +++ b/test/integration/test_rolling.py @@ -51,7 +51,7 @@ class TestSizeRolling(unittest.TestCase): def test_size_rolling(self): callback = ArchiveCallback() - checker = roll_checker.SizeRollChecker(1) + checker = roll_checker.SizeRollChecker(roll_size_mb=1) manager = roll_manager.WritingRollManager("test_%Y_%m_%d_%X_%f.events", checker, TEMPDIR, diff --git a/test/test_roll_checker.py b/test/test_roll_checker.py index ce57e9f..15cbb31 100644 --- a/test/test_roll_checker.py +++ b/test/test_roll_checker.py @@ -9,18 +9,18 @@ from shoebox import roll_checker class TestRollChecker(unittest.TestCase): def test_time_roll_checker_start(self): - one_hour = datetime.timedelta(hours=1) - x = roll_checker.TimeRollChecker(one_hour) + x = roll_checker.TimeRollChecker(roll_minutes=60) now = datetime.datetime.utcnow() with mock.patch.object(notification_utils, 'now') as dt: dt.return_value = now x.start(None) self.assertEqual(x.start_time, now) + one_hour = datetime.timedelta(hours=1) self.assertEqual(x.end_time, now + one_hour) def test_time_roll_checker_end(self): one_hour = datetime.timedelta(hours=1) - x = roll_checker.TimeRollChecker(one_hour) + x = roll_checker.TimeRollChecker(roll_minutes=60) now = datetime.datetime.utcnow() x.start_time = now x.end_time = now + one_hour @@ -37,10 +37,9 @@ class TestRollChecker(unittest.TestCase): self.assertFalse(x.check(None)) def test_size_roll_checker_end(self): - one_mb = 1048576 - x = roll_checker.SizeRollChecker(10) - + x = roll_checker.SizeRollChecker(roll_size_mb=10) archive = mock.Mock() + one_mb = 1048576 archive.get_file_handle.return_value.tell.return_value = one_mb * 5 self.assertFalse(x.check(archive))