From 53e7ef6370c8eace8067589185aa4f122a2db2c0 Mon Sep 17 00:00:00 2001 From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com> Date: Mon, 28 Jul 2025 14:50:24 +0200 Subject: [PATCH 1/2] add support for ParseError pickling --- tests/test_textparser.py | 16 ++++++++++++++++ textparser.py | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/tests/test_textparser.py b/tests/test_textparser.py index 13369b8..0af6c8b 100644 --- a/tests/test_textparser.py +++ b/tests/test_textparser.py @@ -1,3 +1,4 @@ +import pickle import unittest from collections import namedtuple @@ -1115,6 +1116,21 @@ def grammar(self): '}', ';']) + def test_error_picklable(self): + class Parser(textparser.Parser): + + def grammar(self): + return Sequence('__EOF__') + + try: + Parser().parse('123', match_sof=True) + except Exception as exc: + self.assertIsInstance(exc, textparser.ParseError) + pickled = pickle.dumps(exc) + unpickled = pickle.loads(pickled) + self.assertIsInstance(unpickled, textparser.ParseError) + self.assertEqual(repr(unpickled), repr(exc)) + if __name__ == '__main__': unittest.main() diff --git a/textparser.py b/textparser.py index 6581405..8d76d72 100644 --- a/textparser.py +++ b/textparser.py @@ -219,6 +219,10 @@ def column(self): return self._column + def __reduce__(self): + """Adds pickling support.""" + return type(self), (self._text, self._offset), {} + Token = namedtuple('Token', ['kind', 'value', 'offset']) From 7647f04960155ba85dd19ee6a9676618b20d29eb Mon Sep 17 00:00:00 2001 From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com> Date: Mon, 28 Jul 2025 14:54:24 +0200 Subject: [PATCH 2/2] update gha --- .github/workflows/pythonpackage.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index bea8b98..24cb41d 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -9,12 +9,12 @@ jobs: strategy: max-parallel: 4 matrix: - python-version: [3.6, 3.9] + python-version: [3.8, 3.13] steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Test @@ -28,11 +28,11 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v1 - - name: Set up Python 3.9 - uses: actions/setup-python@v1 + uses: actions/checkout@v4 + - name: Set up Python 3.13 + uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: 3.13 - name: Install pypa/build run: | python -m pip install build --user