def test_attr_with_reload(self): a = Node() a._set_attr('none', None) a._set_attr('bool', self.boolval) a._set_attr('integer', self.intval) a._set_attr('float', self.floatval) a._set_attr('string', self.stringval) a._set_attr('dict', self.dictval) a._set_attr('list', self.listval) a.store() b = Node.get_subclass_from_uuid(a.uuid) self.assertIsNone(a.get_attr('none')) self.assertEquals(self.boolval, b.get_attr('bool')) self.assertEquals(self.intval, b.get_attr('integer')) self.assertEquals(self.floatval, b.get_attr('float')) self.assertEquals(self.stringval, b.get_attr('string')) self.assertEquals(self.dictval, b.get_attr('dict')) self.assertEquals(self.listval, b.get_attr('list')) # Reload directly b = Node(dbnode=a.dbnode) self.assertIsNone(a.get_attr('none')) self.assertEquals(self.boolval, b.get_attr('bool')) self.assertEquals(self.intval, b.get_attr('integer')) self.assertEquals(self.floatval, b.get_attr('float')) self.assertEquals(self.stringval, b.get_attr('string')) self.assertEquals(self.dictval, b.get_attr('dict')) self.assertEquals(self.listval, b.get_attr('list')) with self.assertRaises(ModificationNotAllowed): a._set_attr('i', 12)
def test_attr_after_storing(self): a = Node() a._set_attr('none', None) a._set_attr('bool', self.boolval) a._set_attr('integer', self.intval) a._set_attr('float', self.floatval) a._set_attr('string', self.stringval) a._set_attr('dict', self.dictval) a._set_attr('list', self.listval) a.store() # Now I check if I can retrieve them, before the storage self.assertIsNone(a.get_attr('none')) self.assertEquals(self.boolval, a.get_attr('bool')) self.assertEquals(self.intval, a.get_attr('integer')) self.assertEquals(self.floatval, a.get_attr('float')) self.assertEquals(self.stringval, a.get_attr('string')) self.assertEquals(self.dictval, a.get_attr('dict')) self.assertEquals(self.listval, a.get_attr('list')) # And now I try to edit/delete the keys; I should not be able to do it # after saving. I try only for a couple of attributes with self.assertRaises(ModificationNotAllowed): a._del_attr('bool') with self.assertRaises(ModificationNotAllowed): a._set_attr('integer', 13)
def test_attr_and_extras(self): a = Node() a._set_attr('bool', self.boolval) a._set_attr('integer', self.intval) a._set_attr('float', self.floatval) a._set_attr('string', self.stringval) a._set_attr('dict', self.dictval) a._set_attr('list', self.listval) with self.assertRaises(ModificationNotAllowed): # I did not store, I cannot modify a.set_extra('bool', 'blablabla') a.store() a_string = 'some non-boolean value' # I now set an extra with the same name of an attr a.set_extra('bool', a_string) # and I check that there is no name clash self.assertEquals(self.boolval, a.get_attr('bool')) self.assertEquals(a_string, a.get_extra('bool'))
def test_datetime_attribute(self): from aiida.utils.timezone import (get_current_timezone, is_naive, make_aware, now) a = Node() date = now() a._set_attr('some_date', date) a.store() retrieved = a.get_attr('some_date') if is_naive(date): date_to_compare = make_aware(date, get_current_timezone()) else: date_to_compare = date # Do not compare microseconds (they are not stored in the case of MySQL) date_to_compare = date_to_compare.replace(microsecond=0) retrieved = retrieved.replace(microsecond=0) self.assertEquals(date_to_compare, retrieved)
def test_attr_before_storing(self): a = Node() a._set_attr('k1', self.boolval) a._set_attr('k2', self.intval) a._set_attr('k3', self.floatval) a._set_attr('k4', self.stringval) a._set_attr('k5', self.dictval) a._set_attr('k6', self.listval) a._set_attr('k7', self.emptydict) a._set_attr('k8', self.emptylist) a._set_attr('k9', None) # Now I check if I can retrieve them, before the storage self.assertEquals(self.boolval, a.get_attr('k1')) self.assertEquals(self.intval, a.get_attr('k2')) self.assertEquals(self.floatval, a.get_attr('k3')) self.assertEquals(self.stringval, a.get_attr('k4')) self.assertEquals(self.dictval, a.get_attr('k5')) self.assertEquals(self.listval, a.get_attr('k6')) self.assertEquals(self.emptydict, a.get_attr('k7')) self.assertEquals(self.emptylist, a.get_attr('k8')) self.assertIsNone(a.get_attr('k9')) # And now I try to delete the keys a._del_attr('k1') a._del_attr('k2') a._del_attr('k3') a._del_attr('k4') a._del_attr('k5') a._del_attr('k6') a._del_attr('k7') a._del_attr('k8') a._del_attr('k9') with self.assertRaises(AttributeError): # I delete twice the same attribute a._del_attr('k1') with self.assertRaises(AttributeError): # I delete a non-existing attribute a._del_attr('nonexisting') with self.assertRaises(AttributeError): # I get a deleted attribute a.get_attr('k1') with self.assertRaises(AttributeError): # I get a non-existing attribute a.get_attr('nonexisting')