class Game(Model): home_team = Text(primary_key=True, required=True) away_team = Text(primary_key=True, required=True) date = Date(primary_key=True, clustering_order="ASC") home_win = Boolean(required=True) playoffs = Boolean(required=True) season = Text(required=True) home_players = Set(value_type=Integer) away_players = Set(value_type=Integer) # cassandra.cqlengine.columns.Set # home_rest = Integer() # number of games past X days # away_rest = Integer() # home_success = Integer() # recent record past X games # away_success = Integer() home_wins = Integer() home_losses = Integer() away_wins = Integer() away_losses = Integer() # rest for each team # recent success for each team # records for each team @staticmethod def get_model_string(): return 'game' def validate(self): super(Game, self).validate()
def _str_to_column(type_str, key_type=None, value_type=None, column_def={}): ''' Converts name of Cassandra types to driver class wrapper for that type. ''' type_str = type_str.lower() if type_str == 'integer': return Integer(**column_def) elif type_str == 'text': return Text(**column_def) elif type_str == 'ascii': return Ascii(**column_def) elif type_str == 'bigint': return BigInt(**column_def) elif type_str == 'blob': return Blob(**column_def) elif type_str == 'bytes': return Bytes(**column_def) elif type_str == 'boolean': return Boolean(**column_def) elif type_str == 'counter': return Counter(**column_def) elif type_str == 'date': return Date(**column_def) elif type_str == 'datetime': return DateTime(**column_def) elif type_str == 'decimal': return Decimal(**column_def) elif type_str == 'double': return Double(**column_def) elif type_str == 'float': return Float(**column_def) elif type_str == 'list': _assert_type_exception(value_type, "list type requires value_type") return List(value_type=value_type, **column_def) elif type_str == 'map': _assert_type_exception(key_type, "list type requires key_type") _assert_type_exception(value_type, "list type requires value_type") return Map(key_type=key_type, value_type=value_type, **column_def) elif type_str == 'set': _assert_type_exception(value_type, "set type requires value_type") return Set(value_type=value_type, **column_def) elif type_str == 'smallint': return SmallInt(**column_def) elif type_str == 'time': return Time(**column_def) elif type_str == 'timeuuid': return TimeUUID(**column_def) elif type_str == 'timestamp': return TimeUUID(**column_def) elif type_str == 'tinyint': return TinyInt(**column_def) elif type_str == 'uuid': return UUID(**column_def) elif type_str == 'varint': return VarInt(**column_def) else: raise Exception('Type {} is not defined.'.format(type_str))
class User(UserType): # We use Date and Time to ensure to_python # is called for these columns age = Integer() date_param = Date() map_param = Map(Integer, Time) list_param = List(Date) set_param = Set(Date) tuple_param = Tuple(Date, Decimal, Boolean, VarInt, Double, UUID)
def test_update_empty_set_removal_does_not_assign(self): us = UpdateStatement('table') us.add_update(Set(Text, db_field='a'), set(), 'remove') self.assertFalse(us.assignments)
def test_update_set_add(self): us = UpdateStatement('table') us.add_update(Set(Text, db_field='a'), set((1, )), 'add') self.assertEqual(six.text_type(us), 'UPDATE table SET "a" = "a" + %(0)s')
def test_update_empty_set_removal_does_not_assign(self): us = UpdateStatement('table') us.add_assignment_clause( SetUpdateClause('a', Set.Quoter(set()), operation='remove')) self.assertEqual(six.text_type(us), 'UPDATE table SET "a" = "a" - %(0)s')
def test_update_set_add(self): us = UpdateStatement('table') us.add_assignment_clause( SetUpdateClause('a', Set.Quoter({1}), operation='add')) self.assertEqual(six.text_type(us), 'UPDATE table SET "a" = "a" + %(0)s')