add VarInt column
This commit is contained in:
@@ -246,6 +246,26 @@ class Integer(Column):
|
|||||||
return self.validate(value)
|
return self.validate(value)
|
||||||
|
|
||||||
|
|
||||||
|
class VarInt(Column):
|
||||||
|
db_type = 'varint'
|
||||||
|
|
||||||
|
def validate(self, value):
|
||||||
|
val = super(VarInt, self).validate(value)
|
||||||
|
if val is None:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
return long(val)
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
raise ValidationError(
|
||||||
|
"{} can't be converted to integral value".format(value))
|
||||||
|
|
||||||
|
def to_python(self, value):
|
||||||
|
return self.validate(value)
|
||||||
|
|
||||||
|
def to_database(self, value):
|
||||||
|
return self.validate(value)
|
||||||
|
|
||||||
|
|
||||||
class CounterValueManager(BaseValueManager):
|
class CounterValueManager(BaseValueManager):
|
||||||
def __init__(self, instance, column, value):
|
def __init__(self, instance, column, value):
|
||||||
super(CounterValueManager, self).__init__(instance, column, value)
|
super(CounterValueManager, self).__init__(instance, column, value)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from cqlengine.columns import Bytes
|
|||||||
from cqlengine.columns import Ascii
|
from cqlengine.columns import Ascii
|
||||||
from cqlengine.columns import Text
|
from cqlengine.columns import Text
|
||||||
from cqlengine.columns import Integer
|
from cqlengine.columns import Integer
|
||||||
|
from cqlengine.columns import VarInt
|
||||||
from cqlengine.columns import DateTime
|
from cqlengine.columns import DateTime
|
||||||
from cqlengine.columns import Date
|
from cqlengine.columns import Date
|
||||||
from cqlengine.columns import UUID
|
from cqlengine.columns import UUID
|
||||||
@@ -24,6 +25,9 @@ from cqlengine.columns import Decimal
|
|||||||
from cqlengine.management import create_table, delete_table
|
from cqlengine.management import create_table, delete_table
|
||||||
from cqlengine.models import Model
|
from cqlengine.models import Model
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
class TestDatetime(BaseCassEngTestCase):
|
class TestDatetime(BaseCassEngTestCase):
|
||||||
class DatetimeTest(Model):
|
class DatetimeTest(Model):
|
||||||
test_id = Integer(primary_key=True)
|
test_id = Integer(primary_key=True)
|
||||||
@@ -64,6 +68,28 @@ class TestDatetime(BaseCassEngTestCase):
|
|||||||
assert dt2.created_at.isoformat() == datetime(today.year, today.month, today.day).isoformat()
|
assert dt2.created_at.isoformat() == datetime(today.year, today.month, today.day).isoformat()
|
||||||
|
|
||||||
|
|
||||||
|
class TestVarInt(BaseCassEngTestCase):
|
||||||
|
class VarIntTest(Model):
|
||||||
|
test_id = Integer(primary_key=True)
|
||||||
|
bignum = VarInt(primary_key=True)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
super(TestVarInt, cls).setUpClass()
|
||||||
|
create_table(cls.VarIntTest)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDownClass(cls):
|
||||||
|
super(TestVarInt, cls).tearDownClass()
|
||||||
|
delete_table(cls.VarIntTest)
|
||||||
|
|
||||||
|
def test_varint_io(self):
|
||||||
|
long_int = sys.maxint + 1
|
||||||
|
int1 = self.VarIntTest.objects.create(test_id=0, bignum=long_int)
|
||||||
|
int2 = self.VarIntTest.objects(test_id=0).first()
|
||||||
|
assert int1.bignum == int2.bignum
|
||||||
|
|
||||||
|
|
||||||
class TestDate(BaseCassEngTestCase):
|
class TestDate(BaseCassEngTestCase):
|
||||||
class DateTest(Model):
|
class DateTest(Model):
|
||||||
test_id = Integer(primary_key=True)
|
test_id = Integer(primary_key=True)
|
||||||
@@ -109,7 +135,7 @@ class TestDecimal(BaseCassEngTestCase):
|
|||||||
super(TestDecimal, cls).tearDownClass()
|
super(TestDecimal, cls).tearDownClass()
|
||||||
delete_table(cls.DecimalTest)
|
delete_table(cls.DecimalTest)
|
||||||
|
|
||||||
def test_datetime_io(self):
|
def test_decimal_io(self):
|
||||||
dt = self.DecimalTest.objects.create(test_id=0, dec_val=D('0.00'))
|
dt = self.DecimalTest.objects.create(test_id=0, dec_val=D('0.00'))
|
||||||
dt2 = self.DecimalTest.objects(test_id=0).first()
|
dt2 = self.DecimalTest.objects(test_id=0).first()
|
||||||
assert dt2.dec_val == dt.dec_val
|
assert dt2.dec_val == dt.dec_val
|
||||||
|
|||||||
@@ -42,6 +42,12 @@ Columns
|
|||||||
|
|
||||||
columns.Integer()
|
columns.Integer()
|
||||||
|
|
||||||
|
.. class:: VarInt()
|
||||||
|
|
||||||
|
Stores an arbitrary-precision integer ::
|
||||||
|
|
||||||
|
columns.VarInt()
|
||||||
|
|
||||||
.. class:: DateTime()
|
.. class:: DateTime()
|
||||||
|
|
||||||
Stores a datetime value.
|
Stores a datetime value.
|
||||||
|
|||||||
Reference in New Issue
Block a user