vysion 2.0.3__py3-none-any.whl → 2.0.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
vysion/client/client.py CHANGED
@@ -26,9 +26,19 @@ from urllib.parse import quote, urlencode, urljoin
26
26
  # from pydantic import validate_arguments
27
27
  import requests
28
28
 
29
- import vysion.dto as dto
30
29
  from vysion.client.error import APIError
31
- from vysion.dto import Error
30
+ from vysion.dto import (
31
+ Error,
32
+ DocumentHit,
33
+ VysionResponse,
34
+ RansomwareHit,
35
+ Stat,
36
+ Network,
37
+ Language,
38
+ ImChannelHit,
39
+ ImMessageHit,
40
+ ImProfileHit,
41
+ )
32
42
  from vysion.version import __version__ as vysion_version
33
43
 
34
44
  # All API endpoints start with this prefix, you don't need to include the
@@ -106,7 +116,7 @@ class BaseClient:
106
116
  query = "?" + urlencode(query_params_initialzed)
107
117
  return urljoin(base, query)
108
118
 
109
- def _make_request(self, url: str) -> dto.VysionResponse:
119
+ def _make_request(self, url: str) -> VysionResponse:
110
120
  session = self.__get_session__()
111
121
  r = session.get(url)
112
122
 
@@ -122,14 +132,12 @@ class BaseClient:
122
132
 
123
133
  raise APIError(code, message)
124
134
 
125
- payload = r.json()
126
-
127
- result = dto.VysionResponse.model_validate(payload)
135
+ result = r.json()
128
136
 
129
137
  return result
130
138
 
131
139
 
132
- def vysion_error_manager(method) -> Union[dto.VysionResponse, Error]:
140
+ def vysion_error_manager(method) -> Union[VysionResponse, Error]:
133
141
  def manage(*args, **kwargs):
134
142
  try:
135
143
  result = method(*args, **kwargs)
@@ -161,11 +169,11 @@ class Client(BaseClient):
161
169
  gte: datetime = None,
162
170
  page: int = 1,
163
171
  page_size: int = 10,
164
- network: dto.Network = None,
165
- language: dto.Language = None,
172
+ network: Network = None,
173
+ language: Language = None,
166
174
  include_tag: str = None,
167
175
  exclude_tag: str = None,
168
- ) -> dto.VysionResponse:
176
+ ) -> VysionResponse[DocumentHit]:
169
177
  url = self._build_api_url__(
170
178
  "document/search",
171
179
  q=q,
@@ -179,14 +187,14 @@ class Client(BaseClient):
179
187
  exclude_tag=exclude_tag,
180
188
  )
181
189
 
182
- result = self._make_request(url)
190
+ result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
183
191
  return result.data
184
192
 
185
193
  @vysion_error_manager
186
- def get_document(self, document_id: str) -> dto.VysionResponse:
194
+ def get_document(self, document_id: str) -> VysionResponse[DocumentHit]:
187
195
  url = self._build_api_url__("document", document_id)
188
196
 
189
- result = self._make_request(url)
197
+ result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
190
198
  return result.data
191
199
 
192
200
  @vysion_error_manager
@@ -196,28 +204,28 @@ class Client(BaseClient):
196
204
  page: int = 1,
197
205
  lte: datetime = None,
198
206
  gte: datetime = None,
199
- ) -> dto.VysionResponse:
207
+ ) -> VysionResponse[DocumentHit]:
200
208
  url = self._build_api_url__("document/url", url, page=page, lte=lte, gte=gte)
201
209
 
202
- result = self._make_request(url)
210
+ result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
203
211
  return result.data
204
212
 
205
213
  @vysion_error_manager
206
- def get_tag(self, tag: str) -> dto.VysionResponse:
214
+ def get_tag(self, tag: str) -> VysionResponse[DocumentHit]:
207
215
  url = self._build_api_url__("document/tag", tag)
208
216
 
209
- result = self._make_request(url)
217
+ result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
210
218
  return result.data
211
219
 
212
220
  @vysion_error_manager
213
221
  def find_email(
214
222
  self, email: str, page: int = 1, lte: datetime = None, gte: datetime = None
215
- ) -> dto.VysionResponse:
223
+ ) -> VysionResponse[DocumentHit]:
216
224
  url = self._build_api_url__(
217
225
  "document/email", email, page=page, lte=lte, gte=gte
218
226
  )
219
227
 
220
- result = self._make_request(url)
228
+ result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
221
229
  return result.data
222
230
 
223
231
  @vysion_error_manager
@@ -228,16 +236,16 @@ class Client(BaseClient):
228
236
  page: int = 1,
229
237
  lte: datetime = None,
230
238
  gte: datetime = None,
231
- ) -> dto.VysionResponse:
239
+ ) -> VysionResponse[DocumentHit]:
232
240
  url = self._build_api_url__(
233
- "document/phone",
234
- country_code + "/" + phone_number,
241
+ "document/phone/" + country_code,
242
+ phone_number,
235
243
  page=page,
236
244
  lte=lte,
237
245
  gte=gte,
238
246
  )
239
247
 
240
- result = self._make_request(url)
248
+ result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
241
249
  return result.data
242
250
 
243
251
  @vysion_error_manager
@@ -248,12 +256,12 @@ class Client(BaseClient):
248
256
  page: int = 1,
249
257
  lte: datetime = None,
250
258
  gte: datetime = None,
251
- ) -> dto.VysionResponse:
259
+ ) -> VysionResponse[DocumentHit]:
252
260
  url = self._build_api_url__(
253
- "document/wallet", chain + "/" + address, page=page, lte=lte, gte=gte
261
+ "document/wallet/" + chain, address, page=page, lte=lte, gte=gte
254
262
  )
255
263
 
256
- result = self._make_request(url)
264
+ result = VysionResponse[DocumentHit].model_validate(self._make_request(url))
257
265
  return result.data
258
266
 
259
267
  @vysion_error_manager
@@ -276,10 +284,10 @@ class Client(BaseClient):
276
284
  gte: datetime = None,
277
285
  page: int = 1,
278
286
  page_size: int = 10,
279
- network: dto.Network = None,
287
+ network: Network = None,
280
288
  country: str = None,
281
- language: dto.Language = None,
282
- ) -> dto.VysionResponse:
289
+ language: Language = None,
290
+ ) -> VysionResponse[RansomwareHit]:
283
291
  url = self._build_api_url__(
284
292
  "victim/search",
285
293
  q=q,
@@ -292,14 +300,14 @@ class Client(BaseClient):
292
300
  language=language,
293
301
  )
294
302
 
295
- result = self._make_request(url)
303
+ result = VysionResponse[RansomwareHit].model_validate(self._make_request(url))
296
304
  return result.data
297
305
 
298
306
  @vysion_error_manager
299
- def get_ransomware_victim(self, document_id: str) -> dto.VysionResponse:
307
+ def get_ransomware_victim(self, document_id: str) -> VysionResponse[RansomwareHit]:
300
308
  url = self._build_api_url__("victim", document_id)
301
309
 
302
- result = self._make_request(url)
310
+ result = VysionResponse[RansomwareHit].model_validate(self._make_request(url))
303
311
  return result.data
304
312
 
305
313
  #
@@ -312,10 +320,12 @@ class Client(BaseClient):
312
320
  countries: str = None,
313
321
  gte: datetime = None,
314
322
  lte: datetime = None,
315
- ) -> dto.VysionResponse[dto.Stat]:
316
- url = self._build_api_url__("stats/countries", countries=countries, gte=gte, lte=lte)
323
+ ) -> VysionResponse[Stat]:
324
+ url = self._build_api_url__(
325
+ "stats/countries", countries=countries, gte=gte, lte=lte
326
+ )
317
327
 
318
- result = self._make_request(url)
328
+ result = VysionResponse[Stat].model_validate(self._make_request(url))
319
329
  return result.data
320
330
 
321
331
  @vysion_error_manager
@@ -324,10 +334,12 @@ class Client(BaseClient):
324
334
  countries: str = None,
325
335
  gte: datetime = None,
326
336
  lte: datetime = None,
327
- ) -> dto.VysionResponse[dto.Stat]:
328
- url = self._build_api_url__("stats/groups", countries=countries, gte=gte, lte=lte)
337
+ ) -> VysionResponse[Stat]:
338
+ url = self._build_api_url__(
339
+ "stats/groups", countries=countries, gte=gte, lte=lte
340
+ )
329
341
 
330
- result = self._make_request(url)
342
+ result = VysionResponse[Stat].model_validate(self._make_request(url))
331
343
  return result.data
332
344
 
333
345
  #
@@ -343,7 +355,7 @@ class Client(BaseClient):
343
355
  lte: datetime = None,
344
356
  page: int = 1,
345
357
  username: str = None,
346
- ) -> dto.VysionResponse[dto.ImMessageHit]:
358
+ ) -> VysionResponse[ImMessageHit]:
347
359
  url = self._build_api_url__(
348
360
  "im/" + platform + "/search",
349
361
  q=q,
@@ -353,43 +365,45 @@ class Client(BaseClient):
353
365
  username=username,
354
366
  )
355
367
 
356
- result = self._make_request(url)
368
+ result = VysionResponse[ImMessageHit].model_validate(self._make_request(url))
357
369
  return result.data
358
370
 
359
371
  @vysion_error_manager
360
372
  def get_im_chat(
361
373
  self, platform: str, channelId: str, gte: datetime = None, lte: datetime = None
362
- ) -> dto.VysionResponse[dto.ImMessageHit]:
363
- url = self._build_api_url__("im/" + platform + "/chat/" + channelId, gte=gte, lte=lte)
374
+ ) -> VysionResponse[ImMessageHit]:
375
+ url = self._build_api_url__(
376
+ "im/" + platform + "/chat/" + channelId, gte=gte, lte=lte
377
+ )
364
378
 
365
- result = self._make_request(url)
379
+ result = VysionResponse[ImMessageHit].model_validate(self._make_request(url))
366
380
  return result.data
367
381
 
368
382
  @vysion_error_manager
369
383
  def get_im_profile(
370
384
  self, platform: str, userId: str
371
- ) -> dto.VysionResponse[dto.ImProfileHit]:
385
+ ) -> VysionResponse[ImProfileHit]:
372
386
  url = self._build_api_url__("im/" + platform + "/profile/", userId)
373
387
 
374
- result = self._make_request(url)
388
+ result = VysionResponse[ImProfileHit].model_validate(self._make_request(url))
375
389
  return result.data
376
390
 
377
391
  @vysion_error_manager
378
392
  def get_im_message(
379
393
  self, platform: str, messageId: str
380
- ) -> dto.VysionResponse[dto.ImMessageHit]:
394
+ ) -> VysionResponse[ImMessageHit]:
381
395
  url = self._build_api_url__("im/" + platform + "/message/", messageId)
382
396
 
383
- result = self._make_request(url)
397
+ result = VysionResponse[ImMessageHit].model_validate(self._make_request(url))
384
398
  return result.data
385
399
 
386
400
  @vysion_error_manager
387
401
  def get_im_channel(
388
402
  self, platform: str, channelId: str
389
- ) -> dto.VysionResponse[dto.ImChannelHit]:
403
+ ) -> VysionResponse[ImChannelHit]:
390
404
  url = self._build_api_url__("im/" + platform + "/channel/", channelId)
391
405
 
392
- result = self._make_request(url)
406
+ result = VysionResponse[ImChannelHit].model_validate(self._make_request(url))
393
407
  return result.data
394
408
 
395
409
  #
vysion/dto/dto.py CHANGED
@@ -399,8 +399,7 @@ T = TypeVar("T")
399
399
 
400
400
  class Result(BaseModel, Generic[T]):
401
401
  total: int = 0
402
- hits: Union[List[DocumentHit],List[Stat],List[ImChannelHit],List[ImMessageHit],
403
- List[ImProfileHit],List[RansomFeedHit],List[RansomwareHit]] = Field(default_factory=lambda: [])
402
+ hits: List[T] = Field(default_factory=lambda: [])
404
403
 
405
404
  def __init__(self, **kwargs):
406
405
  super().__init__(**kwargs)
vysion/dto/tag.py CHANGED
@@ -58,4 +58,4 @@ class Tag(BaseModel):
58
58
  return f"Tag<{self}>"
59
59
 
60
60
  def __str__(self):
61
- return f'''{self.namespace}:{self.predicate}:"{self.value}"'''
61
+ return f'''{self.namespace}:{self.predicate}="{self.value}"'''
vysion/dto/util.py CHANGED
@@ -111,7 +111,7 @@ class MISPProcessor:
111
111
 
112
112
  self.misp_event.add_object(misp_object)
113
113
 
114
- def process(self, result: dto.Result, **kwargs) -> MISPEvent:
114
+ def process(self, result: dto.Result[DocumentHit|RansomFeedHit], **kwargs) -> MISPEvent:
115
115
 
116
116
  processor = {
117
117
  DocumentHit: self.parse_hit,
vysion/version.py CHANGED
@@ -15,4 +15,4 @@ See the License for the specific language governing permissions and
15
15
  limitations under the License.
16
16
  """
17
17
 
18
- __version__ = "2.0.3"
18
+ __version__ = "2.0.5"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vysion
3
- Version: 2.0.3
3
+ Version: 2.0.5
4
4
  Summary: The official Python client library for Vysion
5
5
  Home-page: https://vysion.ai
6
6
  License: Apache-2.0
@@ -29,7 +29,7 @@ Welcome to the PyPi webpage for Vysion, our implementation as a Python library t
29
29
 
30
30
  You can request a demo for the web app or an API-key to use in this library at [vysion.ai](https://vysion.ai).
31
31
 
32
- Latest version: [2.0.3](https://pypi.org/project/vysion/)
32
+ Latest version: [2.0.5](https://pypi.org/project/vysion/)
33
33
 
34
34
  You can visit [the documentation](https://developers.vysion.ai/?python) for more information on the searches and requests performed with the library or directly on the API.
35
35
 
@@ -1,11 +1,11 @@
1
1
  vysion/__init__.py,sha256=yxJiM-S29q8GB3PBff9tV70P2nvydd8aKLEprLkXw5o,664
2
2
  vysion/client/__init__.py,sha256=aVHmBuetPdybp7TgcNzUx4HkxTjEuXYzSdDYiYfFQd0,630
3
- vysion/client/client.py,sha256=HUUePwG7btGVwQWSN8atxf0scMbOOAKyLwFGMOblZZ4,11729
3
+ vysion/client/client.py,sha256=ce61pZP9nWhHnzGpzWA8TAt2DC14W_3UqJexHHBRHrc,12558
4
4
  vysion/client/error.py,sha256=-3NGr9ngTGSy-ctqk6S9eMBAvtY3lnjv9i0KiuRjd5g,1158
5
5
  vysion/dto/__init__.py,sha256=ct8JxVMfJ0APiOTgr9ju-JIuBlXOrPkx7n2qISSXUts,605
6
- vysion/dto/dto.py,sha256=ud5Kk1xz48_sRfVYe4K7gtg1LrnTh5P4neiLRNx4mD8,13200
7
- vysion/dto/tag.py,sha256=_Dn4-_xiC1PD4udp3m4FsDdyHVCSgrq7NFJomjsMYtU,1503
8
- vysion/dto/util.py,sha256=WESBTKWWBGtMmXCKL9hqQqLJjAY5MIxyqhbTPEZW3mM,4433
6
+ vysion/dto/dto.py,sha256=kRwN3ElHt0GxM4bHuGgDa-IFRqVul0R3CBDfZBh7R-s,13058
7
+ vysion/dto/tag.py,sha256=whGPsdasgYm8oijrL7MRSMmapzaoCmKNeaJ5ih0aBIk,1503
8
+ vysion/dto/util.py,sha256=bs-DXwHakGU1E3463P3fzNQ5C5d7EwvLIN3xqKT8Ahw,4460
9
9
  vysion/model/__init__.py,sha256=rJX9eNW9-jQGTgwm97W04jhZa-dV_dSTTTFcbWg73w0,606
10
10
  vysion/model/enum/__init__.py,sha256=lhG6rgaYjrFBR8_IfJL0OoT0L7vooR5_ht4zUahQcOc,690
11
11
  vysion/model/enum/languages.py,sha256=yrYDwLEM2lK5iqdLR16n8xeCeSmsCsIj4sTiuNz33FM,4204
@@ -15,8 +15,8 @@ vysion/model/enum/services.py,sha256=fUfZEO0RNNctU4Gzae5TV3c7BU5A_cEwaEb1tzqgcr0
15
15
  vysion/taxonomy/__init__.py,sha256=Bc364AYxRCyjIn26-XBPeEDCPe3Hma4r5RAI8R8eblU,635
16
16
  vysion/taxonomy/flavours.py,sha256=ubImHBE8v0zhzFy_2YozAQk2SzN1XDQwHAxb2RebtCo,2347
17
17
  vysion/taxonomy/taxonomy.py,sha256=mG6vHX5Eyp38AKyJBgfBDqdpEmDMbkv8TA8YUBzko54,12227
18
- vysion/version.py,sha256=TooJDNm5IH_y6jx2DbfRXgSqx_Mum1MW68HyMQcSLO4,610
19
- vysion-2.0.3.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
20
- vysion-2.0.3.dist-info/METADATA,sha256=XIc4kKDHD7MrzxPaZQ6UKdnT3NIL7-Uq_LMpJsWByec,2122
21
- vysion-2.0.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
22
- vysion-2.0.3.dist-info/RECORD,,
18
+ vysion/version.py,sha256=vxtas-jndirPiYaFbGS7QFsPL4wNV43j6SwiSecUGQI,610
19
+ vysion-2.0.5.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
20
+ vysion-2.0.5.dist-info/METADATA,sha256=_brYLMOQDb5E7cxIcyQRm_HDVLzk-VpiUkmE5fwF7PM,2122
21
+ vysion-2.0.5.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
22
+ vysion-2.0.5.dist-info/RECORD,,
File without changes