#!/usr/bin/env python from __future__ import annotations from typing import Any from .abstractgenerator import AbstractMISPObjectGenerator class GenericObjectGenerator(AbstractMISPObjectGenerator): # FIXME: this method is different from the master one, and that's probably not a good idea. def generate_attributes(self, attributes: list[dict[str, Any]]) -> None: # type: ignore[override] """Generates MISPObjectAttributes from a list of dictionaries. Each entry if the list must be in one of the two following formats: * {: } * {: {'value'=, 'type'=, ]} Note: Any missing parameter will default to the pre-defined value from the Object template. If the object template isn't known by PyMISP, you *must* pass a type key/value, or it will fail. Example: [{'analysis_submitted_at': '2018-06-15T06:40:27'}, {'threat_score': {value=95, to_ids=False}}, {'permalink': 'https://panacea.threatgrid.com/mask/samples/2e445ef5389d8b'}, {'heuristic_raw_score': 7.8385159793597}, {'heuristic_score': 96}, {'original_filename': 'juice.exe'}, {'id': '2e445ef5389d8b'}] """ for attribute in attributes: for object_relation, value in attribute.items(): if isinstance(value, dict): self.add_attribute(object_relation, **value) else: # In this case, we need a valid template, as all the other parameters will be pre-set. self.add_attribute(object_relation, value=value)