bin/expand-zone
author Tero Marttila <terom@paivola.fi>
Thu, 15 Mar 2012 18:33:59 +0200
changeset 5 1eb454630f47
parent 1 ea30c9b619b8
permissions -rwxr-xr-x
expand-zone: remove serial update handling, just read
1
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
# vim: set ft=python :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
"""
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
    Process zonefiles with template expansions.
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
"""
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
__version__ = '0.0.1-dev'
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
import optparse
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
import codecs
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
import os.path
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
from datetime import datetime
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
import logging
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
log = logging.getLogger()
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
# command-line options, global state
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
options = None
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
def parse_options (argv) :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
    """
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
        Parse command-line arguments.
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
    """
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
    parser = optparse.OptionParser(
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
            prog        = argv[0],
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
            usage       = '%prog: [options]',
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
            version     = __version__,
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
            # module docstring
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
            description = __doc__,
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
    )
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
    # logging
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
    general = optparse.OptionGroup(parser, "General Options")
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    general.add_option('-q', '--quiet',     dest='loglevel', action='store_const', const=logging.ERROR, help="Less output")
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
    general.add_option('-v', '--verbose',   dest='loglevel', action='store_const', const=logging.INFO,  help="More output")
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
    general.add_option('-D', '--debug',     dest='loglevel', action='store_const', const=logging.DEBUG, help="Even more output")
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
    parser.add_option_group(general)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
    parser.add_option('-c', '--input-charset',  metavar='CHARSET',  default='utf-8', 
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
            help="Encoding used for input files")
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
    parser.add_option('-o', '--output',         metavar='FILE',     default='-',
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
            help="Write to output file; default stdout")
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    parser.add_option('--output-charset',       metavar='CHARSET',  default='utf-8', 
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
            help="Encoding used for output files")
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
    parser.add_option('--expand',               metavar='NAME=VALUE', action='append',
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
            help="Expand given template variable in zone")
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
    parser.add_option('--serial',               metavar='FILE',
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
            help="Read/expand serial from given .serial file")
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
    # defaults
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
    parser.set_defaults(
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
        loglevel            = logging.WARN,
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
        expand              = [],
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
    )
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
    
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
    # parse
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
    options, args = parser.parse_args(argv[1:])
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
    # configure
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
    logging.basicConfig(
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
        format  = '%(processName)s: %(name)s: %(levelname)s %(funcName)s : %(message)s',
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
        level   = options.loglevel,
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
    )
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
    return options, args
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
def process_file (file, expansions) :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
    """
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
        Process file, expanding lines.
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
    """
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
    for line in file :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
        line = line.format(**expansions)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
        yield line
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
def write_lines (file, lines, suffix='\n') :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
    for line in lines :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
        file.write(line + suffix)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
def open_file (path, mode, charset) :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
    """
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
        Open unicode-enabled file from path, with - using stdio.
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
    """
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
    if path == '-' :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
        # use stdin/out based on mode
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
        stream, func = {
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
            'r':    (sys.stdin, codecs.getreader),
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
            'w':    (sys.stdout, codecs.getwriter),
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
        }[mode[0]]
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
        # wrap
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
        return func(charset)(stream)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
    else :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
        # open
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
        return codecs.open(path, mode, charset)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
5
1eb454630f47 expand-zone: remove serial update handling, just read
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   109
def process_serial (path) :
1
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
    """
5
1eb454630f47 expand-zone: remove serial update handling, just read
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   111
        Use serial number from given file.
1
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
        Returns the new serial as a string.
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
    """
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
5
1eb454630f47 expand-zone: remove serial update handling, just read
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   116
    if not os.path.exists(path) :
1eb454630f47 expand-zone: remove serial update handling, just read
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   117
        raise Exception("Given --serial does not exist: %s" % path)
1
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
5
1eb454630f47 expand-zone: remove serial update handling, just read
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   119
    return open(path).read().strip()
1
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
def parse_expand (expand) :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
    """
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
        Parse an --expand foo=bar to (key, value)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
    """
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
    key, value = expand.split('=', 1)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
    return key, value
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
def main (argv) :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
    global options
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
    
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
    options, args = parse_options(argv)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
    # expands
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
    expand = dict(parse_expand(expand) for expand in options.expand)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
    # serial?
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
    if options.serial :
5
1eb454630f47 expand-zone: remove serial update handling, just read
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
   140
        serial = process_serial(options.serial)
1
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
        expand['serial'] = serial
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
    # input
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
    if args :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
        # open files
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
        input_files = [open_file(path, 'r', options.input_charset) for path in args]
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   148
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
    else :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
        # default to stdout
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   151
        input_files = [open_file('-', 'r', options.input_charset)]
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
   
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
    # process
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   154
    lines = []
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   155
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   156
    for file in input_files :
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
        log.info("Reading zone: %s", file)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   159
        lines += list(process_file(file, expand))
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   160
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   161
    # output
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162
    output = open_file(options.output, 'w', options.output_charset)
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
    write_lines(output, lines, suffix='')
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
    return 0
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   166
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   167
if __name__ == '__main__':
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   168
    import sys
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   169
ea30c9b619b8 expand-zone: manage zone serials and expand template vars
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   170
    sys.exit(main(sys.argv))