diff options
| author | GeogeFI | 2021-10-26 17:45:06 +0200 |
|---|---|---|
| committer | GeogeFI | 2021-10-26 17:45:06 +0200 |
| commit | 58a97e7c991a4920f3091b97dbae71acc2e4e8cb (patch) | |
| tree | 21dae2276f5c5200ca66853f8ba94f69dfc164ef | |
| parent | 4ba5dd70b02f42b2f38e1bf2f022e3c11f770be9 (diff) | |
| download | sec-certs-58a97e7c991a4920f3091b97dbae71acc2e4e8cb.tar.gz sec-certs-58a97e7c991a4920f3091b97dbae71acc2e4e8cb.tar.zst sec-certs-58a97e7c991a4920f3091b97dbae71acc2e4e8cb.zip | |
feat: implemented static methods for affecting certs
| -rw-r--r-- | sec_certs/dataset/common_criteria.py | 48 | ||||
| -rw-r--r-- | sec_certs/dataset/dataset.py | 3 |
2 files changed, 35 insertions, 16 deletions
diff --git a/sec_certs/dataset/common_criteria.py b/sec_certs/dataset/common_criteria.py index b37707c3..0ab60ec5 100644 --- a/sec_certs/dataset/common_criteria.py +++ b/sec_certs/dataset/common_criteria.py @@ -176,7 +176,8 @@ class CCDataset(Dataset, ComplexSerializableType): @classmethod def from_json(cls, input_path: Union[str, Path]): dset = super().from_json(input_path) - dset.set_local_paths() + # FIXME - throwing AttributeError + # dset.set_local_paths() return dset @classmethod @@ -625,32 +626,49 @@ class CCDataset(Dataset, ComplexSerializableType): self._compute_affected_ids() self._compute_affecting_ids() - def _get_affected_directly(self, cert, referenced_by_direct): - if cert in referenced_by_direct: - return referenced_by_direct[cert] - return None + @staticmethod + def _get_affected_directly(cert, referenced_by_direct): + return referenced_by_direct.get(cert, None) - def _get_affected_indirectly(self,cert, referenced_by_indirect): - if cert in referenced_by_indirect: - return referenced_by_indirect[cert] - return None + @staticmethod + def _get_affected_indirectly(cert, referenced_by_indirect): + return referenced_by_indirect.get(cert, None) def _compute_affected_ids(self): referenced_by_direct, referenced_by_indirect = build_cert_references(self.certs) for cert in self: - cert.heuristics.affected_direct = self._get_affected_directly(cert.pdf_data.cert_id, referenced_by_direct) - cert.heuristics.affected_indirect = self._get_affected_indirectly(cert.pdf_data.cert_id, referenced_by_indirect) + current_cert_id = cert.pdf_data.cert_id + cert.heuristics.affected_direct = CCDataset._get_affected_directly(current_cert_id, referenced_by_direct) + cert.heuristics.affected_indirect = CCDataset._get_affected_indirectly(current_cert_id, referenced_by_indirect) + + @staticmethod + def _get_affecting_directly(cert, referenced_by_direct) -> Set: + filter_direct = set() + + for cert_id in referenced_by_direct: + if cert in referenced_by_direct[cert_id]: + filter_direct.add(cert_id) + + return filter_direct + + @staticmethod + def _get_affecting_indirectly(cert, referenced_by_indirect) -> Set: + filter_indirect = set() + + for cert_id in referenced_by_indirect: + if cert in referenced_by_indirect[cert_id]: + filter_indirect.add(cert_id) - def _find_affecting_certs(self, cert) -> Set: - pass # TODO - continue here + return filter_indirect def _compute_affecting_ids(self): referenced_by_direct, referenced_by_indirect = build_cert_references(self.certs) for cert in self: - cert.heuristics.affecting_direct, \ - cert.heuristics.affecting_indirect = self._find_affecting_certs(cert) # TODO - add this field to to_pandas method + current_cert_id = cert.pdf_data.cert_id + cert.heuristics.affecting_direct = CCDataset._get_affecting_directly(current_cert_id, referenced_by_direct) + cert.heuristics.affecting_indirect = CCDataset._get_affecting_indirectly(current_cert_id, referenced_by_indirect) @serialize def analyze_certificates(self, fresh: bool = True): diff --git a/sec_certs/dataset/dataset.py b/sec_certs/dataset/dataset.py index bb4469b6..8d0f95b7 100644 --- a/sec_certs/dataset/dataset.py +++ b/sec_certs/dataset/dataset.py @@ -106,7 +106,8 @@ class Dataset(ABC): input_path = Path(input_path) with input_path.open('r') as handle: dset = json.load(handle, cls=CustomJSONDecoder) - dset.root_dir = input_path.parent.absolute() + # FIXME - throwing AttributeError + # dset.root_dir = input_path.parent.absolute() return dset @abstractmethod |
