mirror of https://github.com/MISP/PyTaxonomies
Bugfixes and improvements in the API
parent
140e3261ef
commit
d532997e3e
|
@ -52,7 +52,7 @@ class Predicate(collections.Mapping):
|
||||||
return iter(self.entries)
|
return iter(self.entries)
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self.entries)
|
return len(self.entries.keys())
|
||||||
|
|
||||||
|
|
||||||
class Taxonomy(collections.Mapping):
|
class Taxonomy(collections.Mapping):
|
||||||
|
@ -62,6 +62,7 @@ class Taxonomy(collections.Mapping):
|
||||||
self.name = self.taxonomy['namespace']
|
self.name = self.taxonomy['namespace']
|
||||||
self.description = self.taxonomy['description']
|
self.description = self.taxonomy['description']
|
||||||
self.version = self.taxonomy['version']
|
self.version = self.taxonomy['version']
|
||||||
|
self.expanded = self.taxonomy.get('expanded')
|
||||||
self.__init_predicates()
|
self.__init_predicates()
|
||||||
|
|
||||||
def __init_predicates(self):
|
def __init_predicates(self):
|
||||||
|
@ -76,9 +77,20 @@ class Taxonomy(collections.Mapping):
|
||||||
self.predicates[p['value']] = Predicate(p['value'], p.get('expanded'),
|
self.predicates[p['value']] = Predicate(p['value'], p.get('expanded'),
|
||||||
entries.get(p['value']))
|
entries.get(p['value']))
|
||||||
|
|
||||||
|
def has_entries(self):
|
||||||
|
if self.predicates.values() and list(self.predicates.values())[0].entries:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '\n'.join(self.machinetags())
|
return '\n'.join(self.machinetags())
|
||||||
|
|
||||||
|
def make_machinetag(self, predicate, entry=None):
|
||||||
|
if entry:
|
||||||
|
return '{}:{}="{}"'.format(self.name, predicate, entry)
|
||||||
|
else:
|
||||||
|
return '{}:{}'.format(self.name, predicate)
|
||||||
|
|
||||||
def machinetags(self):
|
def machinetags(self):
|
||||||
to_return = []
|
to_return = []
|
||||||
for p, content in self.predicates.items():
|
for p, content in self.predicates.items():
|
||||||
|
@ -99,7 +111,10 @@ class Taxonomy(collections.Mapping):
|
||||||
return len(self.predicates)
|
return len(self.predicates)
|
||||||
|
|
||||||
def amount_entries(self):
|
def amount_entries(self):
|
||||||
return sum([len(p) for p in self.predicates])
|
if self.has_entries():
|
||||||
|
return sum([len(e) for e in self.predicates.values()])
|
||||||
|
else:
|
||||||
|
return len(self.predicates.keys())
|
||||||
|
|
||||||
def machinetags_expanded(self):
|
def machinetags_expanded(self):
|
||||||
to_return = []
|
to_return = []
|
||||||
|
@ -150,6 +165,8 @@ class Taxonomies(collections.Mapping):
|
||||||
uri = self.__make_uri(t['name'])
|
uri = self.__make_uri(t['name'])
|
||||||
tax = self.loader(uri)
|
tax = self.loader(uri)
|
||||||
self.taxonomies[t['name']] = Taxonomy(tax)
|
self.taxonomies[t['name']] = Taxonomy(tax)
|
||||||
|
if t['name'] != self.taxonomies[t['name']].name:
|
||||||
|
raise Exception("The name of the taxonomy in the manifest ({}) doesn't match with the name in the taxonomy ({})".format(t['name'], self.taxonomies[t['name']].name))
|
||||||
|
|
||||||
def __getitem__(self, name):
|
def __getitem__(self, name):
|
||||||
return self.taxonomies[name]
|
return self.taxonomies[name]
|
||||||
|
@ -181,6 +198,17 @@ class Taxonomies(collections.Mapping):
|
||||||
to_return.append(mt)
|
to_return.append(mt)
|
||||||
return to_return
|
return to_return
|
||||||
|
|
||||||
|
def revert_machinetag(self, machinetag):
|
||||||
|
if '=' in machinetag:
|
||||||
|
name, predicat, entry = re.findall('^([^:]*):([^=]*)="([^"]*)"$', machinetag)[0]
|
||||||
|
else:
|
||||||
|
name, predicat = re.findall('^([^:]*):([^=]*)$', machinetag)[0]
|
||||||
|
entry = None
|
||||||
|
if entry:
|
||||||
|
return self.taxonomies[name], self.taxonomies[name][predicat], self.taxonomies[name][predicat][entry]
|
||||||
|
else:
|
||||||
|
return self.taxonomies[name], self.taxonomies[name][predicat]
|
||||||
|
|
||||||
def all_machinetags(self, expanded=False):
|
def all_machinetags(self, expanded=False):
|
||||||
if expanded:
|
if expanded:
|
||||||
return [taxonomy.machinetags_expanded() for taxonomy in self.taxonomies.values()]
|
return [taxonomy.machinetags_expanded() for taxonomy in self.taxonomies.values()]
|
||||||
|
|
Loading…
Reference in New Issue