aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoradamjanovsky2023-11-14 14:53:41 +0100
committerGitHub2023-11-14 14:53:41 +0100
commitf0f7fa7e6784afefb945effbc9834209a673db47 (patch)
treebf1cd8f68a4b0b586ed9483fd0c39f7ed566a55d
parent1ccca9ae8afa8e6574e1cbba2c93b8d5428e2b2e (diff)
parentacfc35f1ced17a4c0918bd6e4e4e146e86552705 (diff)
downloadsec-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
-rw-r--r--.github/workflows/docs.yml2
-rw-r--r--.github/workflows/pre-commit.yml2
-rw-r--r--.github/workflows/release.yml2
-rw-r--r--.github/workflows/tests.yml2
-rw-r--r--Dockerfile5
-rw-r--r--docs/installation.md4
-rw-r--r--pyproject.toml6
-rw-r--r--src/sec_certs/cli.py2
-rw-r--r--src/sec_certs/dataset/cc.py3
-rw-r--r--src/sec_certs/dataset/cc_scheme.py2
-rw-r--r--src/sec_certs/dataset/cpe.py3
-rw-r--r--src/sec_certs/dataset/dataset.py3
-rw-r--r--src/sec_certs/dataset/fips_algorithm.py2
-rw-r--r--src/sec_certs/dataset/fips_iut.py2
-rw-r--r--src/sec_certs/dataset/fips_mip.py2
-rw-r--r--src/sec_certs/model/cc_matching.py3
-rw-r--r--src/sec_certs/model/cpe_matching.py2
-rw-r--r--src/sec_certs/model/fips_matching.py2
-rw-r--r--src/sec_certs/model/matching.py3
-rw-r--r--src/sec_certs/model/reference_finder.py17
-rw-r--r--src/sec_certs/model/sar_transformer.py7
-rw-r--r--src/sec_certs/model/transitive_vulnerability_finder.py7
-rw-r--r--src/sec_certs/sample/cc_scheme.py3
-rw-r--r--src/sec_certs/sample/fips.py3
-rw-r--r--src/sec_certs/sample/fips_iut.py2
-rw-r--r--src/sec_certs/sample/fips_mip.py2
-rw-r--r--src/sec_certs/serialization/json.py3
-rw-r--r--src/sec_certs/utils/helpers.py3
-rw-r--r--src/sec_certs/utils/parallel_processing.py3
-rw-r--r--src/sec_certs/utils/plot_utils.py10
-rw-r--r--src/sec_certs/utils/sanitization.py2
-rw-r--r--tests/cc/conftest.py2
-rw-r--r--tests/cc/test_cc_analysis.py2
-rw-r--r--tests/cc/test_cc_certificate.py2
-rw-r--r--tests/cc/test_cc_maintenance_updates.py2
-rw-r--r--tests/conftest.py2
-rw-r--r--tests/fips/test_fips_certificate.py2
-rw-r--r--tests/fips/test_fips_dataset.py2
-rw-r--r--tests/fips/test_fips_iut.py2
-rw-r--r--tests/fips/test_fips_mip.py2
-rw-r--r--tests/test_nvd_dataset_builder.py8
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
diff --git a/Dockerfile b/Dockerfile
index af77e994..acd47372 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -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"])