Paul Wankadia has uploaded this change for review.
Make module-level functions accept already compiled `pattern`s.
This is for slightly better compatibility with the `re` module.
Change-Id: Iad3ea646c6077a223423cbf6d244b752bca18569
---
M python/re2.py
M python/re2_test.py
2 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/python/re2.py b/python/re2.py
index 6031a33..6ae2290 100644
--- a/python/re2.py
+++ b/python/re2.py
@@ -64,8 +64,12 @@
def compile(pattern, options=None):
- if not options:
- options = Options()
+ if isinstance(pattern, _Regexp):
+ if options:
+ raise error('pattern is already compiled, so '
+ 'options may not be specified')
+ pattern = pattern._pattern
+ options = options or Options()
values = tuple(getattr(options, name) for name in Options.NAMES)
return _Regexp._make(pattern, values)
@@ -156,7 +160,7 @@
def __getstate__(self):
options = {name: getattr(self.options, name) for name in Options.NAMES}
- return self.pattern, options
+ return self._pattern, options
def __setstate__(self, state):
pattern, options = state
@@ -503,8 +507,7 @@
__slots__ = ('_set')
def __init__(self, anchor, options=None):
- if not options:
- options = Options()
+ options = options or Options()
self._set = _re2.Set(anchor, options)
@classmethod
@@ -551,8 +554,7 @@
self._filter = _re2.Filter()
def Add(self, pattern, options=None):
- if not options:
- options = Options()
+ options = options or Options()
if isinstance(pattern, str):
encoded_pattern = _encode(pattern)
index = self._filter.Add(encoded_pattern, options)
diff --git a/python/re2_test.py b/python/re2_test.py
index fb3b0c8..940412a 100644
--- a/python/re2_test.py
+++ b/python/re2_test.py
@@ -49,6 +49,13 @@
def test_compile(self, pattern, expected_groups, expected_groupindex):
regexp = re2.compile(pattern)
self.assertIs(regexp, re2.compile(pattern)) # cached
+ self.assertIs(regexp, re2.compile(regexp)) # cached
+ with self.assertRaisesRegex(re2.error,
+ ('pattern is already compiled, so '
+ 'options may not be specified')):
+ options = re2.Options()
+ options.log_errors = not options.log_errors
+ re2.compile(regexp, options=options)
self.assertIsNotNone(regexp.options)
self.assertEqual(expected_groups, regexp.groups)
self.assertDictEqual(dict(expected_groupindex), regexp.groupindex)
To view, visit change 60290. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Paul Wankadia.
Patch set 1:Code-Review +1
Patch set 1:Code-Review +2
Paul Wankadia submitted this change.
Make module-level functions accept already compiled `pattern`s.
This is for slightly better compatibility with the `re` module.
Change-Id: Iad3ea646c6077a223423cbf6d244b752bca18569
Reviewed-on: https://code-review.googlesource.com/c/re2/+/60290
Reviewed-by: Perry Lorier <per...@google.com>
Reviewed-by: Paul Wankadia <jun...@google.com>
---
M python/re2.py
M python/re2_test.py
2 files changed, 30 insertions(+), 7 deletions(-)
To view, visit change 60290. To unsubscribe, or for help writing mail filters, visit settings.