Merge branch '1.x'
Conflicts: CHANGELOG.rst cassandra/decoder.py
This commit is contained in:
@@ -1,3 +1,15 @@
|
||||
2.0.0b2
|
||||
=======
|
||||
In Progress
|
||||
|
||||
Merged From 1.x
|
||||
---------------
|
||||
|
||||
Bug Fixes
|
||||
^^^^^^^^^
|
||||
* Don't strip trailing underscores from column names when using the
|
||||
named_tuple_factory (PYTHON-56)
|
||||
|
||||
2.0.0b1
|
||||
=======
|
||||
May 6, 2014
|
||||
|
@@ -35,12 +35,20 @@ import logging
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
NON_ALPHA_REGEX = re.compile('\W')
|
||||
END_UNDERSCORE_REGEX = re.compile('^_*(\w*[a-zA-Z0-9])_*$')
|
||||
NON_ALPHA_REGEX = re.compile('[^a-zA-Z0-9]')
|
||||
START_BADCHAR_REGEX = re.compile('^[^a-zA-Z0-9]*')
|
||||
END_BADCHAR_REGEX = re.compile('[^a-zA-Z0-9_]*$')
|
||||
|
||||
_clean_name_cache = {}
|
||||
|
||||
|
||||
def _clean_column_name(name):
|
||||
return END_UNDERSCORE_REGEX.sub("\g<1>", NON_ALPHA_REGEX.sub("_", name))
|
||||
try:
|
||||
return _clean_name_cache[name]
|
||||
except KeyError:
|
||||
clean = NON_ALPHA_REGEX.sub("_", START_BADCHAR_REGEX.sub("", END_BADCHAR_REGEX.sub("", name)))
|
||||
_clean_name_cache[name] = clean
|
||||
return clean
|
||||
|
||||
|
||||
def tuple_factory(colnames, rows):
|
||||
|
@@ -134,13 +134,14 @@ class TypeTests(unittest.TestCase):
|
||||
self.assertEqual(cql_typename('org.apache.cassandra.db.marshal.ListType(IntegerType)'), 'list<varint>')
|
||||
|
||||
def test_named_tuple_colname_substitution(self):
|
||||
colnames = ("func(abc)", "[applied]", "func(func(abc))", "foo_bar")
|
||||
rows = [(1, 2, 3, 4)]
|
||||
colnames = ("func(abc)", "[applied]", "func(func(abc))", "foo_bar", "foo_bar_")
|
||||
rows = [(1, 2, 3, 4, 5)]
|
||||
result = named_tuple_factory(colnames, rows)[0]
|
||||
self.assertEqual(result[0], result.func_abc)
|
||||
self.assertEqual(result[1], result.applied)
|
||||
self.assertEqual(result[2], result.func_func_abc)
|
||||
self.assertEqual(result[3], result.foo_bar)
|
||||
self.assertEqual(result[4], result.foo_bar_)
|
||||
|
||||
def test_parse_casstype_args(self):
|
||||
class FooType(CassandraType):
|
||||
|
Reference in New Issue
Block a user