Use a consistent parameter name in errors, defaulting to cli_name.

For general command-line errors we want to use the cli_name on output.
The exception is when using *attr, we want to return that attribute name
in the exception.

https://fedorahosted.org/freeipa/ticket/1418
This commit is contained in:
Rob Crittenden 2012-03-16 13:30:59 -04:00 committed by Martin Kosek
parent 2449b4d827
commit f18cfd7de8
2 changed files with 24 additions and 16 deletions

View File

@ -563,6 +563,18 @@ class Param(ReadOnly):
self.validate(value, supplied=self.name in kw) self.validate(value, supplied=self.name in kw)
return value return value
def get_param_name(self):
"""
Return the right name of an attribute depending on usage.
Normally errors should use cli_name, our "friendly" name. When
using the API directly or *attr return the real name.
"""
name = self.cli_name
if not name:
name = self.name
return name
def kw(self): def kw(self):
""" """
Iterate through ``(key,value)`` for all kwargs passed to constructor. Iterate through ``(key,value)`` for all kwargs passed to constructor.
@ -861,11 +873,8 @@ class Param(ReadOnly):
for rule in self.all_rules: for rule in self.all_rules:
error = rule(ugettext, value) error = rule(ugettext, value)
if error is not None: if error is not None:
name = self.cli_name
if not name:
name = self.name
raise ValidationError( raise ValidationError(
name=name, name=self.get_param_name(),
value=value, value=value,
index=index, index=index,
error=error, error=error,
@ -1175,7 +1184,7 @@ class Int(Number):
return int(value) return int(value)
except ValueError: except ValueError:
pass pass
raise ConversionError(name=self.name, index=index, raise ConversionError(name=self.get_param_name(), index=index,
error=ugettext(self.type_error), error=ugettext(self.type_error),
) )
@ -1218,11 +1227,8 @@ class Int(Number):
for rule in self.all_rules: for rule in self.all_rules:
error = rule(ugettext, value) error = rule(ugettext, value)
if error is not None: if error is not None:
name = self.cli_name
if not name:
name = self.name
raise ValidationError( raise ValidationError(
name=name, name=self.get_param_name(),
value=value, value=value,
index=index, index=index,
error=error, error=error,
@ -1309,7 +1315,7 @@ class Decimal(Number):
try: try:
value = decimal.Decimal(value) value = decimal.Decimal(value)
except Exception, e: except Exception, e:
raise ConversionError(name=self.name, index=index, raise ConversionError(name=self.get_param_name(), index=index,
error=unicode(e)) error=unicode(e))
if isinstance(value, decimal.Decimal): if isinstance(value, decimal.Decimal):
@ -1449,7 +1455,7 @@ class Bytes(Data):
try: try:
value = base64.b64decode(value) value = base64.b64decode(value)
except TypeError: except TypeError:
raise ConversionError(name=self.name, index=index, error=self.type_error) raise ConversionError(name=self.get_param_name(), index=index, error=self.type_error)
return super(Bytes, self)._convert_scalar(value, index) return super(Bytes, self)._convert_scalar(value, index)
@ -1548,7 +1554,8 @@ class IA5Str(Str):
if isinstance(value, basestring): if isinstance(value, basestring):
for i in xrange(len(value)): for i in xrange(len(value)):
if ord(value[i]) > 127: if ord(value[i]) > 127:
raise ConversionError(name=self.name, index=index, raise ConversionError(name=self.get_param_name(),
index=index,
error=_('The character \'%(char)r\' is not allowed.') % error=_('The character \'%(char)r\' is not allowed.') %
dict(char=value[i],) dict(char=value[i],)
) )
@ -1832,10 +1839,10 @@ class AccessTime(Str):
try: try:
self._check(value) self._check(value)
except ValueError, e: except ValueError, e:
raise ValidationError(name=self.cli_name, error=e.args[0]) raise ValidationError(name=self.get_param_name(), error=e.args[0])
except IndexError: except IndexError:
raise ValidationError( raise ValidationError(
name=self.cli_name, error='incomplete time value' name=self.get_param_name(), error='incomplete time value'
) )
return None return None

View File

@ -780,8 +780,9 @@ last, after all sets and adds."""),
try: try:
value = self.params[attr](value) value = self.params[attr](value)
except errors.ValidationError, err: except errors.ValidationError, err:
(name, error) = str(err.strerror).split(':') raise errors.ValidationError(name=attr, error=err.error)
raise errors.ValidationError(name=attr, error=error) except errors.ConversionError, err:
raise errors.ValidationError(name=attr, error=err.error)
if self.api.env.in_server: if self.api.env.in_server:
value = self.params[attr].encode(value) value = self.params[attr].encode(value)
if append and attr in newdict: if append and attr in newdict: