add VarInt column

This commit is contained in:
Tommaso Barbugli
2013-09-04 15:56:09 +02:00
parent 3b3d000518
commit fb6543c973
3 changed files with 53 additions and 1 deletions

View File

@@ -246,6 +246,26 @@ class Integer(Column):
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):
def __init__(self, instance, column, value):
super(CounterValueManager, self).__init__(instance, column, value)

View File

@@ -14,6 +14,7 @@ from cqlengine.columns import Bytes
from cqlengine.columns import Ascii
from cqlengine.columns import Text
from cqlengine.columns import Integer
from cqlengine.columns import VarInt
from cqlengine.columns import DateTime
from cqlengine.columns import Date
from cqlengine.columns import UUID
@@ -24,6 +25,9 @@ from cqlengine.columns import Decimal
from cqlengine.management import create_table, delete_table
from cqlengine.models import Model
import sys
class TestDatetime(BaseCassEngTestCase):
class DatetimeTest(Model):
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()
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 DateTest(Model):
test_id = Integer(primary_key=True)
@@ -109,7 +135,7 @@ class TestDecimal(BaseCassEngTestCase):
super(TestDecimal, cls).tearDownClass()
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'))
dt2 = self.DecimalTest.objects(test_id=0).first()
assert dt2.dec_val == dt.dec_val

View File

@@ -42,6 +42,12 @@ Columns
columns.Integer()
.. class:: VarInt()
Stores an arbitrary-precision integer ::
columns.VarInt()
.. class:: DateTime()
Stores a datetime value.