add VarInt column
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -42,6 +42,12 @@ Columns
|
||||
|
||||
columns.Integer()
|
||||
|
||||
.. class:: VarInt()
|
||||
|
||||
Stores an arbitrary-precision integer ::
|
||||
|
||||
columns.VarInt()
|
||||
|
||||
.. class:: DateTime()
|
||||
|
||||
Stores a datetime value.
|
||||
|
||||
Reference in New Issue
Block a user