aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid.without_tls/rpki/myrpki.py14
-rw-r--r--rpkid.without_tls/tests/yamltest.py36
-rw-r--r--rpkid/rpki/myrpki.py14
-rw-r--r--rpkid/tests/yamltest.py36
-rw-r--r--scripts/apnic-to-csv.py7
-rw-r--r--scripts/ripe-asns-to-csv.py1
-rw-r--r--scripts/translate-handles.py8
7 files changed, 73 insertions, 43 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):
"""
diff --git a/rpkid/rpki/myrpki.py b/rpkid/rpki/myrpki.py
index eab0e095..c1812b5c 100644
--- a/rpkid/rpki/myrpki.py
+++ b/rpkid/rpki/myrpki.py
@@ -521,18 +521,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/tests/yamltest.py b/rpkid/tests/yamltest.py
index 8b8e87d6..3b9bc6c0 100644
--- a/rpkid/tests/yamltest.py
+++ b/rpkid/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",
- "https://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",
+ "https://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):
"""
diff --git a/scripts/apnic-to-csv.py b/scripts/apnic-to-csv.py
index a299ce8a..5e2b14e2 100644
--- a/scripts/apnic-to-csv.py
+++ b/scripts/apnic-to-csv.py
@@ -21,8 +21,6 @@ PERFORMANCE OF THIS SOFTWARE.
import rpki.myrpki, rpki.ipaddrs
-translations = dict((src, dst) for src, dst in rpki.myrpki.csv_reader("translations.csv", columns = 2))
-
asns = rpki.myrpki.csv_writer("asns.csv")
prefixes = rpki.myrpki.csv_writer("prefixes.csv")
@@ -37,8 +35,6 @@ for line in open("delegated-apnic-extended-latest"):
assert registry == "apnic"
- opaque_id = translations.get(opaque_id, opaque_id)
-
if rectype == "asn":
asns.writerow((opaque_id, "%s-%s" % (start, int(start) + int(value) - 1)))
@@ -47,3 +43,6 @@ for line in open("delegated-apnic-extended-latest"):
elif rectype == "ipv6":
prefixes.writerow((opaque_id, "%s/%s" % (start, value)))
+
+asns.close()
+prefixes.close()
diff --git a/scripts/ripe-asns-to-csv.py b/scripts/ripe-asns-to-csv.py
index f1fea0c2..122ed1fe 100644
--- a/scripts/ripe-asns-to-csv.py
+++ b/scripts/ripe-asns-to-csv.py
@@ -102,5 +102,6 @@ class main(object):
self.statement = line
self.finish_statement(True)
f.close()
+ self.asns.close()
main()
diff --git a/scripts/translate-handles.py b/scripts/translate-handles.py
index 42be9eb8..68695e38 100644
--- a/scripts/translate-handles.py
+++ b/scripts/translate-handles.py
@@ -37,13 +37,11 @@ translations = dict((src, dst) for src, dst in rpki.myrpki.csv_reader("translati
for filename in sys.argv[1:]:
- tmpfile = "%s.%d.tmp" % (filename, os.getpid())
- csvout = rpki.myrpki.csv_writer(tmpfile)
+ f = rpki.myrpki.csv_writer(filename)
for cols in rpki.myrpki.csv_reader(filename):
if cols[0] in translations:
cols[0] = translations[cols[0]]
- csvout.writerow(cols)
+ f.writerow(cols)
- del csvout
- os.rename(tmpfile, filename)
+ f.close()