Project

General

Profile

root / trunk / src / haizea / cli / optionparser.py @ 641

1
# -------------------------------------------------------------------------- #
2
# Copyright 2006-2009, University of Chicago                                 #
3
# Copyright 2008-2009, Distributed Systems Architecture Group, Universidad   #
4
# Complutense de Madrid (dsa-research.org)                                   #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
# -------------------------------------------------------------------------- #
18
import optparse as py_optparse
19

    
20
class OptionParser (py_optparse.OptionParser):
21
    def _init_parsing_state (self):
22
        py_optparse.OptionParser._init_parsing_state(self)
23
        self.option_seen = {}
24

    
25
    def check_values (self, values, args):
26
        for option in self.option_list:
27
            if (isinstance(option, Option) and
28
                option.required and
29
                not self.option_seen.has_key(option)):
30
                self.error("%s not supplied" % option)
31
        return (values, args)
32
    
33
class Option (py_optparse.Option):
34
    ATTRS = py_optparse.Option.ATTRS + ['required']
35

    
36
    def _check_required (self):
37
        if self.required and not self.takes_value():
38
            raise py_optparse.OptionError(
39
                "required flag set for option that doesn't take a value",
40
                 self)
41

    
42
    # Make sure _check_required() is called from the constructor!
43
    CHECK_METHODS = py_optparse.Option.CHECK_METHODS + [_check_required]
44

    
45
    def process (self, opt, value, values, parser):
46
        py_optparse.Option.process(self, opt, value, values, parser)
47
        parser.option_seen[self] = 1