From 5fcb0c7d3b3247bf821e10cda580887113abc772 Mon Sep 17 00:00:00 2001 From: Trim21 Date: Thu, 6 Jul 2023 15:21:15 +0800 Subject: [PATCH] Use `typing_extensions` for `TypedDict` (#2592) --- github/RepositoryAdvisoryCredit.py | 24 +++++------ github/RepositoryAdvisoryVulnerability.py | 51 ++++++++++------------- 2 files changed, 33 insertions(+), 42 deletions(-) diff --git a/github/RepositoryAdvisoryCredit.py b/github/RepositoryAdvisoryCredit.py index a473b64b..d07c9825 100644 --- a/github/RepositoryAdvisoryCredit.py +++ b/github/RepositoryAdvisoryCredit.py @@ -20,26 +20,24 @@ # # ################################################################################ -import sys -import typing +from typing import Union + +from typing_extensions import TypedDict import github.GithubObject import github.NamedUser -if sys.version_info >= (3, 8): - # TypedDict is only available in Python 3.8 and later - class SimpleCredit(typing.TypedDict): - """ - A simple credit for a security advisory. - """ - login: typing.Union[str, "github.NamedUser.NamedUser"] - type: str +class SimpleCredit(TypedDict): + """ + A simple credit for a security advisory. + """ -else: - SimpleCredit = typing.Dict[str, typing.Any] + login: Union[str, "github.NamedUser.NamedUser"] + type: str -Credit = typing.Union[SimpleCredit, "RepositoryAdvisoryCredit"] + +Credit = Union[SimpleCredit, "RepositoryAdvisoryCredit"] class RepositoryAdvisoryCredit(github.GithubObject.NonCompletableGithubObject): diff --git a/github/RepositoryAdvisoryVulnerability.py b/github/RepositoryAdvisoryVulnerability.py index f7f57d3b..236e9f0f 100644 --- a/github/RepositoryAdvisoryVulnerability.py +++ b/github/RepositoryAdvisoryVulnerability.py @@ -20,42 +20,35 @@ # # ################################################################################ -import sys -import typing -from typing import List +from typing import List, Optional, Union + +from typing_extensions import NotRequired, TypedDict import github.GithubObject import github.RepositoryAdvisoryVulnerabilityPackage -if sys.version_info >= (3, 8): - # TypedDict is only available in Python 3.8 and later - class SimpleAdvisoryVulnerabilityPackage(typing.TypedDict): - """ - A simple package in an advisory. - """ - ecosystem: str - name: typing.Optional[str] # TODO: Python 3.11 make 'NotRequired' +class SimpleAdvisoryVulnerabilityPackage(TypedDict): + """ + A simple package in an advisory. + """ - class SimpleAdvisoryVulnerability(typing.TypedDict): - """ - A simple vulnerability in a security advisory. - """ + ecosystem: str + name: NotRequired[Optional[str]] - package: SimpleAdvisoryVulnerabilityPackage - patched_versions: typing.Optional[str] # TODO: Python 3.11 make 'NotRequired' - vulnerable_functions: typing.Optional[ - List[str] - ] # TODO: Python 3.11 make 'NotRequired' - vulnerable_version_range: typing.Optional[ - str - ] # TODO: Python 3.11 make 'NotRequired' -else: - SimpleAdvisoryVulnerabilityPackage = typing.Dict[str, typing.Any] - SimpleAdvisoryVulnerability = typing.Dict[str, typing.Any] +class SimpleAdvisoryVulnerability(TypedDict): + """ + A simple vulnerability in a security advisory. + """ -AdvisoryVulnerability = typing.Union[ + package: SimpleAdvisoryVulnerabilityPackage + patched_versions: NotRequired[Optional[str]] + vulnerable_functions: NotRequired[Optional[List[str]]] + vulnerable_version_range: NotRequired[Optional[str]] + + +AdvisoryVulnerability = Union[ SimpleAdvisoryVulnerability, "RepositoryAdvisoryVulnerability" ] @@ -83,14 +76,14 @@ class RepositoryAdvisoryVulnerability(github.GithubObject.NonCompletableGithubOb return self._patched_versions.value @property - def vulnerable_functions(self) -> typing.Optional[List[str]]: + def vulnerable_functions(self) -> Optional[List[str]]: """ :type: list of string """ return self._vulnerable_functions.value @property - def vulnerable_version_range(self) -> typing.Optional[str]: + def vulnerable_version_range(self) -> Optional[str]: """ :type: string """