From 40bbbb35240645a4fe821393d8802241000d5b42 Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Thu, 2 Mar 2017 16:53:24 -0800 Subject: [PATCH] add tests of backwards compatibility handling of start/stop times and fix a bug or two --- brozzler/job.py | 2 ++ brozzler/site.py | 10 ++++++---- tests/test_units.py | 31 +++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/brozzler/job.py b/brozzler/job.py index 06ccccc..16adb8e 100644 --- a/brozzler/job.py +++ b/brozzler/job.py @@ -136,6 +136,8 @@ class Job(doublethink.Document): "start": self.get("started"), "stop": self.get("finished")}] del self["started"] + if "finished" in self: + del self["finished"] else: self.starts_and_stops = [ {"start":doublethink.utcnow(),"stop":None}] diff --git a/brozzler/site.py b/brozzler/site.py index f7d2afb..5406a70 100644 --- a/brozzler/site.py +++ b/brozzler/site.py @@ -102,12 +102,14 @@ class Site(doublethink.Document): self.last_claimed = self.get('last_claimed', _EPOCH_UTC) if not self.get('starts_and_stops'): if self.get('start_time'): # backward compatibility - self.starts_and_stops = [{"start":start_time,"stop":None}] - if self.get('status') != "ACTIVE": - self.starts_and_stops[0]["stop"] = self.last_disclaimed + self.starts_and_stops = [{ + 'start':self.get('start_time'),'stop':None}] + if self.get('status') != 'ACTIVE': + self.starts_and_stops[0]['stop'] = self.last_disclaimed + del self['start_time'] else: self.starts_and_stops = [ - {"start":doublethink.utcnow(),"stop":None}] + {'start':doublethink.utcnow(),'stop':None}] if not self.scope: self.scope = {} if not 'surt' in self.scope: diff --git a/tests/test_units.py b/tests/test_units.py index b23119a..3049741 100644 --- a/tests/test_units.py +++ b/tests/test_units.py @@ -26,6 +26,7 @@ import brozzler.chrome import socket import logging import yaml +import datetime @pytest.fixture(scope='module') def httpd(request): @@ -107,3 +108,33 @@ blocks: assert site.is_in_scope( 'https://www.youtube.com/watch?v=dUIn5OAPS5s', yt_user_page) +def test_start_stop_backwards_compat(): + site = brozzler.Site(None, {'seed': 'http://example.com/'}) + assert len(site.starts_and_stops) == 1 + assert site.starts_and_stops[0]['start'] + assert site.starts_and_stops[0]['stop'] is None + assert not 'start_time' in site + + site = brozzler.Site(None, { + 'seed': 'http://example.com/', + 'start_time': datetime.datetime(2017,1,1)}) + assert len(site.starts_and_stops) == 1 + assert site.starts_and_stops[0]['start'] == datetime.datetime(2017, 1, 1) + assert site.starts_and_stops[0]['stop'] is None + assert not 'start_time' in site + + job = brozzler.Job(None, {'seeds': [{'url':'https://example.com/'}]}) + assert job.starts_and_stops[0]['start'] + assert job.starts_and_stops[0]['stop'] is None + assert not 'started' in job + assert not 'finished' in job + + job = brozzler.Job(None, { + 'seeds': [{'url':'https://example.com/'}], + 'started': datetime.datetime(2017, 1, 1), + 'finished': datetime.datetime(2017, 1, 2)}) + assert job.starts_and_stops[0]['start'] == datetime.datetime(2017, 1, 1) + assert job.starts_and_stops[0]['stop'] == datetime.datetime(2017, 1, 2) + assert not 'started' in job + assert not 'finished' in job +