Skip to content

Commit 7c8ca1a

Browse files
committed
Feat: Add serialize_queries helper and widen Query to AbstractQuery
1 parent 7585abb commit 7c8ca1a

2 files changed

Lines changed: 21 additions & 21 deletions

File tree

leakix/client.py

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from leakix.base import BaseClient
99
from leakix.base import HostResult as HostResult
10-
from leakix.query import EmptyQuery, Query
10+
from leakix.query import AbstractQuery, serialize_queries
1111
from leakix.response import (
1212
AbstractResponse,
1313
ErrorResponse,
@@ -41,7 +41,7 @@ def __get(self, url: str, params: dict[str, Any] | None) -> AbstractResponse:
4141
def get(
4242
self,
4343
scope: Scope,
44-
queries: list[Query] | None = None,
44+
queries: list[AbstractQuery] | None = None,
4545
page: int = 0,
4646
) -> AbstractResponse:
4747
"""
@@ -68,10 +68,7 @@ def get(
6868
"""
6969
if page < 0:
7070
raise ValueError("Page argument must be a positive integer")
71-
if queries is None or len(queries) == 0:
72-
serialized_query = EmptyQuery().serialize()
73-
else:
74-
serialized_query = " ".join(q.serialize() for q in queries)
71+
serialized_query = serialize_queries(queries)
7572
url = f"{self.base_url}/search"
7673
return self.__get(
7774
url=url,
@@ -83,13 +80,13 @@ def get(
8380
)
8481

8582
def get_service(
86-
self, queries: list[Query] | None = None, page: int = 0
83+
self, queries: list[AbstractQuery] | None = None, page: int = 0
8784
) -> AbstractResponse:
8885
"""Shortcut for `get` with the scope `Scope.SERVICE`."""
8986
return self._parse_events(self.get(Scope.SERVICE, queries=queries, page=page))
9087

9188
def get_leak(
92-
self, queries: list[Query] | None = None, page: int = 0
89+
self, queries: list[AbstractQuery] | None = None, page: int = 0
9390
) -> AbstractResponse:
9491
"""Shortcut for `get` with the scope `Scope.LEAK`."""
9592
return self._parse_events(self.get(Scope.LEAK, queries=queries, page=page))
@@ -124,13 +121,11 @@ def get_subdomains(self, domain: str) -> AbstractResponse:
124121
url = f"{self.base_url}/api/subdomains/{domain}"
125122
return self._parse_subdomains(self.__get(url, params=None))
126123

127-
def bulk_export(self, queries: list[Query] | None = None) -> AbstractResponse:
124+
def bulk_export(
125+
self, queries: list[AbstractQuery] | None = None
126+
) -> AbstractResponse:
128127
url = f"{self.base_url}/bulk/search"
129-
if queries is None or len(queries) == 0:
130-
serialized_query = EmptyQuery().serialize()
131-
else:
132-
serialized_query = " ".join(q.serialize() for q in queries)
133-
params = {"q": serialized_query}
128+
params = {"q": serialize_queries(queries)}
134129
r = requests.get(url, params=params, headers=self.headers, stream=True)
135130
if r.status_code == 200:
136131
response_json = []
@@ -146,7 +141,7 @@ def bulk_export(self, queries: list[Query] | None = None) -> AbstractResponse:
146141
return ErrorResponse(response=r, response_json=r.json())
147142

148143
def bulk_export_last_event(
149-
self, queries: list[Query] | None = None
144+
self, queries: list[AbstractQuery] | None = None
150145
) -> AbstractResponse:
151146
response = self.bulk_export(queries)
152147
if response.is_success():
@@ -160,13 +155,11 @@ def bulk_export_last_event(
160155
aggreg.events = [sorted_events[0]]
161156
return response
162157

163-
def bulk_service(self, queries: list[Query] | None = None) -> AbstractResponse:
158+
def bulk_service(
159+
self, queries: list[AbstractQuery] | None = None
160+
) -> AbstractResponse:
164161
url = f"{self.base_url}/bulk/service"
165-
if queries is None or len(queries) == 0:
166-
serialized_query = EmptyQuery().serialize()
167-
else:
168-
serialized_query = " ".join(q.serialize() for q in queries)
169-
params = {"q": serialized_query}
162+
params = {"q": serialize_queries(queries)}
170163
r = requests.get(url, params=params, headers=self.headers, stream=True)
171164
if r.status_code == 200:
172165
response_json = []

leakix/query.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,10 @@ def __init__(self, raw_q: str) -> None:
7575

7676
def serialize(self) -> str:
7777
return self.raw_q
78+
79+
80+
def serialize_queries(queries: list[AbstractQuery] | None) -> str:
81+
"""Serialize a list of queries into a query string for the API."""
82+
if queries is None or len(queries) == 0:
83+
return EmptyQuery().serialize()
84+
return " ".join(q.serialize() for q in queries)

0 commit comments

Comments
 (0)