Skip to content

Commit 0ad0d0d

Browse files
committed
Merge pull request #1300 from dhermes/bigtable-row-filter-2
Adding remaining Bigtable regex row filters.
2 parents 8b09538 + 8d185bd commit 0ad0d0d

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

gcloud/bigtable/row.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,63 @@ def to_pb(self):
124124
:returns: The converted current object.
125125
"""
126126
return data_pb2.RowFilter(family_name_regex_filter=self.regex)
127+
128+
129+
class ColumnQualifierRegexFilter(_RegexFilter):
130+
"""Row filter for a column qualifier regular expression.
131+
132+
The ``regex`` must be valid RE2 patterns. See Google's
133+
`RE2 reference`_ for the accepted syntax.
134+
135+
.. _RE2 reference: https://github.com/google/re2/wiki/Syntax
136+
137+
.. note::
138+
139+
Special care need be used with the expression used. Since
140+
each of these properties can contain arbitrary bytes, the ``\\C``
141+
escape sequence must be used if a true wildcard is desired. The ``.``
142+
character will not match the new line character ``\\n``, which may be
143+
present in a binary value.
144+
145+
:type regex: bytes
146+
:param regex: A regular expression (RE2) to match cells from column that
147+
match this regex (irrespective of column family).
148+
"""
149+
150+
def to_pb(self):
151+
"""Converts the row filter to a protobuf.
152+
153+
:rtype: :class:`.data_pb2.RowFilter`
154+
:returns: The converted current object.
155+
"""
156+
return data_pb2.RowFilter(column_qualifier_regex_filter=self.regex)
157+
158+
159+
class ValueRegexFilter(_RegexFilter):
160+
"""Row filter for a value regular expression.
161+
162+
The ``regex`` must be valid RE2 patterns. See Google's
163+
`RE2 reference`_ for the accepted syntax.
164+
165+
.. _RE2 reference: https://github.com/google/re2/wiki/Syntax
166+
167+
.. note::
168+
169+
Special care need be used with the expression used. Since
170+
each of these properties can contain arbitrary bytes, the ``\\C``
171+
escape sequence must be used if a true wildcard is desired. The ``.``
172+
character will not match the new line character ``\\n``, which may be
173+
present in a binary value.
174+
175+
:type regex: bytes
176+
:param regex: A regular expression (RE2) to match cells with values that
177+
match this regex.
178+
"""
179+
180+
def to_pb(self):
181+
"""Converts the row filter to a protobuf.
182+
183+
:rtype: :class:`.data_pb2.RowFilter`
184+
:returns: The converted current object.
185+
"""
186+
return data_pb2.RowFilter(value_regex_filter=self.regex)

gcloud/bigtable/test_row.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,41 @@ def test_to_pb(self):
118118
pb_val = row_filter.to_pb()
119119
expected_pb = data_pb2.RowFilter(family_name_regex_filter=regex)
120120
self.assertEqual(pb_val, expected_pb)
121+
122+
123+
class TestColumnQualifierRegexFilter(unittest2.TestCase):
124+
125+
def _getTargetClass(self):
126+
from gcloud.bigtable.row import ColumnQualifierRegexFilter
127+
return ColumnQualifierRegexFilter
128+
129+
def _makeOne(self, *args, **kwargs):
130+
return self._getTargetClass()(*args, **kwargs)
131+
132+
def test_to_pb(self):
133+
from gcloud.bigtable._generated import bigtable_data_pb2 as data_pb2
134+
135+
regex = b'column-regex'
136+
row_filter = self._makeOne(regex)
137+
pb_val = row_filter.to_pb()
138+
expected_pb = data_pb2.RowFilter(column_qualifier_regex_filter=regex)
139+
self.assertEqual(pb_val, expected_pb)
140+
141+
142+
class TestValueRegexFilter(unittest2.TestCase):
143+
144+
def _getTargetClass(self):
145+
from gcloud.bigtable.row import ValueRegexFilter
146+
return ValueRegexFilter
147+
148+
def _makeOne(self, *args, **kwargs):
149+
return self._getTargetClass()(*args, **kwargs)
150+
151+
def test_to_pb(self):
152+
from gcloud.bigtable._generated import bigtable_data_pb2 as data_pb2
153+
154+
regex = b'value-regex'
155+
row_filter = self._makeOne(regex)
156+
pb_val = row_filter.to_pb()
157+
expected_pb = data_pb2.RowFilter(value_regex_filter=regex)
158+
self.assertEqual(pb_val, expected_pb)

0 commit comments

Comments
 (0)