diff options
| author | Adam Janovsky | 2023-02-03 10:06:29 +0100 |
|---|---|---|
| committer | Adam Janovsky | 2023-02-03 10:06:29 +0100 |
| commit | 5f89fa0437f345ba8aa67c62aa68d262005a1e00 (patch) | |
| tree | 6da9a8fd0043e09cb625e624ae5b9db071e6e9dd | |
| parent | 94bd822d6defb26afb7c06c729bba707f92222be (diff) | |
| download | sec-certs-5f89fa0437f345ba8aa67c62aa68d262005a1e00.tar.gz sec-certs-5f89fa0437f345ba8aa67c62aa68d262005a1e00.tar.zst sec-certs-5f89fa0437f345ba8aa67c62aa68d262005a1e00.zip | |
ruff enforce comprehensions
| -rw-r--r-- | .pre-commit-config.yaml | 2 | ||||
| -rw-r--r-- | pyproject.toml | 2 | ||||
| -rw-r--r-- | src/sec_certs/dataset/cc.py | 4 | ||||
| -rw-r--r-- | src/sec_certs/dataset/cpe.py | 10 | ||||
| -rw-r--r-- | src/sec_certs/dataset/cve.py | 8 | ||||
| -rw-r--r-- | src/sec_certs/dataset/dataset.py | 2 | ||||
| -rw-r--r-- | src/sec_certs/dataset/fips.py | 2 | ||||
| -rw-r--r-- | src/sec_certs/dataset/fips_algorithm.py | 6 | ||||
| -rw-r--r-- | src/sec_certs/model/cpe_matching.py | 4 | ||||
| -rw-r--r-- | src/sec_certs/model/sar_transformer.py | 2 | ||||
| -rw-r--r-- | src/sec_certs/model/transitive_vulnerability_finder.py | 2 | ||||
| -rw-r--r-- | src/sec_certs/sample/cc.py | 2 | ||||
| -rw-r--r-- | src/sec_certs/sample/fips.py | 8 | ||||
| -rw-r--r-- | src/sec_certs/sample/fips_iut.py | 2 | ||||
| -rw-r--r-- | src/sec_certs/sample/fips_mip.py | 6 | ||||
| -rw-r--r-- | src/sec_certs/sample/sar.py | 2 | ||||
| -rw-r--r-- | src/sec_certs/serialization/json.py | 4 | ||||
| -rw-r--r-- | src/sec_certs/utils/pandas.py | 2 | ||||
| -rw-r--r-- | src/sec_certs/utils/pdf.py | 2 | ||||
| -rw-r--r-- | tests/test_cpe.py | 2 |
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() |
