Deprecate cqlengine.Float(double_precision=True)

Overload deprecated in favor of distinct Float, Double types

PYTHON-246
This commit is contained in:
Adam Holmberg
2015-04-20 15:31:48 -05:00
parent c10f8f8712
commit 833feeb9a0
4 changed files with 69 additions and 22 deletions

View File

@@ -591,18 +591,9 @@ class Boolean(Column):
return self.validate(value) return self.validate(value)
class Float(Column): class BaseFloat(Column):
"""
Stores a floating point value
"""
db_type = 'double'
def __init__(self, double_precision=True, **kwargs):
self.db_type = 'double' if double_precision else 'float'
super(Float, self).__init__(**kwargs)
def validate(self, value): def validate(self, value):
value = super(Float, self).validate(value) value = super(BaseFloat, self).validate(value)
if value is None: if value is None:
return return
try: try:
@@ -617,6 +608,31 @@ class Float(Column):
return self.validate(value) return self.validate(value)
class Float(BaseFloat):
"""
Stores a single-precision floating-point value
"""
db_type = 'float'
def __init__(self, double_precision=None, **kwargs):
if double_precision is None or bool(double_precision):
msg = "Float(double_precision=True) is deprecated. Use Double() type instead."
double_precision = True
warnings.warn(msg, DeprecationWarning)
log.warning(msg)
self.db_type = 'double' if double_precision else 'float'
super(Float, self).__init__(**kwargs)
class Double(BaseFloat):
"""
Stores a double-precision floating-point value
"""
db_type = 'double'
class Decimal(Column): class Decimal(Column):
""" """
Stores a variable precision decimal value Stores a variable precision decimal value

View File

@@ -58,6 +58,8 @@ Columns of all types are initialized by passing :class:`.Column` attributes to t
.. autoclass:: Decimal(**kwargs) .. autoclass:: Decimal(**kwargs)
.. autoclass:: Double
.. autoclass:: Float .. autoclass:: Float
.. autoclass:: Integer(**kwargs) .. autoclass:: Integer(**kwargs)

View File

@@ -50,8 +50,9 @@ class BaseColumnIOTest(BaseCassEngTestCase):
def setUpClass(cls): def setUpClass(cls):
super(BaseColumnIOTest, cls).setUpClass() super(BaseColumnIOTest, cls).setUpClass()
#if the test column hasn't been defined, bail out # if the test column hasn't been defined, bail out
if not cls.column: return if not cls.column:
return
# create a table with the given column # create a table with the given column
class IOTestModel(Model): class IOTestModel(Model):
@@ -62,7 +63,7 @@ class BaseColumnIOTest(BaseCassEngTestCase):
cls._generated_model = IOTestModel cls._generated_model = IOTestModel
sync_table(cls._generated_model) sync_table(cls._generated_model)
#tupleify the tested values # tupleify the tested values
if not isinstance(cls.pkey_val, tuple): if not isinstance(cls.pkey_val, tuple):
cls.pkey_val = cls.pkey_val, cls.pkey_val = cls.pkey_val,
if not isinstance(cls.data_val, tuple): if not isinstance(cls.data_val, tuple):
@@ -71,7 +72,8 @@ class BaseColumnIOTest(BaseCassEngTestCase):
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
super(BaseColumnIOTest, cls).tearDownClass() super(BaseColumnIOTest, cls).tearDownClass()
if not cls.column: return if not cls.column:
return
drop_table(cls._generated_model) drop_table(cls._generated_model)
def comparator_converter(self, val): def comparator_converter(self, val):
@@ -80,31 +82,35 @@ class BaseColumnIOTest(BaseCassEngTestCase):
def test_column_io(self): def test_column_io(self):
""" Tests the given models class creates and retrieves values as expected """ """ Tests the given models class creates and retrieves values as expected """
if not self.column: return if not self.column:
return
for pkey, data in zip(self.pkey_val, self.data_val): for pkey, data in zip(self.pkey_val, self.data_val):
#create # create
m1 = self._generated_model.create(pkey=pkey, data=data) m1 = self._generated_model.create(pkey=pkey, data=data)
#get # get
m2 = self._generated_model.get(pkey=pkey) m2 = self._generated_model.get(pkey=pkey)
assert m1.pkey == m2.pkey == self.comparator_converter(pkey), self.column assert m1.pkey == m2.pkey == self.comparator_converter(pkey), self.column
assert m1.data == m2.data == self.comparator_converter(data), self.column assert m1.data == m2.data == self.comparator_converter(data), self.column
#delete # delete
self._generated_model.filter(pkey=pkey).delete() self._generated_model.filter(pkey=pkey).delete()
class TestBlobIO(BaseColumnIOTest): class TestBlobIO(BaseColumnIOTest):
column = columns.Blob column = columns.Blob
pkey_val = six.b('blake'), uuid4().bytes pkey_val = six.b('blake'), uuid4().bytes
data_val = six.b('eggleston'), uuid4().bytes data_val = six.b('eggleston'), uuid4().bytes
class TestBlobIO2(BaseColumnIOTest): class TestBlobIO2(BaseColumnIOTest):
column = columns.Blob column = columns.Blob
pkey_val = bytearray(six.b('blake')), uuid4().bytes pkey_val = bytearray(six.b('blake')), uuid4().bytes
data_val = bytearray(six.b('eggleston')), uuid4().bytes data_val = bytearray(six.b('eggleston')), uuid4().bytes
class TestTextIO(BaseColumnIOTest): class TestTextIO(BaseColumnIOTest):
column = columns.Text column = columns.Text
@@ -118,18 +124,21 @@ class TestNonBinaryTextIO(BaseColumnIOTest):
pkey_val = 'bacon' pkey_val = 'bacon'
data_val = '0xmonkey' data_val = '0xmonkey'
class TestInteger(BaseColumnIOTest): class TestInteger(BaseColumnIOTest):
column = columns.Integer column = columns.Integer
pkey_val = 5 pkey_val = 5
data_val = 6 data_val = 6
class TestBigInt(BaseColumnIOTest): class TestBigInt(BaseColumnIOTest):
column = columns.BigInt column = columns.BigInt
pkey_val = 6 pkey_val = 6
data_val = pow(2, 63) - 1 data_val = pow(2, 63) - 1
class TestDateTime(BaseColumnIOTest): class TestDateTime(BaseColumnIOTest):
column = columns.DateTime column = columns.DateTime
@@ -138,6 +147,7 @@ class TestDateTime(BaseColumnIOTest):
pkey_val = now pkey_val = now
data_val = now + timedelta(days=1) data_val = now + timedelta(days=1)
class TestDate(BaseColumnIOTest): class TestDate(BaseColumnIOTest):
column = columns.Date column = columns.Date
@@ -146,6 +156,7 @@ class TestDate(BaseColumnIOTest):
pkey_val = now pkey_val = now
data_val = now + timedelta(days=1) data_val = now + timedelta(days=1)
class TestUUID(BaseColumnIOTest): class TestUUID(BaseColumnIOTest):
column = columns.UUID column = columns.UUID
@@ -156,6 +167,7 @@ class TestUUID(BaseColumnIOTest):
def comparator_converter(self, val): def comparator_converter(self, val):
return val if isinstance(val, UUID) else UUID(val) return val if isinstance(val, UUID) else UUID(val)
class TestTimeUUID(BaseColumnIOTest): class TestTimeUUID(BaseColumnIOTest):
column = columns.TimeUUID column = columns.TimeUUID
@@ -166,13 +178,29 @@ class TestTimeUUID(BaseColumnIOTest):
def comparator_converter(self, val): def comparator_converter(self, val):
return val if isinstance(val, UUID) else UUID(val) return val if isinstance(val, UUID) else UUID(val)
# until Floats are implicitly single:
class FloatSingle(columns.Float):
def __init__(self, **kwargs):
super(FloatSingle, self).__init__(double_precision=False, **kwargs)
class TestFloatIO(BaseColumnIOTest): class TestFloatIO(BaseColumnIOTest):
column = columns.Float column = FloatSingle
pkey_val = 4.75
data_val = -1.5
class TestDoubleIO(BaseColumnIOTest):
column = columns.Double
pkey_val = 3.14 pkey_val = 3.14
data_val = -1982.11 data_val = -1982.11
class TestDecimalIO(BaseColumnIOTest): class TestDecimalIO(BaseColumnIOTest):
column = columns.Decimal column = columns.Decimal
@@ -183,6 +211,7 @@ class TestDecimalIO(BaseColumnIOTest):
def comparator_converter(self, val): def comparator_converter(self, val):
return Decimal(val) return Decimal(val)
class TestQuoter(unittest.TestCase): class TestQuoter(unittest.TestCase):
def test_equals(self): def test_equals(self):

View File

@@ -196,7 +196,7 @@ class UserDefinedTypeTests(BaseCassEngTestCase):
e = columns.Date() e = columns.Date()
f = columns.DateTime() f = columns.DateTime()
g = columns.Decimal() g = columns.Decimal()
h = columns.Float() h = columns.Float(double_precision=False)
i = columns.Inet() i = columns.Inet()
j = columns.Integer() j = columns.Integer()
k = columns.Text() k = columns.Text()
@@ -227,7 +227,7 @@ class UserDefinedTypeTests(BaseCassEngTestCase):
e = columns.Date() e = columns.Date()
f = columns.DateTime() f = columns.DateTime()
g = columns.Decimal() g = columns.Decimal()
h = columns.Float(double_precision=True) h = columns.Double()
i = columns.Inet() i = columns.Inet()
j = columns.Integer() j = columns.Integer()
k = columns.Text() k = columns.Text()