Example #1
0
    def validate(self, value):
        """
        Verify value can be iterated and cast elements to strings

        Args:
            value (iterable): value to be validated

        Returns:
            List of Strings or None if value is None
        """
        if value is None:
            return StringArray()
        else:
            return StringArray(value)
Example #2
0
 def set_required(self, required, notify=True):
     """Set the required string list"""
     for r in required:
         assert r in self.elements, \
             "Expected one of %r, got %r" % (list(self.elements), r)
     required = StringArray(deserialize_object(t, str_) for t in required)
     self.set_endpoint_data("required", required, notify)
Example #3
0
    def validate(self, value):
        """
        Verify value can be iterated and cast elements to choices

        Args:
            value(iterable): Value to be validated

        Returns:
            List of Choices or None if value is None
        """

        if value is None:
            return StringArray()
        elif isinstance(value, str_):
            raise ValueError("Expected iterable of strings, got %r" % value)
        else:
            for i, choice in enumerate(value):
                if choice not in self.choices:
                    raise ValueError("%s is not a valid value for element %s" %
                                     (choice, i))
            return StringArray(value)
Example #4
0
 def append(self, row):
     self.verify_column_lengths()
     if len(row) != len(self.meta.elements):
         raise ValueError(
             "Row %s does not specify correct number of values" % row)
     for e, v in zip(self.meta.elements, row):
         column = getattr(self, e)
         if isinstance(column, StringArray):
             new_column = StringArray(column + (v, ))
         else:
             v = self.meta.elements[e].validate([v])
             new_column = np.concatenate((column, v))
         setattr(self, e, new_column)
Example #5
0
 def __setitem__(self, idx, row):
     """Set row for int, column for string"""
     if isinstance(idx, int):
         # set row from index
         length = self.verify_column_lengths()
         # Check length in range
         if idx >= length:
             raise IndexError("Index %s >= table length %s" % (idx, length))
         if len(row) != len(self.meta.elements):
             raise ValueError(
                 "Row %s does not specify correct number of values" % row)
         for e, v in zip(self.meta.elements, row):
             column = getattr(self, e)
             if isinstance(column, StringArray):
                 new_column = StringArray(column[:idx] + (v, ) +
                                          column[idx + 1:])
             else:
                 # numpy array
                 v = self.meta.elements[e].validate([v])
                 new_column = np.concatenate(
                     (column[:idx], v, column[idx + 1:]))
             setattr(self, e, new_column)
     else:
         setattr(self, idx, row)
Example #6
0
 def set_choices(self, choices, notify=True):
     """Set the choices list"""
     choices = StringArray(deserialize_object(c, str_) for c in choices)
     self.set_endpoint_data("choices", choices, notify)
Example #7
0
 def set_tags(self, tags, notify=True):
     """Set the tags list"""
     tags = StringArray(deserialize_object(t, str_) for t in tags)
     self.set_endpoint_data("tags", tags, notify)