aboutsummaryrefslogtreecommitdiff
path: root/rpkid.without_tls
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2010-10-04 20:59:17 +0000
committerRob Austein <sra@hactrn.net>2010-10-04 20:59:17 +0000
commitf1c112eff031759d94f283cd08a311be68e715a0 (patch)
treeeb93aebb01a2fbae4a0a69e5dba2ddb3559fbc0e /rpkid.without_tls
parentf347d7a1347c542d9a4e9ea9b3f100674f0d094a (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.py14
-rw-r--r--rpkid.without_tls/tests/yamltest.py36
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):
"""