dhcp_conf.py
author Tero Marttila <terom@fixme.fi>
Thu, 02 Apr 2009 21:11:01 +0300
changeset 3 ff98fa9b84ce
parent 2 e66102ab7048
child 4 8b633782f02d
permissions -rw-r--r--
implement comments properly
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Configuration file output for the ISC DHCP server
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
import conf
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
import itertools
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
     9
class Object (conf.ConfObject) :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    10
    """
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    11
        Our version of ConfObject
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    12
    """
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    13
    
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    14
    def _fmt_comments (self) :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    15
        """
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    16
            Format our comment lines
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    17
        """
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    18
        
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    19
        for comment in self.comments :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    20
            if comment is not None :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    21
                yield "# %s" % (comment, )
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    22
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    23
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    24
class Comment (Object) :
2
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    25
    """
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    26
        A comment, is, well, a comment :)
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    27
    """
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    28
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    29
    def __init__ (self, comment) :
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    30
        """
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    31
            @param comment the comment string
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    32
        """
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    33
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    34
        Object.__init__(self, [comment])
2
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    35
    
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    36
    def fmt_lines (self) :
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    37
        """
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    38
            Yield a single line with the comment
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    39
        """
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    40
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    41
        return self._fmt_comments()
2
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    42
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    43
class _Section (Object) :
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    44
    """
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    45
        Base implementation of Section, but doesn't format comments in output (inheriting class can define how that happens)
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    46
    """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    47
2
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    48
    def __init__ (self, params=None, decls=None, comment=None) :
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        """
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    50
            If params/decls are given, those are the used as the initial contents of this section
2
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    51
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    52
            If a comment is given, then it will be formatted before the section's stuff
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    53
        """
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    54
        
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    55
        Object.__init__(self, [comment])
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    57
        self.params = params or []
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    58
        self.decls = decls or []
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    59
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    60
    def add_param (self, param) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    61
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    62
            Add the given Parameter to the end of this section's params
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    63
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    64
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    65
        self.params.append(param)
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    66
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    67
    def add_params (self, params) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    68
        for param in params :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    69
            self.add_param(param)
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    70
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    71
    def add_decl (self, decl) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    72
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    73
            Add the given Declaration to the end of this section's decls
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    74
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    75
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    76
        self.decls.append(decl)
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    77
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    78
    def add_decls (self, decls) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    79
        for decl in decls :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    80
            self.add_decl(decl)
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    81
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    82
    def fmt_lines (self) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    83
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    84
            Format all of our params and decls, in that order
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    85
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    86
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    87
        # then output each content line
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    88
        for stmt in itertools.chain(self.params, self.decls) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    89
            # skip Nones
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    90
            if stmt is None :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    91
                continue
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    92
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    93
            for line in stmt.fmt_lines() :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    94
                yield line
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    95
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    96
class Section (_Section) :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    97
    """
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    98
        A section holds a list of params and a list of decls, plus some comments at the beginning of the section
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    99
    """
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   100
    
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   101
    def fmt_lines (self) :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   102
        """
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   103
            Format all of our comments, and then super
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   104
        """
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   105
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   106
        # comments
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   107
        for line in self._fmt_comments() :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   108
            yield line
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   109
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   110
        # section stuff
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   111
        for line in _Section.fmt_lines(self) :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   112
            yield line
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   113
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   114
class ConfFile (Section, conf.File) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   115
    DEFAULT_NAME = "dhcpd.conf"
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   116
    DEFAULT_PATH = "/etc/dhcp3/dhcpd.conf"
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   117
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   118
    def __init__ (self, name=DEFAULT_NAME, path=DEFAULT_PATH, params=None, decls=None) :
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   119
        """
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   120
            Initialize the dhcpd config file, but don't open it yet.
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
        
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   123
        conf.File.__init__(self, name, path)
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   124
        Section.__init__(self, params, decls)
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   126
class Statement (Object) :
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
    """
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   128
        A statement is a single line in the config file
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   131
    def __init__ (self, name, *args, **kwargs) :
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
        """
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   133
            Arguments given as None will be ignored.
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   134
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   135
            A comment can be given as a keyword argument
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   138
        if kwargs : assert len(kwargs) == 1 and 'comment' in kwargs
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   139
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   140
        Object.__init__(self, [kwargs.get('comment')])
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   141
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
        self.name = name
2
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
   143
        self.args = [arg for arg in args if arg is not None]
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
    
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
    def _fmt_arg (self, arg) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
            Formats a arg for use in output, the following types are supported:
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
                list/tuple/iter:    results in a comma-and-space separated list of formatted values
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
                unicode:            results in an encoded str
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
                str:                results in the string itself, quoted if needed
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
                other:              attempt to convert to a str, and then format that
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
        # format lists specially
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
        # XXX: iterators?
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
        if isinstance(arg, (list, tuple)) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
            # recurse as a comma-and-space separated list
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
            return ', '.join(self._fmt_arg(a) for a in arg)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
        elif isinstance(arg, Literal) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
            # use what it specifies
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
            return arg.fmt_arg()
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
        elif isinstance(arg, unicode) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
            # recurse with the str version
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
            # XXX: what encoding to use?
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
            return self._fmt_arg(arg.encode('utf8'))
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
        elif isinstance(arg, str) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
            # XXX: quoting
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
            return arg
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
        else :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
            # try and use it as a string
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
            return self._fmt_arg(str(arg))
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
    
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
    def _fmt_data (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
        """
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   180
            Formats the statement name/params as a single line, ignoring None
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
2
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
   183
        return "%s%s" % (self.name, (' ' + ' '.join(self._fmt_arg(a) for a in self.args)) if self.args else '')
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
class Literal (Statement) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
        A literal is something that goes into the config file as-is, with no formatting or escaping applied.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
    def __init__ (self, literal) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
        self.literal = literal
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
    
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
    def fmt_arg (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
        return self.literal
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
    def fmt_lines (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
        yield self.literal
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
class Parameter (Statement) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
        A parameter is a single statement that configures the behaviour of something.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
        Parameters have a name, and optionally, a number of arguments, and are formatted as statements terminated with
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   204
        a semicolon. For convenience, params/decls that are None are ignored.
2
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
   205
            
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
   206
        The parameter will be formatted like this:
e66102ab7048 fix up data.load_py, and make conf.File be a ConfObject itself - implement this for dhcp_conf
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
   207
            <name> [ <arg> [ ... ] ] ";"
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
    
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
    def fmt_lines (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
            Yields a single ;-terminated line
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   213
        """
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   214
        
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   215
        # comments
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   216
        for line in self._fmt_comments() :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   217
            yield line
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   218
        
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   219
        # the line
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
        yield "%s;" % self._fmt_data()
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   222
class Declaration (_Section, Statement) :
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
    """
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   224
        A declaration begins like a statement (with name and args), but then contains a curly-braces-delimited block
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   225
        that acts like a Section.
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
        <name> [ <args> [ ... ] ] {
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   228
            [ <Section> ]
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   233
    def __init__ (self, name, args=[], params=None, decls=None, comment=None) :
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
            The name/args will be formatted as in Statement, but params should be an iterable of Parameters, and decls
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
            an iterable of Declarations.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
        # init the statement bit
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   240
        _Section.__init__(self, params, decls)
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   241
        Statement.__init__(self, name, *args, **dict(comment=comment))
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
    def fmt_lines (self) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
            Yields a header line, a series of indented body lines, and the footer line
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
        
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   248
        # comments
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   249
        for line in self._fmt_comments() :
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   250
            yield line
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   251
        
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
        # the header to open the block
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
        yield "%s {" % self._fmt_data()
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
        
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   255
        # then output the section stuff, indented
3
ff98fa9b84ce implement comments properly
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   256
        for line in _Section.fmt_lines(self) :
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   257
            yield "\t%s" % line
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   258
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   259
        # and then close the block
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   260
        yield "}"
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   261
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
class SharedNetwork (Declaration) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   263
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   264
        A shared-network declaration is used to define a set of subnets that share the same physical network,
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   265
        optionally with some shared params.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   266
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
        shared-network <name> {
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
            [ parameters ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   269
            [ declarations ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
    def __init__ (self, name, params=[], decls=[]) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
            @param name the name of the shared-subnet
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
            @param params optional parameters
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
            @param decls the iterable of subnets or other declarations in the shared network
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
        super(SharedNetwork, self).__init__("shared-network", [name], params, decls)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
class Subnet (Declaration) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   284
        A subnet is used to provide the information about a subnet required to identify whether or not an IP address is
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   285
        on that subnet, and may also be used to specify parameters/declarations for that subnet.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
        
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   287
        subnet <subnet-number> netmask <netmask> {
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   288
            [ parameters ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   289
            [ declarations ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   291
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   292
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   293
    def __init__ (self, network, params=None, decls=None) :
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   295
            @param network the addr.Network for the subnet
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   296
            @param params optional parameters
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
            @param decls optional decls, e.g. subnets
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   299
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   300
        super(Subnet, self).__init__("subnet", [network.net(), "netmask", network.netmask()], params, decls)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   301
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   302
class Group (Declaration) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   303
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   304
        A group is simply used to apply a set of parameters to a set of declarations.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   305
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   306
        group {
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   307
            [ parameters ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   308
            [ declarations ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   309
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   310
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   311
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   312
    def __init__ (self, params=None, decls=None) :
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   313
        super(Group, self).__init__("group", [], params, decls)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   314
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   315
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   316
class Host (Declaration) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   317
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   318
        A host is used to match a request against specific host, and then apply settings for that host.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   319
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   320
        The "hostname" is the DHCP name to identify the host. 
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   321
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   322
        If no dhcp-client-identifier option is specified in the parameters, then the host is matched using the
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   323
        "hardware" parameter.
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   324
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   325
        host <hostname> {
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   326
            [ parameters ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   327
            [ declarations ]
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   328
        }
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   329
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   330
1
2223ade4f259 continue the overengineering effort, we are now able to generate dhcpd.conf files
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   331
    def __init__ (self, hostname, params=None, decls=None) :
0
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   332
        super(Host, self).__init__("host", [hostname], params, decls)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   333
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   334
class Option (Parameter) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   335
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   336
        A generic 'option' parameter for a dhcpd.conf file
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   337
    """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   338
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   339
    def __init__ (self, name, *args) :
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   340
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   341
            Formatted as a Satement with a name of "option <name>".
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   342
        """
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   343
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   344
        super(Option, self).__init__("option %s" % name, *args)
257003279747 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   345