util/time_format: new routine to parse dates like 2009-03-18, switch expirer to use it. I'd prefer to use 18-Mar-2009, but it is surprisingly non-trivial to build a parser that will take UTC dates instead of local dates

This commit is contained in:
Brian Warner 2009-03-18 17:58:14 -07:00
parent 8eaee28550
commit babcf632da
4 changed files with 16 additions and 6 deletions

View File

@ -169,9 +169,9 @@ expire.cutoff_date = (date string, required if mode=date-cutoff)
create/renew timestamp is older than the cutoff date. This string will be a create/renew timestamp is older than the cutoff date. This string will be a
date in the following format: date in the following format:
16-Jan-2009 2009-01-16 (January 16th, 2009)
02-Feb-2008 2008-02-02
25-Dec-2007 2007-12-25
The actual cutoff time shall be midnight UTC at the beginning of the given The actual cutoff time shall be midnight UTC at the beginning of the given
day. Lease timers should naturally be generous enough to not depend upon day. Lease timers should naturally be generous enough to not depend upon

View File

@ -2020,7 +2020,7 @@ class LeaseCrawler(unittest.TestCase, pollmixin.PollMixin, WebRenderingMixin):
s = remove_tags(html) s = remove_tags(html)
self.failUnlessIn("Expiration Enabled:" self.failUnlessIn("Expiration Enabled:"
" expired leases will be removed", s) " expired leases will be removed", s)
date = time.strftime("%d-%b-%Y", time.gmtime(then)) date = time.strftime("%Y-%m-%d", time.gmtime(then))
self.failUnlessIn("Leases created or last renewed before %s" self.failUnlessIn("Leases created or last renewed before %s"
" will be considered expired." % date, s) " will be considered expired." % date, s)
self.failUnlessIn(" recovered: 2 shares, 2 buckets (1 mutable / 1 immutable), ", s) self.failUnlessIn(" recovered: 2 shares, 2 buckets (1 mutable / 1 immutable), ", s)
@ -2164,6 +2164,10 @@ class LeaseCrawler(unittest.TestCase, pollmixin.PollMixin, WebRenderingMixin):
self.failUnless("no unit (like day, month, or year) in '2kumquats'" self.failUnless("no unit (like day, month, or year) in '2kumquats'"
in str(e), str(e)) in str(e), str(e))
def test_parse_date(self):
p = time_format.parse_date
self.failUnlessEqual(p("2009-03-18"), 1237334400)
def test_limited_history(self): def test_limited_history(self):
basedir = "storage/LeaseCrawler/limited_history" basedir = "storage/LeaseCrawler/limited_history"
fileutil.make_dirs(basedir) fileutil.make_dirs(basedir)

View File

@ -58,3 +58,9 @@ def parse_duration(s):
raise ValueError("no unit (like day, month, or year) in '%s'" % orig) raise ValueError("no unit (like day, month, or year) in '%s'" % orig)
s = s.strip() s = s.strip()
return int(s) * unit return int(s) * unit
def parse_date(s):
# return seconds-since-epoch for the UTC midnight that starts the given
# day
return iso_utc_time_to_localseconds(s + "T00:00:00")

View File

@ -138,8 +138,8 @@ class StorageStatus(rend.Page):
"will be considered expired." "will be considered expired."
% abbreviate_time(lc.override_lease_duration)] % abbreviate_time(lc.override_lease_duration)]
else: else:
assert lc.mode == "date-cutoff" assert lc.mode == "cutoff-date"
date = time.strftime("%d-%b-%Y", time.gmtime(lc.date_cutoff)) date = time.strftime("%Y-%m-%d", time.gmtime(lc.cutoff_date))
ctx.tag["Leases created or last renewed before %s " ctx.tag["Leases created or last renewed before %s "
"will be considered expired." % date] "will be considered expired." % date]
if len(lc.mode) > 2: if len(lc.mode) > 2: