# HG changeset patch # User Tero Marttila # Date 1425377662 -7200 # Node ID 4fecd0d1cf23551b4c151060ccc152aebc02b46b # Parent 76ed62924d50962b0d9f5461f9eaf0dd824bcd16 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes diff -r 76ed62924d50 -r 4fecd0d1cf23 bin/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) diff -r 76ed62924d50 -r 4fecd0d1cf23 bin/pvl.dns-process --- 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) diff -r 76ed62924d50 -r 4fecd0d1cf23 pvl/dns/process.py --- 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. diff -r 76ed62924d50 -r 4fecd0d1cf23 pvl/dns/tests.py --- 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', + ])