Merge branch 'access-as-dict' of github.com:kdeldycke/cqlengine into pull-158
This commit is contained in:
@@ -13,6 +13,7 @@ CHANGELOG
|
|||||||
* clear TTL and timestamp off models after persisting to DB
|
* clear TTL and timestamp off models after persisting to DB
|
||||||
* allows UUID without dashes - (Thanks to Michael Hall, github.com/mahall)
|
* allows UUID without dashes - (Thanks to Michael Hall, github.com/mahall)
|
||||||
* fixes regarding syncing schema settings (thanks Kai Lautaportti github.com/dokai)
|
* fixes regarding syncing schema settings (thanks Kai Lautaportti github.com/dokai)
|
||||||
|
* allow acces to instance columns as if it is a dict
|
||||||
|
|
||||||
0.10.0
|
0.10.0
|
||||||
|
|
||||||
|
|||||||
@@ -421,6 +421,37 @@ class BaseModel(object):
|
|||||||
val = col.validate(getattr(self, name))
|
val = col.validate(getattr(self, name))
|
||||||
setattr(self, name, val)
|
setattr(self, name, val)
|
||||||
|
|
||||||
|
### Let an instance be used like a dict of its columns keys/values
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
""" Iterate over column ids. """
|
||||||
|
for column_id in self._columns.keys():
|
||||||
|
yield column_id
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
""" Returns column's value. """
|
||||||
|
if not isinstance(key, basestring):
|
||||||
|
raise TypeError
|
||||||
|
if key not in self._columns.keys():
|
||||||
|
raise KeyError
|
||||||
|
return getattr(self, key)
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
""" Returns the number of columns defined on that model. """
|
||||||
|
return len(self._columns.keys())
|
||||||
|
|
||||||
|
def keys(self):
|
||||||
|
""" Returns list of column's IDs. """
|
||||||
|
return [k for k in self]
|
||||||
|
|
||||||
|
def values(self):
|
||||||
|
""" Returns list of column's values. """
|
||||||
|
return [self[k] for k in self]
|
||||||
|
|
||||||
|
def items(self):
|
||||||
|
""" Returns a list of columns's IDs/values. """
|
||||||
|
return [(k, self[k]) for k in self]
|
||||||
|
|
||||||
def _as_dict(self):
|
def _as_dict(self):
|
||||||
""" Returns a map of column names to cleaned values """
|
""" Returns a map of column names to cleaned values """
|
||||||
values = self._dynamic_columns or {}
|
values = self._dynamic_columns or {}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
import random
|
import random
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
from operator import itemgetter
|
||||||
from cqlengine.tests.base import BaseCassEngTestCase
|
from cqlengine.tests.base import BaseCassEngTestCase
|
||||||
|
|
||||||
from cqlengine.management import create_table
|
from cqlengine.management import create_table
|
||||||
@@ -43,6 +44,26 @@ class TestModelIO(BaseCassEngTestCase):
|
|||||||
for cname in tm._columns.keys():
|
for cname in tm._columns.keys():
|
||||||
self.assertEquals(getattr(tm, cname), getattr(tm2, cname))
|
self.assertEquals(getattr(tm, cname), getattr(tm2, cname))
|
||||||
|
|
||||||
|
def test_model_read_as_dict(self):
|
||||||
|
"""
|
||||||
|
Tests that columns of an instance can be read as a dict.
|
||||||
|
"""
|
||||||
|
tm = TestModel.create(count=8, text='123456789', a_bool=True)
|
||||||
|
column_dict = {
|
||||||
|
'id': tm.id,
|
||||||
|
'count': tm.count,
|
||||||
|
'text': tm.text,
|
||||||
|
'a_bool': tm.a_bool,
|
||||||
|
}
|
||||||
|
self.assertEquals(sorted(tm.keys()), sorted(column_dict.keys()))
|
||||||
|
self.assertEquals(sorted(tm.values()), sorted(column_dict.values()))
|
||||||
|
self.assertEquals(
|
||||||
|
sorted(tm.items(), key=itemgetter(0)),
|
||||||
|
sorted(column_dict.items(), key=itemgetter(0)))
|
||||||
|
self.assertEquals(len(tm), len(column_dict))
|
||||||
|
for column_id in column_dict.keys():
|
||||||
|
self.assertEqual(tm[column_id], column_dict[column_id])
|
||||||
|
|
||||||
def test_model_updating_works_properly(self):
|
def test_model_updating_works_properly(self):
|
||||||
"""
|
"""
|
||||||
Tests that subsequent saves after initial model creation work
|
Tests that subsequent saves after initial model creation work
|
||||||
|
|||||||
Reference in New Issue
Block a user