Don't strip trailing _ in column names
Fixes PYTHON-56:
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
|
1.1.3
|
||||||
|
=====
|
||||||
|
In Progress
|
||||||
|
|
||||||
|
Bug Fixes
|
||||||
|
---------
|
||||||
|
* Don't strip trailing underscores from column names when using the
|
||||||
|
named_tuple_factory (PYTHON-56)
|
||||||
|
|
||||||
1.1.2
|
1.1.2
|
||||||
=====
|
=====
|
||||||
May 8, 2014
|
May 8, 2014
|
||||||
|
@@ -63,12 +63,20 @@ HEADER_DIRECTION_TO_CLIENT = 0x80
|
|||||||
HEADER_DIRECTION_MASK = 0x80
|
HEADER_DIRECTION_MASK = 0x80
|
||||||
|
|
||||||
|
|
||||||
NON_ALPHA_REGEX = re.compile('\W')
|
NON_ALPHA_REGEX = re.compile('[^a-zA-Z0-9]')
|
||||||
END_UNDERSCORE_REGEX = re.compile('^_*(\w*[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):
|
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):
|
def tuple_factory(colnames, rows):
|
||||||
|
@@ -130,13 +130,14 @@ class TypeTests(unittest.TestCase):
|
|||||||
self.assertEqual(cql_typename('org.apache.cassandra.db.marshal.ListType(IntegerType)'), 'list<varint>')
|
self.assertEqual(cql_typename('org.apache.cassandra.db.marshal.ListType(IntegerType)'), 'list<varint>')
|
||||||
|
|
||||||
def test_named_tuple_colname_substitution(self):
|
def test_named_tuple_colname_substitution(self):
|
||||||
colnames = ("func(abc)", "[applied]", "func(func(abc))", "foo_bar")
|
colnames = ("func(abc)", "[applied]", "func(func(abc))", "foo_bar", "foo_bar_")
|
||||||
rows = [(1, 2, 3, 4)]
|
rows = [(1, 2, 3, 4, 5)]
|
||||||
result = named_tuple_factory(colnames, rows)[0]
|
result = named_tuple_factory(colnames, rows)[0]
|
||||||
self.assertEqual(result[0], result.func_abc)
|
self.assertEqual(result[0], result.func_abc)
|
||||||
self.assertEqual(result[1], result.applied)
|
self.assertEqual(result[1], result.applied)
|
||||||
self.assertEqual(result[2], result.func_func_abc)
|
self.assertEqual(result[2], result.func_func_abc)
|
||||||
self.assertEqual(result[3], result.foo_bar)
|
self.assertEqual(result[3], result.foo_bar)
|
||||||
|
self.assertEqual(result[4], result.foo_bar_)
|
||||||
|
|
||||||
def test_parse_casstype_args(self):
|
def test_parse_casstype_args(self):
|
||||||
class FooType(CassandraType):
|
class FooType(CassandraType):
|
||||||
|
Reference in New Issue
Block a user