Skip to content

Commit 9507151

Browse files
committed
Fix: Widen query type from Query to AbstractQuery
RawQuery extends AbstractQuery directly, not Query. Methods accepting queries should accept any AbstractQuery subclass.
1 parent e547391 commit 9507151

3 files changed

Lines changed: 21 additions & 15 deletions

File tree

leakix/async_client.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from leakix.base import DEFAULT_URL, BaseClient
1111
from leakix.client import Scope
12-
from leakix.query import Query, serialize_queries
12+
from leakix.query import AbstractQuery, serialize_queries
1313
from leakix.response import (
1414
AbstractResponse,
1515
ErrorResponse,
@@ -78,7 +78,7 @@ async def _get(
7878
async def get(
7979
self,
8080
scope: Scope,
81-
queries: list[Query] | None = None,
81+
queries: list[AbstractQuery] | None = None,
8282
page: int = 0,
8383
) -> AbstractResponse:
8484
"""Search LeakIX for services or leaks."""
@@ -91,15 +91,15 @@ async def get(
9191
)
9292

9393
async def get_service(
94-
self, queries: list[Query] | None = None, page: int = 0
94+
self, queries: list[AbstractQuery] | None = None, page: int = 0
9595
) -> AbstractResponse:
9696
"""Shortcut for get with scope=Scope.SERVICE."""
9797
return self._parse_events(
9898
await self.get(Scope.SERVICE, queries=queries, page=page)
9999
)
100100

101101
async def get_leak(
102-
self, queries: list[Query] | None = None, page: int = 0
102+
self, queries: list[AbstractQuery] | None = None, page: int = 0
103103
) -> AbstractResponse:
104104
"""Shortcut for get with scope=Scope.LEAK."""
105105
return self._parse_events(
@@ -139,7 +139,9 @@ async def get_subdomains(self, domain: str) -> AbstractResponse:
139139
"""Returns the list of subdomains for a given domain."""
140140
return self._parse_subdomains(await self._get(f"/api/subdomains/{domain}"))
141141

142-
async def bulk_export(self, queries: list[Query] | None = None) -> AbstractResponse:
142+
async def bulk_export(
143+
self, queries: list[AbstractQuery] | None = None
144+
) -> AbstractResponse:
143145
"""Bulk export leaks (Pro API feature)."""
144146
serialized_query = serialize_queries(queries)
145147
client = await self._get_client()
@@ -164,7 +166,7 @@ async def bulk_export(self, queries: list[Query] | None = None) -> AbstractRespo
164166
return ErrorResponse(response=r, response_json=r.json())
165167

166168
async def bulk_export_stream(
167-
self, queries: list[Query] | None = None
169+
self, queries: list[AbstractQuery] | None = None
168170
) -> AsyncIterator[l9format.L9Aggregation]:
169171
"""
170172
Streaming version of bulk_export. Yields L9Aggregation objects one by one.

leakix/client.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from leakix.base import BaseClient
1010
from leakix.base import HostResult as HostResult
11-
from leakix.query import Query, serialize_queries
11+
from leakix.query import AbstractQuery, serialize_queries
1212
from leakix.response import (
1313
AbstractResponse,
1414
ErrorResponse,
@@ -42,7 +42,7 @@ def __get(self, url: str, params: dict[str, Any] | None) -> AbstractResponse:
4242
def get(
4343
self,
4444
scope: Scope,
45-
queries: list[Query] | None = None,
45+
queries: list[AbstractQuery] | None = None,
4646
page: int = 0,
4747
) -> AbstractResponse:
4848
"""
@@ -81,13 +81,13 @@ def get(
8181
)
8282

8383
def get_service(
84-
self, queries: list[Query] | None = None, page: int = 0
84+
self, queries: list[AbstractQuery] | None = None, page: int = 0
8585
) -> AbstractResponse:
8686
"""Shortcut for `get` with the scope `Scope.SERVICE`."""
8787
return self._parse_events(self.get(Scope.SERVICE, queries=queries, page=page))
8888

8989
def get_leak(
90-
self, queries: list[Query] | None = None, page: int = 0
90+
self, queries: list[AbstractQuery] | None = None, page: int = 0
9191
) -> AbstractResponse:
9292
"""Shortcut for `get` with the scope `Scope.LEAK`."""
9393
return self._parse_events(self.get(Scope.LEAK, queries=queries, page=page))
@@ -122,7 +122,9 @@ def get_subdomains(self, domain: str) -> AbstractResponse:
122122
url = f"{self.base_url}/api/subdomains/{domain}"
123123
return self._parse_subdomains(self.__get(url, params=None))
124124

125-
def bulk_export(self, queries: list[Query] | None = None) -> AbstractResponse:
125+
def bulk_export(
126+
self, queries: list[AbstractQuery] | None = None
127+
) -> AbstractResponse:
126128
url = f"{self.base_url}/bulk/search"
127129
params = {"q": serialize_queries(queries)}
128130
r = requests.get(url, params=params, headers=self.headers, stream=True)
@@ -140,7 +142,7 @@ def bulk_export(self, queries: list[Query] | None = None) -> AbstractResponse:
140142
return ErrorResponse(response=r, response_json=r.json())
141143

142144
def bulk_export_last_event(
143-
self, queries: list[Query] | None = None
145+
self, queries: list[AbstractQuery] | None = None
144146
) -> AbstractResponse:
145147
response = self.bulk_export(queries)
146148
if response.is_success():
@@ -154,7 +156,9 @@ def bulk_export_last_event(
154156
aggreg.events = [sorted_events[0]]
155157
return response
156158

157-
def bulk_service(self, queries: list[Query] | None = None) -> AbstractResponse:
159+
def bulk_service(
160+
self, queries: list[AbstractQuery] | None = None
161+
) -> AbstractResponse:
158162
url = f"{self.base_url}/bulk/service"
159163
params = {"q": serialize_queries(queries)}
160164
r = requests.get(url, params=params, headers=self.headers, stream=True)
@@ -198,7 +202,7 @@ def search(
198202
return self._parse_events(r)
199203

200204
def bulk_export_stream(
201-
self, queries: list[Query] | None = None
205+
self, queries: list[AbstractQuery] | None = None
202206
) -> Iterator[l9format.L9Aggregation]:
203207
"""
204208
Streaming version of bulk_export. Yields L9Aggregation objects one by one.

leakix/query.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def serialize(self) -> str:
7777
return self.raw_q
7878

7979

80-
def serialize_queries(queries: list[Query] | None) -> str:
80+
def serialize_queries(queries: list[AbstractQuery] | None) -> str:
8181
"""Serialize a list of queries into a query string for the API."""
8282
if queries is None or len(queries) == 0:
8383
return EmptyQuery().serialize()

0 commit comments

Comments
 (0)