2 Classes and functions for recording machine friendly data
3 about the overall distribution about what happened to
4 installations. This is a strict superset of :mod:`wizard.seen`
5 functionality, as it records seen autoinstallers in finer
10 This code relies on indexes not being changed while using
11 the same directory. We should probably add some sanity
18 class ReportSet(object):
19 #: Dictionary of names to reports
21 def __init__(self, reports):
22 self.reports = reports
23 def write(self, name, i, *entry):
24 self.reports[name].write(i, *entry)
27 #: File object to this report
31 def __init__(self, file, values=None):
33 self.values = set() if values is None else values
34 def write(self, i, *entry):
35 self.file.write("%04d %s\n" % (i, ' '.join(entry)))
39 def make(log_dir, *names):
42 filename = os.path.join(log_dir, "%s.txt" % name)
45 for line in open(filename):
47 values.add(int(line.partition(' ')[0]))
49 if e.errno == errno.ENOENT:
53 file = open(filename, "a")
54 reports[name] = Report(file, values)
55 return ReportSet(reports)
57 def make_fresh(log_dir, *names):
60 file = open(os.path.join(log_dir, "%s.txt" % name), "w")
61 reports[name] = Report(file)
62 return ReportSet(reports)