def test_value_multi(self): op = Assignments() op1 = Set(first='foo') op2 = Set(last='bar') op.add(op1, op2) self.assertEquals(op.cql, '{}, {}'.format(op1.cql, op2.cql)) self.assertEquals(op.values, op1.values + op2.values)
def get_query(self, assignment, condition, using=None): query = 'UPDATE {}'.format(self.column_family) if using: query = '{} {}'.format(query, using.cql) assignments = Assignments() assignments.add(assignment) where = Where(condition) return '{} SET {} WHERE {}'.format(query, assignments.cql, where.cql)
class Update(Statement): def __init__(self, column_family, keyspace=None): Statement.__init__(self, column_family, keyspace) self.assignments = Assignments() self.conditions = None self.options = None def using(self, **kwargs): self.options = Using(**kwargs) return self def set(self, **kwargs): self.assignments.add(Set(**kwargs)) return self def set_at(self, name, key, value): self.assignments.add(SetAt(name, key, value)) return self def add(self, name, value): self.assignments.add(Add(name, value)) return self def subtract(self, name, value): self.assignments.add(Subtract(name, value)) return self def where(self, *args): self.conditions = Where(*args) return self @property def cql(self): query = 'UPDATE {}'.format(self.path) if self.options: query = '{} {}'.format(query, self.options.cql) query = '{} SET {} WHERE {}'.format(query, self.assignments.cql, self.conditions.cql) return query @property def args(self): args = self.options.values if self.options else [] args.extend(self.assignments.values) args.extend(self.conditions.values) return args def validate(self): self.assignments.validate() if self.conditions is None: raise ValidationError('conditions: {}'.format(self.conditions))
def test_value_single(self): op = Assignments() kwargs = {'name': 'bar'} op.add(Set(**kwargs)) self.assertEquals(op.cql, '{}=%s'.format(*kwargs.keys())) self.assertEquals(op.values, kwargs.values())
def test_invalid_instance_value(self): op = Assignments() op.add(Set(name='foo')) op.add(eq('name', 'bar')) self.assertRaises(ValidationError, op.validate)
def test_none_value(self): op = Assignments() op.add(Set(name='foo')) op.add(None) self.assertRaises(ValidationError, op.validate)