Support Python 3.9

Remove the '|' syntax for type unions, since it's a 3.10 feature, and
set mypy to check with version 3.9.
This commit is contained in:
James Westman 2022-10-27 13:15:58 -05:00
parent d6c6a66c15
commit 0b8012b8e1
No known key found for this signature in database
GPG key ID: CE2DBA0ADB654EA6
7 changed files with 18 additions and 11 deletions

View file

@ -6,7 +6,7 @@ build:
image: registry.gitlab.gnome.org/jwestman/blueprint-compiler image: registry.gitlab.gnome.org/jwestman/blueprint-compiler
stage: build stage: build
script: script:
- mypy blueprintcompiler - mypy --python-version=3.9 blueprintcompiler
- coverage run -m unittest - coverage run -m unittest
- coverage report - coverage report
- coverage html - coverage html

View file

@ -45,7 +45,7 @@ class Object(AstNode):
return self.tokens["id"] return self.tokens["id"]
@property @property
def class_name(self) -> ClassName | None: def class_name(self) -> T.Optional[ClassName]:
return self.children[ClassName][0] return self.children[ClassName][0]
@property @property

View file

@ -17,6 +17,7 @@
# #
# SPDX-License-Identifier: LGPL-3.0-or-later # SPDX-License-Identifier: LGPL-3.0-or-later
import typing as T
from .gtkbuilder_template import Template from .gtkbuilder_template import Template
from .common import * from .common import *
@ -45,7 +46,7 @@ class Signal(AstNode):
return self.tokens["name"] return self.tokens["name"]
@property @property
def detail_name(self) -> str | None: def detail_name(self) -> T.Optional[str]:
return self.tokens["detail_name"] return self.tokens["detail_name"]
@property @property
@ -53,7 +54,7 @@ class Signal(AstNode):
return self.tokens["handler"] return self.tokens["handler"]
@property @property
def object_id(self) -> str | None: def object_id(self) -> T.Optional[str]:
return self.tokens["object"] return self.tokens["object"]
@property @property

View file

@ -17,6 +17,7 @@
# #
# SPDX-License-Identifier: LGPL-3.0-or-later # SPDX-License-Identifier: LGPL-3.0-or-later
import typing as T
from .gobject_object import Object, ObjectContent from .gobject_object import Object, ObjectContent
from .common import * from .common import *
@ -39,7 +40,7 @@ class Template(Object):
return self.tokens["id"] return self.tokens["id"]
@property @property
def class_name(self) -> ClassName | None: def class_name(self) -> T.Optional[ClassName]:
if len(self.children[ClassName]): if len(self.children[ClassName]):
return self.children[ClassName][0] return self.children[ClassName][0]
else: else:

View file

@ -17,6 +17,7 @@
# #
# SPDX-License-Identifier: LGPL-3.0-or-later # SPDX-License-Identifier: LGPL-3.0-or-later
import typing as T
from .common import * from .common import *
from .types import TypeName from .types import TypeName
@ -50,7 +51,7 @@ class TranslatedStringValue(Value):
return self.tokens["value"] return self.tokens["value"]
@property @property
def context(self) -> str | None: def context(self) -> T.Optional[str]:
return self.tokens["context"] return self.tokens["context"]
@ -116,7 +117,7 @@ class NumberValue(Value):
grammar = UseNumber("value") grammar = UseNumber("value")
@property @property
def value(self) -> int | float: def value(self) -> T.Union[int, float]:
return self.tokens["value"] return self.tokens["value"]
@validate() @validate()

View file

@ -1,3 +1,5 @@
import typing as T
from .. import OutputFormat from .. import OutputFormat
from ...language import * from ...language import *
from .xml_emitter import XmlEmitter from .xml_emitter import XmlEmitter
@ -45,7 +47,7 @@ class XmlOutput(OutputFormat):
self._emit_object_or_template(obj, xml) self._emit_object_or_template(obj, xml)
xml.end_tag() xml.end_tag()
def _emit_object_or_template(self, obj: Object | Template, xml: XmlEmitter): def _emit_object_or_template(self, obj: T.Union[Object, Template], xml: XmlEmitter):
for child in obj.content.children: for child in obj.content.children:
if isinstance(child, Property): if isinstance(child, Property):
self._emit_property(child, xml) self._emit_property(child, xml)
@ -123,7 +125,7 @@ class XmlOutput(OutputFormat):
def _translated_string_attrs( def _translated_string_attrs(
self, translated: TranslatedStringValue self, translated: TranslatedStringValue
) -> T.Dict[str, str | None]: ) -> T.Dict[str, T.Optional[str]]:
return { return {
"translatable": "true", "translatable": "true",
"context": translated.context, "context": translated.context,

View file

@ -17,6 +17,8 @@
# #
# SPDX-License-Identifier: LGPL-3.0-or-later # SPDX-License-Identifier: LGPL-3.0-or-later
import typing as T
from xml.sax import saxutils from xml.sax import saxutils
from blueprintcompiler.gir import GirType from blueprintcompiler.gir import GirType
@ -30,7 +32,7 @@ class XmlEmitter:
self._tag_stack = [] self._tag_stack = []
self._needs_newline = False self._needs_newline = False
def start_tag(self, tag, **attrs: str | GirType | ClassName | bool | None): def start_tag(self, tag, **attrs: T.Union[str, GirType, ClassName, bool, None]):
self._indent() self._indent()
self.result += f"<{tag}" self.result += f"<{tag}"
for key, val in attrs.items(): for key, val in attrs.items():
@ -56,7 +58,7 @@ class XmlEmitter:
self.result += f"</{tag}>" self.result += f"</{tag}>"
self._needs_newline = True self._needs_newline = True
def put_text(self, text: str | int | float): def put_text(self, text: T.Union[str, int, float]):
self.result += saxutils.escape(str(text)) self.result += saxutils.escape(str(text))
self._needs_newline = False self._needs_newline = False