Fixes #257
parent
a61344a8aa
commit
45d3020518
|
@ -183,8 +183,23 @@ def test_parse_bundle(version):
|
||||||
assert bundle.objects[0].type == 'indicator'
|
assert bundle.objects[0].type == 'indicator'
|
||||||
assert bundle.objects[1].type == 'malware'
|
assert bundle.objects[1].type == 'malware'
|
||||||
assert bundle.objects[2].type == 'relationship'
|
assert bundle.objects[2].type == 'relationship'
|
||||||
assert bundle.get_obj('malware--00000000-0000-4000-8000-000000000003').type == 'malware'
|
assert bundle['type'] == "bundle"
|
||||||
assert bundle.get_obj('blah blah') is None
|
assert len(bundle["indicator--00000000-0000-4000-8000-000000000001"]) == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_bundle_obj_id_not_found():
|
||||||
|
bundle = stix2.parse(EXPECTED_BUNDLE)
|
||||||
|
|
||||||
|
assert bundle.type == "bundle"
|
||||||
|
assert bundle.id.startswith("bundle--")
|
||||||
|
assert type(bundle.objects[0]) is stix2.v21.Indicator
|
||||||
|
assert bundle.objects[0].type == 'indicator'
|
||||||
|
assert bundle.objects[1].type == 'malware'
|
||||||
|
assert bundle.objects[2].type == 'relationship'
|
||||||
|
|
||||||
|
with pytest.raises(KeyError) as excinfo:
|
||||||
|
bundle.get_obj('blah blah')
|
||||||
|
assert "does not match the id property of any of the bundle" in str(excinfo.value)
|
||||||
|
|
||||||
|
|
||||||
def test_parse_unknown_type():
|
def test_parse_unknown_type():
|
||||||
|
|
|
@ -35,4 +35,16 @@ class Bundle(_STIXBase):
|
||||||
super(Bundle, self).__init__(**kwargs)
|
super(Bundle, self).__init__(**kwargs)
|
||||||
|
|
||||||
def get_obj(self, obj_uuid):
|
def get_obj(self, obj_uuid):
|
||||||
return next((elem for elem in self.objects if elem['id'] == obj_uuid), None)
|
found_objs = [elem for elem in self.objects if elem.id == obj_uuid]
|
||||||
|
if found_objs == []:
|
||||||
|
raise KeyError("'%s' does not match the id property of any of the bundle's objects" % obj_uuid)
|
||||||
|
return found_objs
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
try:
|
||||||
|
return super(Bundle, self).__getitem__(key)
|
||||||
|
except KeyError:
|
||||||
|
try:
|
||||||
|
return self.get_obj(key)
|
||||||
|
except KeyError:
|
||||||
|
raise KeyError("'%s' is neither a valid bundle property nor does it match the id property of any of the bundle's objects" % key)
|
||||||
|
|
Loading…
Reference in New Issue