pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
--- a/bin/pvl.dns-includes Tue Mar 03 12:09:22 2015 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-
-"""
- Extract a list of $INCLUDE paths from a zone file.
-"""
-
-import logging; log = logging.getLogger('pvl.dns-includes')
-import optparse
-import pvl.args
-import pvl.dns
-import pvl.dns.process
-
-def main (argv):
- parser = optparse.OptionParser(main.__doc__)
- parser.add_option_group(pvl.args.parser(parser))
- parser.add_option_group(pvl.dns.process.optparser(parser))
-
- parser.add_option('--include-path', metavar='PATH',
- help="Rewrite includes to given absolute path")
-
- # input
- options, args = pvl.args.parse(parser, argv)
-
- # process
- zone = list(pvl.dns.process.apply_zone(options, args))
-
- if options.include_path:
- log.info("Set zone include path: %s", options.include_path)
-
- zone = list(pvl.dns.process.zone_includes_path(zone, options.include_path))
-
- for include in pvl.dns.process.zone_includes(zone):
- # output include path only
- print include
-
- return 0
-
-if __name__ == '__main__':
- pvl.args.main(main)
--- a/bin/pvl.dns-process Tue Mar 03 12:09:22 2015 +0200
+++ b/bin/pvl.dns-process Tue Mar 03 12:14:22 2015 +0200
@@ -22,6 +22,9 @@
parser.add_option('--include-path', metavar='PATH',
help="Rewrite includes to given absolute path")
+
+ parser.add_option('--include-trace', metavar='FILE',
+ help="Write out included files to given file")
# input
options, args = pvl.args.parse(parser, argv)
@@ -34,10 +37,22 @@
zone = list(pvl.dns.process.zone_serial(zone, options.serial))
+ if options.include_trace:
+ include_trace = [ ]
+ else:
+ include_trace = None
+
if options.include_path:
log.info("Set zone include path: %s", options.include_path)
- zone = list(pvl.dns.process.zone_includes_path(zone, options.include_path))
+ zone = list(pvl.dns.process.zone_includes(zone, options.include_path,
+ include_trace = include_trace,
+ ))
+
+ if options.include_trace:
+ with pvl.args.apply_file(options.include_trace, 'w') as file:
+ for include in include_trace:
+ print >>file, include
pvl.dns.process.apply_zone_output(options, zone)
--- a/pvl/dns/process.py Tue Mar 03 12:09:22 2015 +0200
+++ b/pvl/dns/process.py Tue Mar 03 12:14:22 2015 +0200
@@ -35,30 +35,28 @@
else:
yield rr
-def zone_includes_path (rrs, includes_path):
+def zone_includes (rrs, includes_path,
+ include_trace=None,
+):
"""
Rewrite include paths in zones.
+
+ include_trace - append included paths to given list
"""
for rr in rrs:
if isinstance(rr, zone.ZoneDirective) and rr.directive == 'INCLUDE':
include_path, = rr.arguments
- yield zone.ZoneDirective.INCLUDE(os.path.join(includes_path, include_path))
+ include = os.path.join(includes_path, include_path)
+
+ if include_trace is not None:
+ include_trace.append(include)
+
+ yield zone.ZoneDirective.INCLUDE(include)
else:
yield rr
-def zone_includes (rrs):
- """
- Extract $INCLUDE paths from zone.
- """
-
- for rr in rrs:
- if isinstance(rr, pvl.dns.ZoneDirective) and rr.directive == 'INCLUDE':
- include_path, = rr.arguments
-
- yield include_path
-
def apply_zone_output (options, zone):
"""
Output given ZoneDirective/ZoneRecord items to the output file/stdout.
--- a/pvl/dns/tests.py Tue Mar 03 12:09:22 2015 +0200
+++ b/pvl/dns/tests.py Tue Mar 03 12:14:22 2015 +0200
@@ -204,9 +204,10 @@
$INCLUDE "includes/test"
"""))
-
+
+ include_trace = [ ]
rrs = list(process.zone_serial(rrs, 1337))
- rrs = list(process.zone_includes_path(rrs, '...'))
+ rrs = list(process.zone_includes(rrs, '...', include_trace))
self.assertZoneEqual(rrs, [
"$TTL 3600",
@@ -217,4 +218,7 @@
"bar A 192.0.2.2",
"$INCLUDE .../includes/test",
])
+ self.assertEqual(include_trace, [
+ '.../includes/test',
+ ])