Merge pull request #226 from cqlengine/16-docs-update

16 docs update
This commit is contained in:
Jon Haddad
2014-07-03 16:24:37 -07:00
28 changed files with 136 additions and 8 deletions

View File

@@ -3,7 +3,7 @@ cqlengine
cqlengine is a Cassandra CQL 3 Object Mapper for Python
**Users of versions < 0.4, please read this post: [Breaking Changes](https://groups.google.com/forum/?fromgroups#!topic/cqlengine-users/erkSNe1JwuU)**
**Users of versions < 0.16, the default keyspace 'cqlengine' has been removed. Please read this before upgrading:** [Breaking Changes](https://cqlengine.readthedocs.org/en/latest/topics/models.html#keyspace-change)
[Documentation](https://cqlengine.readthedocs.org/en/latest/)

View File

@@ -1,5 +1,7 @@
from collections import OrderedDict
import re
import warnings
from cqlengine import columns
from cqlengine.exceptions import ModelException, CQLEngineException, ValidationError
from cqlengine.query import ModelQuerySet, DMLQuery, AbstractQueryableColumn
@@ -13,6 +15,9 @@ class PolyMorphicModelException(ModelException): pass
DEFAULT_KEYSPACE = None
class UndefinedKeyspaceWarning(Warning):
pass
class hybrid_classmethod(object):
"""
@@ -756,6 +761,17 @@ class ModelMetaClass(type):
#create the class and add a QuerySet to it
klass = super(ModelMetaClass, cls).__new__(cls, name, bases, attrs)
if not klass.__abstract__ and klass.__keyspace__ is None:
warnings.warn(
"No keyspace defined on {}.{}\n"
" The default keyspace 'cqlengine' was removed in 0.16.\n"
" Please define a keyspace on the '__keyspace__' model class attribute\n"
" or set a default keyspace with management.setup function\n"
.format(klass.__module__, klass.__name__),
UndefinedKeyspaceWarning
)
return klass

View File

@@ -9,6 +9,7 @@ from cqlengine.tests.base import BaseCassEngTestCase
class TestSetModel(Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid4)
int_set = columns.Set(columns.Integer, required=False)
@@ -161,6 +162,7 @@ class TestSetColumn(BaseCassEngTestCase):
class TestListModel(Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid4)
int_list = columns.List(columns.Integer, required=False)
@@ -306,6 +308,7 @@ class TestListColumn(BaseCassEngTestCase):
assert m3.int_list == []
class TestMapModel(Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid4)
int_map = columns.Map(columns.Integer, columns.UUID, required=False)
@@ -505,6 +508,7 @@ class TestMapColumn(BaseCassEngTestCase):
class TestCamelMapModel(Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid4)
camelMap = columns.Map(columns.Text, columns.Integer, required=False)

View File

@@ -8,6 +8,7 @@ from cqlengine.tests.base import BaseCassEngTestCase
class TestCounterModel(Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid4)
cluster = columns.UUID(primary_key=True, default=uuid4)
counter = columns.Counter()

View File

@@ -32,6 +32,7 @@ import sys
class TestDatetime(BaseCassEngTestCase):
class DatetimeTest(Model):
__keyspace__ = 'test'
test_id = Integer(primary_key=True)
created_at = DateTime()
@@ -80,6 +81,7 @@ class TestDatetime(BaseCassEngTestCase):
class TestBoolDefault(BaseCassEngTestCase):
class BoolDefaultValueTest(Model):
__keyspace__ = 'test'
test_id = Integer(primary_key=True)
stuff = Boolean(default=True)
@@ -98,6 +100,7 @@ class TestBoolDefault(BaseCassEngTestCase):
class TestVarInt(BaseCassEngTestCase):
class VarIntTest(Model):
__keyspace__ = 'test'
test_id = Integer(primary_key=True)
bignum = VarInt(primary_key=True)
@@ -120,6 +123,7 @@ class TestVarInt(BaseCassEngTestCase):
class TestDate(BaseCassEngTestCase):
class DateTest(Model):
__keyspace__ = 'test'
test_id = Integer(primary_key=True)
created_at = Date()
@@ -158,6 +162,7 @@ class TestDate(BaseCassEngTestCase):
class TestDecimal(BaseCassEngTestCase):
class DecimalTest(Model):
__keyspace__ = 'test'
test_id = Integer(primary_key=True)
dec_val = Decimal()
@@ -182,6 +187,7 @@ class TestDecimal(BaseCassEngTestCase):
class TestUUID(BaseCassEngTestCase):
class UUIDTest(Model):
__keyspace__ = 'test'
test_id = Integer(primary_key=True)
a_uuid = UUID(default=uuid4())
@@ -209,6 +215,7 @@ class TestUUID(BaseCassEngTestCase):
class TestTimeUUID(BaseCassEngTestCase):
class TimeUUIDTest(Model):
__keyspace__ = 'test'
test_id = Integer(primary_key=True)
timeuuid = TimeUUID(default=uuid1())
@@ -234,6 +241,7 @@ class TestTimeUUID(BaseCassEngTestCase):
class TestInteger(BaseCassEngTestCase):
class IntegerTest(Model):
__keyspace__ = 'test'
test_id = UUID(primary_key=True, default=lambda:uuid4())
value = Integer(default=0, required=True)
@@ -244,6 +252,7 @@ class TestInteger(BaseCassEngTestCase):
class TestBigInt(BaseCassEngTestCase):
class BigIntTest(Model):
__keyspace__ = 'test'
test_id = UUID(primary_key=True, default=lambda:uuid4())
value = BigInt(default=0, required=True)
@@ -301,6 +310,7 @@ class TestText(BaseCassEngTestCase):
class TestExtraFieldsRaiseException(BaseCassEngTestCase):
class TestModel(Model):
__keyspace__ = 'test'
id = UUID(primary_key=True, default=uuid4)
def test_extra_field(self):
@@ -309,6 +319,7 @@ class TestExtraFieldsRaiseException(BaseCassEngTestCase):
class TestPythonDoesntDieWhenExtraFieldIsInCassandra(BaseCassEngTestCase):
class TestModel(Model):
__keyspace__ = 'test'
__table_name__ = 'alter_doesnt_break_running_app'
id = UUID(primary_key=True, default=uuid4)

View File

@@ -40,6 +40,7 @@ class BaseColumnIOTest(BaseCassEngTestCase):
# create a table with the given column
class IOTestModel(Model):
__keyspace__ = 'test'
table_name = cls.column.db_type + "_io_test_model_{}".format(uuid4().hex[:8])
pkey = cls.column(primary_key=True)
data = cls.column()

View File

@@ -9,6 +9,7 @@ from cqlengine.tests.base import BaseCassEngTestCase
class CompactionModel(Model):
__keyspace__ = 'test'
__compaction__ = None
cid = columns.UUID(primary_key=True)
name = columns.Text()
@@ -73,6 +74,7 @@ class LeveledCompactionTest(BaseCompactionTest):
class LeveledcompactionTestTable(Model):
__keyspace__ = 'test'
__compaction__ = LeveledCompactionStrategy
__compaction_sstable_size_in_mb__ = 64
@@ -94,6 +96,7 @@ class AlterTableTest(BaseCassEngTestCase):
from cqlengine.management import update_compaction
class LeveledCompactionChangesDetectionTest(Model):
__keyspace__ = 'test'
__compaction__ = LeveledCompactionStrategy
__compaction_sstable_size_in_mb__ = 160
__compaction_tombstone_threshold__ = 0.125
@@ -110,6 +113,7 @@ class AlterTableTest(BaseCassEngTestCase):
from cqlengine.management import update_compaction
class SizeTieredCompactionChangesDetectionTest(Model):
__keyspace__ = 'test'
__compaction__ = SizeTieredCompactionStrategy
__compaction_bucket_high__ = 20
__compaction_bucket_low__ = 10
@@ -142,6 +146,7 @@ class AlterTableTest(BaseCassEngTestCase):
def test_alter_options(self):
class AlterTable(Model):
__keyspace__ = 'test'
__compaction__ = LeveledCompactionStrategy
__compaction_sstable_size_in_mb__ = 64
@@ -158,6 +163,7 @@ class AlterTableTest(BaseCassEngTestCase):
class EmptyCompactionTest(BaseCassEngTestCase):
def test_empty_compaction(self):
class EmptyCompactionModel(Model):
__keyspace__ = 'test'
__compaction__ = None
cid = columns.UUID(primary_key=True)
name = columns.Text()
@@ -167,12 +173,14 @@ class EmptyCompactionTest(BaseCassEngTestCase):
class CompactionLeveledStrategyModel(Model):
__keyspace__ = 'test'
__compaction__ = LeveledCompactionStrategy
cid = columns.UUID(primary_key=True)
name = columns.Text()
class CompactionSizeTieredModel(Model):
__keyspace__ = 'test'
__compaction__ = SizeTieredCompactionStrategy
cid = columns.UUID(primary_key=True)
name = columns.Text()
@@ -183,6 +191,7 @@ class OptionsTest(BaseCassEngTestCase):
def test_all_size_tiered_options(self):
class AllSizeTieredOptionsModel(Model):
__keyspace__ = 'test'
__compaction__ = SizeTieredCompactionStrategy
__compaction_bucket_low__ = .3
__compaction_bucket_high__ = 2
@@ -211,6 +220,7 @@ class OptionsTest(BaseCassEngTestCase):
def test_all_leveled_options(self):
class AllLeveledOptionsModel(Model):
__keyspace__ = 'test'
__compaction__ = LeveledCompactionStrategy
__compaction_sstable_size_in_mb__ = 64

View File

@@ -27,16 +27,19 @@ class DeleteTableTest(BaseCassEngTestCase):
drop_table(TestModel)
class LowercaseKeyModel(Model):
__keyspace__ = 'test'
first_key = columns.Integer(primary_key=True)
second_key = columns.Integer(primary_key=True)
some_data = columns.Text()
class CapitalizedKeyModel(Model):
__keyspace__ = 'test'
firstKey = columns.Integer(primary_key=True)
secondKey = columns.Integer(primary_key=True)
someData = columns.Text()
class PrimaryKeysOnlyModel(Model):
__keyspace__ = 'test'
__compaction__ = LeveledCompactionStrategy
first_ey = columns.Integer(primary_key=True)
@@ -55,12 +58,14 @@ class CapitalizedKeyTest(BaseCassEngTestCase):
class FirstModel(Model):
__keyspace__ = 'test'
__table_name__ = 'first_model'
first_key = columns.UUID(primary_key=True)
second_key = columns.UUID()
third_key = columns.Text()
class SecondModel(Model):
__keyspace__ = 'test'
__table_name__ = 'first_model'
first_key = columns.UUID(primary_key=True)
second_key = columns.UUID()
@@ -68,6 +73,7 @@ class SecondModel(Model):
fourth_key = columns.Text()
class ThirdModel(Model):
__keyspace__ = 'test'
__table_name__ = 'first_model'
first_key = columns.UUID(primary_key=True)
second_key = columns.UUID()
@@ -76,6 +82,7 @@ class ThirdModel(Model):
blah = columns.Map(columns.Text, columns.Text)
class FourthModel(Model):
__keyspace__ = 'test'
__table_name__ = 'first_model'
first_key = columns.UUID(primary_key=True)
second_key = columns.UUID()
@@ -109,6 +116,7 @@ class AddColumnTest(BaseCassEngTestCase):
class ModelWithTableProperties(Model):
__keyspace__ = 'test'
# Set random table properties
__bloom_filter_fp_chance__ = 0.76328
__caching__ = CACHING_ALL

View File

@@ -1,9 +1,10 @@
from uuid import uuid4
import warnings
from cqlengine.query import QueryException, ModelQuerySet, DMLQuery
from cqlengine.tests.base import BaseCassEngTestCase
from cqlengine.exceptions import ModelException, CQLEngineException
from cqlengine.models import Model, ModelDefinitionException, ColumnQueryEvaluator
from cqlengine.models import Model, ModelDefinitionException, ColumnQueryEvaluator, UndefinedKeyspaceWarning
from cqlengine import columns
import cqlengine
@@ -19,6 +20,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
"""
class TestModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
text = columns.Text()
@@ -40,6 +42,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
-the db_map allows columns
"""
class WildDBNames(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
content = columns.Text(db_field='words_and_whatnot')
numbers = columns.Integer(db_field='integers_etc')
@@ -64,6 +67,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
"""
class Stuff(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
words = columns.Text()
content = columns.Text()
@@ -74,6 +78,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
def test_exception_raised_when_creating_class_without_pk(self):
with self.assertRaises(ModelDefinitionException):
class TestModel(Model):
__keyspace__ = 'test'
count = columns.Integer()
text = columns.Text(required=False)
@@ -83,6 +88,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
Tests that instance value managers are isolated from other instances
"""
class Stuff(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
num = columns.Integer()
@@ -98,6 +104,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
Tests that fields defined on the super class are inherited properly
"""
class TestModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
text = columns.Text()
@@ -110,6 +117,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
def test_column_family_name_generation(self):
""" Tests that auto column family name generation works as expected """
class TestModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
text = columns.Text()
@@ -145,6 +153,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
Test compound partition key definition
"""
class ModelWithPartitionKeys(cqlengine.Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
c1 = cqlengine.Text(primary_key=True)
p1 = cqlengine.Text(partition_key=True)
@@ -166,6 +175,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
def test_del_attribute_is_assigned_properly(self):
""" Tests that columns that can be deleted have the del attribute """
class DelModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
key = columns.Integer(primary_key=True)
data = columns.Integer(required=False)
@@ -179,9 +189,11 @@ class TestModelClassFunction(BaseCassEngTestCase):
""" Tests that DoesNotExist exceptions are not the same exception between models """
class Model1(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
class Model2(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
try:
@@ -195,6 +207,7 @@ class TestModelClassFunction(BaseCassEngTestCase):
def test_does_not_exist_inherits_from_superclass(self):
""" Tests that a DoesNotExist exception can be caught by it's parent class DoesNotExist """
class Model1(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
class Model2(Model1):
@@ -208,6 +221,23 @@ class TestModelClassFunction(BaseCassEngTestCase):
except Exception:
assert False, "Model2 exception should not be caught by Model1"
def test_no_keyspace_warning(self):
with warnings.catch_warnings(record=True) as warn:
class NoKeyspace(Model):
key = columns.UUID(primary_key=True)
self.assertEqual(len(warn), 1)
warn_message = warn[0]
self.assertEqual(warn_message.category, UndefinedKeyspaceWarning)
def test_abstract_model_keyspace_warning_is_skipped(self):
with warnings.catch_warnings(record=True) as warn:
class NoKeyspace(Model):
__abstract__ = True
key = columns.UUID(primary_key=True)
self.assertEqual(len(warn), 0)
class TestManualTableNaming(BaseCassEngTestCase):
class RenamedTest(cqlengine.Model):
@@ -223,12 +253,14 @@ class TestManualTableNaming(BaseCassEngTestCase):
class AbstractModel(Model):
__abstract__ = True
__keyspace__ = 'test'
class ConcreteModel(AbstractModel):
pkey = columns.Integer(primary_key=True)
data = columns.Integer()
class AbstractModelWithCol(Model):
__keyspace__ = 'test'
__abstract__ = True
pkey = columns.Integer(primary_key=True)
@@ -237,6 +269,7 @@ class ConcreteModelWithCol(AbstractModelWithCol):
class AbstractModelWithFullCols(Model):
__abstract__ = True
__keyspace__ = 'test'
pkey = columns.Integer(primary_key=True)
data = columns.Integer()
@@ -309,6 +342,7 @@ class TestCustomQuerySet(BaseCassEngTestCase):
class CQModel(Model):
__queryset__ = QSet
__keyspace__ = 'test'
part = columns.UUID(primary_key=True)
data = columns.Text()
@@ -322,6 +356,7 @@ class TestCustomQuerySet(BaseCassEngTestCase):
raise self.TestException
class CDQModel(Model):
__keyspace__ = 'test'
__dmlquery__ = DMLQ
part = columns.UUID(primary_key=True)
data = columns.Text()

View File

@@ -8,6 +8,7 @@ from cqlengine.models import Model
from cqlengine import columns
class TestModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
count = columns.Integer()
text = columns.Text(required=False)

View File

@@ -10,6 +10,7 @@ class TestModel(TestCase):
def test_instance_equality(self):
""" tests the model equality functionality """
class EqualityModel(Model):
__keyspace__ = 'test'
pk = columns.Integer(primary_key=True)
m0 = EqualityModel(pk=0)
@@ -21,9 +22,11 @@ class TestModel(TestCase):
def test_model_equality(self):
""" tests the model equality functionality """
class EqualityModel0(Model):
__keyspace__ = 'test'
pk = columns.Integer(primary_key=True)
class EqualityModel1(Model):
__keyspace__ = 'test'
kk = columns.Integer(primary_key=True)
m0 = EqualityModel0(pk=0)
@@ -40,6 +43,7 @@ class BuiltInAttributeConflictTest(TestCase):
"""should raise exception when model defines column that conflicts with built-in attribute"""
with self.assertRaises(ModelDefinitionException):
class IllegalTimestampColumnModel(Model):
__keyspace__ = 'test'
my_primary_key = columns.Integer(primary_key=True)
timestamp = columns.BigInt()
@@ -47,5 +51,6 @@ class BuiltInAttributeConflictTest(TestCase):
"""should raise exception when model defines column that conflicts with built-in method"""
with self.assertRaises(ModelDefinitionException):
class IllegalFilterColumnModel(Model):
__keyspace__ = 'test'
my_primary_key = columns.Integer(primary_key=True)
filter = columns.Text()

View File

@@ -11,12 +11,14 @@ from cqlengine.models import Model
from cqlengine import columns
class TestModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
count = columns.Integer()
text = columns.Text(required=False)
a_bool = columns.Boolean(default=False)
class TestModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
count = columns.Integer()
text = columns.Text(required=False)
@@ -115,6 +117,7 @@ class TestModelIO(BaseCassEngTestCase):
class TestMultiKeyModel(Model):
__keyspace__ = 'test'
partition = columns.Integer(primary_key=True)
cluster = columns.Integer(primary_key=True)
count = columns.Integer(required=False)
@@ -240,6 +243,7 @@ class TestCanUpdate(BaseCassEngTestCase):
class IndexDefinitionModel(Model):
__keyspace__ = 'test'
key = columns.UUID(primary_key=True)
val = columns.Text(index=True)
@@ -250,6 +254,7 @@ class TestIndexedColumnDefinition(BaseCassEngTestCase):
sync_table(IndexDefinitionModel)
class ReservedWordModel(Model):
__keyspace__ = 'test'
token = columns.Text(primary_key=True)
insert = columns.Integer(index=True)
@@ -270,6 +275,7 @@ class TestQueryQuoting(BaseCassEngTestCase):
class TestQueryModel(Model):
__keyspace__ = 'test'
test_id = columns.UUID(primary_key=True, default=uuid4)
date = columns.Date(primary_key=True)
description = columns.Text()
@@ -304,6 +310,7 @@ class TestQuerying(BaseCassEngTestCase):
def test_none_filter_fails():
class NoneFilterModel(Model):
__keyspace__ = 'test'
pk = columns.Integer(primary_key=True)
v = columns.Integer()
sync_table(NoneFilterModel)

View File

@@ -14,6 +14,7 @@ class TestPolymorphicClassConstruction(BaseCassEngTestCase):
""" Tests that defining a model with more than one polymorphic key fails """
with self.assertRaises(models.ModelDefinitionException):
class M(models.Model):
__keyspace__ = 'test'
partition = columns.Integer(primary_key=True)
type1 = columns.Integer(polymorphic_key=True)
type2 = columns.Integer(polymorphic_key=True)
@@ -21,6 +22,7 @@ class TestPolymorphicClassConstruction(BaseCassEngTestCase):
def test_polymorphic_key_inheritance(self):
""" Tests that polymorphic_key attribute is not inherited """
class Base(models.Model):
__keyspace__ = 'test'
partition = columns.Integer(primary_key=True)
type1 = columns.Integer(polymorphic_key=True)
@@ -35,6 +37,7 @@ class TestPolymorphicClassConstruction(BaseCassEngTestCase):
def test_polymorphic_metaclass(self):
""" Tests that the model meta class configures polymorphic models properly """
class Base(models.Model):
__keyspace__ = 'test'
partition = columns.Integer(primary_key=True)
type1 = columns.Integer(polymorphic_key=True)
@@ -55,6 +58,7 @@ class TestPolymorphicClassConstruction(BaseCassEngTestCase):
def test_table_names_are_inherited_from_poly_base(self):
class Base(models.Model):
__keyspace__ = 'test'
partition = columns.Integer(primary_key=True)
type1 = columns.Integer(polymorphic_key=True)
@@ -66,11 +70,13 @@ class TestPolymorphicClassConstruction(BaseCassEngTestCase):
def test_collection_columns_cant_be_polymorphic_keys(self):
with self.assertRaises(models.ModelDefinitionException):
class Base(models.Model):
__keyspace__ = 'test'
partition = columns.Integer(primary_key=True)
type1 = columns.Set(columns.Integer, polymorphic_key=True)
class PolyBase(models.Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid.uuid4)
row_type = columns.Integer(polymorphic_key=True)
@@ -137,6 +143,7 @@ class TestPolymorphicModel(BaseCassEngTestCase):
class UnindexedPolyBase(models.Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid.uuid4)
cluster = columns.UUID(primary_key=True, default=uuid.uuid4)
row_type = columns.Integer(polymorphic_key=True)
@@ -194,6 +201,7 @@ class TestUnindexedPolymorphicQuery(BaseCassEngTestCase):
class IndexedPolyBase(models.Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid.uuid4)
cluster = columns.UUID(primary_key=True, default=uuid.uuid4)
row_type = columns.Integer(polymorphic_key=True, index=True)

View File

@@ -10,6 +10,7 @@ from cqlengine.management import sync_table, drop_table
class TestUpdateModel(Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid4)
cluster = columns.UUID(primary_key=True, default=uuid4)
count = columns.Integer(required=False)

View File

@@ -8,10 +8,12 @@ from cqlengine import columns
class TestModel(Model):
__keyspace__ = 'test'
id = columns.Integer(primary_key=True)
clustering_key = columns.Integer(primary_key=True, clustering_order='desc')
class TestClusteringComplexModel(Model):
__keyspace__ = 'test'
id = columns.Integer(primary_key=True)
clustering_key = columns.Integer(primary_key=True, clustering_order='desc')
some_value = columns.Integer()

View File

@@ -8,12 +8,14 @@ from cqlengine.query import BatchQuery, DMLQuery
from cqlengine.tests.base import BaseCassEngTestCase
class TestMultiKeyModel(Model):
__keyspace__ = 'test'
partition = columns.Integer(primary_key=True)
cluster = columns.Integer(primary_key=True)
count = columns.Integer(required=False)
text = columns.Text(required=False)
class BatchQueryLogModel(Model):
__keyspace__ = 'test'
# simple k/v table
k = columns.Integer(primary_key=True)
v = columns.Integer()

View File

@@ -11,6 +11,7 @@ from cqlengine import columns
from cqlengine import query
class DateTimeQueryTestModel(Model):
__keyspace__ = 'test'
user = columns.Integer(primary_key=True)
day = columns.DateTime(primary_key=True)
data = columns.Text()

View File

@@ -39,6 +39,7 @@ class TestQuerySetOperation(BaseCassEngTestCase):
class TokenTestModel(Model):
__keyspace__ = 'test'
key = columns.Integer(primary_key=True)
val = columns.Integer()
@@ -74,6 +75,7 @@ class TestTokenFunction(BaseCassEngTestCase):
def test_compound_pk_token_function(self):
class TestModel(Model):
__keyspace__ = 'test'
p1 = columns.Text(partition_key=True)
p2 = columns.Text(partition_key=True)

View File

@@ -39,6 +39,7 @@ class TzOffset(tzinfo):
class TestModel(Model):
__keyspace__ = 'test'
test_id = columns.Integer(primary_key=True)
attempt_id = columns.Integer(primary_key=True)
description = columns.Text()
@@ -47,6 +48,7 @@ class TestModel(Model):
class IndexedTestModel(Model):
__keyspace__ = 'test'
test_id = columns.Integer(primary_key=True)
attempt_id = columns.Integer(index=True)
description = columns.Text()
@@ -55,6 +57,7 @@ class IndexedTestModel(Model):
class TestMultiClusteringModel(Model):
__keyspace__ = 'test'
one = columns.Integer(primary_key=True)
two = columns.Integer(primary_key=True)
three = columns.Integer(primary_key=True)
@@ -373,6 +376,7 @@ class TestQuerySetCountSelectionAndIteration(BaseQuerySetUsage):
def test_non_quality_filtering():
class NonEqualityFilteringModel(Model):
__keyspace__ = 'test'
example_id = columns.UUID(primary_key=True, default=uuid.uuid4)
sequence_id = columns.Integer(primary_key=True) # sequence_id is a clustering key
example_type = columns.Integer(index=True)
@@ -542,6 +546,7 @@ class TestQuerySetConnectionHandling(BaseQuerySetUsage):
class TimeUUIDQueryModel(Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True)
time = columns.TimeUUID(primary_key=True)
data = columns.Text(required=False)

View File

@@ -9,6 +9,7 @@ from cqlengine import columns
class TestQueryUpdateModel(Model):
__keyspace__ = 'test'
partition = columns.UUID(primary_key=True, default=uuid4)
cluster = columns.Integer(primary_key=True)
count = columns.Integer(required=False)

View File

@@ -11,6 +11,7 @@ from cqlengine.query import BatchQuery
from cqlengine.tests.base import BaseCassEngTestCase
class TestMultiKeyModel(Model):
__keyspace__ = 'test'
partition = columns.Integer(primary_key=True)
cluster = columns.Integer(primary_key=True)
count = columns.Integer(required=False)

View File

@@ -7,6 +7,7 @@ import mock
from cqlengine import ALL, BatchQuery
class TestConsistencyModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
count = columns.Integer()
text = columns.Text(required=False)

View File

@@ -8,6 +8,7 @@ import resource
import gc
class LoadTest(Model):
__keyspace__ = 'test'
k = Integer(primary_key=True)
v = Integer()

View File

@@ -12,6 +12,7 @@ from cqlengine.tests.base import BaseCassEngTestCase
class TestTimestampModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
count = columns.Integer()

View File

@@ -8,6 +8,7 @@ from cqlengine.connection import get_session
class TestTTLModel(Model):
__keyspace__ = 'test'
id = columns.UUID(primary_key=True, default=lambda:uuid4())
count = columns.Integer()
text = columns.Text(required=False)

View File

@@ -5,9 +5,7 @@
cqlengine documentation
=======================
**Users of versions < 0.4, please read this post before upgrading:** `Breaking Changes`_
.. _Breaking Changes: https://groups.google.com/forum/?fromgroups#!topic/cqlengine-users/erkSNe1JwuU
**Users of versions < 0.16, the default keyspace 'cqlengine' has been removed. Please read this before upgrading:** :ref:`Breaking Changes <keyspace-change>`
cqlengine is a Cassandra CQL 3 Object Mapper for Python

View File

@@ -2,7 +2,7 @@
Frequently Asked Questions
==========================
Q: Why does calling my Model(field=blah, field2=blah2) not work?
Q: Why don't updates work correctly on models instantiated as Model(field=blah, field2=blah2)?
-------------------------------------------------------------------
A: The __init__() of a model is used by cqlengine internally. If you want to create a new row in the database, use create().
A: The recommended way to create new rows is with the models .create method. The values passed into a model's init method are interpreted by the model as the values as they were read from a row. This allows the model to "know" which rows have changed since the row was read out of cassandra, and create suitable update statements.

View File

@@ -169,9 +169,13 @@ Model Attributes
*Optional.* Sets the name of the CQL table for this model. If left blank, the table name will be the name of the model, with it's module name as it's prefix. Manually defined table names are not inherited.
.. _keyspace-change:
.. attribute:: Model.__keyspace__
*Optional.* Sets the name of the keyspace used by this model. Defaults to cqlengine
Sets the name of the keyspace used by this model.
**Prior to cqlengine 0.16, this setting defaulted
to 'cqlengine'. As of 0.16, this field needs to be set on all non-abstract models, or their base classes.**
Table Polymorphism