aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam Janovsky2023-02-03 10:06:29 +0100
committerAdam Janovsky2023-02-03 10:06:29 +0100
commit5f89fa0437f345ba8aa67c62aa68d262005a1e00 (patch)
tree6da9a8fd0043e09cb625e624ae5b9db071e6e9dd
parent94bd822d6defb26afb7c06c729bba707f92222be (diff)
downloadsec-certs-5f89fa0437f345ba8aa67c62aa68d262005a1e00.tar.gz
sec-certs-5f89fa0437f345ba8aa67c62aa68d262005a1e00.tar.zst
sec-certs-5f89fa0437f345ba8aa67c62aa68d262005a1e00.zip
ruff enforce comprehensions
-rw-r--r--.pre-commit-config.yaml2
-rw-r--r--pyproject.toml2
-rw-r--r--src/sec_certs/dataset/cc.py4
-rw-r--r--src/sec_certs/dataset/cpe.py10
-rw-r--r--src/sec_certs/dataset/cve.py8
-rw-r--r--src/sec_certs/dataset/dataset.py2
-rw-r--r--src/sec_certs/dataset/fips.py2
-rw-r--r--src/sec_certs/dataset/fips_algorithm.py6
-rw-r--r--src/sec_certs/model/cpe_matching.py4
-rw-r--r--src/sec_certs/model/sar_transformer.py2
-rw-r--r--src/sec_certs/model/transitive_vulnerability_finder.py2
-rw-r--r--src/sec_certs/sample/cc.py2
-rw-r--r--src/sec_certs/sample/fips.py8
-rw-r--r--src/sec_certs/sample/fips_iut.py2
-rw-r--r--src/sec_certs/sample/fips_mip.py6
-rw-r--r--src/sec_certs/sample/sar.py2
-rw-r--r--src/sec_certs/serialization/json.py4
-rw-r--r--src/sec_certs/utils/pandas.py2
-rw-r--r--src/sec_certs/utils/pdf.py2
-rw-r--r--tests/test_cpe.py2
20 files changed, 37 insertions, 37 deletions
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index e4936ff6..391cd6c6 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -6,7 +6,7 @@ repos:
args: ["--check", "--target-version", "py38"]
- repo: https://github.com/charliermarsh/ruff-pre-commit
# Ruff version.
- rev: "v0.0.236"
+ rev: "v0.0.239"
hooks:
- id: ruff
- repo: https://github.com/pre-commit/mirrors-mypy
diff --git a/pyproject.toml b/pyproject.toml
index 2e4e0c10..d77c8b75 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -101,10 +101,12 @@
"UP", # pyupgrade
"PL", # pylint
"PTH", # enforce pathlib usage
+ "C4", # comprehensions
]
ignore = [
"E501", # line-length, should be handled by black
"PLR2004", # magic numbers, what would a project be without them...
+ "PLR0913", # too many func arguments
]
src = ["src", "tests"]
line-length = 120
diff --git a/src/sec_certs/dataset/cc.py b/src/sec_certs/dataset/cc.py
index bb8ccc4d..7e2450ba 100644
--- a/src/sec_certs/dataset/cc.py
+++ b/src/sec_certs/dataset/cc.py
@@ -52,7 +52,7 @@ class CCDataset(Dataset[CCCertificate, CCAuxillaryDatasets], ComplexSerializable
def __init__(
self,
- certs: dict[str, CCCertificate] = dict(),
+ certs: dict[str, CCCertificate] = {},
root_dir: str | Path = constants.DUMMY_NONEXISTING_PATH,
name: str | None = None,
description: str = "",
@@ -819,7 +819,7 @@ class CCDatasetMaintenanceUpdates(CCDataset, ComplexSerializableType):
# Quite difficult to achieve correct behaviour with MyPy here, opting for ignore
def __init__(
self,
- certs: dict[str, CCMaintenanceUpdate] = dict(), # type: ignore
+ certs: dict[str, CCMaintenanceUpdate] = {}, # type: ignore
root_dir: Path = constants.DUMMY_NONEXISTING_PATH,
name: str = "dataset name",
description: str = "dataset_description",
diff --git a/src/sec_certs/dataset/cpe.py b/src/sec_certs/dataset/cpe.py
index 927ce674..e9525847 100644
--- a/src/sec_certs/dataset/cpe.py
+++ b/src/sec_certs/dataset/cpe.py
@@ -40,9 +40,9 @@ class CPEDataset(JSONPathDataset, ComplexSerializableType):
self.cpes = cpes
self.json_path = Path(json_path)
- self.vendor_to_versions: dict[str, set[str]] = dict()
- self.vendor_version_to_cpe: dict[tuple[str, str], set[CPE]] = dict()
- self.title_to_cpes: dict[str, set[CPE]] = dict()
+ self.vendor_to_versions: dict[str, set[str]] = {}
+ self.vendor_version_to_cpe: dict[tuple[str, str], set[CPE]] = {}
+ self.title_to_cpes: dict[str, set[CPE]] = {}
self.vendors: set[str] = set()
self.build_lookup_dicts()
@@ -77,8 +77,8 @@ class CPEDataset(JSONPathDataset, ComplexSerializableType):
"""
logger.info("CPE dataset: building lookup dictionaries.")
self.vendor_to_versions = {x.vendor: set() for x in self}
- self.vendor_version_to_cpe = dict()
- self.title_to_cpes = dict()
+ self.vendor_version_to_cpe = {}
+ self.title_to_cpes = {}
self.vendors = set(self.vendor_to_versions.keys())
for cpe in self:
self.vendor_to_versions[cpe.vendor].add(cpe.version)
diff --git a/src/sec_certs/dataset/cve.py b/src/sec_certs/dataset/cve.py
index 4863ffd2..60438e0b 100644
--- a/src/sec_certs/dataset/cve.py
+++ b/src/sec_certs/dataset/cve.py
@@ -33,7 +33,7 @@ class CVEDataset(JSONPathDataset, ComplexSerializableType):
def __init__(self, cves: dict[str, CVE], json_path: str | Path = constants.DUMMY_NONEXISTING_PATH):
self.cves = cves
self.json_path = Path(json_path)
- self.cpe_to_cve_ids_lookup: dict[str, set[str]] = dict()
+ self.cpe_to_cve_ids_lookup: dict[str, set[str]] = {}
@property
def serialized_attributes(self) -> list[str]:
@@ -64,7 +64,7 @@ class CVEDataset(JSONPathDataset, ComplexSerializableType):
- CPE(uri='cpe:2.3:a:bayashi:dopvcomet\\*:0009:b:*:*:*:*:*:*', title=None, version='0009', vendor='bayashi', item_name='dopvcomet\\*', start_version=None, end_version=None)
- CPE(uri='cpe:2.3:a:bayashi:dopvstar\\*:0091:*:*:*:*:*:*:*', title=None, version='0091', vendor='bayashi', item_name='dopvstar\\*', start_version=None, end_version=None)
"""
- self.cpe_to_cve_ids_lookup = dict()
+ self.cpe_to_cve_ids_lookup = {}
self.cves = {x.cve_id.upper(): x for x in self}
logger.info("Getting CPE matching dictionary from NIST.gov")
@@ -124,7 +124,7 @@ class CVEDataset(JSONPathDataset, ComplexSerializableType):
cls.download_cves(tmp_dir, start_year, end_year)
json_files = glob.glob(tmp_dir + "/*.json")
- all_cves = dict()
+ all_cves = {}
logger.info("Downloaded required resources. Building CVEDataset from jsons.")
results = process_parallel(
cls.from_nist_json,
@@ -210,7 +210,7 @@ class CVEDataset(JSONPathDataset, ComplexSerializableType):
with input_filepath.open("r") as handle:
match_data = json.load(handle)
- mapping_dict = dict()
+ mapping_dict = {}
for match in tqdm(match_data["matches"], desc="parsing cpe matching (by NIST) dictionary"):
key = parse_key_cpe(match)
value = parse_values_cpe(match)
diff --git a/src/sec_certs/dataset/dataset.py b/src/sec_certs/dataset/dataset.py
index 3d106486..726cd681 100644
--- a/src/sec_certs/dataset/dataset.py
+++ b/src/sec_certs/dataset/dataset.py
@@ -58,7 +58,7 @@ class Dataset(Generic[CertSubType, AuxillaryDatasetsSubType], ComplexSerializabl
def __init__(
self,
- certs: dict[str, CertSubType] = dict(),
+ certs: dict[str, CertSubType] = {},
root_dir: str | Path = constants.DUMMY_NONEXISTING_PATH,
name: str | None = None,
description: str = "",
diff --git a/src/sec_certs/dataset/fips.py b/src/sec_certs/dataset/fips.py
index 14bcfcf1..c051cce8 100644
--- a/src/sec_certs/dataset/fips.py
+++ b/src/sec_certs/dataset/fips.py
@@ -41,7 +41,7 @@ class FIPSDataset(Dataset[FIPSCertificate, FIPSAuxillaryDatasets], ComplexSerial
def __init__(
self,
- certs: dict[str, FIPSCertificate] = dict(),
+ certs: dict[str, FIPSCertificate] = {},
root_dir: str | Path = constants.DUMMY_NONEXISTING_PATH,
name: str | None = None,
description: str = "",
diff --git a/src/sec_certs/dataset/fips_algorithm.py b/src/sec_certs/dataset/fips_algorithm.py
index c48cff07..f4826dd2 100644
--- a/src/sec_certs/dataset/fips_algorithm.py
+++ b/src/sec_certs/dataset/fips_algorithm.py
@@ -20,12 +20,10 @@ logger = logging.getLogger(__name__)
class FIPSAlgorithmDataset(JSONPathDataset, ComplexSerializableType):
- def __init__(
- self, algs: dict[str, FIPSAlgorithm] = dict(), json_path: str | Path = constants.DUMMY_NONEXISTING_PATH
- ):
+ def __init__(self, algs: dict[str, FIPSAlgorithm] = {}, json_path: str | Path = constants.DUMMY_NONEXISTING_PATH):
self.algs = algs
self.json_path = Path(json_path)
- self.alg_number_to_algs: dict[str, set[FIPSAlgorithm]] = dict()
+ self.alg_number_to_algs: dict[str, set[FIPSAlgorithm]] = {}
self._build_lookup_dicts()
diff --git a/src/sec_certs/model/cpe_matching.py b/src/sec_certs/model/cpe_matching.py
index 0febea5d..35bb5d7e 100644
--- a/src/sec_certs/model/cpe_matching.py
+++ b/src/sec_certs/model/cpe_matching.py
@@ -66,7 +66,7 @@ class CPEClassifier(BaseEstimator):
sufficiently_long_cpes = self._filter_short_cpes(X)
self.vendor_to_versions_ = {x.vendor: set() for x in sufficiently_long_cpes}
self.vendors_ = set(self.vendor_to_versions_.keys())
- self.vendor_version_to_cpe_ = dict()
+ self.vendor_version_to_cpe_ = {}
for cpe in tqdm(sufficiently_long_cpes, desc="Fitting the CPE classifier"):
self.vendor_to_versions_[cpe.vendor].add(cpe.version)
@@ -323,7 +323,7 @@ class CPEClassifier(BaseEstimator):
itertools.chain.from_iterable([x.strip() for x in manufacturer.split(s)] for s in splits)
)
result_aux = [self._get_candidate_list_of_vendors(x) for x in vendor_tokens]
- result_used = set(set(itertools.chain.from_iterable(x for x in result_aux if x)))
+ result_used = set(itertools.chain.from_iterable(x for x in result_aux if x))
return result_used if result_used else set()
if manufacturer in self.vendors_:
diff --git a/src/sec_certs/model/sar_transformer.py b/src/sec_certs/model/sar_transformer.py
index 45c4f7d5..20ce9dec 100644
--- a/src/sec_certs/model/sar_transformer.py
+++ b/src/sec_certs/model/sar_transformer.py
@@ -128,7 +128,7 @@ class SARTransformer(BaseEstimator, TransformerMixin):
:param dgst: DIgest of the processed certificate.
:return: _description_
"""
- sars: dict[str, tuple[SAR, int]] = dict()
+ sars: dict[str, tuple[SAR, int]] = {}
for sar_class, class_matches in dct.items():
for sar_string, n_occurences in class_matches.items():
try:
diff --git a/src/sec_certs/model/transitive_vulnerability_finder.py b/src/sec_certs/model/transitive_vulnerability_finder.py
index 1d4c8243..6ae6fa0b 100644
--- a/src/sec_certs/model/transitive_vulnerability_finder.py
+++ b/src/sec_certs/model/transitive_vulnerability_finder.py
@@ -98,7 +98,7 @@ class TransitiveVulnerabilityFinder:
thrown_away_cert_counter += 1
continue
- self.vulnerabilities[cert.dgst] = dict()
+ self.vulnerabilities[cert.dgst] = {}
self.vulnerabilities[cert.dgst][ReferenceType.DIRECT.value] = self._get_cert_transitive_cves(
cert, ReferenceType.DIRECT, ref_func
)
diff --git a/src/sec_certs/sample/cc.py b/src/sec_certs/sample/cc.py
index b7e97408..1441a7b4 100644
--- a/src/sec_certs/sample/cc.py
+++ b/src/sec_certs/sample/cc.py
@@ -506,7 +506,7 @@ class CCCertificate(
Computes actual SARs. First, SARs implied by EAL are computed. Then, these are augmented with heuristically extracted SARs
:return Optional[Set[SAR]]: Set of actual SARs of a certificate, None if empty
"""
- sars = dict()
+ sars = {}
if self.eal:
sars = {x[0]: SAR(x[0], x[1]) for x in SARS_IMPLIED_FROM_EAL[self.eal[:4]]}
diff --git a/src/sec_certs/sample/fips.py b/src/sec_certs/sample/fips.py
index 9988d629..435c9315 100644
--- a/src/sec_certs/sample/fips.py
+++ b/src/sec_certs/sample/fips.py
@@ -126,7 +126,7 @@ class FIPSHTMLParser:
@staticmethod
def parse_algorithms(algorithms_div: Tag) -> dict[str, set[str]]:
rows = algorithms_div.find("tbody").find_all("tr")
- dct: dict[str, set[str]] = dict()
+ dct: dict[str, set[str]] = {}
for row in rows:
cells = row.find_all("td")
dct[cells[0].text] = {m.group() for m in re.finditer(FIPS_ALGS_IN_TABLE, cells[1].text)}
@@ -384,7 +384,7 @@ class FIPSCertificate(
def certlike_algorithm_numbers(self) -> set[str]:
"""Returns numbers of certificates from keywords["fips_certlike"]["Certlike"]"""
if self.keywords and "fips_certlike" in self.keywords:
- fips_certlike = self.keywords["fips_certlike"].get("Certlike", dict())
+ fips_certlike = self.keywords["fips_certlike"].get("Certlike", {})
matches = {re.search(r"#\s{0,1}\d{1,4}", x) for x in fips_certlike.keys()}
return {"".join([x for x in match.group() if x.isdigit()]) for match in matches if match}
else:
@@ -563,7 +563,7 @@ class FIPSCertificate(
if metadata:
cert.pdf_data.policy_metadata = metadata
else:
- cert.pdf_data.policy_metadata = dict()
+ cert.pdf_data.policy_metadata = {}
cert.state.policy_extract_ok = False
return cert
@@ -611,7 +611,7 @@ class FIPSCertificate(
self.heuristics.module_prunned_references = self._prune_reference_ids_variable(html_module_ids)
if self.pdf_data.keywords:
- pdf_policy_ids = set(self.pdf_data.keywords["fips_cert_id"].get("Cert", dict()).keys())
+ pdf_policy_ids = set(self.pdf_data.keywords["fips_cert_id"].get("Cert", {}).keys())
pdf_policy_ids = {"".join([y for y in x if y.isdigit()]) for x in pdf_policy_ids}
else:
pdf_policy_ids = set()
diff --git a/src/sec_certs/sample/fips_iut.py b/src/sec_certs/sample/fips_iut.py
index 968ee3fc..f6010346 100644
--- a/src/sec_certs/sample/fips_iut.py
+++ b/src/sec_certs/sample/fips_iut.py
@@ -101,7 +101,7 @@ class IUTSnapshot(ComplexSerializableType):
str(line[2].string),
datetime.strptime(str(line[3].string), "%m/%d/%Y").date(),
)
- for line in map(lambda tr: tr.find_all("td"), lines)
+ for line in (tr.find_all("td") for tr in lines)
}
# Parse footer
diff --git a/src/sec_certs/sample/fips_mip.py b/src/sec_certs/sample/fips_mip.py
index 6918d2aa..7debec65 100644
--- a/src/sec_certs/sample/fips_mip.py
+++ b/src/sec_certs/sample/fips_mip.py
@@ -114,7 +114,7 @@ class MIPSnapshot(ComplexSerializableType):
MIPEntry(
str(line[0].string), str(line[1].string), str(line[2].string), MIPStatus(str(line[3].string)), None
)
- for line in map(lambda tr: tr.find_all("td"), lines)
+ for line in (tr.find_all("td") for tr in lines)
}
@classmethod
@@ -128,14 +128,14 @@ class MIPSnapshot(ComplexSerializableType):
MIPStatus(str(line[3].string)),
None,
)
- for line in map(lambda tr: tr.find_all("td"), lines)
+ for line in (tr.find_all("td") for tr in lines)
}
@classmethod
def _extract_entries_4(cls, lines):
"""Works now."""
entries = set()
- for line in map(lambda tr: tr.find_all("td"), lines):
+ for line in (tr.find_all("td") for tr in lines):
module_name = str(line[0].string)
vendor_name = str(" ".join(line[1].find_all(text=True, recursive=False)).strip())
standard = str(line[2].string)
diff --git a/src/sec_certs/sample/sar.py b/src/sec_certs/sample/sar.py
index 31359299..8f48f417 100644
--- a/src/sec_certs/sample/sar.py
+++ b/src/sec_certs/sample/sar.py
@@ -18,7 +18,7 @@ SAR_CLASS_MAPPING = {
"ACO": "Comoposition",
}
-SAR_CLASSES = {x for x in SAR_CLASS_MAPPING}
+SAR_CLASSES = set(SAR_CLASS_MAPPING)
SAR_DICT_KEY = "cc_sar"
diff --git a/src/sec_certs/serialization/json.py b/src/sec_certs/serialization/json.py
index 69bbc2ff..c8c0f83d 100644
--- a/src/sec_certs/serialization/json.py
+++ b/src/sec_certs/serialization/json.py
@@ -112,9 +112,9 @@ class CustomJSONEncoder(json.JSONEncoder):
if isinstance(obj, dict):
return obj
if isinstance(obj, set):
- return {"_type": "Set", "elements": sorted(list(obj))}
+ return {"_type": "Set", "elements": sorted(obj)}
if isinstance(obj, frozenset):
- return sorted(list(obj))
+ return sorted(obj)
if isinstance(obj, date):
return str(obj)
if isinstance(obj, Path):
diff --git a/src/sec_certs/utils/pandas.py b/src/sec_certs/utils/pandas.py
index 97068e77..b8a6bef7 100644
--- a/src/sec_certs/utils/pandas.py
+++ b/src/sec_certs/utils/pandas.py
@@ -140,7 +140,7 @@ def get_sar_level_from_set(sars: set[SAR], sar_family: str) -> int | None:
"""
Given a set of SARs and a family name, will return level of the seeked SAR from the set.
"""
- family_sars_dict = {x.family: x for x in sars} if (sars and not pd.isnull(sars)) else dict()
+ family_sars_dict = {x.family: x for x in sars} if (sars and not pd.isnull(sars)) else {}
if sar_family not in family_sars_dict.keys():
return None
return family_sars_dict[sar_family].level
diff --git a/src/sec_certs/utils/pdf.py b/src/sec_certs/utils/pdf.py
index ea2487b0..1c5ff684 100644
--- a/src/sec_certs/utils/pdf.py
+++ b/src/sec_certs/utils/pdf.py
@@ -186,7 +186,7 @@ def extract_pdf_metadata(filepath: Path) -> tuple[str, dict[str, Any] | None]:
else:
return val
- metadata: dict[str, Any] = dict()
+ metadata: dict[str, Any] = {}
try:
metadata["pdf_file_size_bytes"] = filepath.stat().st_size
diff --git a/tests/test_cpe.py b/tests/test_cpe.py
index 26d0cbf3..ab2f4cba 100644
--- a/tests/test_cpe.py
+++ b/tests/test_cpe.py
@@ -135,6 +135,6 @@ def test_to_pandas(cpe_dset: CPEDataset):
def test_serialization_missing_path():
- dummy_dset = CPEDataset(False, dict())
+ dummy_dset = CPEDataset(False, {})
with pytest.raises(SerializationError):
dummy_dset.to_json()