|
1 | | -from abc import ABCMeta, abstractmethod |
2 | | -import os |
| 1 | +import json |
3 | 2 | from typing import Optional, List |
4 | 3 | import requests |
5 | 4 | from l9format import l9format |
@@ -52,7 +51,7 @@ def __get(self, url, params): |
52 | 51 | headers=self.headers, |
53 | 52 | ) |
54 | 53 | if r.status_code == 200: |
55 | | - response_json = r.json() or [] |
| 54 | + response_json = r.json() if r.content else [] |
56 | 55 | return SuccessResponse(response=r, response_json=response_json) |
57 | 56 | elif r.status_code == 429: |
58 | 57 | return RateLimitResponse(response=r) |
@@ -153,3 +152,32 @@ def get_plugins(self): |
153 | 152 | if r.is_success(): |
154 | 153 | r.response_json = [APIResult.from_dict(d) for d in r.json()] |
155 | 154 | return r |
| 155 | + |
| 156 | + def bulk_export(self, queries: Optional[List[Query]] = None): |
| 157 | + url = "%s/bulk/search" % (self.base_url) |
| 158 | + if queries is None or len(queries) == 0: |
| 159 | + serialized_query = EmptyQuery().serialize() |
| 160 | + else: |
| 161 | + serialized_query = [q.serialize() for q in queries] |
| 162 | + serialized_query = " ".join(serialized_query) |
| 163 | + serialized_query = "%s" % serialized_query |
| 164 | + params = {"q": serialized_query} |
| 165 | + r = requests.get( |
| 166 | + url, |
| 167 | + params=params, |
| 168 | + headers=self.headers, |
| 169 | + stream=True |
| 170 | + ) |
| 171 | + if r.status_code == 200: |
| 172 | + response_json = [] |
| 173 | + for line in r.iter_lines(): |
| 174 | + json_event = json.loads(line) |
| 175 | + response_json.append(l9format.L9Aggregation.from_dict(json_event)) |
| 176 | + return SuccessResponse(response=r, response_json=response_json) |
| 177 | + elif r.status_code == 429: |
| 178 | + return RateLimitResponse(response=r) |
| 179 | + elif r.status_code == 204: |
| 180 | + return ErrorResponse(response=r, response_json=[], status_code=200) |
| 181 | + else: |
| 182 | + return ErrorResponse(response=r, response_json=r.json()) |
| 183 | + return r |
0 commit comments