aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGeogeFI2021-10-26 17:45:06 +0200
committerGeogeFI2021-10-26 17:45:06 +0200
commit58a97e7c991a4920f3091b97dbae71acc2e4e8cb (patch)
tree21dae2276f5c5200ca66853f8ba94f69dfc164ef
parent4ba5dd70b02f42b2f38e1bf2f022e3c11f770be9 (diff)
downloadsec-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.py48
-rw-r--r--sec_certs/dataset/dataset.py3
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