mirror of https://github.com/MISP/PyMISP
new: Enable async option for search()
parent
d2b0c506a4
commit
e5f9c0b704
|
@ -776,7 +776,7 @@ class PyMISP(object):
|
||||||
# ######## REST Search #########
|
# ######## REST Search #########
|
||||||
# ##############################
|
# ##############################
|
||||||
|
|
||||||
def __query(self, session, path, query, controller='events'):
|
def __query(self, session, path, query, controller='events', async_callback=None):
|
||||||
if query.get('error') is not None:
|
if query.get('error') is not None:
|
||||||
return query
|
return query
|
||||||
if controller not in ['events', 'attributes']:
|
if controller not in ['events', 'attributes']:
|
||||||
|
@ -785,8 +785,12 @@ class PyMISP(object):
|
||||||
if self.debug:
|
if self.debug:
|
||||||
print('URL: ', url)
|
print('URL: ', url)
|
||||||
print('Query: ', query)
|
print('Query: ', query)
|
||||||
response = session.post(url, data=json.dumps(query))
|
|
||||||
return self._check_response(response)
|
if isinstance(session, FuturesSession) and async_callback:
|
||||||
|
response = session.post(url, data=json.dumps(query), background_callback=async_callback)
|
||||||
|
else:
|
||||||
|
response = session.post(url, data=json.dumps(query))
|
||||||
|
return self._check_response(response)
|
||||||
|
|
||||||
def search_index(self, published=None, eventid=None, tag=None, datefrom=None,
|
def search_index(self, published=None, eventid=None, tag=None, datefrom=None,
|
||||||
dateuntil=None, eventinfo=None, threatlevel=None, distribution=None,
|
dateuntil=None, eventinfo=None, threatlevel=None, distribution=None,
|
||||||
|
@ -831,14 +835,11 @@ class PyMISP(object):
|
||||||
if not set(param).issubset(rule_levels[rule]):
|
if not set(param).issubset(rule_levels[rule]):
|
||||||
raise SearchError('Values in your {} are invalid, has to be in {}'.format(rule, ', '.join(str(x) for x in rule_levels[rule])))
|
raise SearchError('Values in your {} are invalid, has to be in {}'.format(rule, ', '.join(str(x) for x in rule_levels[rule])))
|
||||||
to_post[rule] = '|'.join(str(x) for x in param)
|
to_post[rule] = '|'.join(str(x) for x in param)
|
||||||
session = self.__prepare_session(async_implemented=True)
|
session = self.__prepare_session(async_implemented=(async_callback!=None))
|
||||||
url = urljoin(self.root_url, buildup_url)
|
url = urljoin(self.root_url, buildup_url)
|
||||||
|
|
||||||
if self.asynch:
|
if self.asynch and async_callback:
|
||||||
if not async_callback:
|
|
||||||
warnings.warn("You haven't provided a callback!")
|
|
||||||
response = session.post(url, data=json.dumps(to_post), background_callback=async_callback)
|
response = session.post(url, data=json.dumps(to_post), background_callback=async_callback)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
response = session.post(url, data=json.dumps(to_post))
|
response = session.post(url, data=json.dumps(to_post))
|
||||||
res = self._check_response(response)
|
res = self._check_response(response)
|
||||||
|
@ -878,7 +879,7 @@ class PyMISP(object):
|
||||||
to_return += '&&!'.join(not_values)
|
to_return += '&&!'.join(not_values)
|
||||||
return to_return
|
return to_return
|
||||||
|
|
||||||
def search(self, controller='events', **kwargs):
|
def search(self, controller='events', async_callback=None, **kwargs):
|
||||||
"""Search via the Rest API
|
"""Search via the Rest API
|
||||||
|
|
||||||
:param values: values to search for
|
:param values: values to search for
|
||||||
|
@ -902,6 +903,7 @@ class PyMISP(object):
|
||||||
:param published: return only published events
|
:param published: return only published events
|
||||||
:param to_ids: return only the attributes with the to_ids flag set
|
:param to_ids: return only the attributes with the to_ids flag set
|
||||||
:param deleted: also return the deleted attributes
|
:param deleted: also return the deleted attributes
|
||||||
|
:param async_callback: The function to run when results are returned
|
||||||
"""
|
"""
|
||||||
# Event: array('value', 'type', 'category', 'org', 'tags', 'from', 'to', 'last', 'eventid', 'withAttachments', 'uuid', 'publish_timestamp', 'timestamp', 'enforceWarninglist', 'searchall', 'metadata', 'published');
|
# Event: array('value', 'type', 'category', 'org', 'tags', 'from', 'to', 'last', 'eventid', 'withAttachments', 'uuid', 'publish_timestamp', 'timestamp', 'enforceWarninglist', 'searchall', 'metadata', 'published');
|
||||||
# Attribute: array('value', 'type', 'category', 'org', 'tags', 'from', 'to', 'last', 'eventid', 'withAttachments', 'uuid', 'publish_timestamp', 'timestamp', 'enforceWarninglist', 'to_ids', 'deleted');
|
# Attribute: array('value', 'type', 'category', 'org', 'tags', 'from', 'to', 'last', 'eventid', 'withAttachments', 'uuid', 'publish_timestamp', 'timestamp', 'enforceWarninglist', 'to_ids', 'deleted');
|
||||||
|
@ -976,8 +978,9 @@ class PyMISP(object):
|
||||||
if kwargs.get('published') is not None:
|
if kwargs.get('published') is not None:
|
||||||
query['published'] = kwargs.get('published')
|
query['published'] = kwargs.get('published')
|
||||||
|
|
||||||
session = self.__prepare_session()
|
# Create a session, make it async if and only if we have a callback
|
||||||
return self.__query(session, 'restSearch/download', query, controller)
|
session = self.__prepare_session(async_implemented=(async_callback!=None))
|
||||||
|
return self.__query(session, 'restSearch/download', query, controller, async_callback)
|
||||||
|
|
||||||
def get_attachment(self, event_id):
|
def get_attachment(self, event_id):
|
||||||
"""Get attachement of an event (not sample)
|
"""Get attachement of an event (not sample)
|
||||||
|
|
Loading…
Reference in New Issue