diff --git a/e44509b5e4.patch b/e44509b5e4.patch new file mode 100644 index 0000000..879c992 --- /dev/null +++ b/e44509b5e4.patch @@ -0,0 +1,104 @@ +From e44509b5e42525f30b62137599e574fdd41f68bc Mon Sep 17 00:00:00 2001 +From: Benjamin Moran +Date: Tue, 24 Nov 2020 11:42:02 +0900 +Subject: [PATCH] Simplify UBO code, and revert some experimental code. + +--- + RELEASE_NOTES | 8 ++++++ + pyglet/text/formats/attributed.py | 41 +++++++------------------------ + 2 files changed, 17 insertions(+), 32 deletions(-) + +diff --git a/RELEASE_NOTES b/RELEASE_NOTES +index 5c4fe67a..f084a013 100644 +--- a/RELEASE_NOTES ++++ b/RELEASE_NOTES +@@ -1,3 +1,11 @@ ++pyglet 1.5.12 ++Bugfix and feature release ++ ++Bugfixes ++-------- ++- Remove usage of deprecated `parser` module. (#312) ++ ++ + pyglet 1.5.11 + Bugfix release + +diff --git a/pyglet/text/formats/attributed.py b/pyglet/text/formats/attributed.py +index 350e0844..3eb815c6 100644 +--- a/pyglet/text/formats/attributed.py ++++ b/pyglet/text/formats/attributed.py +@@ -38,11 +38,7 @@ + """ + + import re +-import token +-import parser +-import operator +- +-from functools import reduce ++import ast + + import pyglet + +@@ -63,11 +59,13 @@ + + + class AttributedTextDecoder(pyglet.text.DocumentDecoder): +- def decode(self, text, location=None): +- self.doc = pyglet.text.document.FormattedDocument() + ++ def __init__(self): ++ self.doc = pyglet.text.document.FormattedDocument() + self.length = 0 + self.attributes = {} ++ ++ def decode(self, text, location=None): + next_trailing_space = True + trailing_newline = True + +@@ -90,22 +88,15 @@ def decode(self, text, location=None): + self.append(m.group('nl_para')[1:]) # ignore the first \n + trailing_newline = True + elif group == 'attr': +- try: +- ast = parser.expr(m.group('attr_val')) +- if self.safe(ast): +- val = eval(ast.compile()) +- else: +- val = None +- except (parser.ParserError, SyntaxError): +- val = None ++ value = ast.literal_eval(m.group('attr_val')) + name = m.group('attr_name') + if name[0] == '.': + if trailing_newline: +- self.attributes[name[1:]] = val ++ self.attributes[name[1:]] = value + else: +- self.doc.set_paragraph_style(self.length, self.length, {name[1:]: val}) ++ self.doc.set_paragraph_style(self.length, self.length, {name[1:]: value}) + else: +- self.attributes[name] = val ++ self.attributes[name] = value + elif group == 'escape_dec': + self.append(chr(int(m.group('escape_dec_val')))) + elif group == 'escape_hex': +@@ -122,17 +113,3 @@ def append(self, text): + self.doc.insert_text(self.length, text, self.attributes) + self.length += len(text) + self.attributes.clear() +- +- _safe_names = ('True', 'False', 'None') +- +- def safe(self, ast): +- tree = ast.totuple() +- return self.safe_node(tree) +- +- def safe_node(self, node): +- if token.ISNONTERMINAL(node[0]): +- return reduce(operator.and_, map(self.safe_node, node[1:])) +- elif node[0] == token.NAME: +- return node[1] in self._safe_names +- else: +- return True diff --git a/python-pyglet.spec b/python-pyglet.spec index d16a0d3..33f6fc7 100644 --- a/python-pyglet.spec +++ b/python-pyglet.spec @@ -19,6 +19,11 @@ URL: http://www.pyglet.org/ Source0: %{versionedname}-repacked.tar.gz Source1: pyglet-get-tarball.sh +# Remove usage of the deprecated `parser` module. +# This makes pyglet compatible with Python 3.10a. +# Merged upstream. +Patch0: https://github.com/pyglet/pyglet/commit/e44509b5e4.patch + BuildArch: noarch # Tests (and possibly sound synthesis?) fail on big-endian. @@ -86,7 +91,7 @@ BuildRequires: python3-pillow %prep -%setup -q -n %{versionedname} +%autosetup -p1 -n %{versionedname} # Remove the bundled pypng library (python-pillow provides the same functionality) rm pyglet/image/codecs/png.py