pvl/config/bind/zone.py
author Tero Marttila <terom@fixme.fi>
Sun, 12 Jul 2009 02:14:34 +0300
changeset 9 2156906bfbf1
permissions -rw-r--r--
reorganize modules into packages
9
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Configuration file output for the ISC DNS server: BIND
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
from .. import file
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
class Item (file.Item) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
        Item that knows how to format comments
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    COMMENT_PREFIX = ';'
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
class Zone (Item, file.Contents) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
        A zone containing a bunch of directives, resource records and comments
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    def __init__ (self, ttl=None, comment=None) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
            @param name the name of the zonefile, for status stuff
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
            @param path the path to the zonefile
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
            @param ttl default TTL to use
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
        
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
        Item.__init__(self, [comment])
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        file.Contents.__init__(self)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        if ttl :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
            self.add(TTLDirective(ttl))
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
class Comment (Item) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        A comment, is, well, a comment :)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    def __init__ (self, comment) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
            @param comment the comment string
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        Item.__init__(self, [comment])
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    # only need to iterate over our comments
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    iter_lines = Item.iter_comments
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
class Label (object) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        A label, as used in a ResourceRecord, either as the label, or the rdata for various resource types
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
        You can also use strs, this just implements a __str__ method
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    def __init__ (self, label) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
            @param label the literal label to use
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
        self.label = label
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    def __str__ (self) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
        return self.label
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
class Origin (Label) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
        A label that represents the zone's origin
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    def __init__ (self) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
        pass
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    def __str__ (self) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
        return '@'
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
class FQDN (Label) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
        A label that represents the given external domain (i.e. this adds the . to the end that people always forget).
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    def __init__ (self, fqdn) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
        self.fqdn = fqdn
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    def __str__ (self) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
        return "%s." % (self.fqdn, )
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
class Interval (object) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
        A time interval suitable for use in SOA records
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
    def __init__ (self, s=None, m=None, h=None, d=None) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
            @param s seconds
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
            @param m minutes
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
            @param h hours
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
            @param d days
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
        self.s = s
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
        self.m = m
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
        self.h = h
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
        self.d = d
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
    def __str__ (self) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
            If only seconds were given, just return those directly, otherwise, apply units
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
        if self.s and not self.m and not self.h and not self.d :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
            return str(self.s)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
        else :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
            return "%s%s%s%s" % (
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
                    "%ds" % self.s if self.s else '',
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
                    "%dm" % self.m if self.m else '',
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
                    "%dh" % self.h if self.h else '',
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
                    "%dd" % self.d if self.d else ''
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
                )
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
class ResourceRecord (Item) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
        A generic resource record for a BIND zone file
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
    def __init__ (self, label, type, rdata, cls='IN', ttl=None, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
            @param label the "name" of this record, or None to referr to the previous record's label
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
            @param type the type as a string ('A', 'TXT', etc.)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
            @param rdata the rdata, as a raw string
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
            @param cls the class, e.g. 'IN'
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
            @param ttl the time-to-live value in seconds, or None to omit it
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
        super(ResourceRecord, self).__init__(**kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
        self.label = label
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
        self.type = type
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
        self.rdata = rdata
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
        self.cls = cls
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
        self.ttl = ttl
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
    def iter_lines (self) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
            Just format the lines, eh
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
        
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
        # prefix comments
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
        for line in self.iter_comments() :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
            yield line
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
        # then format the line
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
        # XXX: TTL?
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
        yield "%-30s %-4s%-4s %-8s %s" % (self.label if self.label is not None else '', str(self.ttl) if self.ttl else '', self.cls, self.type, self.rdata)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
class SOA (ResourceRecord) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
        "Identifies the start of a zone of authority", must be the first record
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
    def __init__ (self, label, primary_ns, hostmaster, serial, refresh, retry, expire, minimum, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
            @param label the "name" of the zone, usually ORIGIN
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
            @param primary_ns the address of the primary NS server
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
            @param hostmaster the mailbox of the zone's hostmaster
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
            @param serial the serial number of the zone as an integer
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
            @param refresh time interval between zone refreshes in seconds
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
            @param retry time interval between retrys for failed refreshes
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
            @param expire time interval before zone data can no longer be considered authorative
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
            @param minimum minimum TTL for RRs in this zone
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
        super(SOA, self).__init__(label, 'SOA', "%s %s ( %s %s %s %s %s )" % (
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
                primary_ns, hostmaster, serial, refresh, retry, expire, minimum
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
            ), **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
class A (ResourceRecord) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
        An IPv4 forward address
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
    def __init__ (self, label, addr, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
            @param label the "name" of the address
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
            @param addr the IPv4 target address
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
        assert(addr.is_v4())
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
        super(A, self).__init__(label, 'A', addr, **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
class AAAA (ResourceRecord) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
        An IPv6 forward address
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
    def __init__ (self, label, addr, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
            @param label the "name" of the address
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
            @param addr the IPv6 target address
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
        
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
        assert(addr.is_v6())
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
        super(AAAA, self).__init__(label, 'AAAA', addr.strCompressed(), **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
class CNAME (ResourceRecord) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
        A canonical-name alias
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
    def __init__ (self, label, target, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   213
            @param label the "name" of the alias
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214
            @param target the alias target
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
        super(CNAME, self).__init__(label, 'CNAME', target, **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
class TXT (ResourceRecord) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
        A human-readable information record
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
    def __init__ (self, label, text, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
            @param label the "name" of the text record
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
            @param text the text data, shouldn't contain any quotes...
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
        
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
        # XXX: escaping?
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
        super(TXT, self).__init__(label, 'TXT', '"%s"' % text, **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   233
class MX (ResourceRecord) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
        A mail-exchange definition
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
    def __init__ (self, label, pref, exchange, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
            @param label the "name" of the domain to handle mail for
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   241
            @param pref the numerical preference for this exchange
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
            @param exchange the domain name of the mail exchange (SMTP server)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
        super(MX, self).__init__(label, 'MX', "%d %s" % (pref, exchange), **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
class NS (ResourceRecord) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   248
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   249
        An authorative name server
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   250
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   251
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
    def __init__ (self, label, nsname, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
            @param label the "name" of the domain to have a nameserver for
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
            @param nsname the name of the nameserver
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   257
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   258
        super(NS, self).__init__(label, 'NS', nsname)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   259
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   260
class PTR (ResourceRecord) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   261
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
        An IPv4/IPv6 reverse address
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   263
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   264
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   265
    def __init__ (self, addr, name, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   266
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
            @param addr the addr.IP to map via in-addr.arpa
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
            @param name the name to map the address to
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   269
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
        # XXX: quick hack, this gives an absolute name
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
        label = addr.reverseName()
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
        
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
        super(PTR, self).__init__(label, 'PTR', name)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
class Directive (Item) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
        Special directives that can be used in zone files to control behaviour
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
    def __init__ (self, name, *args, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
            @param name the $NAME bit
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   284
            @param args optional list of space-seprated arguments, Nones are ignored
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   285
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   287
        super(Directive, self).__init__(**kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   288
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   289
        self.name = name
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
        self.args = [arg for arg in args if arg is not None]
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   291
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   292
    def iter_lines (self) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   293
        # prefix comments
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
        for line in self.iter_comments() :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   295
            yield line
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   296
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
        # then format it
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
        yield "$%s%s" % (self.name, (' ' + ' '.join(str(arg) for arg in self.args)) if self.args else '')
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   299
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   300
class OriginDirective (Directive) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   301
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   302
        Set the origin used to resolve the zone's labels.
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   303
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   304
        Note that the origin label is not absolute by default - use FQDN for that
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   305
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   306
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   307
    def __init__ (self, origin, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   308
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   309
            @param origin the origin label
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   310
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   311
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   312
        super(OriginDirective, self).__init__('ORIGIN', origin, **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   313
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   314
class TTLDirective (Directive) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   315
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   316
        Set the TTL used for records by default
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   317
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   318
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   319
    def __init__ (self, ttl, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   320
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   321
            @param ttl the new ttl to use
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   322
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   323
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   324
        super(TTLDirective, self).__init__('TTL', ttl, **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   325
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   326
class IncludeDirective (Directive) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   327
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   328
        Include another zoen file, optionally with a different origin
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   329
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   330
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   331
    def __init__ (self, filename, origin=None, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   332
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   333
            @param filename the zone file to include
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   334
            @param origin the optional origin to process the zonefile with
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   335
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   336
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   337
        super(IncludeDirective, self).__init__('INCLUDE', filename, origin, **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   338
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   339
class GenerateDirective (Directive) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   340
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   341
        Generate a bunch of numbered records using an expression for the label and rdata.
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   342
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   343
        At the simplest, any "$" in the expression is replaced with the value of the iterator.
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   344
    """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   345
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   346
    def __init__ (self, range, lhs, type, rhs, ttl=None, cls=None, **kwargs) :
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   347
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   348
            @param range (start, stop, step) tuple
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   349
            @param lhs expression to generate the label
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   350
            @param type the resource record type
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   351
            @param rhs expression to generate the rdata
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   352
        """
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   353
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   354
        super(GenerateDirective, self).__init__('GENERATE', '%d-%d' % range, lhs, ttl, cls, type, rhs, **kwargs)
2156906bfbf1 reorganize modules into packages
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   355