Skip to content
This repository was archived by the owner on Dec 5, 2025. It is now read-only.

Commit 74f9249

Browse files
richard-julienJeremyCloarec
authored andcommitted
[client] add draft api
1 parent b598933 commit 74f9249

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

pycti/api/opencti_api_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from pycti import __version__
1212
from pycti.api.opencti_api_connector import OpenCTIApiConnector
13+
from pycti.api.opencti_api_draft import OpenCTIApiDraft
1314
from pycti.api.opencti_api_playbook import OpenCTIApiPlaybook
1415
from pycti.api.opencti_api_trash import OpenCTIApiTrash
1516
from pycti.api.opencti_api_work import OpenCTIApiWork
@@ -169,6 +170,7 @@ def __init__(
169170
# Define the dependencies
170171
self.work = OpenCTIApiWork(self)
171172
self.trash = OpenCTIApiTrash(self)
173+
self.draft = OpenCTIApiDraft(self)
172174
self.playbook = OpenCTIApiPlaybook(self)
173175
self.connector = OpenCTIApiConnector(self)
174176
self.stix2 = OpenCTIStix2(self)

pycti/api/opencti_api_draft.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class OpenCTIApiDraft:
2+
"""OpenCTIApiDraft"""
3+
4+
def __init__(self, api):
5+
self.api = api
6+
7+
def delete(self, draft_id: str):
8+
query = """
9+
mutation DraftWorkspaceDelete($id: ID!) {
10+
draftWorkspaceDelete(id: $id)
11+
}
12+
"""
13+
self.api.query(
14+
query,
15+
{
16+
"id": draft_id,
17+
},
18+
)

pycti/entities/opencti_stix_core_object.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1888,3 +1888,26 @@ def delete(self, **kwargs):
18881888
else:
18891889
self.opencti.app_logger.error("[stix_core_object] Missing parameters: id")
18901890
return None
1891+
1892+
"""
1893+
Remove a Stix-Core-Object object from draft (revert)
1894+
1895+
:param id: the Stix-Core-Object id
1896+
:return void
1897+
"""
1898+
1899+
def remove_from_draft(self, **kwargs):
1900+
id = kwargs.get("id", None)
1901+
if id is not None:
1902+
self.opencti.app_logger.info("Draft remove stix_core_object", {"id": id})
1903+
query = """
1904+
mutation StixCoreObjectEditDraftRemove($id: ID!) {
1905+
stixCoreObjectEdit(id: $id) {
1906+
removeFromDraft
1907+
}
1908+
}
1909+
"""
1910+
self.opencti.query(query, {"id": id})
1911+
else:
1912+
self.opencti.app_logger.error("[stix_core_object] Missing parameters: id")
1913+
return None

pycti/utils/opencti_stix2.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2497,7 +2497,11 @@ def apply_opencti_operation(self, item, operation):
24972497
delete_id = item["id"]
24982498
force_delete = operation == "delete-force"
24992499
self.opencti.stix.delete(id=delete_id)
2500-
elif operation == "restore":
2500+
elif operation == "delete-draft":
2501+
self.opencti.draft.delete(item["id"])
2502+
elif item["opencti_operation"] == "revert-draft":
2503+
self.opencti.stix_core_object.remove_from_draft(id=item["id"])
2504+
elif item["opencti_operation"] == "restore":
25012505
self.opencti.trash.delete_operation_restore(item["id"])
25022506
elif item["opencti_operation"] == "merge":
25032507
target_id = item["merge_target_id"]

0 commit comments

Comments
 (0)