diff options
author | Rob Austein <sra@hactrn.net> | 2010-10-04 20:59:17 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2010-10-04 20:59:17 +0000 |
commit | f1c112eff031759d94f283cd08a311be68e715a0 (patch) | |
tree | eb93aebb01a2fbae4a0a69e5dba2ddb3559fbc0e /rpkid.without_tls | |
parent | f347d7a1347c542d9a4e9ea9b3f100674f0d094a (diff) |
Hack rpki.myrpki.csv_writer to write to a temporary filename, then
rename to the real filename on close.
svn path=/rpkid.without_tls/rpki/myrpki.py; revision=3457
Diffstat (limited to 'rpkid.without_tls')
-rw-r--r-- | rpkid.without_tls/rpki/myrpki.py | 14 | ||||
-rw-r--r-- | rpkid.without_tls/tests/yamltest.py | 36 |
2 files changed, 33 insertions, 17 deletions
diff --git a/rpkid.without_tls/rpki/myrpki.py b/rpkid.without_tls/rpki/myrpki.py index bdbdbbe9..b2a54b04 100644 --- a/rpkid.without_tls/rpki/myrpki.py +++ b/rpkid.without_tls/rpki/myrpki.py @@ -510,18 +510,26 @@ class csv_writer(object): """ Writer object for tab delimited text. We just use the stock CSV module in excel-tab mode for this. + + If "renmwo" is set (default), the file will be written to + a temporary name and renamed to the real filename after closing. """ - def __init__(self, filename): + def __init__(self, filename, renmwo = True): self.filename = filename - self.file = open(filename, "w") + self.renmwo = "%s.%d.~rnnmwo~" % (filename, os.getpid()) if renmwo else filename + self.file = open(self.renmwo, "w") self.writer = csv.writer(self.file, dialect = csv.get_dialect("excel-tab")) def close(self): """ Close this writer. """ - self.file.close() + if self.file is not None: + self.file.close() + self.file = None + if self.filename != self.renmwo: + os.rename(self.renmwo, self.filename) def __getattr__(self, attr): """ diff --git a/rpkid.without_tls/tests/yamltest.py b/rpkid.without_tls/tests/yamltest.py index 9853dbdf..f57e9df8 100644 --- a/rpkid.without_tls/tests/yamltest.py +++ b/rpkid.without_tls/tests/yamltest.py @@ -308,33 +308,38 @@ class allocation(object): f = self.csvout(fn) for k in self.kids: f.writerows((k.name, a) for a in k.resources.asn) + f.close() def dump_children(self, fn): """ Write children CSV file. """ - self.csvout(fn).writerows((k.name, k.resources.valid_until, k.path("bpki/resources/ca.cer")) - for k in self.kids) + f = self.csvout(fn) + f.writerows((k.name, k.resources.valid_until, k.path("bpki/resources/ca.cer")) + for k in self.kids) + f.close() def dump_parents(self, fn): """ Write parents CSV file. """ + f = self.csvout(fn) if self.is_root(): - self.csvout(fn).writerow(("rootd", - "http://localhost:%d/" % self.rootd_port, - self.path("bpki/servers/ca.cer"), - self.path("bpki/servers/ca.cer"), - self.name, - self.sia_base)) + f.writerow(("rootd", + "http://localhost:%d/" % self.rootd_port, + self.path("bpki/servers/ca.cer"), + self.path("bpki/servers/ca.cer"), + self.name, + self.sia_base)) else: parent_host = self.parent.hosted_by if self.parent.is_hosted() else self.parent - self.csvout(fn).writerow((self.parent.name, - self.up_down_url(), - self.parent.path("bpki/resources/ca.cer"), - parent_host.path("bpki/servers/ca.cer"), - self.name, - self.sia_base)) + f.writerow((self.parent.name, + self.up_down_url(), + self.parent.path("bpki/resources/ca.cer"), + parent_host.path("bpki/servers/ca.cer"), + self.name, + self.sia_base)) + f.close() def dump_prefixes(self, fn): """ @@ -343,6 +348,7 @@ class allocation(object): f = self.csvout(fn) for k in self.kids: f.writerows((k.name, p) for p in (k.resources.v4 + k.resources.v6)) + f.close() def dump_roas(self, fn): """ @@ -353,6 +359,7 @@ class allocation(object): for r in self.roa_requests: f.writerows((p, r.asn, group) for p in (r.v4 + r.v6 if r.v4 and r.v6 else r.v4 or r.v6 or ())) + f.close() def dump_clients(self, fn, db): """ @@ -362,6 +369,7 @@ class allocation(object): f = self.csvout(fn) f.writerows((s.client_handle, s.path("bpki/resources/ca.cer"), s.sia_base) for s in (db if only_one_pubd else [self] + self.kids)) + f.close() def find_pubd(self): """ |