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)
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)
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)
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)
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)
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)
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)