-
Notifications
You must be signed in to change notification settings - Fork 3
/
test_weeder.py
87 lines (64 loc) · 2.1 KB
/
test_weeder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import io
import re
import datetime as dt
from weeder import Weeder, run_cmdline
def test_default_policy_progression():
files = []
# Simulate running across a period
for i in range(2000):
d = dt.date(2000, 1, 1) + dt.timedelta(days=i)
files.append("dir/file-%s.ext" % d)
w = Weeder(files, refdate=d)
for f in w.get_files_to_delete():
files.remove(f)
def f2d(fn):
m = re.search(r"(\d{4})-(\d{2})-(\d{2})", fn)
return dt.date(*[int(g) for g in m.groups()])
all_dates = [f2d(fn) for fn in files]
df = dt.date(2000, 1, 1) + dt.timedelta(days=1999)
for d1, d0, dist in (
(0, 14, 1),
(14, 84, 7),
(84, 364, 28),
(364, 10000, 364),
):
dist = dt.timedelta(days=dist)
d0 = df - dt.timedelta(days=d0)
d1 = df - dt.timedelta(days=d1)
dates = [x for x in all_dates if d0 <= x < d1]
assert dates
for i in range(len(dates) - 1):
assert dates[i + 1] - dates[i] == dist
def files1():
dates = [dt.date.today() - dt.timedelta(days=i) for i in range(50)]
dates.reverse()
files = ["dir/file-%s.ext" % d for d in dates]
return files
def weed(args, files):
out = io.StringIO()
run_cmdline(args=args + files, outfile=out)
out = out.getvalue().splitlines()
return out
def check1(files, left):
assert len(left) < len(files)
# All files kept in the last 2 weeks
assert left[-14:] == files[-14:]
def d(fn):
return dt.datetime.strptime(fn, 'dir/file-%Y-%m-%d.ext')
# One file every week in the first days
for i in range(5):
assert d(left[i + 1]) - d(left[i]) == dt.timedelta(days=7)
def test_cmdline_default():
files = files1()
out = weed([], files)
left = sorted(set(files) - set(out))
check1(files, left)
def test_cmdline_goners():
files = files1()
out = weed(['--print-goners'], files)
left = sorted(set(files) - set(out))
check1(files, left)
def test_cmdline_keepers():
files = files1()
left = weed(['--print-keepers'], files)
check1(files, left)