diff options
| author | adamjanovsky | 2023-11-14 14:53:41 +0100 |
|---|---|---|
| committer | GitHub | 2023-11-14 14:53:41 +0100 |
| commit | f0f7fa7e6784afefb945effbc9834209a673db47 (patch) | |
| tree | bf1cd8f68a4b0b586ed9483fd0c39f7ed566a55d | |
| parent | 1ccca9ae8afa8e6574e1cbba2c93b8d5428e2b2e (diff) | |
| parent | acfc35f1ced17a4c0918bd6e4e4e146e86552705 (diff) | |
| download | sec-certs-f0f7fa7e6784afefb945effbc9834209a673db47.tar.gz sec-certs-f0f7fa7e6784afefb945effbc9834209a673db47.tar.zst sec-certs-f0f7fa7e6784afefb945effbc9834209a673db47.zip | |
Merge pull request #374 from crocs-muni/bump-req-python-to-3-10
Bump req python to 3 10
41 files changed, 74 insertions, 66 deletions
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index f14ef8af..d3ac2afe 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -13,7 +13,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: "3.10" - name: Install external dependencies run: sudo apt-get install build-essential libpoppler-cpp-dev pkg-config python3-dev -y - name: Install sec-certs and deps diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index aa28ddc5..3524329a 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -9,7 +9,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: - python-version: "3.8" + python-version: "3.10" - name: Install dependencies run: | sudo apt-get install build-essential libpoppler-cpp-dev pkg-config python3-dev -y diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fb99b4f1..70fcc839 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,7 +20,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: "3.8" + python-version: "3.10" - name: Install build dependencies run: python -m pip install build - name: Build distributions diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d3ce598d..ccda7c3f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -15,7 +15,7 @@ jobs: - name: Setup python uses: actions/setup-python@v4 with: - python-version: "3.8" + python-version: "3.10" cache: "pip" cache-dependency-path: | requirements/test_requirements.txt @@ -19,9 +19,8 @@ ENV NB_GID=1000 ENV HOME /home/${USER} #installing dependencies -RUN apt-get update -RUN apt-get install python3 -y -RUN apt-get install python3-pip -y +RUN apt-get update && apt-get upgrade -y +RUN apt-get install python3.10 -y RUN apt-get install python3-venv -y RUN apt-get install git -y RUN apt-get install curl -y diff --git a/docs/installation.md b/docs/installation.md index 7a119f62..e71c9b97 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -10,7 +10,7 @@ pip install -U sec-certs python -m spacy download en_core_web_sm ``` -Note, that `Python>=3.8` is required. +Note, that `Python>=3.10` is required. ::: @@ -47,4 +47,4 @@ If you're not using Docker, you must install the dependencies as described below - [Java](https://www.java.com/en) is needed to parse tables in FIPS pdf documents, must be available from `PATH`. - Some imported libraries have non-trivial dependencies to resolve: - [pdftotext](https://github.com/jalan/pdftotext) requires [Poppler](https://poppler.freedesktop.org/) to be installed. We've experienced issues with older versions of Poppler (`0.x`), make sure to install `20.x` version of these libraries. - - [tesseract](https://github.com/tesseract-ocr/tesseract) is required for OCR of malformed PDF documents, together with data files for English, French and German.
\ No newline at end of file + - [tesseract](https://github.com/tesseract-ocr/tesseract) is required for OCR of malformed PDF documents, together with data files for English, French and German. diff --git a/pyproject.toml b/pyproject.toml index e97c5afb..6b8ebab7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,14 +19,12 @@ "License :: OSI Approved :: MIT License", "Topic :: Security", "Topic :: Security :: Cryptography", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Intended Audience :: Developers", "Intended Audience :: Science/Research", ] - requires-python = ">=3.8" + requires-python = ">=3.10" dynamic = ["version"] dependencies = [ "beautifulsoup4", @@ -110,7 +108,7 @@ ] src = ["src", "tests"] line-length = 120 - target-version = "py38" + target-version = "py310" [tool.ruff.mccabe] max-complexity = 10 diff --git a/src/sec_certs/cli.py b/src/sec_certs/cli.py index 9bd74108..4b613af4 100644 --- a/src/sec_certs/cli.py +++ b/src/sec_certs/cli.py @@ -3,10 +3,10 @@ from __future__ import annotations import logging import sys +from collections.abc import Callable from dataclasses import dataclass, field from datetime import datetime from pathlib import Path -from typing import Callable import click from pydantic import ValidationError diff --git a/src/sec_certs/dataset/cc.py b/src/sec_certs/dataset/cc.py index 16c95e84..7eea6db7 100644 --- a/src/sec_certs/dataset/cc.py +++ b/src/sec_certs/dataset/cc.py @@ -4,10 +4,11 @@ import itertools import locale import shutil import tempfile +from collections.abc import Iterator from dataclasses import dataclass from datetime import datetime from pathlib import Path -from typing import ClassVar, Iterator, cast +from typing import ClassVar, cast import numpy as np import pandas as pd diff --git a/src/sec_certs/dataset/cc_scheme.py b/src/sec_certs/dataset/cc_scheme.py index a2550014..e099f9de 100644 --- a/src/sec_certs/dataset/cc_scheme.py +++ b/src/sec_certs/dataset/cc_scheme.py @@ -1,8 +1,8 @@ from __future__ import annotations import logging +from collections.abc import Mapping from pathlib import Path -from typing import Mapping from sec_certs import constants from sec_certs.dataset.json_path_dataset import JSONPathDataset diff --git a/src/sec_certs/dataset/cpe.py b/src/sec_certs/dataset/cpe.py index f7cbf9d5..efcb3ded 100644 --- a/src/sec_certs/dataset/cpe.py +++ b/src/sec_certs/dataset/cpe.py @@ -2,9 +2,10 @@ from __future__ import annotations import logging import tempfile +from collections.abc import Iterator from datetime import datetime from pathlib import Path -from typing import Any, Iterator +from typing import Any import pandas as pd diff --git a/src/sec_certs/dataset/dataset.py b/src/sec_certs/dataset/dataset.py index 454e86bd..71974bf0 100644 --- a/src/sec_certs/dataset/dataset.py +++ b/src/sec_certs/dataset/dataset.py @@ -8,10 +8,11 @@ import re import shutil import tempfile from abc import ABC, abstractmethod +from collections.abc import Iterator from dataclasses import dataclass from datetime import datetime from pathlib import Path -from typing import Any, Generic, Iterator, TypeVar, cast +from typing import Any, Generic, TypeVar, cast import pandas as pd diff --git a/src/sec_certs/dataset/fips_algorithm.py b/src/sec_certs/dataset/fips_algorithm.py index f3f27c0b..4a87b3ef 100644 --- a/src/sec_certs/dataset/fips_algorithm.py +++ b/src/sec_certs/dataset/fips_algorithm.py @@ -3,9 +3,9 @@ from __future__ import annotations import itertools import logging import re +from collections.abc import Iterator from pathlib import Path from tempfile import TemporaryDirectory -from typing import Iterator import pandas as pd from bs4 import BeautifulSoup diff --git a/src/sec_certs/dataset/fips_iut.py b/src/sec_certs/dataset/fips_iut.py index 0251bf9b..0df36073 100644 --- a/src/sec_certs/dataset/fips_iut.py +++ b/src/sec_certs/dataset/fips_iut.py @@ -1,9 +1,9 @@ from __future__ import annotations +from collections.abc import Iterator, Mapping from dataclasses import dataclass from pathlib import Path from tempfile import NamedTemporaryFile -from typing import Iterator, Mapping import requests diff --git a/src/sec_certs/dataset/fips_mip.py b/src/sec_certs/dataset/fips_mip.py index dd61e60e..a1a1ab2d 100644 --- a/src/sec_certs/dataset/fips_mip.py +++ b/src/sec_certs/dataset/fips_mip.py @@ -1,11 +1,11 @@ from __future__ import annotations +from collections.abc import Iterator, Mapping from dataclasses import dataclass from datetime import date from operator import attrgetter from pathlib import Path from tempfile import NamedTemporaryFile -from typing import Iterator, Mapping import requests diff --git a/src/sec_certs/model/cc_matching.py b/src/sec_certs/model/cc_matching.py index 1e95c7ba..4e6f5735 100644 --- a/src/sec_certs/model/cc_matching.py +++ b/src/sec_certs/model/cc_matching.py @@ -1,7 +1,8 @@ from __future__ import annotations import contextlib -from typing import Any, Iterable, Mapping, Sequence +from collections.abc import Iterable, Mapping, Sequence +from typing import Any from sec_certs.configuration import config from sec_certs.model.matching import AbstractMatcher diff --git a/src/sec_certs/model/cpe_matching.py b/src/sec_certs/model/cpe_matching.py index c331a3b9..2d4d1609 100644 --- a/src/sec_certs/model/cpe_matching.py +++ b/src/sec_certs/model/cpe_matching.py @@ -4,7 +4,7 @@ import itertools import logging import operator import re -from typing import Pattern +from re import Pattern from rapidfuzz import fuzz diff --git a/src/sec_certs/model/fips_matching.py b/src/sec_certs/model/fips_matching.py index 50079611..9f0708f2 100644 --- a/src/sec_certs/model/fips_matching.py +++ b/src/sec_certs/model/fips_matching.py @@ -1,8 +1,8 @@ from __future__ import annotations import typing +from collections.abc import Iterable, Mapping, Sequence from datetime import date -from typing import Iterable, Mapping, Sequence from sec_certs.configuration import config from sec_certs.model.matching import AbstractMatcher diff --git a/src/sec_certs/model/matching.py b/src/sec_certs/model/matching.py index 9c0591f9..bf214e6f 100644 --- a/src/sec_certs/model/matching.py +++ b/src/sec_certs/model/matching.py @@ -1,8 +1,9 @@ from __future__ import annotations from abc import ABC, abstractmethod +from collections.abc import Sequence from heapq import heappop, heappush -from typing import Any, Generic, Sequence, TypeVar +from typing import Any, Generic, TypeVar from rapidfuzz import fuzz diff --git a/src/sec_certs/model/reference_finder.py b/src/sec_certs/model/reference_finder.py index 94a3b29f..873a51b2 100644 --- a/src/sec_certs/model/reference_finder.py +++ b/src/sec_certs/model/reference_finder.py @@ -1,18 +1,19 @@ from __future__ import annotations -from typing import Callable, Dict, List, Optional, Set, TypeVar +from collections.abc import Callable +from typing import TypeVar from sec_certs.sample.certificate import Certificate, References CertSubType = TypeVar("CertSubType", bound=Certificate) -Certificates = Dict[str, CertSubType] -ReferencedByDirect = Dict[str, Set[str]] -ReferencedByIndirect = Dict[str, Set[str]] -ReferencesType = Dict[str, Dict[str, Optional[Set[str]]]] -IDMapping = Dict[str, List[str]] -UnknownReferences = Dict[str, Set[str]] +Certificates = dict[str, CertSubType] +ReferencedByDirect = dict[str, set[str]] +ReferencedByIndirect = dict[str, set[str]] +ReferencesType = dict[str, dict[str, set[str] | None]] +IDMapping = dict[str, list[str]] +UnknownReferences = dict[str, set[str]] IDLookupFunc = Callable[[CertSubType], str] -ReferenceLookupFunc = Callable[[CertSubType], Set[str]] +ReferenceLookupFunc = Callable[[CertSubType], set[str]] # TODO: All of this can and should be rewritten on top of networkx or some other graph library. diff --git a/src/sec_certs/model/sar_transformer.py b/src/sec_certs/model/sar_transformer.py index a60f7495..394afa14 100644 --- a/src/sec_certs/model/sar_transformer.py +++ b/src/sec_certs/model/sar_transformer.py @@ -1,7 +1,8 @@ from __future__ import annotations import logging -from typing import Dict, Iterable, cast +from collections.abc import Iterable +from typing import cast from sec_certs.sample.cc import CCCertificate from sec_certs.sample.sar import SAR, SAR_DICT_KEY @@ -68,13 +69,13 @@ class SARTransformer: sec_level_sars = SARTransformer._parse_sars_from_security_level_list(cert.security_level) if st_keywords_may_have_sars(cert): - st_dict: dict = cast(Dict, cert.pdf_data.st_keywords) + st_dict: dict = cast(dict, cert.pdf_data.st_keywords) st_sars = SARTransformer._parse_sar_dict(st_dict[SAR_DICT_KEY], cert.dgst) else: st_sars = set() if report_keywords_may_have_sars(cert): - report_dict: dict = cast(Dict, cert.pdf_data.report_keywords) + report_dict: dict = cast(dict, cert.pdf_data.report_keywords) report_sars = SARTransformer._parse_sar_dict(report_dict[SAR_DICT_KEY], cert.dgst) else: report_sars = set() diff --git a/src/sec_certs/model/transitive_vulnerability_finder.py b/src/sec_certs/model/transitive_vulnerability_finder.py index 5eafea93..93c1496e 100644 --- a/src/sec_certs/model/transitive_vulnerability_finder.py +++ b/src/sec_certs/model/transitive_vulnerability_finder.py @@ -2,9 +2,10 @@ from __future__ import annotations import logging from collections import Counter +from collections.abc import Callable from dataclasses import dataclass, field from enum import Enum -from typing import Callable, Dict, Optional, Set, TypeVar +from typing import TypeVar from sec_certs.sample.certificate import Certificate, References from sec_certs.serialization.json import ComplexSerializableType @@ -25,8 +26,8 @@ class TransitiveCVEs(ComplexSerializableType): indirect_transitive_cves: set[str] | None = field(default=None) -Certificates = Dict[str, CertSubType] -Vulnerabilities = Dict[str, Dict[str, Optional[Set[str]]]] +Certificates = dict[str, CertSubType] +Vulnerabilities = dict[str, dict[str, set[str] | None]] class TransitiveVulnerabilityFinder: diff --git a/src/sec_certs/sample/cc_scheme.py b/src/sec_certs/sample/cc_scheme.py index bc0c0792..73946cf3 100644 --- a/src/sec_certs/sample/cc_scheme.py +++ b/src/sec_certs/sample/cc_scheme.py @@ -6,11 +6,12 @@ import hashlib import math import tempfile import warnings +from collections.abc import Callable, Iterable from dataclasses import dataclass from datetime import datetime from enum import Enum from pathlib import Path -from typing import Any, Callable, ClassVar, Iterable +from typing import Any, ClassVar from urllib.parse import urljoin import requests diff --git a/src/sec_certs/sample/fips.py b/src/sec_certs/sample/fips.py index e0bcb74a..8e9268cf 100644 --- a/src/sec_certs/sample/fips.py +++ b/src/sec_certs/sample/fips.py @@ -2,10 +2,11 @@ from __future__ import annotations import itertools import re +from collections.abc import Callable from dataclasses import dataclass, field from datetime import date from pathlib import Path -from typing import Any, Callable, ClassVar, Final, Literal +from typing import Any, ClassVar, Final, Literal import dateutil import numpy as np diff --git a/src/sec_certs/sample/fips_iut.py b/src/sec_certs/sample/fips_iut.py index a603a2c2..47fd8524 100644 --- a/src/sec_certs/sample/fips_iut.py +++ b/src/sec_certs/sample/fips_iut.py @@ -1,10 +1,10 @@ from __future__ import annotations +from collections.abc import Iterator, Mapping from dataclasses import dataclass from datetime import date, datetime from pathlib import Path from tempfile import NamedTemporaryFile -from typing import Iterator, Mapping import requests from bs4 import BeautifulSoup, Tag diff --git a/src/sec_certs/sample/fips_mip.py b/src/sec_certs/sample/fips_mip.py index 89c46d01..0720e520 100644 --- a/src/sec_certs/sample/fips_mip.py +++ b/src/sec_certs/sample/fips_mip.py @@ -1,13 +1,13 @@ from __future__ import annotations import logging +from collections.abc import Iterator, Mapping from dataclasses import dataclass from datetime import date, datetime from enum import Enum from functools import total_ordering from pathlib import Path from tempfile import NamedTemporaryFile -from typing import Iterator, Mapping import requests from bs4 import BeautifulSoup, Tag diff --git a/src/sec_certs/serialization/json.py b/src/sec_certs/serialization/json.py index 5add6edc..dad0ebb7 100644 --- a/src/sec_certs/serialization/json.py +++ b/src/sec_certs/serialization/json.py @@ -3,10 +3,11 @@ from __future__ import annotations import copy import gzip import json +from collections.abc import Callable from datetime import date, datetime from functools import wraps from pathlib import Path -from typing import Any, Callable, TypeVar +from typing import Any, TypeVar from sec_certs import constants diff --git a/src/sec_certs/utils/helpers.py b/src/sec_certs/utils/helpers.py index c103a2d3..c0440008 100644 --- a/src/sec_certs/utils/helpers.py +++ b/src/sec_certs/utils/helpers.py @@ -4,11 +4,12 @@ import hashlib import logging import re import time +from collections.abc import Collection from contextlib import nullcontext from datetime import datetime from functools import partial from pathlib import Path -from typing import Any, Collection +from typing import Any import numpy as np import pkgconfig diff --git a/src/sec_certs/utils/parallel_processing.py b/src/sec_certs/utils/parallel_processing.py index ae3f0b44..a30e080b 100644 --- a/src/sec_certs/utils/parallel_processing.py +++ b/src/sec_certs/utils/parallel_processing.py @@ -1,9 +1,10 @@ from __future__ import annotations import time +from collections.abc import Callable, Iterable from multiprocessing import cpu_count from multiprocessing.pool import Pool, ThreadPool -from typing import Any, Callable, Iterable +from typing import Any from sec_certs.configuration import config from sec_certs.utils.tqdm import tqdm diff --git a/src/sec_certs/utils/plot_utils.py b/src/sec_certs/utils/plot_utils.py index b9e7ac7c..eca79070 100644 --- a/src/sec_certs/utils/plot_utils.py +++ b/src/sec_certs/utils/plot_utils.py @@ -1,5 +1,3 @@ -from typing import Dict, List, Tuple - from networkx import DiGraph from pandas import DataFrame @@ -20,8 +18,8 @@ def get_cert_property(df: DataFrame, cert_id: int, column: str) -> str: def get_fips_cert_references_graph( - df: DataFrame, cert_id: int, colour_mapper: Dict[str, str] -) -> Tuple[DiGraph, List[str]]: + df: DataFrame, cert_id: int, colour_mapper: dict[str, str] +) -> tuple[DiGraph, list[str]]: if cert_id not in df["cert_id"].unique(): raise ValueError(f"Cert ID: {cert_id} is not in the dataset") @@ -45,7 +43,7 @@ def get_fips_cert_references_graph( return graph, colour_map -def get_most_referenced_cert_graph(df: DataFrame, status_colour_mapper: Dict[str, str]) -> Tuple[DiGraph, List[str]]: +def get_most_referenced_cert_graph(df: DataFrame, status_colour_mapper: dict[str, str]) -> tuple[DiGraph, list[str]]: graph = DiGraph() colour_map = [] max_referenced_by_num = df["incoming_direct_references_count"].max() @@ -66,7 +64,7 @@ def get_most_referenced_cert_graph(df: DataFrame, status_colour_mapper: Dict[str return graph, colour_map -def get_most_referencing_cert_graph(df: DataFrame, status_colour_mapper: Dict[str, str]) -> Tuple[DiGraph, List[str]]: +def get_most_referencing_cert_graph(df: DataFrame, status_colour_mapper: dict[str, str]) -> tuple[DiGraph, list[str]]: graph = DiGraph() colour_map = [] max_referencing_num = df["outgoing_direct_references_count"].max() diff --git a/src/sec_certs/utils/sanitization.py b/src/sec_certs/utils/sanitization.py index 3563e1f4..17e34362 100644 --- a/src/sec_certs/utils/sanitization.py +++ b/src/sec_certs/utils/sanitization.py @@ -28,7 +28,7 @@ def sanitize_date(record: pd.Timestamp | date | np.datetime64) -> date | None: return None if isinstance(record, pd.Timestamp): return record.date() - if isinstance(record, (date, type(None))): + if isinstance(record, date | type(None)): return record raise ValueError("Unsupported type given as input") diff --git a/tests/cc/conftest.py b/tests/cc/conftest.py index ad60037c..1f5050be 100644 --- a/tests/cc/conftest.py +++ b/tests/cc/conftest.py @@ -1,7 +1,7 @@ +from collections.abc import Generator from datetime import date from importlib import resources from pathlib import Path -from typing import Generator import pytest import tests.data.cc.dataset diff --git a/tests/cc/test_cc_analysis.py b/tests/cc/test_cc_analysis.py index 0b0edf7e..3984a72e 100644 --- a/tests/cc/test_cc_analysis.py +++ b/tests/cc/test_cc_analysis.py @@ -1,9 +1,9 @@ from __future__ import annotations import shutil +from collections.abc import Generator from importlib import resources from pathlib import Path -from typing import Generator import pytest import tests.data.cc.analysis diff --git a/tests/cc/test_cc_certificate.py b/tests/cc/test_cc_certificate.py index 772d859c..bdc10f32 100644 --- a/tests/cc/test_cc_certificate.py +++ b/tests/cc/test_cc_certificate.py @@ -1,8 +1,8 @@ import json import shutil +from collections.abc import Generator from importlib import resources from pathlib import Path -from typing import Generator import pytest import tests.data.cc.analysis diff --git a/tests/cc/test_cc_maintenance_updates.py b/tests/cc/test_cc_maintenance_updates.py index c89c9164..1144d3e0 100644 --- a/tests/cc/test_cc_maintenance_updates.py +++ b/tests/cc/test_cc_maintenance_updates.py @@ -1,7 +1,7 @@ import json +from collections.abc import Generator from importlib import resources from pathlib import Path -from typing import Generator import pytest import tests.data.cc.dataset diff --git a/tests/conftest.py b/tests/conftest.py index 1d8e2a09..ad1b45d2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ import json +from collections.abc import Generator from importlib import resources from pathlib import Path -from typing import Generator import pytest diff --git a/tests/fips/test_fips_certificate.py b/tests/fips/test_fips_certificate.py index 498c2328..8b326365 100644 --- a/tests/fips/test_fips_certificate.py +++ b/tests/fips/test_fips_certificate.py @@ -2,9 +2,9 @@ from __future__ import annotations import json import shutil +from collections.abc import Generator from importlib import resources from pathlib import Path -from typing import Generator import pytest import tests.data.fips.certificate diff --git a/tests/fips/test_fips_dataset.py b/tests/fips/test_fips_dataset.py index 43c4fdbd..9b18b754 100644 --- a/tests/fips/test_fips_dataset.py +++ b/tests/fips/test_fips_dataset.py @@ -2,10 +2,10 @@ from __future__ import annotations import json import shutil +from collections.abc import Generator from importlib import resources from pathlib import Path from tempfile import TemporaryDirectory -from typing import Generator import pytest import tests.data.fips.dataset diff --git a/tests/fips/test_fips_iut.py b/tests/fips/test_fips_iut.py index cef0b758..e3bfbc1c 100644 --- a/tests/fips/test_fips_iut.py +++ b/tests/fips/test_fips_iut.py @@ -1,9 +1,9 @@ from __future__ import annotations import datetime +from collections.abc import Generator from importlib import resources from pathlib import Path -from typing import Generator import pytest import tests.data.fips.iut diff --git a/tests/fips/test_fips_mip.py b/tests/fips/test_fips_mip.py index db3e7d8c..1f2d2d2f 100644 --- a/tests/fips/test_fips_mip.py +++ b/tests/fips/test_fips_mip.py @@ -1,9 +1,9 @@ from __future__ import annotations import datetime +from collections.abc import Generator from importlib import resources from pathlib import Path -from typing import Generator import pytest import tests.data.fips.mip diff --git a/tests/test_nvd_dataset_builder.py b/tests/test_nvd_dataset_builder.py index bc69cc3c..4868bfa7 100644 --- a/tests/test_nvd_dataset_builder.py +++ b/tests/test_nvd_dataset_builder.py @@ -1,6 +1,6 @@ from datetime import date, datetime, timedelta from importlib import resources -from typing import Any, Type +from typing import Any import pytest @@ -50,14 +50,14 @@ def test_cpe_match_download_from_seccerts(): ({"timestamp": datetime.fromtimestamp(0).isoformat(), "match_strings": {}}, CpeMatchNvdDatasetBuilder), ], ) -def test_build_dataset(default_dataset: Any, builder_class: Type[NvdDatasetBuilder]): +def test_build_dataset(default_dataset: Any, builder_class: type[NvdDatasetBuilder]): def get_update_timestamp_from_dataset(dset) -> datetime: - if isinstance(dset, (CPEDataset, CVEDataset)): + if isinstance(dset, CPEDataset | CVEDataset): return dset.last_update_timestamp return datetime.fromisoformat(dset["timestamp"]) def get_dataset_len(dset) -> int: - if isinstance(dset, (CPEDataset, CVEDataset)): + if isinstance(dset, CPEDataset | CVEDataset): return len(dset) return len(dset["match_strings"]) |
