taranis-models 1.3.3.dev2__tar.gz → 1.3.3.dev4__tar.gz
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.
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/PKG-INFO +4 -1
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/admin.py +0 -21
- taranis_models-1.3.3.dev4/models/assess.py +158 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/asset.py +1 -1
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/product.py +11 -20
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/report.py +2 -2
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/user.py +0 -1
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/pyproject.toml +3 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/taranis_models.egg-info/PKG-INFO +4 -1
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/taranis_models.egg-info/requires.txt +3 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/__init__.pyi +4 -1
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/admin.pyi +11 -5
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/assess.pyi +9 -4
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/asset.pyi +4 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/base.pyi +6 -3
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/dashboard.pyi +6 -1
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/product.pyi +5 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/report.pyi +6 -1
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/types.pyi +4 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/user.pyi +5 -0
- taranis_models-1.3.3.dev4/uv.lock +387 -0
- taranis_models-1.3.3.dev2/models/assess.py +0 -101
- taranis_models-1.3.3.dev2/uv.lock +0 -267
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/.dockerignore +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/.gitignore +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/.python-version +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/LICENSE.md +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/README.md +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/__init__.py +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/base.py +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/dashboard.py +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/py.typed +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/types.py +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/setup.cfg +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/taranis_models.egg-info/SOURCES.txt +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/taranis_models.egg-info/dependency_links.txt +0 -0
- {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/taranis_models.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taranis-models
|
|
3
|
-
Version: 1.3.3.
|
|
3
|
+
Version: 1.3.3.dev4
|
|
4
4
|
Summary: Taranis AI Models
|
|
5
5
|
Maintainer-email: AIT <benjamin.akhras@ait.ac.at>
|
|
6
6
|
License-Expression: EUPL-1.2
|
|
@@ -17,6 +17,9 @@ License-File: LICENSE.md
|
|
|
17
17
|
Requires-Dist: pydantic
|
|
18
18
|
Requires-Dist: pydantic-settings
|
|
19
19
|
Requires-Dist: python-dotenv
|
|
20
|
+
Requires-Dist: langcodes
|
|
21
|
+
Requires-Dist: requests
|
|
22
|
+
Requires-Dist: beautifulsoup4
|
|
20
23
|
Provides-Extra: dev
|
|
21
24
|
Requires-Dist: ruff; extra == "dev"
|
|
22
25
|
Requires-Dist: pytest; extra == "dev"
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
-
from functools import cached_property
|
|
3
2
|
from typing import Any, Literal
|
|
4
3
|
|
|
5
4
|
from pydantic import AnyUrl, Field, SecretStr, field_serializer
|
|
@@ -63,7 +62,6 @@ class Address(TaranisBaseModel):
|
|
|
63
62
|
class Organization(TaranisBaseModel):
|
|
64
63
|
_core_endpoint = "/config/organizations"
|
|
65
64
|
_model_name = "organization"
|
|
66
|
-
_search_fields = ["name", "description"]
|
|
67
65
|
|
|
68
66
|
id: int | None = None
|
|
69
67
|
name: str = ""
|
|
@@ -82,7 +80,6 @@ class Permission(TaranisBaseModel):
|
|
|
82
80
|
class ACL(TaranisBaseModel):
|
|
83
81
|
_core_endpoint = "/config/acls"
|
|
84
82
|
_model_name = "acl"
|
|
85
|
-
_search_fields = ["name", "description"]
|
|
86
83
|
_pretty_name = "ACL"
|
|
87
84
|
|
|
88
85
|
id: int | None = None
|
|
@@ -108,7 +105,6 @@ class ParameterValue(TaranisBaseModel):
|
|
|
108
105
|
class Worker(TaranisBaseModel):
|
|
109
106
|
_core_endpoint = "/config/worker-types"
|
|
110
107
|
_model_name = "worker_type"
|
|
111
|
-
_search_fields = ["name", "description"]
|
|
112
108
|
_pretty_name = "Worker Type"
|
|
113
109
|
|
|
114
110
|
id: str | None = None
|
|
@@ -122,7 +118,6 @@ class Worker(TaranisBaseModel):
|
|
|
122
118
|
class Role(TaranisBaseModel):
|
|
123
119
|
_core_endpoint = "/config/roles"
|
|
124
120
|
_model_name = "role"
|
|
125
|
-
_search_fields = ["name", "description"]
|
|
126
121
|
_pretty_name = "Role"
|
|
127
122
|
|
|
128
123
|
id: int | None = None
|
|
@@ -135,7 +130,6 @@ class Role(TaranisBaseModel):
|
|
|
135
130
|
class User(TaranisBaseModel):
|
|
136
131
|
_core_endpoint = "/config/users"
|
|
137
132
|
_model_name = "user"
|
|
138
|
-
_search_fields = ["name", "username"]
|
|
139
133
|
|
|
140
134
|
id: int | None = None
|
|
141
135
|
name: str
|
|
@@ -180,7 +174,6 @@ class WordList(TaranisBaseModel):
|
|
|
180
174
|
_core_endpoint = "/config/word-lists"
|
|
181
175
|
_model_name = "word_list"
|
|
182
176
|
_pretty_name = "Word List"
|
|
183
|
-
_search_fields = ["name", "description"]
|
|
184
177
|
|
|
185
178
|
id: int | None = None
|
|
186
179
|
name: str
|
|
@@ -205,19 +198,11 @@ class OSINTSource(TaranisBaseModel):
|
|
|
205
198
|
enabled: bool | None = True
|
|
206
199
|
status: TaskResult | None = None
|
|
207
200
|
|
|
208
|
-
@cached_property
|
|
209
|
-
def search_field(self) -> str:
|
|
210
|
-
search = f"{self.name} {self.description} "
|
|
211
|
-
if self.parameters:
|
|
212
|
-
search += " ".join(self.parameters.values())
|
|
213
|
-
return search
|
|
214
|
-
|
|
215
201
|
|
|
216
202
|
class OSINTSourceGroup(TaranisBaseModel):
|
|
217
203
|
_core_endpoint = "/config/osint-source-groups"
|
|
218
204
|
_model_name = "osint_source_group"
|
|
219
205
|
_pretty_name = "OSINT Source Group"
|
|
220
|
-
_search_fields = ["name", "description"]
|
|
221
206
|
|
|
222
207
|
id: str | None = None
|
|
223
208
|
name: str
|
|
@@ -236,7 +221,6 @@ class ProductType(TaranisBaseModel):
|
|
|
236
221
|
_core_endpoint = "/config/product-types"
|
|
237
222
|
_model_name = "product_type"
|
|
238
223
|
_pretty_name = "Product Type"
|
|
239
|
-
_search_fields = ["title", "description"]
|
|
240
224
|
|
|
241
225
|
id: int | None = None
|
|
242
226
|
title: str
|
|
@@ -251,7 +235,6 @@ class PublisherPreset(TaranisBaseModel):
|
|
|
251
235
|
_core_endpoint = "/config/publisher-presets"
|
|
252
236
|
_model_name = "publisher_preset"
|
|
253
237
|
_pretty_name = "Publisher Preset"
|
|
254
|
-
_search_fields = ["name", "description"]
|
|
255
238
|
|
|
256
239
|
id: str | None = None
|
|
257
240
|
name: str
|
|
@@ -285,7 +268,6 @@ class ReportItemType(TaranisBaseModel):
|
|
|
285
268
|
_core_endpoint = "/config/report-item-types"
|
|
286
269
|
_model_name = "report_item_type"
|
|
287
270
|
_pretty_name = "Report Item Type"
|
|
288
|
-
_search_fields = ["title", "description"]
|
|
289
271
|
|
|
290
272
|
id: int | None = None
|
|
291
273
|
title: str
|
|
@@ -316,7 +298,6 @@ class Attribute(TaranisBaseModel):
|
|
|
316
298
|
_core_endpoint = "/config/attributes"
|
|
317
299
|
_model_name = "attribute"
|
|
318
300
|
_pretty_name = "Attribute"
|
|
319
|
-
_search_fields = ["name", "description"]
|
|
320
301
|
|
|
321
302
|
id: int | None = None
|
|
322
303
|
name: str
|
|
@@ -330,7 +311,6 @@ class Bot(TaranisBaseModel):
|
|
|
330
311
|
_core_endpoint = "/config/bots"
|
|
331
312
|
_model_name = "bot"
|
|
332
313
|
_pretty_name = "Bot"
|
|
333
|
-
_search_fields = ["name", "description"]
|
|
334
314
|
|
|
335
315
|
id: str | None = None
|
|
336
316
|
name: str
|
|
@@ -345,7 +325,6 @@ class Connector(TaranisBaseModel):
|
|
|
345
325
|
_core_endpoint = "/config/connectors"
|
|
346
326
|
_model_name = "connector"
|
|
347
327
|
_pretty_name = "Connector"
|
|
348
|
-
_search_fields = ["name", "description"]
|
|
349
328
|
|
|
350
329
|
id: str | None = None
|
|
351
330
|
name: str
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
import hashlib
|
|
3
|
+
import re
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
from typing import Any, Literal, Self
|
|
6
|
+
from urllib.parse import quote
|
|
7
|
+
|
|
8
|
+
from bs4 import BeautifulSoup
|
|
9
|
+
from langcodes import Language
|
|
10
|
+
from langcodes.tag_parser import LanguageTagError
|
|
11
|
+
from pydantic import ValidationInfo, field_validator, model_validator
|
|
12
|
+
|
|
13
|
+
from models.base import TaranisBaseModel
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class NewsItem(TaranisBaseModel):
|
|
17
|
+
_core_endpoint = "/assess/news-items"
|
|
18
|
+
|
|
19
|
+
osint_source_id: str
|
|
20
|
+
id: str | None = None
|
|
21
|
+
hash: str | None = None
|
|
22
|
+
title: str | None = None
|
|
23
|
+
author: str | None = None
|
|
24
|
+
review: str | None = None
|
|
25
|
+
content: str | None = None
|
|
26
|
+
link: str | None = None
|
|
27
|
+
source: str | None = None
|
|
28
|
+
published: datetime | None = None
|
|
29
|
+
collected: datetime | None = None
|
|
30
|
+
updated: datetime | None = None
|
|
31
|
+
attributes: list[str | dict[str, Any]] | None = None
|
|
32
|
+
story_id: str | None = None
|
|
33
|
+
language: str | None = None
|
|
34
|
+
last_change: str | None = None
|
|
35
|
+
|
|
36
|
+
@classmethod
|
|
37
|
+
def from_input(cls, data: Any) -> Self:
|
|
38
|
+
"""Untrusted input: run validators + sanitizers."""
|
|
39
|
+
return cls.model_validate(data)
|
|
40
|
+
|
|
41
|
+
@classmethod
|
|
42
|
+
def from_db(cls, data: dict[str, Any]) -> Self:
|
|
43
|
+
"""Trusted DB row: skip *all* validators/sanitizers."""
|
|
44
|
+
return cls.model_construct(**data)
|
|
45
|
+
|
|
46
|
+
@field_validator("language", mode="before")
|
|
47
|
+
@classmethod
|
|
48
|
+
def normalize_language_code(cls, v: str, info: ValidationInfo) -> str:
|
|
49
|
+
if v:
|
|
50
|
+
try:
|
|
51
|
+
return Language.get(v).language or ""
|
|
52
|
+
except (LanguageTagError, ValueError, TypeError):
|
|
53
|
+
return ""
|
|
54
|
+
return ""
|
|
55
|
+
|
|
56
|
+
@model_validator(mode="after")
|
|
57
|
+
def check_required_fields(self) -> Self:
|
|
58
|
+
if not self.title and not self.content:
|
|
59
|
+
raise ValueError("Either title or content must be provided.")
|
|
60
|
+
return self
|
|
61
|
+
|
|
62
|
+
@field_validator("title", "content", mode="before")
|
|
63
|
+
@classmethod
|
|
64
|
+
def sanitize_html(cls, value: str, info: ValidationInfo) -> str:
|
|
65
|
+
if not value:
|
|
66
|
+
return ""
|
|
67
|
+
html = re.sub(r"(?i)( |\xa0)", " ", value, re.DOTALL)
|
|
68
|
+
return BeautifulSoup(html, "lxml").text
|
|
69
|
+
|
|
70
|
+
@field_validator("link", mode="before")
|
|
71
|
+
@classmethod
|
|
72
|
+
def sanitize_url(cls, url: str, info: ValidationInfo) -> str:
|
|
73
|
+
return quote(url or "", safe="/:@?&=+$,;")
|
|
74
|
+
|
|
75
|
+
@model_validator(mode="after")
|
|
76
|
+
def ensure_hash(self) -> Self:
|
|
77
|
+
if not self.hash:
|
|
78
|
+
title = self.title or ""
|
|
79
|
+
link = self.link or ""
|
|
80
|
+
self.hash = hashlib.sha256((title + link).encode()).hexdigest()
|
|
81
|
+
return self
|
|
82
|
+
|
|
83
|
+
@field_validator("published", "collected", mode="before")
|
|
84
|
+
@classmethod
|
|
85
|
+
def sanitize_date(cls, date: str | None | datetime) -> datetime:
|
|
86
|
+
if isinstance(date, datetime):
|
|
87
|
+
return date
|
|
88
|
+
if isinstance(date, str):
|
|
89
|
+
with contextlib.suppress(ValueError):
|
|
90
|
+
return datetime.fromisoformat(date)
|
|
91
|
+
return datetime.now()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class StoryTag(TaranisBaseModel):
|
|
95
|
+
name: str
|
|
96
|
+
size: int
|
|
97
|
+
type: str | None = None
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class Story(TaranisBaseModel):
|
|
101
|
+
_core_endpoint = "/assess/stories"
|
|
102
|
+
_model_name = "story"
|
|
103
|
+
_pretty_name = "Story"
|
|
104
|
+
_cache_timeout = 30
|
|
105
|
+
|
|
106
|
+
id: str | None = None
|
|
107
|
+
title: str | None = None
|
|
108
|
+
description: str | None = None
|
|
109
|
+
created: datetime | None = None
|
|
110
|
+
updated: datetime | None = None
|
|
111
|
+
last_change: str | None = None
|
|
112
|
+
news_items: list[NewsItem] | None = None
|
|
113
|
+
links: list[str] | None = None
|
|
114
|
+
important: bool | None = None
|
|
115
|
+
read: bool | None = None
|
|
116
|
+
likes: int | None = None
|
|
117
|
+
dislikes: int | None = None
|
|
118
|
+
user_vote: Literal["like", "dislike", "", None] = None
|
|
119
|
+
summary: str | None = None
|
|
120
|
+
relevance: int | None = None
|
|
121
|
+
comments: str | None = None
|
|
122
|
+
in_reports_count: int | None = None
|
|
123
|
+
tags: list[dict[str, Any]] | None = None
|
|
124
|
+
attributes: list[dict[str, Any]] | None = None
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class AssessSource(TaranisBaseModel):
|
|
128
|
+
id: str | None = None
|
|
129
|
+
icon: str | None = None
|
|
130
|
+
name: str
|
|
131
|
+
type: str | None = None
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class FilterLists(TaranisBaseModel):
|
|
135
|
+
_core_endpoint = "/assess/filterlists"
|
|
136
|
+
_model_name = "filter_lists"
|
|
137
|
+
_pretty_name = "Filter Lists"
|
|
138
|
+
|
|
139
|
+
tags: list[str] = []
|
|
140
|
+
sources: list[AssessSource] = []
|
|
141
|
+
groups: list[dict[str, Any]] = []
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class StoryUpdatePayload(TaranisBaseModel):
|
|
145
|
+
vote: Literal["like", "dislike", ""] | None = None
|
|
146
|
+
important: bool | None = None
|
|
147
|
+
read: bool | None = None
|
|
148
|
+
title: str | None = None
|
|
149
|
+
description: str | None = None
|
|
150
|
+
comments: str | None = None
|
|
151
|
+
summary: str | None = None
|
|
152
|
+
tags: list[dict[str, Any]] | None = None
|
|
153
|
+
attributes: list[dict[str, Any]] | None = None
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class BulkAction(TaranisBaseModel):
|
|
157
|
+
story_ids: list[str] = []
|
|
158
|
+
payload: StoryUpdatePayload | None = None
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
+
from typing import Self
|
|
3
|
+
|
|
2
4
|
from pydantic import Field, ValidationInfo, field_validator
|
|
5
|
+
from requests import Response
|
|
3
6
|
|
|
4
7
|
from models.base import TaranisBaseModel
|
|
5
8
|
|
|
@@ -8,11 +11,17 @@ class WorkerProduct(TaranisBaseModel):
|
|
|
8
11
|
data: bytes | None = None
|
|
9
12
|
mime_type: str | None = None
|
|
10
13
|
|
|
14
|
+
@classmethod
|
|
15
|
+
def from_response(cls, response: Response) -> Self:
|
|
16
|
+
return cls(
|
|
17
|
+
data=response.content,
|
|
18
|
+
mime_type=response.headers.get("Content-Type", ""),
|
|
19
|
+
)
|
|
20
|
+
|
|
11
21
|
|
|
12
22
|
class Product(TaranisBaseModel):
|
|
13
23
|
_core_endpoint = "/publish/products"
|
|
14
24
|
_model_name = "product"
|
|
15
|
-
_search_fields = ["title", "description"]
|
|
16
25
|
_pretty_name = "Product"
|
|
17
26
|
|
|
18
27
|
id: str | None = None
|
|
@@ -27,27 +36,9 @@ class Product(TaranisBaseModel):
|
|
|
27
36
|
render_result: str | None = None
|
|
28
37
|
mime_type: str | None = None
|
|
29
38
|
|
|
30
|
-
@field_validator("auto_publish", mode="before")
|
|
31
|
-
@classmethod
|
|
32
|
-
def normalize_auto_publish(cls, value):
|
|
33
|
-
if isinstance(value, str):
|
|
34
|
-
lowered = value.strip().lower()
|
|
35
|
-
if lowered in {"yes", "true", "1", "on"}:
|
|
36
|
-
return True
|
|
37
|
-
if lowered in {"no", "false", "0", "off", ""}:
|
|
38
|
-
return False
|
|
39
|
-
return value
|
|
40
|
-
|
|
41
|
-
@field_validator("default_publisher", mode="before")
|
|
42
|
-
@classmethod
|
|
43
|
-
def empty_default_to_none(cls, value):
|
|
44
|
-
if isinstance(value, str) and not value.strip():
|
|
45
|
-
return None
|
|
46
|
-
return value
|
|
47
|
-
|
|
48
39
|
@field_validator("default_publisher", mode="after")
|
|
49
40
|
@classmethod
|
|
50
|
-
def require_default_when_autopublish(cls, value, info: ValidationInfo):
|
|
41
|
+
def require_default_when_autopublish(cls, value: str, info: ValidationInfo):
|
|
51
42
|
auto_publish = info.data.get("auto_publish")
|
|
52
43
|
if auto_publish and not value:
|
|
53
44
|
raise ValueError("default_publisher is required when auto_publish is enabled")
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
from typing import ClassVar, Final
|
|
2
1
|
from datetime import datetime
|
|
2
|
+
from typing import ClassVar
|
|
3
|
+
|
|
3
4
|
from pydantic import Field
|
|
4
5
|
|
|
5
6
|
from models.admin import ReportItemAttribute
|
|
@@ -20,7 +21,6 @@ class ReportItemAttributeGroup(TaranisBaseModel):
|
|
|
20
21
|
class ReportItem(TaranisBaseModel):
|
|
21
22
|
_core_endpoint: ClassVar[str] = "/analyze/report-items"
|
|
22
23
|
_model_name: ClassVar[str] = "report"
|
|
23
|
-
_search_fields: Final[list[str]] = ["title"]
|
|
24
24
|
_pretty_name: ClassVar[str] = "Report"
|
|
25
25
|
|
|
26
26
|
id: str | None = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taranis-models
|
|
3
|
-
Version: 1.3.3.
|
|
3
|
+
Version: 1.3.3.dev4
|
|
4
4
|
Summary: Taranis AI Models
|
|
5
5
|
Maintainer-email: AIT <benjamin.akhras@ait.ac.at>
|
|
6
6
|
License-Expression: EUPL-1.2
|
|
@@ -17,6 +17,9 @@ License-File: LICENSE.md
|
|
|
17
17
|
Requires-Dist: pydantic
|
|
18
18
|
Requires-Dist: pydantic-settings
|
|
19
19
|
Requires-Dist: python-dotenv
|
|
20
|
+
Requires-Dist: langcodes
|
|
21
|
+
Requires-Dist: requests
|
|
22
|
+
Requires-Dist: beautifulsoup4
|
|
20
23
|
Provides-Extra: dev
|
|
21
24
|
Requires-Dist: ruff; extra == "dev"
|
|
22
25
|
Requires-Dist: pytest; extra == "dev"
|
|
@@ -3,10 +3,13 @@ This type stub file was generated by pyright.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from models.admin import ACL, Address, Job, Organization, Permission, ProductType, ReportItemType, Role, Template, User
|
|
6
|
-
from models.types import TLPLevel, WORKER_CATEGORY, WORKER_TYPES
|
|
7
6
|
from models.base import TaranisBaseModel
|
|
8
7
|
from models.dashboard import Dashboard, TrendingCluster
|
|
8
|
+
from models.types import WORKER_CATEGORY, WORKER_TYPES, TLPLevel
|
|
9
9
|
|
|
10
|
+
"""
|
|
11
|
+
This type stub file was generated by pyright.
|
|
12
|
+
"""
|
|
10
13
|
__all__ = [
|
|
11
14
|
"ACL",
|
|
12
15
|
"Job",
|
|
@@ -2,24 +2,30 @@
|
|
|
2
2
|
This type stub file was generated by pyright.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from
|
|
5
|
+
from datetime import datetime
|
|
6
6
|
from functools import cached_property
|
|
7
7
|
from typing import Any, Literal
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
from pydantic import AnyUrl
|
|
10
|
+
|
|
9
11
|
from models.base import TaranisBaseModel
|
|
10
12
|
from models.types import (
|
|
11
|
-
AttributeType,
|
|
12
13
|
BOT_TYPES,
|
|
13
14
|
COLLECTOR_TYPES,
|
|
14
15
|
CONNECTOR_TYPES,
|
|
15
|
-
ItemType,
|
|
16
16
|
PRESENTER_TYPES,
|
|
17
17
|
PUBLISHER_TYPES,
|
|
18
|
-
TLPLevel,
|
|
19
18
|
WORKER_CATEGORY,
|
|
20
19
|
WORKER_TYPES,
|
|
20
|
+
AttributeType,
|
|
21
|
+
ItemType,
|
|
22
|
+
TLPLevel,
|
|
21
23
|
)
|
|
22
24
|
|
|
25
|
+
"""
|
|
26
|
+
This type stub file was generated by pyright.
|
|
27
|
+
"""
|
|
28
|
+
|
|
23
29
|
class Job(TaranisBaseModel):
|
|
24
30
|
_core_endpoint = ...
|
|
25
31
|
_model_name = ...
|
|
@@ -3,11 +3,17 @@ This type stub file was generated by pyright.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from datetime import datetime
|
|
6
|
-
from pydantic import field_validator
|
|
7
|
-
from typing import Literal
|
|
8
6
|
from functools import cached_property
|
|
7
|
+
from typing import Literal
|
|
8
|
+
|
|
9
|
+
from pydantic import field_validator
|
|
10
|
+
|
|
9
11
|
from models.base import TaranisBaseModel
|
|
10
12
|
|
|
13
|
+
"""
|
|
14
|
+
This type stub file was generated by pyright.
|
|
15
|
+
"""
|
|
16
|
+
|
|
11
17
|
class NewsItem(TaranisBaseModel):
|
|
12
18
|
_core_endpoint = ...
|
|
13
19
|
osint_source_id: str
|
|
@@ -23,8 +29,7 @@ class NewsItem(TaranisBaseModel):
|
|
|
23
29
|
attributes: list[str | dict] | None = ...
|
|
24
30
|
language: str | None = ...
|
|
25
31
|
@field_validator("language", mode="before")
|
|
26
|
-
def normalize_language_code(cls, v):
|
|
27
|
-
...
|
|
32
|
+
def normalize_language_code(cls, v): ...
|
|
28
33
|
|
|
29
34
|
class StoryTag(TaranisBaseModel):
|
|
30
35
|
name: str
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
This type stub file was generated by pyright.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from pydantic import BaseModel
|
|
6
5
|
from typing import ClassVar, TypeVar
|
|
7
6
|
|
|
7
|
+
from pydantic import BaseModel
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
This type stub file was generated by pyright.
|
|
11
|
+
"""
|
|
8
12
|
T = TypeVar("T", bound="TaranisBaseModel")
|
|
9
13
|
|
|
10
14
|
class TaranisBaseModel(BaseModel):
|
|
@@ -13,5 +17,4 @@ class TaranisBaseModel(BaseModel):
|
|
|
13
17
|
_model_name: ClassVar[str] = ...
|
|
14
18
|
_pretty_name: ClassVar[str] = ...
|
|
15
19
|
model_config = ...
|
|
16
|
-
def model_dump(self, *args, **kwargs):
|
|
17
|
-
...
|
|
20
|
+
def model_dump(self, *args, **kwargs): ...
|
|
@@ -3,8 +3,13 @@ This type stub file was generated by pyright.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from datetime import datetime
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
from models.assess import StoryTag
|
|
8
|
+
from models.base import TaranisBaseModel
|
|
9
|
+
|
|
10
|
+
"""
|
|
11
|
+
This type stub file was generated by pyright.
|
|
12
|
+
"""
|
|
8
13
|
|
|
9
14
|
class Dashboard(TaranisBaseModel):
|
|
10
15
|
_core_endpoint = ...
|
|
@@ -3,8 +3,13 @@ This type stub file was generated by pyright.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from datetime import datetime
|
|
6
|
+
|
|
6
7
|
from models.base import TaranisBaseModel
|
|
7
8
|
|
|
9
|
+
"""
|
|
10
|
+
This type stub file was generated by pyright.
|
|
11
|
+
"""
|
|
12
|
+
|
|
8
13
|
class WorkerProduct(TaranisBaseModel):
|
|
9
14
|
data: bytes | None = ...
|
|
10
15
|
mime_type: str | None = ...
|
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
This type stub file was generated by pyright.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import ClassVar, Final
|
|
6
5
|
from datetime import datetime
|
|
6
|
+
from typing import ClassVar, Final
|
|
7
|
+
|
|
7
8
|
from models.admin import ReportItemAttribute
|
|
8
9
|
from models.assess import Story
|
|
9
10
|
from models.base import TaranisBaseModel
|
|
10
11
|
|
|
12
|
+
"""
|
|
13
|
+
This type stub file was generated by pyright.
|
|
14
|
+
"""
|
|
15
|
+
|
|
11
16
|
class ReportItemCpe(TaranisBaseModel):
|
|
12
17
|
id: int | None = ...
|
|
13
18
|
value: str
|
|
@@ -3,8 +3,13 @@ This type stub file was generated by pyright.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from typing import Any
|
|
6
|
+
|
|
6
7
|
from models.base import TaranisBaseModel
|
|
7
8
|
|
|
9
|
+
"""
|
|
10
|
+
This type stub file was generated by pyright.
|
|
11
|
+
"""
|
|
12
|
+
|
|
8
13
|
class ProfileSettingsDashboard(TaranisBaseModel):
|
|
9
14
|
show_trending_clusters: bool = ...
|
|
10
15
|
show_charts: bool = ...
|