merged master, updated changelog
This commit is contained in:
@@ -5,6 +5,7 @@ CHANGELOG
|
||||
* added support for compaction settings at the model level
|
||||
* deprecated delete_table in favor of drop_table
|
||||
* deprecated create_table in favor of sync_table
|
||||
* added support for custom QuerySets
|
||||
|
||||
0.6.0
|
||||
* added table sync
|
||||
|
||||
@@ -7,10 +7,12 @@ from cqlengine.query import ModelQuerySet, DMLQuery, AbstractQueryableColumn
|
||||
from cqlengine.query import DoesNotExist as _DoesNotExist
|
||||
from cqlengine.query import MultipleObjectsReturned as _MultipleObjectsReturned
|
||||
|
||||
|
||||
class ModelDefinitionException(ModelException): pass
|
||||
|
||||
DEFAULT_KEYSPACE = 'cqlengine'
|
||||
|
||||
|
||||
class hybrid_classmethod(object):
|
||||
"""
|
||||
Allows a method to behave as both a class method and
|
||||
@@ -44,7 +46,7 @@ class QuerySetDescriptor(object):
|
||||
""" :rtype: ModelQuerySet """
|
||||
if model.__abstract__:
|
||||
raise CQLEngineException('cannot execute queries against abstract models')
|
||||
return ModelQuerySet(model)
|
||||
return model.__queryset__(model)
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
"""
|
||||
@@ -154,9 +156,12 @@ class BaseModel(object):
|
||||
__compaction_min_sstable_size__ = None
|
||||
|
||||
# compaction - leveled options
|
||||
__compaction_sstable_size_in_mb__ = None # only works with Leveled
|
||||
__compaction_sstable_size_in_mb__ = None
|
||||
|
||||
# end compaction
|
||||
# the queryset class used for this class
|
||||
__queryset__ = ModelQuerySet
|
||||
__dmlquery__ = DMLQuery
|
||||
|
||||
__read_repair_chance__ = 0.1
|
||||
|
||||
@@ -279,7 +284,7 @@ class BaseModel(object):
|
||||
def save(self):
|
||||
is_new = self.pk is None
|
||||
self.validate()
|
||||
DMLQuery(self.__class__, self, batch=self._batch).save()
|
||||
self.__dmlquery__(self.__class__, self, batch=self._batch).save()
|
||||
|
||||
#reset the value managers
|
||||
for v in self._values.values():
|
||||
@@ -290,7 +295,7 @@ class BaseModel(object):
|
||||
|
||||
def delete(self):
|
||||
""" Deletes this instance """
|
||||
DMLQuery(self.__class__, self, batch=self._batch).delete()
|
||||
self.__dmlquery__(self.__class__, self, batch=self._batch).delete()
|
||||
|
||||
@classmethod
|
||||
def _class_batch(cls, batch):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from uuid import uuid4
|
||||
from cqlengine.query import QueryException
|
||||
from cqlengine.query import QueryException, ModelQuerySet, DMLQuery
|
||||
from cqlengine.tests.base import BaseCassEngTestCase
|
||||
|
||||
from cqlengine.exceptions import ModelException, CQLEngineException
|
||||
@@ -300,6 +300,42 @@ class TestAbstractModelClasses(BaseCassEngTestCase):
|
||||
delete_table(ConcreteModelWithCol)
|
||||
|
||||
|
||||
class TestCustomQuerySet(BaseCassEngTestCase):
|
||||
""" Tests overriding the default queryset class """
|
||||
|
||||
class TestException(Exception): pass
|
||||
|
||||
def test_overriding_queryset(self):
|
||||
|
||||
class QSet(ModelQuerySet):
|
||||
def create(iself, **kwargs):
|
||||
raise self.TestException
|
||||
|
||||
class CQModel(Model):
|
||||
__queryset__ = QSet
|
||||
part = columns.UUID(primary_key=True)
|
||||
data = columns.Text()
|
||||
|
||||
with self.assertRaises(self.TestException):
|
||||
CQModel.create(part=uuid4(), data='s')
|
||||
|
||||
def test_overriding_dmlqueryset(self):
|
||||
|
||||
class DMLQ(DMLQuery):
|
||||
def save(iself):
|
||||
raise self.TestException
|
||||
|
||||
class CDQModel(Model):
|
||||
__dmlquery__ = DMLQ
|
||||
part = columns.UUID(primary_key=True)
|
||||
data = columns.Text()
|
||||
|
||||
with self.assertRaises(self.TestException):
|
||||
CDQModel().save()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user