[S] Change in code/re2[abseil]: Make module-level functions accept already compiled `pattern`s.

1 view
Skip to first unread message

Paul Wankadia (Gerrit)

unread,
Jul 28, 2022, 9:13:43 AM7/28/22
to Paul Wankadia, re2...@googlegroups.com

Paul Wankadia has uploaded this change for review.

View Change

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.

Gerrit-Project: re2
Gerrit-Branch: abseil
Gerrit-Change-Id: Iad3ea646c6077a223423cbf6d244b752bca18569
Gerrit-Change-Number: 60290
Gerrit-PatchSet: 1
Gerrit-Owner: Paul Wankadia <jun...@google.com>
Gerrit-MessageType: newchange

Perry Lorier (Gerrit)

unread,
Jul 28, 2022, 9:38:48 AM7/28/22
to Paul Wankadia, Randall Bosetti, re2...@googlegroups.com

Attention is currently required from: Paul Wankadia.

Patch set 1:Code-Review +1

View Change

    To view, visit change 60290. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: re2
    Gerrit-Branch: abseil
    Gerrit-Change-Id: Iad3ea646c6077a223423cbf6d244b752bca18569
    Gerrit-Change-Number: 60290
    Gerrit-PatchSet: 1
    Gerrit-Owner: Paul Wankadia <jun...@google.com>
    Gerrit-Reviewer: Perry Lorier <per...@google.com>
    Gerrit-CC: Randall Bosetti <r...@google.com>
    Gerrit-Attention: Paul Wankadia <jun...@google.com>
    Gerrit-Comment-Date: Thu, 28 Jul 2022 13:38:45 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: Yes
    Gerrit-MessageType: comment

    Paul Wankadia (Gerrit)

    unread,
    Jul 28, 2022, 9:39:09 AM7/28/22
    to Paul Wankadia, Perry Lorier, Randall Bosetti, re2...@googlegroups.com

    Patch set 1:Code-Review +2

    View Change

      To view, visit change 60290. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: re2
      Gerrit-Branch: abseil
      Gerrit-Change-Id: Iad3ea646c6077a223423cbf6d244b752bca18569
      Gerrit-Change-Number: 60290
      Gerrit-PatchSet: 1
      Gerrit-Owner: Paul Wankadia <jun...@google.com>
      Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
      Gerrit-Reviewer: Perry Lorier <per...@google.com>
      Gerrit-CC: Randall Bosetti <r...@google.com>
      Gerrit-Comment-Date: Thu, 28 Jul 2022 13:39:03 +0000

      Paul Wankadia (Gerrit)

      unread,
      Jul 28, 2022, 9:39:13 AM7/28/22
      to Paul Wankadia, Perry Lorier, Randall Bosetti, re2...@googlegroups.com

      Paul Wankadia submitted this change.

      View Change


      Approvals: Perry Lorier: Looks good to me, but someone else must approve Paul Wankadia: Looks good to me, approved
      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.

      Gerrit-Project: re2
      Gerrit-Branch: abseil
      Gerrit-Change-Id: Iad3ea646c6077a223423cbf6d244b752bca18569
      Gerrit-Change-Number: 60290
      Gerrit-PatchSet: 2
      Gerrit-Owner: Paul Wankadia <jun...@google.com>
      Gerrit-Reviewer: Paul Wankadia <jun...@google.com>
      Gerrit-Reviewer: Perry Lorier <per...@google.com>
      Gerrit-CC: Randall Bosetti <r...@google.com>
      Gerrit-MessageType: merged
      Reply all
      Reply to author
      Forward
      0 new messages