taegis-sdk-python 1.1.5__tar.gz → 1.1.7__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.
- {taegis-sdk-python-1.1.5/taegis_sdk_python.egg-info → taegis-sdk-python-1.1.7}/PKG-INFO +1 -1
- taegis-sdk-python-1.1.7/taegis_sdk_python/_version.py +1 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/service_core.py +103 -9
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/__init__.py +10 -1
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/types.py +3 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/types.py +6 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/types.py +140 -90
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/mutations.py +34 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/types.py +53 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/queries.py +22 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/types.py +45 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/mutations.py +50 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/queries.py +49 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/types.py +101 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/types.py +33 -3
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/types.py +3 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7/taegis_sdk_python.egg-info}/PKG-INFO +1 -1
- taegis-sdk-python-1.1.5/taegis_sdk_python/_version.py +0 -1
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/LICENSE +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/MANIFEST.in +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/README.md +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/requirements-dev.txt +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/requirements-test.txt +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/requirements.txt +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/setup.cfg +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/setup.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/_consts.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/authentication.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/config.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/errors.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/__init__.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/mutations.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/queries.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/subscriptions.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/types.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/tokens.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/utils.py +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python.egg-info/SOURCES.txt +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python.egg-info/dependency_links.txt +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python.egg-info/requires.txt +0 -0
- {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "v1.1.7"
|
|
@@ -5,12 +5,13 @@ Taegis ServiceCore manager.
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
import logging
|
|
8
|
-
from
|
|
8
|
+
from datetime import datetime, timedelta
|
|
9
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
|
9
10
|
|
|
10
11
|
from gql import Client, gql
|
|
11
12
|
from gql.transport.requests import RequestsHTTPTransport
|
|
12
13
|
from gql.transport.websockets import WebsocketsTransport
|
|
13
|
-
from graphql import GraphQLField, GraphQLSchema
|
|
14
|
+
from graphql import GraphQLError, GraphQLField, GraphQLSchema
|
|
14
15
|
from taegis_sdk_python._version import __version__
|
|
15
16
|
from taegis_sdk_python.errors import InvalidGraphQLEndpoint
|
|
16
17
|
from taegis_sdk_python.utils import async_block, prepare_variables, remove_node
|
|
@@ -22,6 +23,60 @@ if TYPE_CHECKING: # pragma: no cover
|
|
|
22
23
|
log = logging.getLogger(__name__)
|
|
23
24
|
|
|
24
25
|
|
|
26
|
+
class SchemaCache:
|
|
27
|
+
"""GraphQL Schema Cache."""
|
|
28
|
+
|
|
29
|
+
def __init__(self, schema: Optional[GraphQLSchema] = None, expires: int = 5):
|
|
30
|
+
"""Initialize SchemaCache.
|
|
31
|
+
|
|
32
|
+
Parameters
|
|
33
|
+
----------
|
|
34
|
+
schema : Optional[GraphQLSchema], optional
|
|
35
|
+
GraphQL schema object, by default None
|
|
36
|
+
expires : int, optional
|
|
37
|
+
Schema expires in minutes, by default 5
|
|
38
|
+
"""
|
|
39
|
+
self._schema = schema
|
|
40
|
+
self._inserted_at = datetime.now()
|
|
41
|
+
self.expires = expires
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def schema(self) -> Union[GraphQLSchema, None]:
|
|
45
|
+
"""Return GraphQLSchema if it exists and is not expired.
|
|
46
|
+
|
|
47
|
+
Returns
|
|
48
|
+
-------
|
|
49
|
+
Union[GraphQLSchema, None]
|
|
50
|
+
GraphQL Schema
|
|
51
|
+
"""
|
|
52
|
+
if self._inserted_at + timedelta(minutes=self.expires) < datetime.now():
|
|
53
|
+
self.schema = None
|
|
54
|
+
return self._schema
|
|
55
|
+
|
|
56
|
+
@schema.setter
|
|
57
|
+
def schema(self, schema: Optional[GraphQLSchema]):
|
|
58
|
+
"""Set schema and update inserted_at.
|
|
59
|
+
|
|
60
|
+
Parameters
|
|
61
|
+
----------
|
|
62
|
+
schema :
|
|
63
|
+
_description_
|
|
64
|
+
"""
|
|
65
|
+
if self._schema is not schema:
|
|
66
|
+
self._schema = schema
|
|
67
|
+
self._inserted_at = datetime.now()
|
|
68
|
+
|
|
69
|
+
def should_fetch_schema(self) -> bool:
|
|
70
|
+
"""Return True if schema is should be fetched in transport.
|
|
71
|
+
|
|
72
|
+
Returns
|
|
73
|
+
-------
|
|
74
|
+
bool
|
|
75
|
+
True if schema is should be fetched in transport.
|
|
76
|
+
"""
|
|
77
|
+
return not self.schema
|
|
78
|
+
|
|
79
|
+
|
|
25
80
|
class ServiceCore:
|
|
26
81
|
"""Taegis GraphQL Service core functionality."""
|
|
27
82
|
|
|
@@ -31,22 +86,24 @@ class ServiceCore:
|
|
|
31
86
|
self._urls = self.service._environments
|
|
32
87
|
self._gateway = self.service._gateway
|
|
33
88
|
|
|
89
|
+
self._schema = SchemaCache(schema=None, expires=self.service.schema_expiry)
|
|
90
|
+
|
|
34
91
|
self._queries = None
|
|
35
92
|
self._mutations = None
|
|
36
93
|
self._subscriptions = None
|
|
37
94
|
|
|
38
95
|
@property
|
|
39
|
-
def sync_url(self):
|
|
96
|
+
def sync_url(self) -> str:
|
|
40
97
|
"""Syncronous URL."""
|
|
41
98
|
return self.service.url or self._urls.get(self.service.environment)
|
|
42
99
|
|
|
43
100
|
@property
|
|
44
|
-
def wss_url(self):
|
|
101
|
+
def wss_url(self) -> str:
|
|
45
102
|
"""WebSockets URL."""
|
|
46
103
|
return self.sync_url.replace("https", "wss")
|
|
47
104
|
|
|
48
105
|
@property
|
|
49
|
-
def gateway(self):
|
|
106
|
+
def gateway(self) -> str:
|
|
50
107
|
"""GraphQL Gateway"""
|
|
51
108
|
return self.service.gateway or self._gateway
|
|
52
109
|
|
|
@@ -72,7 +129,16 @@ class ServiceCore:
|
|
|
72
129
|
f"{self.sync_url}{self.gateway}",
|
|
73
130
|
headers=self.service.headers,
|
|
74
131
|
)
|
|
75
|
-
|
|
132
|
+
|
|
133
|
+
client = Client(
|
|
134
|
+
transport=transport,
|
|
135
|
+
schema=self._schema.schema,
|
|
136
|
+
fetch_schema_from_transport=self._schema.should_fetch_schema(),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
with client:
|
|
140
|
+
self._schema.schema = client.schema
|
|
141
|
+
|
|
76
142
|
return client
|
|
77
143
|
|
|
78
144
|
@property
|
|
@@ -83,6 +149,12 @@ class ServiceCore:
|
|
|
83
149
|
f"access-token-{self.service.access_token}",
|
|
84
150
|
]
|
|
85
151
|
|
|
152
|
+
# we cannot build the async client and use it to fetch the schema
|
|
153
|
+
# due to async issues with the transport. This will grab the schema
|
|
154
|
+
# from a sync client and use it to build the async client.
|
|
155
|
+
if not self._schema.schema:
|
|
156
|
+
self.sync_client # pylint: disable=pointless-statement
|
|
157
|
+
|
|
86
158
|
if self.service.tenant_id:
|
|
87
159
|
subprotocols.append(f"x-tenant-context-{self.service.tenant_id}")
|
|
88
160
|
|
|
@@ -92,10 +164,32 @@ class ServiceCore:
|
|
|
92
164
|
subprotocols=subprotocols,
|
|
93
165
|
connect_args={"max_size": None},
|
|
94
166
|
)
|
|
95
|
-
|
|
167
|
+
|
|
168
|
+
client = Client(
|
|
169
|
+
transport=transport,
|
|
170
|
+
schema=self._schema.schema,
|
|
171
|
+
fetch_schema_from_transport=self._schema.should_fetch_schema(),
|
|
172
|
+
)
|
|
173
|
+
|
|
96
174
|
return client
|
|
97
175
|
|
|
98
|
-
|
|
176
|
+
@property
|
|
177
|
+
def schema(self) -> GraphQLSchema:
|
|
178
|
+
"""Retrieves introspection schema from Synchronous endpoint.
|
|
179
|
+
|
|
180
|
+
Returns
|
|
181
|
+
-------
|
|
182
|
+
GraphQLSchema
|
|
183
|
+
"""
|
|
184
|
+
if not self._schema.schema:
|
|
185
|
+
self.sync_client # pylint: disable=pointless-statement
|
|
186
|
+
return self._schema.schema
|
|
187
|
+
|
|
188
|
+
def clear_schema(self):
|
|
189
|
+
"""Clears the introspection schema."""
|
|
190
|
+
self._schema.schema = None
|
|
191
|
+
|
|
192
|
+
def get_sync_schema(self) -> Union[GraphQLSchema, None]:
|
|
99
193
|
"""Retrieves introspection schema from Synchronous endpoint.
|
|
100
194
|
|
|
101
195
|
Returns
|
|
@@ -108,7 +202,7 @@ class ServiceCore:
|
|
|
108
202
|
return schema
|
|
109
203
|
|
|
110
204
|
@async_block
|
|
111
|
-
async def get_ws_schema(self) -> GraphQLSchema:
|
|
205
|
+
async def get_ws_schema(self) -> Union[GraphQLSchema, None]:
|
|
112
206
|
"""Retrieves introspection schema from WebSockets endpoint.
|
|
113
207
|
|
|
114
208
|
Returns
|
|
@@ -63,7 +63,8 @@ class GraphQLService:
|
|
|
63
63
|
environments: Optional[Dict[str, str]] = None,
|
|
64
64
|
gateway: Optional[str] = None,
|
|
65
65
|
extra_headers: Optional[Dict[str, Any]] = None,
|
|
66
|
-
|
|
66
|
+
schema_expiry: int = 5,
|
|
67
|
+
): # pylint: disable=too-many-statements
|
|
67
68
|
"""
|
|
68
69
|
GraphQLService
|
|
69
70
|
|
|
@@ -79,6 +80,8 @@ class GraphQLService:
|
|
|
79
80
|
Default Taegis Gateway, can be overwritten by service
|
|
80
81
|
extra_headers: Optional[Dict[str, Any]], optional
|
|
81
82
|
Extra HTTP Headers to be included in API calls
|
|
83
|
+
schema_expiry: int, optional
|
|
84
|
+
Expire time for GraphQL Schema Caching in minutes, by default 1
|
|
82
85
|
|
|
83
86
|
Raises
|
|
84
87
|
------
|
|
@@ -99,6 +102,7 @@ class GraphQLService:
|
|
|
99
102
|
self._extra_headers = {}
|
|
100
103
|
else:
|
|
101
104
|
self._extra_headers = extra_headers
|
|
105
|
+
self._schema_expiry = schema_expiry
|
|
102
106
|
|
|
103
107
|
self._access_points = None
|
|
104
108
|
self._agent = None
|
|
@@ -224,6 +228,11 @@ class GraphQLService:
|
|
|
224
228
|
|
|
225
229
|
return headers
|
|
226
230
|
|
|
231
|
+
@property
|
|
232
|
+
def schema_expiry(self):
|
|
233
|
+
"""GraphQL Schema Timeout."""
|
|
234
|
+
return self._context_manager.get("schema_expiry", self._schema_expiry)
|
|
235
|
+
|
|
227
236
|
@property
|
|
228
237
|
def access_points(self):
|
|
229
238
|
"""Access Points Service Endpoint."""
|
{taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/types.py
RENAMED
|
@@ -136,6 +136,9 @@ class AuditInput:
|
|
|
136
136
|
tenant_id: Optional[str] = field(
|
|
137
137
|
default=None, metadata=config(field_name="tenantId")
|
|
138
138
|
)
|
|
139
|
+
event_name: Optional[str] = field(
|
|
140
|
+
default=None, metadata=config(field_name="eventName")
|
|
141
|
+
)
|
|
139
142
|
event_name_index: Optional[int] = field(
|
|
140
143
|
default=None, metadata=config(field_name="eventNameIndex")
|
|
141
144
|
)
|
|
@@ -44,6 +44,9 @@ class SearchDetectors:
|
|
|
44
44
|
alerting_rule: Optional[bool] = field(
|
|
45
45
|
default=None, metadata=config(field_name="alertingRule")
|
|
46
46
|
)
|
|
47
|
+
should_compact: Optional[bool] = field(
|
|
48
|
+
default=None, metadata=config(field_name="shouldCompact")
|
|
49
|
+
)
|
|
47
50
|
created_on_or_after: Optional[str] = field(
|
|
48
51
|
default=None, metadata=config(field_name="createdOnOrAfter")
|
|
49
52
|
)
|
|
@@ -80,6 +83,9 @@ class RegisteredDetector:
|
|
|
80
83
|
alerting_rule: Optional[bool] = field(
|
|
81
84
|
default=None, metadata=config(field_name="alertingRule")
|
|
82
85
|
)
|
|
86
|
+
should_compact: Optional[bool] = field(
|
|
87
|
+
default=None, metadata=config(field_name="shouldCompact")
|
|
88
|
+
)
|
|
83
89
|
created_at: Optional[str] = field(
|
|
84
90
|
default=None, metadata=config(field_name="createdAt")
|
|
85
91
|
)
|
|
@@ -689,6 +689,14 @@ class TDRUser:
|
|
|
689
689
|
id: Optional[str] = field(default=None, metadata=config(field_name="id"))
|
|
690
690
|
|
|
691
691
|
|
|
692
|
+
@dataclass_json
|
|
693
|
+
@dataclass(order=True, eq=True, frozen=True)
|
|
694
|
+
class Subject:
|
|
695
|
+
"""Subject."""
|
|
696
|
+
|
|
697
|
+
id: Optional[str] = field(default=None, metadata=config(field_name="id"))
|
|
698
|
+
|
|
699
|
+
|
|
692
700
|
@dataclass_json
|
|
693
701
|
@dataclass(order=True, eq=True, frozen=True)
|
|
694
702
|
class InvestigationFileMeta:
|
|
@@ -918,38 +926,6 @@ class ExportInvestigationResourcesArgument:
|
|
|
918
926
|
)
|
|
919
927
|
|
|
920
928
|
|
|
921
|
-
@dataclass_json
|
|
922
|
-
@dataclass(order=True, eq=True, frozen=True)
|
|
923
|
-
class InvestigationV2TimelineEntity:
|
|
924
|
-
"""InvestigationV2TimelineEntity."""
|
|
925
|
-
|
|
926
|
-
type: Optional[str] = field(default=None, metadata=config(field_name="type"))
|
|
927
|
-
id: Optional[str] = field(default=None, metadata=config(field_name="id"))
|
|
928
|
-
investigation_id: Optional[str] = field(
|
|
929
|
-
default=None, metadata=config(field_name="investigationId")
|
|
930
|
-
)
|
|
931
|
-
tenant_id: Optional[str] = field(
|
|
932
|
-
default=None, metadata=config(field_name="tenantId")
|
|
933
|
-
)
|
|
934
|
-
created_at: Optional[str] = field(
|
|
935
|
-
default=None, metadata=config(field_name="createdAt")
|
|
936
|
-
)
|
|
937
|
-
timestamp: Optional[str] = field(
|
|
938
|
-
default=None, metadata=config(field_name="timestamp")
|
|
939
|
-
)
|
|
940
|
-
entity_id: Optional[str] = field(
|
|
941
|
-
default=None, metadata=config(field_name="entityId")
|
|
942
|
-
)
|
|
943
|
-
description: Optional[str] = field(
|
|
944
|
-
default=None, metadata=config(field_name="description")
|
|
945
|
-
)
|
|
946
|
-
descriptor: Optional[str] = field(
|
|
947
|
-
default=None, metadata=config(field_name="descriptor")
|
|
948
|
-
)
|
|
949
|
-
user_id: Optional[str] = field(default=None, metadata=config(field_name="userId"))
|
|
950
|
-
user: Optional[TDRUser] = field(default=None, metadata=config(field_name="user"))
|
|
951
|
-
|
|
952
|
-
|
|
953
929
|
@dataclass_json
|
|
954
930
|
@dataclass(order=True, eq=True, frozen=True)
|
|
955
931
|
class InvestigationV2Type:
|
|
@@ -1079,6 +1055,41 @@ class InvestigationV2TimelineArguments:
|
|
|
1079
1055
|
)
|
|
1080
1056
|
|
|
1081
1057
|
|
|
1058
|
+
@dataclass_json
|
|
1059
|
+
@dataclass(order=True, eq=True, frozen=True)
|
|
1060
|
+
class InvestigationV2TimelineEntity:
|
|
1061
|
+
"""InvestigationV2TimelineEntity."""
|
|
1062
|
+
|
|
1063
|
+
type: Optional[str] = field(default=None, metadata=config(field_name="type"))
|
|
1064
|
+
id: Optional[str] = field(default=None, metadata=config(field_name="id"))
|
|
1065
|
+
investigation_id: Optional[str] = field(
|
|
1066
|
+
default=None, metadata=config(field_name="investigationId")
|
|
1067
|
+
)
|
|
1068
|
+
tenant_id: Optional[str] = field(
|
|
1069
|
+
default=None, metadata=config(field_name="tenantId")
|
|
1070
|
+
)
|
|
1071
|
+
created_at: Optional[str] = field(
|
|
1072
|
+
default=None, metadata=config(field_name="createdAt")
|
|
1073
|
+
)
|
|
1074
|
+
timestamp: Optional[str] = field(
|
|
1075
|
+
default=None, metadata=config(field_name="timestamp")
|
|
1076
|
+
)
|
|
1077
|
+
entity_id: Optional[str] = field(
|
|
1078
|
+
default=None, metadata=config(field_name="entityId")
|
|
1079
|
+
)
|
|
1080
|
+
description: Optional[str] = field(
|
|
1081
|
+
default=None, metadata=config(field_name="description")
|
|
1082
|
+
)
|
|
1083
|
+
descriptor: Optional[str] = field(
|
|
1084
|
+
default=None, metadata=config(field_name="descriptor")
|
|
1085
|
+
)
|
|
1086
|
+
user_id: Optional[str] = field(default=None, metadata=config(field_name="userId"))
|
|
1087
|
+
user: Optional[TDRUser] = field(default=None, metadata=config(field_name="user"))
|
|
1088
|
+
user_subject: Optional[Subject] = field(
|
|
1089
|
+
default=None, metadata=config(field_name="userSubject")
|
|
1090
|
+
)
|
|
1091
|
+
|
|
1092
|
+
|
|
1082
1093
|
@dataclass_json
|
|
1083
1094
|
@dataclass(order=True, eq=True, frozen=True)
|
|
1084
1095
|
class CommentsV2Arguments:
|
|
@@ -1113,6 +1124,22 @@ class AggregatedCounts:
|
|
|
1113
1124
|
)
|
|
1114
1125
|
|
|
1115
1126
|
|
|
1127
|
+
@dataclass_json
|
|
1128
|
+
@dataclass(order=True, eq=True, frozen=True)
|
|
1129
|
+
class InvestigationProcessingStatus:
|
|
1130
|
+
"""InvestigationProcessingStatus."""
|
|
1131
|
+
|
|
1132
|
+
assets: Optional[InvestigationProcessingState] = field(
|
|
1133
|
+
default=None, metadata=config(field_name="assets")
|
|
1134
|
+
)
|
|
1135
|
+
events: Optional[InvestigationProcessingState] = field(
|
|
1136
|
+
default=None, metadata=config(field_name="events")
|
|
1137
|
+
)
|
|
1138
|
+
alerts: Optional[InvestigationProcessingState] = field(
|
|
1139
|
+
default=None, metadata=config(field_name="alerts")
|
|
1140
|
+
)
|
|
1141
|
+
|
|
1142
|
+
|
|
1116
1143
|
@dataclass_json
|
|
1117
1144
|
@dataclass(order=True, eq=True, frozen=True)
|
|
1118
1145
|
class InvestigationTemplate:
|
|
@@ -1167,72 +1194,20 @@ class InvestigationTemplate:
|
|
|
1167
1194
|
created_by: Optional[TDRUser] = field(
|
|
1168
1195
|
default=None, metadata=config(field_name="createdBy")
|
|
1169
1196
|
)
|
|
1197
|
+
created_by_subject: Optional[Subject] = field(
|
|
1198
|
+
default=None, metadata=config(field_name="createdBySubject")
|
|
1199
|
+
)
|
|
1170
1200
|
updated_by: Optional[TDRUser] = field(
|
|
1171
1201
|
default=None, metadata=config(field_name="updatedBy")
|
|
1172
1202
|
)
|
|
1203
|
+
updated_by_subject: Optional[Subject] = field(
|
|
1204
|
+
default=None, metadata=config(field_name="updatedBySubject")
|
|
1205
|
+
)
|
|
1173
1206
|
investigation_assignee_user: Optional[TDRUser] = field(
|
|
1174
1207
|
default=None, metadata=config(field_name="investigationAssigneeUser")
|
|
1175
1208
|
)
|
|
1176
1209
|
|
|
1177
1210
|
|
|
1178
|
-
@dataclass_json
|
|
1179
|
-
@dataclass(order=True, eq=True, frozen=True)
|
|
1180
|
-
class InvestigationProcessingStatus:
|
|
1181
|
-
"""InvestigationProcessingStatus."""
|
|
1182
|
-
|
|
1183
|
-
assets: Optional[InvestigationProcessingState] = field(
|
|
1184
|
-
default=None, metadata=config(field_name="assets")
|
|
1185
|
-
)
|
|
1186
|
-
events: Optional[InvestigationProcessingState] = field(
|
|
1187
|
-
default=None, metadata=config(field_name="events")
|
|
1188
|
-
)
|
|
1189
|
-
alerts: Optional[InvestigationProcessingState] = field(
|
|
1190
|
-
default=None, metadata=config(field_name="alerts")
|
|
1191
|
-
)
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
@dataclass_json
|
|
1195
|
-
@dataclass(order=True, eq=True, frozen=True)
|
|
1196
|
-
class CommentV2:
|
|
1197
|
-
"""CommentV2."""
|
|
1198
|
-
|
|
1199
|
-
id: Optional[str] = field(default=None, metadata=config(field_name="id"))
|
|
1200
|
-
created_at: Optional[str] = field(
|
|
1201
|
-
default=None, metadata=config(field_name="createdAt")
|
|
1202
|
-
)
|
|
1203
|
-
updated_at: Optional[str] = field(
|
|
1204
|
-
default=None, metadata=config(field_name="updatedAt")
|
|
1205
|
-
)
|
|
1206
|
-
author_id: Optional[str] = field(
|
|
1207
|
-
default=None, metadata=config(field_name="authorId")
|
|
1208
|
-
)
|
|
1209
|
-
comment: Optional[str] = field(default=None, metadata=config(field_name="comment"))
|
|
1210
|
-
investigation_id: Optional[str] = field(
|
|
1211
|
-
default=None, metadata=config(field_name="investigationId")
|
|
1212
|
-
)
|
|
1213
|
-
tenant_id: Optional[str] = field(
|
|
1214
|
-
default=None, metadata=config(field_name="tenantId")
|
|
1215
|
-
)
|
|
1216
|
-
mentions_ids: Optional[List[str]] = field(
|
|
1217
|
-
default=None, metadata=config(field_name="mentionsIds")
|
|
1218
|
-
)
|
|
1219
|
-
read_by_ids: Optional[List[str]] = field(
|
|
1220
|
-
default=None, metadata=config(field_name="readByIds")
|
|
1221
|
-
)
|
|
1222
|
-
is_internal: Optional[bool] = field(
|
|
1223
|
-
default=None, metadata=config(field_name="isInternal")
|
|
1224
|
-
)
|
|
1225
|
-
author: Optional[TDRUser] = field(
|
|
1226
|
-
default=None, metadata=config(field_name="author")
|
|
1227
|
-
)
|
|
1228
|
-
mentions_users: Optional[List[TDRUser]] = field(
|
|
1229
|
-
default=None, metadata=config(field_name="mentionsUsers")
|
|
1230
|
-
)
|
|
1231
|
-
read_by: Optional[List[TDRUser]] = field(
|
|
1232
|
-
default=None, metadata=config(field_name="readBy")
|
|
1233
|
-
)
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
1211
|
@dataclass_json
|
|
1237
1212
|
@dataclass(order=True, eq=True, frozen=True)
|
|
1238
1213
|
class InvestigationFileV2:
|
|
@@ -1270,9 +1245,15 @@ class InvestigationFileV2:
|
|
|
1270
1245
|
uploaded_by: Optional[TDRUser] = field(
|
|
1271
1246
|
default=None, metadata=config(field_name="uploadedBy")
|
|
1272
1247
|
)
|
|
1248
|
+
uploaded_by_subject: Optional[Subject] = field(
|
|
1249
|
+
default=None, metadata=config(field_name="uploadedBySubject")
|
|
1250
|
+
)
|
|
1273
1251
|
deleted_by: Optional[TDRUser] = field(
|
|
1274
1252
|
default=None, metadata=config(field_name="deletedBy")
|
|
1275
1253
|
)
|
|
1254
|
+
deleted_by_subject: Optional[Subject] = field(
|
|
1255
|
+
default=None, metadata=config(field_name="deletedBySubject")
|
|
1256
|
+
)
|
|
1276
1257
|
metadata: Optional[InvestigationFileMeta] = field(
|
|
1277
1258
|
default=None, metadata=config(field_name="metadata")
|
|
1278
1259
|
)
|
|
@@ -1354,9 +1335,15 @@ class InvestigationRule:
|
|
|
1354
1335
|
created_by: Optional[TDRUser] = field(
|
|
1355
1336
|
default=None, metadata=config(field_name="createdBy")
|
|
1356
1337
|
)
|
|
1338
|
+
created_by_subject: Optional[Subject] = field(
|
|
1339
|
+
default=None, metadata=config(field_name="createdBySubject")
|
|
1340
|
+
)
|
|
1357
1341
|
updated_by: Optional[TDRUser] = field(
|
|
1358
1342
|
default=None, metadata=config(field_name="updatedBy")
|
|
1359
1343
|
)
|
|
1344
|
+
updated_by_subject: Optional[Subject] = field(
|
|
1345
|
+
default=None, metadata=config(field_name="updatedBySubject")
|
|
1346
|
+
)
|
|
1360
1347
|
state: Optional[InvestigationRuleState] = field(
|
|
1361
1348
|
default=None, metadata=config(field_name="state")
|
|
1362
1349
|
)
|
|
@@ -1365,6 +1352,57 @@ class InvestigationRule:
|
|
|
1365
1352
|
)
|
|
1366
1353
|
|
|
1367
1354
|
|
|
1355
|
+
@dataclass_json
|
|
1356
|
+
@dataclass(order=True, eq=True, frozen=True)
|
|
1357
|
+
class CommentV2:
|
|
1358
|
+
"""CommentV2."""
|
|
1359
|
+
|
|
1360
|
+
id: Optional[str] = field(default=None, metadata=config(field_name="id"))
|
|
1361
|
+
created_at: Optional[str] = field(
|
|
1362
|
+
default=None, metadata=config(field_name="createdAt")
|
|
1363
|
+
)
|
|
1364
|
+
updated_at: Optional[str] = field(
|
|
1365
|
+
default=None, metadata=config(field_name="updatedAt")
|
|
1366
|
+
)
|
|
1367
|
+
author_id: Optional[str] = field(
|
|
1368
|
+
default=None, metadata=config(field_name="authorId")
|
|
1369
|
+
)
|
|
1370
|
+
comment: Optional[str] = field(default=None, metadata=config(field_name="comment"))
|
|
1371
|
+
investigation_id: Optional[str] = field(
|
|
1372
|
+
default=None, metadata=config(field_name="investigationId")
|
|
1373
|
+
)
|
|
1374
|
+
tenant_id: Optional[str] = field(
|
|
1375
|
+
default=None, metadata=config(field_name="tenantId")
|
|
1376
|
+
)
|
|
1377
|
+
mentions_ids: Optional[List[str]] = field(
|
|
1378
|
+
default=None, metadata=config(field_name="mentionsIds")
|
|
1379
|
+
)
|
|
1380
|
+
read_by_ids: Optional[List[str]] = field(
|
|
1381
|
+
default=None, metadata=config(field_name="readByIds")
|
|
1382
|
+
)
|
|
1383
|
+
is_internal: Optional[bool] = field(
|
|
1384
|
+
default=None, metadata=config(field_name="isInternal")
|
|
1385
|
+
)
|
|
1386
|
+
author: Optional[TDRUser] = field(
|
|
1387
|
+
default=None, metadata=config(field_name="author")
|
|
1388
|
+
)
|
|
1389
|
+
author_subject: Optional[Subject] = field(
|
|
1390
|
+
default=None, metadata=config(field_name="authorSubject")
|
|
1391
|
+
)
|
|
1392
|
+
mentions_subjects: Optional[List[Subject]] = field(
|
|
1393
|
+
default=None, metadata=config(field_name="mentionsSubjects")
|
|
1394
|
+
)
|
|
1395
|
+
mentions_users: Optional[List[TDRUser]] = field(
|
|
1396
|
+
default=None, metadata=config(field_name="mentionsUsers")
|
|
1397
|
+
)
|
|
1398
|
+
read_by_subjects: Optional[List[Subject]] = field(
|
|
1399
|
+
default=None, metadata=config(field_name="readBySubjects")
|
|
1400
|
+
)
|
|
1401
|
+
read_by: Optional[List[TDRUser]] = field(
|
|
1402
|
+
default=None, metadata=config(field_name="readBy")
|
|
1403
|
+
)
|
|
1404
|
+
|
|
1405
|
+
|
|
1368
1406
|
@dataclass_json
|
|
1369
1407
|
@dataclass(order=True, eq=True, frozen=True)
|
|
1370
1408
|
class InvestigationV2:
|
|
@@ -1489,15 +1527,27 @@ class InvestigationV2:
|
|
|
1489
1527
|
contributors: Optional[List[TDRUser]] = field(
|
|
1490
1528
|
default=None, metadata=config(field_name="contributors")
|
|
1491
1529
|
)
|
|
1530
|
+
contributor_subjects: Optional[List[Subject]] = field(
|
|
1531
|
+
default=None, metadata=config(field_name="contributorSubjects")
|
|
1532
|
+
)
|
|
1492
1533
|
assignee: Optional[TDRUser] = field(
|
|
1493
1534
|
default=None, metadata=config(field_name="assignee")
|
|
1494
1535
|
)
|
|
1536
|
+
assignee_subject: Optional[Subject] = field(
|
|
1537
|
+
default=None, metadata=config(field_name="assigneeSubject")
|
|
1538
|
+
)
|
|
1495
1539
|
created_by: Optional[TDRUser] = field(
|
|
1496
1540
|
default=None, metadata=config(field_name="createdBy")
|
|
1497
1541
|
)
|
|
1542
|
+
created_by_subject: Optional[Subject] = field(
|
|
1543
|
+
default=None, metadata=config(field_name="createdBySubject")
|
|
1544
|
+
)
|
|
1498
1545
|
updated_by: Optional[TDRUser] = field(
|
|
1499
1546
|
default=None, metadata=config(field_name="updatedBy")
|
|
1500
1547
|
)
|
|
1548
|
+
updated_by_subject: Optional[Subject] = field(
|
|
1549
|
+
default=None, metadata=config(field_name="updatedBySubject")
|
|
1550
|
+
)
|
|
1501
1551
|
type: Optional[InvestigationType] = field(
|
|
1502
1552
|
default=None, metadata=config(field_name="type")
|
|
1503
1553
|
)
|
|
@@ -159,3 +159,37 @@ class TaegisSDKPreferencesMutation:
|
|
|
159
159
|
if result.get(endpoint) is not None:
|
|
160
160
|
return PartnerPreference.from_dict(result.get(endpoint))
|
|
161
161
|
raise GraphQLNoRowsInResultSetError("for mutation savePartnerPreferences")
|
|
162
|
+
|
|
163
|
+
def set_user_preferences(
|
|
164
|
+
self, user_preference_input: UserPreferenceInput
|
|
165
|
+
) -> UserPreferenceDictionary:
|
|
166
|
+
"""None."""
|
|
167
|
+
endpoint = "setUserPreferences"
|
|
168
|
+
|
|
169
|
+
result = self.service.execute_mutation(
|
|
170
|
+
endpoint=endpoint,
|
|
171
|
+
variables={
|
|
172
|
+
"userPreferenceInput": prepare_input(user_preference_input),
|
|
173
|
+
},
|
|
174
|
+
output=build_output_string(UserPreferenceDictionary),
|
|
175
|
+
)
|
|
176
|
+
if result.get(endpoint) is not None:
|
|
177
|
+
return UserPreferenceDictionary.from_dict(result.get(endpoint))
|
|
178
|
+
raise GraphQLNoRowsInResultSetError("for mutation setUserPreferences")
|
|
179
|
+
|
|
180
|
+
def unset_user_preferences(
|
|
181
|
+
self, unset_preference_selector: Optional[UnsetPreferenceSelector] = None
|
|
182
|
+
) -> UserPreferenceDictionary:
|
|
183
|
+
"""None."""
|
|
184
|
+
endpoint = "unsetUserPreferences"
|
|
185
|
+
|
|
186
|
+
result = self.service.execute_mutation(
|
|
187
|
+
endpoint=endpoint,
|
|
188
|
+
variables={
|
|
189
|
+
"unsetPreferenceSelector": prepare_input(unset_preference_selector),
|
|
190
|
+
},
|
|
191
|
+
output=build_output_string(UserPreferenceDictionary),
|
|
192
|
+
)
|
|
193
|
+
if result.get(endpoint) is not None:
|
|
194
|
+
return UserPreferenceDictionary.from_dict(result.get(endpoint))
|
|
195
|
+
raise GraphQLNoRowsInResultSetError("for mutation unsetUserPreferences")
|
{taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/types.py
RENAMED
|
@@ -175,6 +175,23 @@ class listAllTenantPreferencesInput:
|
|
|
175
175
|
)
|
|
176
176
|
|
|
177
177
|
|
|
178
|
+
@dataclass_json
|
|
179
|
+
@dataclass(order=True, eq=True, frozen=True)
|
|
180
|
+
class UserPreferenceInput:
|
|
181
|
+
"""UserPreferenceInput."""
|
|
182
|
+
|
|
183
|
+
category: Optional[str] = field(
|
|
184
|
+
default=None, metadata=config(field_name="category")
|
|
185
|
+
)
|
|
186
|
+
sub_key: Optional[str] = field(default=None, metadata=config(field_name="subKey"))
|
|
187
|
+
preference_items: Optional[dict] = field(
|
|
188
|
+
default=None, metadata=config(field_name="preferenceItems")
|
|
189
|
+
)
|
|
190
|
+
is_global: Optional[bool] = field(
|
|
191
|
+
default=None, metadata=config(field_name="isGlobal")
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
|
|
178
195
|
@dataclass_json
|
|
179
196
|
@dataclass(order=True, eq=True, frozen=True)
|
|
180
197
|
class PartnerPreference:
|
|
@@ -209,6 +226,42 @@ class PartnerPreference:
|
|
|
209
226
|
)
|
|
210
227
|
|
|
211
228
|
|
|
229
|
+
@dataclass_json
|
|
230
|
+
@dataclass(order=True, eq=True, frozen=True)
|
|
231
|
+
class UserPreferenceDictionary:
|
|
232
|
+
"""UserPreferenceDictionary."""
|
|
233
|
+
|
|
234
|
+
id: Optional[str] = field(default=None, metadata=config(field_name="id"))
|
|
235
|
+
user_id: Optional[str] = field(default=None, metadata=config(field_name="userID"))
|
|
236
|
+
category: Optional[str] = field(
|
|
237
|
+
default=None, metadata=config(field_name="category")
|
|
238
|
+
)
|
|
239
|
+
sub_key: Optional[str] = field(default=None, metadata=config(field_name="subKey"))
|
|
240
|
+
preferences: Optional[dict] = field(
|
|
241
|
+
default=None, metadata=config(field_name="preferences")
|
|
242
|
+
)
|
|
243
|
+
environment: Optional[str] = field(
|
|
244
|
+
default=None, metadata=config(field_name="environment")
|
|
245
|
+
)
|
|
246
|
+
created_at: Optional[str] = field(
|
|
247
|
+
default=None, metadata=config(field_name="createdAt")
|
|
248
|
+
)
|
|
249
|
+
updated_at: Optional[str] = field(
|
|
250
|
+
default=None, metadata=config(field_name="updatedAt")
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
@dataclass_json
|
|
255
|
+
@dataclass(order=True, eq=True, frozen=True)
|
|
256
|
+
class UnsetPreferenceSelector:
|
|
257
|
+
"""UnsetPreferenceSelector."""
|
|
258
|
+
|
|
259
|
+
category: Optional[str] = field(
|
|
260
|
+
default=None, metadata=config(field_name="category")
|
|
261
|
+
)
|
|
262
|
+
sub_key: Optional[str] = field(default=None, metadata=config(field_name="subKey"))
|
|
263
|
+
|
|
264
|
+
|
|
212
265
|
@dataclass_json
|
|
213
266
|
@dataclass(order=True, eq=True, frozen=True)
|
|
214
267
|
class UserPreference:
|