217: Started work on new Option2 class that is more declarative and doesn't require subclassing from Option

This commit is contained in:
Jason Gerard DeRose
2008-08-28 18:31:06 +00:00
parent 283c6f8fce
commit a6ec94da60
2 changed files with 65 additions and 1 deletions

View File

@@ -27,6 +27,7 @@ import inspect
import plugable
from plugable import lock
import errors
import ipa_types
RULE_FLAG = 'validation_rule'
@@ -83,6 +84,42 @@ class DefaultFrom(plugable.ReadOnly):
return None
class Option2(plugable.ReadOnly):
def __init__(self, name, doc, type_, required=False, multivalue=False,
default=None, default_from=None, normalize=None, rules=tuple()
):
self.name = name
self.doc = doc
self.type = type_
self.required = required
self.multivalue = multivalue
self.default = default
self.default_from = default_from
self.__normalize = normalize
self.rules = (type_.validate,) + rules
lock(self)
def validate_scalar(self, value):
for rule in self.rules:
msg = rule(value)
if msg is not None:
raise errors.RuleError(
self.__class__.__name__,
value,
rule,
msg,
)
def validate(self, value):
if self.multivalue:
if type(value) is not tuple:
value = (value,)
for v in value:
self.validate_scalar(v)
else:
self.validate_scalar(value)
class Option(plugable.Plugin):
"""
The Option class represents a kw argument from a `Command`.