SF #642236, optparse LaTeX docs by Johannes Gijsbers
diff --git a/Doc/lib/required_2.py b/Doc/lib/required_2.py
new file mode 100755
index 0000000..421514a
--- /dev/null
+++ b/Doc/lib/required_2.py
@@ -0,0 +1,41 @@
+import optparse
+
+class Option (optparse.Option):
+    ATTRS = optparse.Option.ATTRS + ['required']
+
+    def _check_required (self):
+        if self.required and not self.takes_value():
+            raise OptionError(
+                "required flag set for option that doesn't take a value",
+                 self)
+
+    # Make sure _check_required() is called from the constructor!
+    CHECK_METHODS = optparse.Option.CHECK_METHODS + [_check_required]
+
+    def process (self, opt, value, values, parser):
+        optparse.Option.process(self, opt, value, values, parser)
+        parser.option_seen[self] = 1
+
+
+class OptionParser (optparse.OptionParser):
+
+    def _init_parsing_state (self):
+        optparse.OptionParser._init_parsing_state(self)
+        self.option_seen = {}
+
+    def check_values (self, values, args):
+        for option in self.option_list:
+            if (isinstance(option, Option) and
+                option.required and
+                not self.option_seen.has_key(option)):
+                self.error("%s not supplied" % option)
+        return (values, args)
+
+
+parser = OptionParser(option_list=[
+    Option("-v", action="count", dest="verbose"),
+    Option("-f", "--file", required=1)])
+(options, args) = parser.parse_args()
+
+print "verbose:", options.verbose
+print "file:", options.file