def test_invalid_attribute_extra_key(self): """Test supplying an invalid key to the `validate_attribute_extra_key` method.""" non_string_key = 5 field_separator_key = f'invalid{FIELD_SEPARATOR}key' with self.assertRaises(exceptions.ValidationError): validate_attribute_extra_key(non_string_key) with self.assertRaises(exceptions.ValidationError): validate_attribute_extra_key(field_separator_key)
def set_extra(self, key, value): """Set an extra to the given value. :param key: name of the extra :param value: value of the extra """ validate_attribute_extra_key(key) if self.is_stored: value = clean_value(value) self._dbmodel.extras[key] = value self._flush_if_stored({'extras'})
def set_attribute(self, key, value): """Set an attribute to the given value. :param key: name of the attribute :param value: value of the attribute """ validate_attribute_extra_key(key) if self.is_stored: value = clean_value(value) self._dbmodel.attributes[key] = value self._flush_if_stored({'attributes'})
def reset_extras(self, extras): """Reset the extras. .. note:: This will completely clear any existing extras and replace them with the new dictionary. :param extras: a dictionary with the extras to set """ for key in extras: validate_attribute_extra_key(key) if self.is_stored: extras = clean_value(extras) self.dbmodel.extras = extras self._flush_if_stored({'extras'})
def reset_attributes(self, attributes): """Reset the attributes. .. note:: This will completely clear any existing attributes and replace them with the new dictionary. :param attributes: a dictionary with the attributes to set """ for key in attributes: validate_attribute_extra_key(key) if self.is_stored: attributes = clean_value(attributes) self.dbmodel.attributes = attributes self._flush_if_stored({'attributes'})
def set_extra_many(self, extras): """Set multiple extras. .. note:: This will override any existing extras that are present in the new dictionary. :param extras: a dictionary with the extras to set """ for key in extras: validate_attribute_extra_key(key) if self.is_stored: extras = {key: clean_value(value) for key, value in extras.items()} for key, value in extras.items(): self.dbmodel.extras[key] = value self._flush_if_stored({'extras'})
def set(self, key, value, description=None): """Return the settings with the given key. :param key: the key identifying the setting :param value: the value for the setting :param description: optional setting description """ from aiida.backends.djsite.db.models import DbSetting from aiida.orm.implementation.utils import validate_attribute_extra_key self.validate_table_existence() validate_attribute_extra_key(key) other_attribs = dict() if description is not None: other_attribs['description'] = description DbSetting.set_value(key, value, other_attribs=other_attribs)
def set_attribute_many(self, attributes): """Set multiple attributes. .. note:: This will override any existing attributes that are present in the new dictionary. :param attributes: a dictionary with the attributes to set """ for key in attributes: validate_attribute_extra_key(key) if self.is_stored: attributes = { key: clean_value(value) for key, value in attributes.items() } for key, value in attributes.items(): # We need to use `self.dbmodel` without the underscore, because otherwise the second iteration will refetch # what is in the database and we lose the initial changes. self.dbmodel.attributes[key] = value self._flush_if_stored({'attributes'})