mmisp-lib 0.1.9__tar.gz → 0.1.11__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.
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/PKG-INFO +1 -1
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/pyproject.toml +1 -1
- mmisp_lib-0.1.11/src/mmisp/api_schemas/attributes.py +440 -0
- mmisp_lib-0.1.11/src/mmisp/api_schemas/auth_keys.py +123 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/authentication/start_login_response.py → mmisp_lib-0.1.11/src/mmisp/api_schemas/authentication.py +20 -3
- mmisp_lib-0.1.9/src/mmisp/api_schemas/tags/get_tag_response.py → mmisp_lib-0.1.11/src/mmisp/api_schemas/common.py +0 -16
- mmisp_lib-0.1.11/src/mmisp/api_schemas/events.py +595 -0
- mmisp_lib-0.1.11/src/mmisp/api_schemas/feeds.py +139 -0
- mmisp_lib-0.1.11/src/mmisp/api_schemas/galaxies.py +193 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/noticelists/get_noticelist_response.py → mmisp_lib-0.1.11/src/mmisp/api_schemas/noticelists.py +17 -10
- mmisp_lib-0.1.11/src/mmisp/api_schemas/objects.py +106 -0
- mmisp_lib-0.1.11/src/mmisp/api_schemas/sharing_groups.py +264 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sightings/create_sighting_body.py → mmisp_lib-0.1.11/src/mmisp/api_schemas/sightings.py +26 -0
- mmisp_lib-0.1.11/src/mmisp/api_schemas/tags.py +78 -0
- mmisp_lib-0.1.11/src/mmisp/api_schemas/taxonomies.py +104 -0
- mmisp_lib-0.1.11/src/mmisp/api_schemas/user_settings.py +75 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/users/user.py → mmisp_lib-0.1.11/src/mmisp/api_schemas/users.py +10 -0
- mmisp_lib-0.1.11/src/mmisp/api_schemas/warninglists.py +142 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/lib/attributes.py +2 -2
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp_lib.egg-info/PKG-INFO +1 -1
- mmisp_lib-0.1.11/src/mmisp_lib.egg-info/SOURCES.txt +62 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/add_attribute_body.py +0 -33
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/add_attribute_response.py +0 -33
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/add_remove_tag_attribute_response.py +0 -13
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/delete_attribute_response.py +0 -8
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/delete_selected_attribute_body.py +0 -9
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/delete_selected_attribute_response.py +0 -13
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/edit_attribute_body.py +0 -24
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/edit_attributes_response.py +0 -42
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/get_all_attributes_response.py +0 -38
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/get_attribute_response.py +0 -41
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/get_attribute_statistics_response.py +0 -31
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/get_describe_types_response.py +0 -35
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/restore_attribute_reponse.py +0 -25
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/search_attributes_body.py +0 -74
- mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes/search_attributes_response.py +0 -49
- mmisp_lib-0.1.9/src/mmisp/api_schemas/auth_keys/add_auth_key_body.py +0 -10
- mmisp_lib-0.1.9/src/mmisp/api_schemas/auth_keys/add_auth_key_response.py +0 -20
- mmisp_lib-0.1.9/src/mmisp/api_schemas/auth_keys/edit_auth_key_body.py +0 -8
- mmisp_lib-0.1.9/src/mmisp/api_schemas/auth_keys/edit_auth_key_response.py +0 -24
- mmisp_lib-0.1.9/src/mmisp/api_schemas/auth_keys/search_auth_keys_body.py +0 -17
- mmisp_lib-0.1.9/src/mmisp/api_schemas/auth_keys/search_get_all_auth_keys_users_response.py +0 -28
- mmisp_lib-0.1.9/src/mmisp/api_schemas/auth_keys/view_auth_key_response.py +0 -24
- mmisp_lib-0.1.9/src/mmisp/api_schemas/authentication/exchange_token_login_body.py +0 -5
- mmisp_lib-0.1.9/src/mmisp/api_schemas/authentication/password_login_body.py +0 -6
- mmisp_lib-0.1.9/src/mmisp/api_schemas/authentication/start_login_body.py +0 -5
- mmisp_lib-0.1.9/src/mmisp/api_schemas/authentication/token_response.py +0 -5
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/FreeTextImportWorkerBody.py +0 -17
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/add_attribute_via_free_text_import_event_body.py +0 -12
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/add_attribute_via_free_text_import_event_response.py +0 -14
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/add_edit_get_event_response.py +0 -234
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/add_event_body.py +0 -30
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/add_remove_tag_events_response.py +0 -11
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/delete_event_response.py +0 -14
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/edit_event_body.py +0 -28
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/get_all_events_response.py +0 -99
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/get_event_response.py +0 -8
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/index_events_body.py +0 -30
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/index_events_response.py +0 -40
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/publish_event_response.py +0 -13
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/search_events_body.py +0 -43
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/search_events_response.py +0 -10
- mmisp_lib-0.1.9/src/mmisp/api_schemas/events/unpublish_event_response.py +0 -13
- mmisp_lib-0.1.9/src/mmisp/api_schemas/feeds/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/feeds/cache_feed_response.py +0 -12
- mmisp_lib-0.1.9/src/mmisp/api_schemas/feeds/create_feed_body.py +0 -30
- mmisp_lib-0.1.9/src/mmisp/api_schemas/feeds/enable_disable_feed_response.py +0 -10
- mmisp_lib-0.1.9/src/mmisp/api_schemas/feeds/fetch_feeds_response.py +0 -8
- mmisp_lib-0.1.9/src/mmisp/api_schemas/feeds/get_feed_response.py +0 -47
- mmisp_lib-0.1.9/src/mmisp/api_schemas/feeds/toggle_feed_body.py +0 -8
- mmisp_lib-0.1.9/src/mmisp/api_schemas/feeds/update_feed_body.py +0 -30
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/attach_galaxy_cluster_body.py +0 -12
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/attach_galaxy_cluster_response.py +0 -10
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/delete_force_update_import_galaxy_response.py +0 -12
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/export_galaxies_body.py +0 -16
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/export_galaxies_response.py +0 -44
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/galaxy_schema.py +0 -18
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/get_all_search_galaxies_response.py +0 -22
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/get_galaxy_response.py +0 -37
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/import_galaxies_body.py +0 -15
- mmisp_lib-0.1.9/src/mmisp/api_schemas/galaxies/search_galaxies_body.py +0 -22
- mmisp_lib-0.1.9/src/mmisp/api_schemas/noticelists/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/noticelists/get_all_noticelist_response.py +0 -10
- mmisp_lib-0.1.9/src/mmisp/api_schemas/objects/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/objects/create_object_body.py +0 -16
- mmisp_lib-0.1.9/src/mmisp/api_schemas/objects/get_object_response.py +0 -47
- mmisp_lib-0.1.9/src/mmisp/api_schemas/objects/search_objects_body.py +0 -49
- mmisp_lib-0.1.9/src/mmisp/api_schemas/organisations/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/roles/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/add_org_to_sharing_group_body.py +0 -6
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/add_org_to_sharing_group_legacy_body.py +0 -5
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/add_server_to_sharing_group_body.py +0 -6
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/add_server_to_sharing_group_legacy_body.py +0 -5
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/create_sharing_group_body.py +0 -12
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/create_sharing_group_legacy_body.py +0 -23
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/create_sharing_group_legacy_response.py +0 -18
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/delete_sharing_group_legacy_response.py +0 -5
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/get_all_sharing_groups_response.py +0 -53
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/get_sharing_group_info_response.py +0 -44
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/sharing_group.py +0 -19
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/sharing_group_org.py +0 -8
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/sharing_group_server.py +0 -8
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/update_sharing_group_body.py +0 -10
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/update_sharing_group_legacy_body.py +0 -28
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sharing_groups/view_update_sharing_group_legacy_response.py +0 -40
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sightings/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/sightings/get_sighting_response.py +0 -27
- mmisp_lib-0.1.9/src/mmisp/api_schemas/tags/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/tags/create_tag_body.py +0 -15
- mmisp_lib-0.1.9/src/mmisp/api_schemas/tags/delete_tag_response.py +0 -10
- mmisp_lib-0.1.9/src/mmisp/api_schemas/tags/search_tags_response.py +0 -26
- mmisp_lib-0.1.9/src/mmisp/api_schemas/tags/update_tag_body.py +0 -15
- mmisp_lib-0.1.9/src/mmisp/api_schemas/taxonomies/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/taxonomies/export_taxonomies_response.py +0 -30
- mmisp_lib-0.1.9/src/mmisp/api_schemas/taxonomies/get_taxonomy_by_id_response.py +0 -30
- mmisp_lib-0.1.9/src/mmisp/api_schemas/taxonomies/get_taxonomy_response.py +0 -21
- mmisp_lib-0.1.9/src/mmisp/api_schemas/taxonomies/get_taxonomy_tags_response.py +0 -32
- mmisp_lib-0.1.9/src/mmisp/api_schemas/user_settings/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/user_settings/get_uid_user_setting_response.py +0 -21
- mmisp_lib-0.1.9/src/mmisp/api_schemas/user_settings/get_user_settings_response.py +0 -13
- mmisp_lib-0.1.9/src/mmisp/api_schemas/user_settings/search_user_setting_body.py +0 -7
- mmisp_lib-0.1.9/src/mmisp/api_schemas/user_settings/search_user_setting_response.py +0 -11
- mmisp_lib-0.1.9/src/mmisp/api_schemas/user_settings/set_user_setting_body.py +0 -5
- mmisp_lib-0.1.9/src/mmisp/api_schemas/user_settings/set_user_setting_response.py +0 -13
- mmisp_lib-0.1.9/src/mmisp/api_schemas/user_settings/view_user_setting_response.py +0 -13
- mmisp_lib-0.1.9/src/mmisp/api_schemas/users/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/users/users_view_me_response.py +0 -12
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/check_value_warninglists_body.py +0 -8
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/check_value_warninglists_response.py +0 -14
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/create_warninglist_body.py +0 -221
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/delete_warninglist_response.py +0 -13
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/get_selected_all_warninglists_response.py +0 -14
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/get_selected_warninglists_body.py +0 -9
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/toggle_enable_warninglists_body.py +0 -10
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/toggle_enable_warninglists_response.py +0 -10
- mmisp_lib-0.1.9/src/mmisp/api_schemas/warninglists/warninglist_response.py +0 -42
- mmisp_lib-0.1.9/src/mmisp/db/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/db/models/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp/lib/__init__.py +0 -0
- mmisp_lib-0.1.9/src/mmisp_lib.egg-info/SOURCES.txt +0 -173
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/LICENSE +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/README.md +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/setup.cfg +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/api_schemas/__init__.py +0 -0
- /mmisp_lib-0.1.9/src/mmisp/api_schemas/organisations/organisation.py → /mmisp_lib-0.1.11/src/mmisp/api_schemas/organisations.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/api_schemas/py.typed +0 -0
- /mmisp_lib-0.1.9/src/mmisp/api_schemas/roles/role.py → /mmisp_lib-0.1.11/src/mmisp/api_schemas/roles.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/api_schemas/standard_status_response.py +0 -0
- {mmisp_lib-0.1.9/src/mmisp/api_schemas/attributes → mmisp_lib-0.1.11/src/mmisp/db}/__init__.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/all_models.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/config.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/database.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/mixins.py +0 -0
- {mmisp_lib-0.1.9/src/mmisp/api_schemas/auth_keys → mmisp_lib-0.1.11/src/mmisp/db/models}/__init__.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/attribute.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/auth_key.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/event.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/feed.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/galaxy.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/galaxy_cluster.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/identity_provider.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/noticelist.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/object.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/organisation.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/role.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/server.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/sharing_group.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/sighting.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/tag.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/taxonomy.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/user.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/user_setting.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/models/warninglist.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/mypy.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/print_changes.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/db/py.typed +0 -0
- {mmisp_lib-0.1.9/src/mmisp/api_schemas/authentication → mmisp_lib-0.1.11/src/mmisp/lib}/__init__.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/lib/permissions.py +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp/lib/py.typed +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp_lib.egg-info/dependency_links.txt +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp_lib.egg-info/requires.txt +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/src/mmisp_lib.egg-info/top_level.txt +0 -0
- {mmisp_lib-0.1.9 → mmisp_lib-0.1.11}/tests/test_dummy.py +0 -0
@@ -0,0 +1,440 @@
|
|
1
|
+
from typing import Annotated, Any, Dict, Optional
|
2
|
+
|
3
|
+
from pydantic import BaseModel, Field, root_validator, validator
|
4
|
+
|
5
|
+
from mmisp.lib.attributes import (
|
6
|
+
AttributeCategories,
|
7
|
+
default_category,
|
8
|
+
inverted_categories,
|
9
|
+
literal_valid_attribute_types,
|
10
|
+
mapper_val_safe_clsname,
|
11
|
+
to_ids,
|
12
|
+
)
|
13
|
+
|
14
|
+
|
15
|
+
class GetAttributeTag(BaseModel):
|
16
|
+
id: str
|
17
|
+
name: str
|
18
|
+
colour: str
|
19
|
+
numerical_value: int | None = None
|
20
|
+
is_galaxy: bool
|
21
|
+
local: bool
|
22
|
+
|
23
|
+
|
24
|
+
class SearchAttributesObject(BaseModel):
|
25
|
+
id: str
|
26
|
+
distribution: str
|
27
|
+
sharing_group_id: str
|
28
|
+
|
29
|
+
|
30
|
+
class SearchAttributesEvent(BaseModel):
|
31
|
+
id: str
|
32
|
+
org_id: str
|
33
|
+
distribution: str
|
34
|
+
info: str
|
35
|
+
orgc_id: str
|
36
|
+
uuid: str
|
37
|
+
|
38
|
+
|
39
|
+
class SearchAttributesAttributesDetails(BaseModel):
|
40
|
+
id: str
|
41
|
+
event_id: str | None = None
|
42
|
+
object_id: str | None = None
|
43
|
+
object_relation: str | None = None
|
44
|
+
category: str
|
45
|
+
type: str
|
46
|
+
value: str
|
47
|
+
to_ids: bool
|
48
|
+
uuid: str
|
49
|
+
timestamp: str
|
50
|
+
distribution: str
|
51
|
+
sharing_group_id: str | None = None
|
52
|
+
comment: str | None = None
|
53
|
+
deleted: bool
|
54
|
+
disable_correlation: bool
|
55
|
+
first_seen: str | None = None
|
56
|
+
last_seen: str | None = None
|
57
|
+
Event: SearchAttributesEvent | None = None
|
58
|
+
Object: SearchAttributesObject | None = None
|
59
|
+
Tag: list[GetAttributeTag] = []
|
60
|
+
|
61
|
+
|
62
|
+
class SearchAttributesAttributes(BaseModel):
|
63
|
+
Attribute: list[SearchAttributesAttributesDetails]
|
64
|
+
|
65
|
+
|
66
|
+
class SearchAttributesResponse(BaseModel):
|
67
|
+
response: SearchAttributesAttributes
|
68
|
+
|
69
|
+
|
70
|
+
class SearchAttributesModelOverridesBaseScoreConfig(BaseModel):
|
71
|
+
estimative_language_confidence_in_analytic_judgment: Annotated[
|
72
|
+
int, Field(alias="estimative-language:confidence-in-analytic-judgment")
|
73
|
+
]
|
74
|
+
estimative_language_likelihood_probability: Annotated[
|
75
|
+
int, Field(alias="estimative-language:likelihood-probability")
|
76
|
+
]
|
77
|
+
phishing_psychological_acceptability: Annotated[int, Field(alias="phishing:psychological-acceptability")]
|
78
|
+
phishing_state: Annotated[int, Field(alias="phishing:state")]
|
79
|
+
|
80
|
+
|
81
|
+
class SearchAttributesModelOverrides(BaseModel):
|
82
|
+
lifetime: int
|
83
|
+
decay_speed: int
|
84
|
+
threshold: int
|
85
|
+
default_base_score: int
|
86
|
+
base_score_config: SearchAttributesModelOverridesBaseScoreConfig
|
87
|
+
|
88
|
+
|
89
|
+
class SearchAttributesBody(BaseModel):
|
90
|
+
returnFormat: str = "json"
|
91
|
+
page: int | None = None
|
92
|
+
limit: int | None = None
|
93
|
+
value: str | None = None
|
94
|
+
value1: str | None = None
|
95
|
+
value2: str | None = None
|
96
|
+
type: str | None = None
|
97
|
+
category: str | None = None
|
98
|
+
org: str | None = None
|
99
|
+
tags: list[str] | None = None
|
100
|
+
from_: str | None = None
|
101
|
+
to: str | None = None
|
102
|
+
last: int | None = None
|
103
|
+
eventid: str | None = None
|
104
|
+
with_attachments: Annotated[bool | None, Field(alias="withAttachments")] = None
|
105
|
+
uuid: str | None = None
|
106
|
+
publish_timestamp: str | None = None
|
107
|
+
published: bool | None = None
|
108
|
+
timestamp: str | None = None
|
109
|
+
attribute_timestamp: str | None = None
|
110
|
+
enforce_warninglist: Annotated[bool | None, Field(alias="enforceWarninglist")]
|
111
|
+
to_ids: bool | None = None
|
112
|
+
deleted: bool | None = None
|
113
|
+
event_timestamp: str | None = None
|
114
|
+
threat_level_id: str | None = None
|
115
|
+
eventinfo: str | None = None
|
116
|
+
sharinggroup: list[str] | None = None
|
117
|
+
decaying_model: Annotated[str | None, Field(alias="decayingModel")] = None
|
118
|
+
score: str | None = None
|
119
|
+
first_seen: str | None = None
|
120
|
+
last_seen: str | None = None
|
121
|
+
include_event_uuid: Annotated[bool | None, Field(alias="includeEventUuid")] = None
|
122
|
+
include_event_tags: Annotated[bool | None, Field(alias="includeEventTags")] = None
|
123
|
+
include_proposals: Annotated[bool | None, Field(alias="includeProposals")] = None
|
124
|
+
requested_attributes: list[str] | None = None
|
125
|
+
include_context: Annotated[bool | None, Field(alias="includeContext")] = None
|
126
|
+
headerless: bool | None = None
|
127
|
+
include_warninglist_hits: Annotated[bool | None, Field(alias="includeWarninglistHits")] = None
|
128
|
+
attack_galaxy: Annotated[str | None, Field(alias="attackGalaxy")] = None
|
129
|
+
object_relation: str | None = None
|
130
|
+
include_sightings: Annotated[bool | None, Field(alias="includeSightings")] = None
|
131
|
+
include_correlations: Annotated[bool | None, Field(alias="includeCorrelations")] = None
|
132
|
+
model_overrides: Annotated[SearchAttributesModelOverrides | None, Field(alias="modelOverrides")] = None
|
133
|
+
include_decay_score: Annotated[bool | None, Field(alias="includeDecayScore")] = None
|
134
|
+
include_full_model: Annotated[bool | None, Field(alias="includeFullModel")] = None
|
135
|
+
exclude_decayed: Annotated[bool | None, Field(alias="excludeDecayed")] = None
|
136
|
+
|
137
|
+
class Config:
|
138
|
+
orm_mode = True
|
139
|
+
|
140
|
+
|
141
|
+
class RestoreAttributeResponse(BaseModel):
|
142
|
+
id: str
|
143
|
+
event_id: str
|
144
|
+
object_id: str
|
145
|
+
object_relation: str
|
146
|
+
category: str
|
147
|
+
type: str
|
148
|
+
value: str
|
149
|
+
to_ids: bool
|
150
|
+
uuid: str
|
151
|
+
timestamp: str
|
152
|
+
distribution: str
|
153
|
+
sharing_group_id: str
|
154
|
+
comment: str
|
155
|
+
deleted: bool
|
156
|
+
disable_correlation: bool
|
157
|
+
first_seen: str
|
158
|
+
last_seen: str
|
159
|
+
event_uuid: str # new
|
160
|
+
|
161
|
+
class Config:
|
162
|
+
orm_mode = True
|
163
|
+
|
164
|
+
|
165
|
+
class GetDescribeTypesAttributes(BaseModel):
|
166
|
+
sane_defaults: dict = {}
|
167
|
+
for k, v in to_ids.items():
|
168
|
+
sane_defaults.update(
|
169
|
+
{
|
170
|
+
k: {
|
171
|
+
"default_category": default_category[k],
|
172
|
+
"to_ids": v,
|
173
|
+
}
|
174
|
+
}
|
175
|
+
)
|
176
|
+
|
177
|
+
types: list[str] = list(mapper_val_safe_clsname.keys())
|
178
|
+
|
179
|
+
categories: list[str] = [member.value for member in AttributeCategories]
|
180
|
+
|
181
|
+
category_type_mappings: dict = inverted_categories
|
182
|
+
|
183
|
+
|
184
|
+
class GetDescribeTypesResponse(BaseModel):
|
185
|
+
result: GetDescribeTypesAttributes
|
186
|
+
|
187
|
+
class Config:
|
188
|
+
orm_mode = True
|
189
|
+
|
190
|
+
|
191
|
+
class GetAttributeAttributes(BaseModel):
|
192
|
+
id: str
|
193
|
+
event_id: str
|
194
|
+
object_id: str
|
195
|
+
object_relation: Optional[str] = Field(..., nullable=True)
|
196
|
+
category: str
|
197
|
+
type: str
|
198
|
+
value: str
|
199
|
+
to_ids: bool
|
200
|
+
uuid: str
|
201
|
+
timestamp: str
|
202
|
+
distribution: str
|
203
|
+
sharing_group_id: str
|
204
|
+
comment: str | None = None
|
205
|
+
deleted: bool
|
206
|
+
disable_correlation: bool
|
207
|
+
first_seen: Optional[str] = Field(..., nullable=True)
|
208
|
+
last_seen: Optional[str] = Field(..., nullable=True)
|
209
|
+
event_uuid: str
|
210
|
+
tag: list[GetAttributeTag] | None = None
|
211
|
+
|
212
|
+
|
213
|
+
class GetAttributeResponse(BaseModel):
|
214
|
+
Attribute: GetAttributeAttributes
|
215
|
+
|
216
|
+
class Config:
|
217
|
+
orm_mode = True
|
218
|
+
|
219
|
+
|
220
|
+
class GetAllAttributesResponse(BaseModel):
|
221
|
+
id: str
|
222
|
+
event_id: str | None = None
|
223
|
+
object_id: str | None = None
|
224
|
+
object_relation: str | None = None
|
225
|
+
category: str | None = None
|
226
|
+
type: str
|
227
|
+
value1: str | None = None
|
228
|
+
value2: str | None = None
|
229
|
+
to_ids: bool | None = None
|
230
|
+
uuid: str | None = None
|
231
|
+
timestamp: str | None = None
|
232
|
+
distribution: str | None = None
|
233
|
+
sharing_group_id: str | None = None
|
234
|
+
comment: str | None = None
|
235
|
+
deleted: bool | None = None
|
236
|
+
disable_correlation: bool | None = None
|
237
|
+
first_seen: str | None = None
|
238
|
+
last_seen: str | None = None
|
239
|
+
value: str | None = None
|
240
|
+
|
241
|
+
@validator("sharing_group_id", always=True)
|
242
|
+
def check_sharing_group_id(cls, value: Any, values: Dict[str, Any]) -> Optional[int]: # noqa: ANN101
|
243
|
+
"""
|
244
|
+
If distribution equals 4, sharing_group_id will be shown.
|
245
|
+
"""
|
246
|
+
distribution = values.get("distribution", None)
|
247
|
+
if distribution == "4" and value is not None:
|
248
|
+
return value
|
249
|
+
return None
|
250
|
+
|
251
|
+
class Config:
|
252
|
+
orm_mode = True
|
253
|
+
|
254
|
+
|
255
|
+
class EditAttributeTag(BaseModel):
|
256
|
+
id: str
|
257
|
+
name: str
|
258
|
+
colour: str
|
259
|
+
exportable: str
|
260
|
+
user_id: str
|
261
|
+
hide_tag: bool
|
262
|
+
numerical_value: int
|
263
|
+
is_galaxy: bool
|
264
|
+
is_costum_galaxy: bool
|
265
|
+
local_only: bool
|
266
|
+
|
267
|
+
|
268
|
+
class EditAttributeAttributes(BaseModel):
|
269
|
+
id: str
|
270
|
+
event_id: str
|
271
|
+
object_id: str
|
272
|
+
object_relation: str | None = None
|
273
|
+
category: str
|
274
|
+
type: str
|
275
|
+
value: str
|
276
|
+
to_ids: bool
|
277
|
+
uuid: str
|
278
|
+
timestamp: str
|
279
|
+
distribution: str
|
280
|
+
sharing_group_id: str
|
281
|
+
comment: str | None = None
|
282
|
+
deleted: bool
|
283
|
+
disable_correlation: bool
|
284
|
+
first_seen: str | None = None
|
285
|
+
last_seen: str | None = None
|
286
|
+
tag: list[EditAttributeTag]
|
287
|
+
|
288
|
+
|
289
|
+
class EditAttributeResponse(BaseModel):
|
290
|
+
Attribute: EditAttributeAttributes
|
291
|
+
|
292
|
+
class Config:
|
293
|
+
orm_mode = True
|
294
|
+
|
295
|
+
|
296
|
+
class EditAttributeBody(BaseModel):
|
297
|
+
type: str | None = None
|
298
|
+
value: str | None = None
|
299
|
+
value1: str | None = None
|
300
|
+
value2: str | None = None
|
301
|
+
object_id: str | None = None
|
302
|
+
object_relation: str | None = None
|
303
|
+
category: str | None = None
|
304
|
+
to_ids: bool | None = None
|
305
|
+
uuid: str | None = None
|
306
|
+
timestamp: str | None = None
|
307
|
+
distribution: str | None = None
|
308
|
+
sharing_group_id: str | None = None
|
309
|
+
comment: str | None = None
|
310
|
+
deleted: bool | None = None
|
311
|
+
disable_correlation: bool | None = None
|
312
|
+
first_seen: str | None = None
|
313
|
+
last_seen: str | None = None
|
314
|
+
|
315
|
+
class Config:
|
316
|
+
orm_mode = True
|
317
|
+
|
318
|
+
|
319
|
+
class DeleteSelectedAttributeResponse(BaseModel):
|
320
|
+
saved: bool
|
321
|
+
success: bool
|
322
|
+
name: str
|
323
|
+
message: str
|
324
|
+
url: str
|
325
|
+
id: str
|
326
|
+
|
327
|
+
class Config:
|
328
|
+
orm_mode = True
|
329
|
+
|
330
|
+
|
331
|
+
class DeleteSelectedAttributeBody(BaseModel):
|
332
|
+
id: str # id = "all" deletes all attributes in the event
|
333
|
+
allow_hard_delete: bool | None = None
|
334
|
+
|
335
|
+
class Config:
|
336
|
+
orm_mode = True
|
337
|
+
|
338
|
+
|
339
|
+
class DeleteAttributeResponse(BaseModel):
|
340
|
+
message: str
|
341
|
+
|
342
|
+
class Config:
|
343
|
+
orm_mode = True
|
344
|
+
|
345
|
+
|
346
|
+
class AddRemoveTagAttributeResponse(BaseModel):
|
347
|
+
saved: bool
|
348
|
+
success: Optional[str]
|
349
|
+
check_publish: Optional[bool]
|
350
|
+
errors: Optional[str]
|
351
|
+
|
352
|
+
class Config:
|
353
|
+
orm_mode = True
|
354
|
+
|
355
|
+
|
356
|
+
class AddAttributeAttributes(BaseModel):
|
357
|
+
id: str
|
358
|
+
event_id: str
|
359
|
+
object_id: str
|
360
|
+
object_relation: Optional[str] = Field(..., nullable=True)
|
361
|
+
category: str
|
362
|
+
type: str
|
363
|
+
value: str
|
364
|
+
value1: str
|
365
|
+
value2: str
|
366
|
+
to_ids: bool
|
367
|
+
uuid: str
|
368
|
+
timestamp: str
|
369
|
+
distribution: str
|
370
|
+
sharing_group_id: str
|
371
|
+
comment: str | None = None
|
372
|
+
deleted: bool
|
373
|
+
disable_correlation: bool
|
374
|
+
first_seen: str | None = None
|
375
|
+
last_seen: str | None = None
|
376
|
+
attribute_tag: list[str] | None = Field(default_factory=list, alias="AttributeTag")
|
377
|
+
|
378
|
+
|
379
|
+
class AddAttributeResponse(BaseModel):
|
380
|
+
Attribute: AddAttributeAttributes
|
381
|
+
|
382
|
+
class Config:
|
383
|
+
orm_mode = True
|
384
|
+
|
385
|
+
|
386
|
+
class AddAttributeBody(BaseModel):
|
387
|
+
type: literal_valid_attribute_types
|
388
|
+
value: str | None = None
|
389
|
+
value1: str | None = None
|
390
|
+
value2: str | None = None
|
391
|
+
event_id: str | None = None
|
392
|
+
object_id: str | None = None
|
393
|
+
object_relation: str | None = None
|
394
|
+
category: str | None = None
|
395
|
+
to_ids: bool | None = None
|
396
|
+
uuid: str | None = None
|
397
|
+
timestamp: str | None = None
|
398
|
+
distribution: str | None = None
|
399
|
+
sharing_group_id: str | None = None
|
400
|
+
comment: str | None = None
|
401
|
+
deleted: bool | None = None
|
402
|
+
disable_correlation: bool | None = None
|
403
|
+
first_seen: str | None = None
|
404
|
+
last_seen: str | None = None
|
405
|
+
|
406
|
+
@root_validator
|
407
|
+
def ensure_value_or_value1_is_set(cls, data: dict[str, Any]) -> Optional[dict[str, Any]]: # noqa: ANN101
|
408
|
+
required_values: list[str] = [str(data.get("value")), str(data.get("value1"))]
|
409
|
+
if all(item is None for item in required_values):
|
410
|
+
raise ValueError("value or value1 has to be set")
|
411
|
+
return data
|
412
|
+
|
413
|
+
|
414
|
+
GetAttributeStatisticsTypesResponseAttrs = {x: Field(default=None) for x in mapper_val_safe_clsname.keys()}
|
415
|
+
GetAttributeStatisticsTypesResponseAttrs["__annotations__"] = {x: str | None for x in mapper_val_safe_clsname.keys()}
|
416
|
+
GetAttributeStatisticsTypesResponse = type(
|
417
|
+
"GetAttributeStatisticsTypesResponse", (BaseModel,), GetAttributeStatisticsTypesResponseAttrs
|
418
|
+
)
|
419
|
+
|
420
|
+
|
421
|
+
class GetAttributeStatisticsCategoriesResponse(BaseModel):
|
422
|
+
antivirus_detection: str = Field(alias="Antivirus detection")
|
423
|
+
artifacts_dropped: str = Field(alias="Artifacts dropped")
|
424
|
+
attribution: str = Field(alias="Attribution")
|
425
|
+
external_analysis: str = Field(alias="External analysis")
|
426
|
+
financial_fraud: str = Field(alias="Financial fraud")
|
427
|
+
internal_reference: str = Field(alias="Internal reference")
|
428
|
+
network_activity: str = Field(alias="Network activity")
|
429
|
+
other: str = Field(alias="Other")
|
430
|
+
payload_delivery: str = Field(alias="Payload delivery")
|
431
|
+
payload_installation: str = Field(alias="Payload installation")
|
432
|
+
payload_type: str = Field(alias="Payload type")
|
433
|
+
persistence_mechanism: str = Field(alias="Persistence mechanism")
|
434
|
+
person: str = Field(alias="Person")
|
435
|
+
social_network: str = Field(alias="Social network")
|
436
|
+
support__tool: str = Field(alias="Support Tool")
|
437
|
+
targeting_data: str = Field(alias="Targeting data")
|
438
|
+
|
439
|
+
class Config:
|
440
|
+
orm_mode = True
|
@@ -0,0 +1,123 @@
|
|
1
|
+
from datetime import datetime
|
2
|
+
|
3
|
+
from pydantic import BaseModel, PositiveInt, conint
|
4
|
+
|
5
|
+
|
6
|
+
class SearchGetAuthKeysResponseItemUser(BaseModel):
|
7
|
+
id: str
|
8
|
+
email: str
|
9
|
+
|
10
|
+
|
11
|
+
class ViewAuthKeyResponseWrapper(BaseModel):
|
12
|
+
id: str
|
13
|
+
uuid: str
|
14
|
+
authkey_start: str
|
15
|
+
authkey_end: str
|
16
|
+
created: datetime
|
17
|
+
expiration: int
|
18
|
+
read_only: bool
|
19
|
+
user_id: str
|
20
|
+
comment: str
|
21
|
+
allowed_ips: list[str] | None = None
|
22
|
+
unique_ips: list[str] | None = []
|
23
|
+
|
24
|
+
|
25
|
+
class ViewAuthKeysResponse(BaseModel):
|
26
|
+
AuthKey: ViewAuthKeyResponseWrapper
|
27
|
+
User: SearchGetAuthKeysResponseItemUser
|
28
|
+
|
29
|
+
|
30
|
+
class SearchGetAuthKeysResponseItemAuthKey(BaseModel):
|
31
|
+
id: str
|
32
|
+
uuid: str
|
33
|
+
authkey_start: str
|
34
|
+
authkey_end: str
|
35
|
+
created: str
|
36
|
+
expiration: str
|
37
|
+
read_only: bool
|
38
|
+
user_id: str
|
39
|
+
comment: str | None
|
40
|
+
allowed_ips: list[str] | None = None
|
41
|
+
unique_ips: list[str] | None = []
|
42
|
+
|
43
|
+
|
44
|
+
class SearchGetAuthKeysResponseItem(BaseModel):
|
45
|
+
AuthKey: SearchGetAuthKeysResponseItemAuthKey
|
46
|
+
User: SearchGetAuthKeysResponseItemUser
|
47
|
+
|
48
|
+
class Config:
|
49
|
+
orm_mode = True
|
50
|
+
|
51
|
+
|
52
|
+
class SearchAuthKeyBody(BaseModel):
|
53
|
+
page: PositiveInt = 1
|
54
|
+
limit: conint(gt=0, lt=500) = 25 # type: ignore
|
55
|
+
id: str | None = None
|
56
|
+
uuid: str | None = None
|
57
|
+
authkey_start: str | None = None
|
58
|
+
authkey_end: str | None = None
|
59
|
+
created: str | None = None
|
60
|
+
expiration: str | None = None
|
61
|
+
read_only: bool | None = None
|
62
|
+
user_id: str | None = None
|
63
|
+
comment: str | None = None
|
64
|
+
allowed_ips: str | list[str] | None = None
|
65
|
+
last_used: str | None = None # deprecated
|
66
|
+
|
67
|
+
|
68
|
+
class EditAuthKeyResponseAuthKey(BaseModel):
|
69
|
+
id: str
|
70
|
+
uuid: str
|
71
|
+
authkey_start: str
|
72
|
+
authkey_end: str
|
73
|
+
created: str
|
74
|
+
expiration: str
|
75
|
+
read_only: bool
|
76
|
+
user_id: str
|
77
|
+
comment: str
|
78
|
+
allowed_ips: str | None = None
|
79
|
+
|
80
|
+
|
81
|
+
class EditAuthKeyResponseUser(BaseModel):
|
82
|
+
id: str
|
83
|
+
org_id: str
|
84
|
+
|
85
|
+
|
86
|
+
class EditAuthKeyResponse(BaseModel):
|
87
|
+
AuthKey: EditAuthKeyResponseAuthKey
|
88
|
+
User: EditAuthKeyResponseUser
|
89
|
+
|
90
|
+
|
91
|
+
class EditAuthKeyBody(BaseModel):
|
92
|
+
read_only: bool | None = None
|
93
|
+
comment: str | None = None
|
94
|
+
allowed_ips: list[str] | None = None
|
95
|
+
expiration: int | None = None
|
96
|
+
|
97
|
+
|
98
|
+
class AddAuthKeyResponseAuthKey(BaseModel):
|
99
|
+
id: str
|
100
|
+
uuid: str
|
101
|
+
authkey_start: str
|
102
|
+
authkey_end: str
|
103
|
+
created: str
|
104
|
+
expiration: str | None = "0"
|
105
|
+
read_only: bool
|
106
|
+
user_id: str
|
107
|
+
comment: str | None = None
|
108
|
+
allowed_ips: list[str] | None = None
|
109
|
+
unique_ips: list[str]
|
110
|
+
authkey_raw: str
|
111
|
+
|
112
|
+
|
113
|
+
class AddAuthKeyResponse(BaseModel):
|
114
|
+
AuthKey: AddAuthKeyResponseAuthKey
|
115
|
+
|
116
|
+
|
117
|
+
class AddAuthKeyBody(BaseModel):
|
118
|
+
uuid: str | None = None
|
119
|
+
read_only: bool | None = None
|
120
|
+
user_id: int | None = None
|
121
|
+
comment: str | None = None
|
122
|
+
allowed_ips: list[str] | None = None
|
123
|
+
expiration: int | str | None = 0
|
@@ -3,9 +3,8 @@ from enum import Enum
|
|
3
3
|
from pydantic import BaseModel
|
4
4
|
|
5
5
|
|
6
|
-
class
|
7
|
-
|
8
|
-
IDENTITY_PROVIDER = "idp"
|
6
|
+
class TokenResponse(BaseModel):
|
7
|
+
token: str
|
9
8
|
|
10
9
|
|
11
10
|
class IdentityProviderInfo(BaseModel):
|
@@ -16,6 +15,24 @@ class IdentityProviderInfo(BaseModel):
|
|
16
15
|
orm_mode = True
|
17
16
|
|
18
17
|
|
18
|
+
class LoginType(Enum):
|
19
|
+
PASSWORD = "password"
|
20
|
+
IDENTITY_PROVIDER = "idp"
|
21
|
+
|
22
|
+
|
23
|
+
class StartLoginBody(BaseModel):
|
24
|
+
email: str
|
25
|
+
|
26
|
+
|
27
|
+
class PasswordLoginBody(BaseModel):
|
28
|
+
email: str
|
29
|
+
password: str
|
30
|
+
|
31
|
+
|
32
|
+
class ExchangeTokenLoginBody(BaseModel):
|
33
|
+
exchangeToken: str
|
34
|
+
|
35
|
+
|
19
36
|
class StartLoginResponse(BaseModel):
|
20
37
|
loginType: LoginType
|
21
38
|
identityProviders: list[IdentityProviderInfo] = []
|
@@ -13,19 +13,3 @@ class TagAttributesResponse(BaseModel):
|
|
13
13
|
is_galaxy: bool | None = None
|
14
14
|
is_custom_galaxy: bool | None = None
|
15
15
|
local_only: bool | None = None
|
16
|
-
|
17
|
-
|
18
|
-
class TagViewResponse(TagAttributesResponse):
|
19
|
-
count: int
|
20
|
-
attribute_count: int
|
21
|
-
|
22
|
-
|
23
|
-
class TagResponse(BaseModel):
|
24
|
-
Tag: TagAttributesResponse
|
25
|
-
|
26
|
-
|
27
|
-
class TagGetResponse(BaseModel):
|
28
|
-
Tag: list[TagAttributesResponse]
|
29
|
-
|
30
|
-
class Config:
|
31
|
-
orm_mode = True
|