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.
Files changed (37) hide show
  1. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/PKG-INFO +4 -1
  2. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/admin.py +0 -21
  3. taranis_models-1.3.3.dev4/models/assess.py +158 -0
  4. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/asset.py +1 -1
  5. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/product.py +11 -20
  6. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/report.py +2 -2
  7. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/user.py +0 -1
  8. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/pyproject.toml +3 -0
  9. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/taranis_models.egg-info/PKG-INFO +4 -1
  10. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/taranis_models.egg-info/requires.txt +3 -0
  11. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/__init__.pyi +4 -1
  12. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/admin.pyi +11 -5
  13. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/assess.pyi +9 -4
  14. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/asset.pyi +4 -0
  15. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/base.pyi +6 -3
  16. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/dashboard.pyi +6 -1
  17. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/product.pyi +5 -0
  18. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/report.pyi +6 -1
  19. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/types.pyi +4 -0
  20. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/typings/models/user.pyi +5 -0
  21. taranis_models-1.3.3.dev4/uv.lock +387 -0
  22. taranis_models-1.3.3.dev2/models/assess.py +0 -101
  23. taranis_models-1.3.3.dev2/uv.lock +0 -267
  24. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/.dockerignore +0 -0
  25. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/.gitignore +0 -0
  26. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/.python-version +0 -0
  27. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/LICENSE.md +0 -0
  28. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/README.md +0 -0
  29. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/__init__.py +0 -0
  30. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/base.py +0 -0
  31. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/dashboard.py +0 -0
  32. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/py.typed +0 -0
  33. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/models/types.py +0 -0
  34. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/setup.cfg +0 -0
  35. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/taranis_models.egg-info/SOURCES.txt +0 -0
  36. {taranis_models-1.3.3.dev2 → taranis_models-1.3.3.dev4}/taranis_models.egg-info/dependency_links.txt +0 -0
  37. {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.dev2
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)(&nbsp;|\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,11 +1,11 @@
1
1
  from pydantic import Field
2
+
2
3
  from models.base import TaranisBaseModel
3
4
 
4
5
 
5
6
  class Asset(TaranisBaseModel):
6
7
  _core_endpoint = "/assets"
7
8
  _model_name = "asset"
8
- _search_fields = ["name"]
9
9
  _pretty_name = "Assets"
10
10
 
11
11
  id: int | 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
@@ -32,7 +32,6 @@ class ProfileSettings(TaranisBaseModel):
32
32
  class UserProfile(TaranisBaseModel):
33
33
  _core_endpoint = "/users"
34
34
  _model_name = "user_profile"
35
- _search_fields = ["name", "username"]
36
35
 
37
36
  id: int | None = None
38
37
  username: str = ""
@@ -18,6 +18,9 @@ dependencies = [
18
18
  "pydantic",
19
19
  "pydantic-settings",
20
20
  "python-dotenv",
21
+ "langcodes",
22
+ "requests",
23
+ "beautifulsoup4",
21
24
  ]
22
25
  dynamic = ["version"]
23
26
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taranis-models
3
- Version: 1.3.3.dev2
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,6 +1,9 @@
1
1
  pydantic
2
2
  pydantic-settings
3
3
  python-dotenv
4
+ langcodes
5
+ requests
6
+ beautifulsoup4
4
7
 
5
8
  [dev]
6
9
  ruff
@@ -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 pydantic import AnyUrl
5
+ from datetime import datetime
6
6
  from functools import cached_property
7
7
  from typing import Any, Literal
8
- from datetime import datetime
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): # -> str | None:
27
- ...
32
+ def normalize_language_code(cls, v): ...
28
33
 
29
34
  class StoryTag(TaranisBaseModel):
30
35
  name: str
@@ -4,6 +4,10 @@ This type stub file was generated by pyright.
4
4
 
5
5
  from models.base import TaranisBaseModel
6
6
 
7
+ """
8
+ This type stub file was generated by pyright.
9
+ """
10
+
7
11
  class Asset(TaranisBaseModel):
8
12
  _core_endpoint = ...
9
13
  _model_name = ...
@@ -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): # -> dict[str, Any]:
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
- from models.base import TaranisBaseModel
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
@@ -4,6 +4,10 @@ This type stub file was generated by pyright.
4
4
 
5
5
  from enum import IntEnum, StrEnum
6
6
 
7
+ """
8
+ This type stub file was generated by pyright.
9
+ """
10
+
7
11
  class TLPLevel(StrEnum):
8
12
  CLEAR = ...
9
13
  GREEN = ...
@@ -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 = ...