Merge branch 'master' into orm
[tiramisu.git] / tiramisu / option.py
index 24d1b05..66f2a38 100644 (file)
@@ -715,7 +715,7 @@ class ChoiceOption(Option):
         return self._choice_open_values
 
     def _validate(self, value):
-        if not self._choice_open_values and not value in self._choice_values:
+        if not self.impl_is_openvalues() and not value in self.impl_get_values():
             raise ValueError(_('value {0} is not permitted, '
                                'only {1} is allowed'
                                '').format(value, self._choice_values))
@@ -832,9 +832,13 @@ class IPOption(Option):
     def _validate(self, value):
         # sometimes an ip term starts with a zero
         # but this does not fit in some case, for example bind does not like it
-        for val in value.split('.'):
-            if val.startswith("0") and len(val) > 1:
-                raise ValueError(_('invalid IP'))
+        try:
+            for val in value.split('.'):
+                if val.startswith("0") and len(val) > 1:
+                    raise ValueError(_('invalid IP'))
+        except AttributeError:
+            #if integer for example
+            raise ValueError(_('invalid IP'))
         # 'standard' validation
         try:
             IP('{0}/32'.format(value))
@@ -905,18 +909,23 @@ class PortOption(Option):
         if self._extra['_allow_range'] and ":" in str(value):
             value = str(value).split(':')
             if len(value) != 2:
-                raise ValueError('invalid part, range must have two values '
-                                 'only')
+                raise ValueError(_('invalid part, range must have two values '
+                                 'only'))
             if not value[0] < value[1]:
-                raise ValueError('invalid port, first port in range must be'
-                                 ' smaller than the second one')
+                raise ValueError(_('invalid port, first port in range must be'
+                                 ' smaller than the second one'))
         else:
             value = [value]
 
         for val in value:
-            if not self._extra['_min_value'] <= int(val) <= self._extra['_max_value']:
-                raise ValueError('invalid port, must be an between {0} and {1}'
-                                 ''.format(self._extra['_min_value'], self._extra['_max_value']))
+            try:
+                if not self._extra['_min_value'] <= int(val) <= self._extra['_max_value']:
+                    raise ValueError('invalid port, must be an between {0} '
+                                     'and {1}'.format(
+                                         self._extra['_min_value'],
+                                         self._extra['_max_value']))
+            except ValueError:
+                raise ValueError(_('invalid port'))
 
 
 class NetworkOption(Option):