cyberdesk 1.8.0__py3-none-any.whl → 1.9.0__py3-none-any.whl

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.

Potentially problematic release.


This version of cyberdesk might be problematic. Click here for more details.

Files changed (39) hide show
  1. cyberdesk/__init__.py +11 -1
  2. cyberdesk/client.py +188 -0
  3. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/METADATA +39 -17
  4. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/RECORD +39 -13
  5. openapi_client/cyberdesk_cloud_client/api/computer/fs_list_v1_computer_machine_id_fs_list_get.py +188 -0
  6. openapi_client/cyberdesk_cloud_client/api/computer/fs_read_v1_computer_machine_id_fs_read_get.py +188 -0
  7. openapi_client/cyberdesk_cloud_client/api/computer/fs_write_v1_computer_machine_id_fs_write_post.py +201 -0
  8. openapi_client/cyberdesk_cloud_client/api/computer/powershell_exec_v1_computer_machine_id_shell_powershell_exec_post.py +219 -0
  9. openapi_client/cyberdesk_cloud_client/api/computer/powershell_session_v1_computer_machine_id_shell_powershell_session_post.py +219 -0
  10. openapi_client/cyberdesk_cloud_client/api/run_attachments/__init__.py +1 -0
  11. openapi_client/cyberdesk_cloud_client/api/run_attachments/create_run_attachment_v1_run_attachments_post.py +184 -0
  12. openapi_client/cyberdesk_cloud_client/api/run_attachments/delete_run_attachment_v1_run_attachments_attachment_id_delete.py +170 -0
  13. openapi_client/cyberdesk_cloud_client/api/run_attachments/download_run_attachment_v1_run_attachments_attachment_id_download_get.py +170 -0
  14. openapi_client/cyberdesk_cloud_client/api/run_attachments/get_run_attachment_v1_run_attachments_attachment_id_get.py +172 -0
  15. openapi_client/cyberdesk_cloud_client/api/run_attachments/list_run_attachments_v1_run_attachments_get.py +240 -0
  16. openapi_client/cyberdesk_cloud_client/api/run_attachments/update_run_attachment_v1_run_attachments_attachment_id_put.py +194 -0
  17. openapi_client/cyberdesk_cloud_client/models/__init__.py +38 -0
  18. openapi_client/cyberdesk_cloud_client/models/attachment_type.py +9 -0
  19. openapi_client/cyberdesk_cloud_client/models/file_input.py +99 -0
  20. openapi_client/cyberdesk_cloud_client/models/file_write_request.py +78 -0
  21. openapi_client/cyberdesk_cloud_client/models/fs_list_v1_computer_machine_id_fs_list_get_response_fs_list_v1_computer_machine_id_fs_list_get.py +44 -0
  22. openapi_client/cyberdesk_cloud_client/models/fs_read_v1_computer_machine_id_fs_read_get_response_fs_read_v1_computer_machine_id_fs_read_get.py +44 -0
  23. openapi_client/cyberdesk_cloud_client/models/fs_write_v1_computer_machine_id_fs_write_post_response_fs_write_v1_computer_machine_id_fs_write_post.py +44 -0
  24. openapi_client/cyberdesk_cloud_client/models/paginated_response_run_attachment_response.py +97 -0
  25. openapi_client/cyberdesk_cloud_client/models/power_shell_exec_request.py +110 -0
  26. openapi_client/cyberdesk_cloud_client/models/power_shell_session_request.py +81 -0
  27. openapi_client/cyberdesk_cloud_client/models/powershell_exec_v1_computer_machine_id_shell_powershell_exec_post_response_powershell_exec_v1_computer_machine_id_shell_powershell_exec_post.py +47 -0
  28. openapi_client/cyberdesk_cloud_client/models/powershell_session_v1_computer_machine_id_shell_powershell_session_post_response_powershell_session_v1_computer_machine_id_shell_powershell_session_post.py +47 -0
  29. openapi_client/cyberdesk_cloud_client/models/run_attachment_create.py +157 -0
  30. openapi_client/cyberdesk_cloud_client/models/run_attachment_response.py +189 -0
  31. openapi_client/cyberdesk_cloud_client/models/run_attachment_update.py +84 -0
  32. openapi_client/cyberdesk_cloud_client/models/run_create.py +41 -0
  33. openapi_client/cyberdesk_cloud_client/models/run_response.py +26 -0
  34. openapi_client/cyberdesk_cloud_client/models/workflow_create.py +9 -0
  35. openapi_client/cyberdesk_cloud_client/models/workflow_response.py +9 -0
  36. openapi_client/cyberdesk_cloud_client/models/workflow_update.py +20 -0
  37. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/WHEEL +0 -0
  38. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/licenses/LICENSE +0 -0
  39. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/top_level.txt +0 -0
cyberdesk/__init__.py CHANGED
@@ -13,15 +13,20 @@ from .client import (
13
13
  RunUpdate,
14
14
  RunResponse,
15
15
  RunStatus,
16
+ FileInput,
16
17
  ConnectionCreate,
17
18
  ConnectionResponse,
18
19
  ConnectionStatus,
19
20
  TrajectoryCreate,
20
21
  TrajectoryUpdate,
21
22
  TrajectoryResponse,
23
+ RunAttachmentCreate,
24
+ RunAttachmentUpdate,
25
+ RunAttachmentResponse,
26
+ AttachmentType,
22
27
  )
23
28
 
24
- __version__ = "1.8.0"
29
+ __version__ = "1.9.0"
25
30
 
26
31
  __all__ = [
27
32
  "CyberdeskClient",
@@ -36,10 +41,15 @@ __all__ = [
36
41
  "RunUpdate",
37
42
  "RunResponse",
38
43
  "RunStatus",
44
+ "FileInput",
39
45
  "ConnectionCreate",
40
46
  "ConnectionResponse",
41
47
  "ConnectionStatus",
42
48
  "TrajectoryCreate",
43
49
  "TrajectoryUpdate",
44
50
  "TrajectoryResponse",
51
+ "RunAttachmentCreate",
52
+ "RunAttachmentUpdate",
53
+ "RunAttachmentResponse",
54
+ "AttachmentType",
45
55
  ]
cyberdesk/client.py CHANGED
@@ -40,6 +40,14 @@ from openapi_client.cyberdesk_cloud_client.api.trajectories import (
40
40
  delete_trajectory_v1_trajectories_trajectory_id_delete,
41
41
  get_latest_trajectory_for_workflow_v1_workflows_workflow_id_latest_trajectory_get,
42
42
  )
43
+ from openapi_client.cyberdesk_cloud_client.api.run_attachments import (
44
+ list_run_attachments_v1_run_attachments_get,
45
+ create_run_attachment_v1_run_attachments_post,
46
+ get_run_attachment_v1_run_attachments_attachment_id_get,
47
+ download_run_attachment_v1_run_attachments_attachment_id_download_get,
48
+ update_run_attachment_v1_run_attachments_attachment_id_put,
49
+ delete_run_attachment_v1_run_attachments_attachment_id_delete,
50
+ )
43
51
 
44
52
  # Import models
45
53
  from openapi_client.cyberdesk_cloud_client.models import (
@@ -54,17 +62,23 @@ from openapi_client.cyberdesk_cloud_client.models import (
54
62
  RunUpdate,
55
63
  RunResponse,
56
64
  RunStatus,
65
+ FileInput,
57
66
  ConnectionCreate,
58
67
  ConnectionResponse,
59
68
  ConnectionStatus,
60
69
  TrajectoryCreate,
61
70
  TrajectoryUpdate,
62
71
  TrajectoryResponse,
72
+ RunAttachmentCreate,
73
+ RunAttachmentUpdate,
74
+ RunAttachmentResponse,
75
+ AttachmentType,
63
76
  PaginatedResponseMachineResponse,
64
77
  PaginatedResponseWorkflowResponse,
65
78
  PaginatedResponseRunResponse,
66
79
  PaginatedResponseConnectionResponse,
67
80
  PaginatedResponseTrajectoryResponse,
81
+ PaginatedResponseRunAttachmentResponse,
68
82
  )
69
83
 
70
84
  # Re-export common types
@@ -81,12 +95,17 @@ __all__ = [
81
95
  "RunUpdate",
82
96
  "RunResponse",
83
97
  "RunStatus",
98
+ "FileInput",
84
99
  "ConnectionCreate",
85
100
  "ConnectionResponse",
86
101
  "ConnectionStatus",
87
102
  "TrajectoryCreate",
88
103
  "TrajectoryUpdate",
89
104
  "TrajectoryResponse",
105
+ "RunAttachmentCreate",
106
+ "RunAttachmentUpdate",
107
+ "RunAttachmentResponse",
108
+ "AttachmentType",
90
109
  ]
91
110
 
92
111
  DEFAULT_API_BASE_URL = "https://api.cyberdesk.io"
@@ -738,6 +757,174 @@ class TrajectoriesAPI:
738
757
  return ApiResponse(error=e)
739
758
 
740
759
 
760
+ class RunAttachmentsAPI:
761
+ """Run Attachments API endpoints."""
762
+
763
+ def __init__(self, client: AuthenticatedClient):
764
+ self.client = client
765
+
766
+ async def list(
767
+ self,
768
+ skip: Optional[int] = None,
769
+ limit: Optional[int] = None,
770
+ run_id: Optional[str] = None,
771
+ attachment_type: Optional[AttachmentType] = None
772
+ ) -> ApiResponse:
773
+ """List run attachments with optional filtering."""
774
+ try:
775
+ response = await list_run_attachments_v1_run_attachments_get.asyncio(
776
+ client=self.client,
777
+ skip=_to_unset_or_value(skip),
778
+ limit=_to_unset_or_value(limit),
779
+ run_id=_to_uuid(run_id) if run_id else UNSET,
780
+ attachment_type=attachment_type
781
+ )
782
+ return ApiResponse(data=response)
783
+ except Exception as e:
784
+ return ApiResponse(error=e)
785
+
786
+ def list_sync(
787
+ self,
788
+ skip: Optional[int] = None,
789
+ limit: Optional[int] = None,
790
+ run_id: Optional[str] = None,
791
+ attachment_type: Optional[AttachmentType] = None
792
+ ) -> ApiResponse:
793
+ """List run attachments with optional filtering (synchronous)."""
794
+ try:
795
+ response = list_run_attachments_v1_run_attachments_get.sync(
796
+ client=self.client,
797
+ skip=_to_unset_or_value(skip),
798
+ limit=_to_unset_or_value(limit),
799
+ run_id=_to_uuid(run_id) if run_id else UNSET,
800
+ attachment_type=attachment_type
801
+ )
802
+ return ApiResponse(data=response)
803
+ except Exception as e:
804
+ return ApiResponse(error=e)
805
+
806
+ async def create(self, data: RunAttachmentCreate) -> ApiResponse:
807
+ """Create a new run attachment."""
808
+ try:
809
+ response = await create_run_attachment_v1_run_attachments_post.asyncio(
810
+ client=self.client,
811
+ body=data
812
+ )
813
+ return ApiResponse(data=response)
814
+ except Exception as e:
815
+ return ApiResponse(error=e)
816
+
817
+ def create_sync(self, data: RunAttachmentCreate) -> ApiResponse:
818
+ """Create a new run attachment (synchronous)."""
819
+ try:
820
+ response = create_run_attachment_v1_run_attachments_post.sync(
821
+ client=self.client,
822
+ body=data
823
+ )
824
+ return ApiResponse(data=response)
825
+ except Exception as e:
826
+ return ApiResponse(error=e)
827
+
828
+ async def get(self, attachment_id: str) -> ApiResponse:
829
+ """Get a specific run attachment by ID."""
830
+ try:
831
+ response = await get_run_attachment_v1_run_attachments_attachment_id_get.asyncio(
832
+ client=self.client,
833
+ attachment_id=_to_uuid(attachment_id)
834
+ )
835
+ return ApiResponse(data=response)
836
+ except Exception as e:
837
+ return ApiResponse(error=e)
838
+
839
+ def get_sync(self, attachment_id: str) -> ApiResponse:
840
+ """Get a specific run attachment by ID (synchronous)."""
841
+ try:
842
+ response = get_run_attachment_v1_run_attachments_attachment_id_get.sync(
843
+ client=self.client,
844
+ attachment_id=_to_uuid(attachment_id)
845
+ )
846
+ return ApiResponse(data=response)
847
+ except Exception as e:
848
+ return ApiResponse(error=e)
849
+
850
+ async def download(self, attachment_id: str) -> ApiResponse:
851
+ """Download a run attachment file.
852
+
853
+ Returns:
854
+ ApiResponse with data containing the file bytes or a download URL
855
+ """
856
+ try:
857
+ # The download endpoint typically returns binary data or a redirect URL
858
+ response = await download_run_attachment_v1_run_attachments_attachment_id_download_get.asyncio(
859
+ client=self.client,
860
+ attachment_id=_to_uuid(attachment_id)
861
+ )
862
+ return ApiResponse(data=response)
863
+ except Exception as e:
864
+ return ApiResponse(error=e)
865
+
866
+ def download_sync(self, attachment_id: str) -> ApiResponse:
867
+ """Download a run attachment file (synchronous).
868
+
869
+ Returns:
870
+ ApiResponse with data containing the file bytes or a download URL
871
+ """
872
+ try:
873
+ response = download_run_attachment_v1_run_attachments_attachment_id_download_get.sync(
874
+ client=self.client,
875
+ attachment_id=_to_uuid(attachment_id)
876
+ )
877
+ return ApiResponse(data=response)
878
+ except Exception as e:
879
+ return ApiResponse(error=e)
880
+
881
+ async def update(self, attachment_id: str, data: RunAttachmentUpdate) -> ApiResponse:
882
+ """Update a run attachment (e.g., set expiration)."""
883
+ try:
884
+ response = await update_run_attachment_v1_run_attachments_attachment_id_put.asyncio(
885
+ client=self.client,
886
+ attachment_id=_to_uuid(attachment_id),
887
+ body=data
888
+ )
889
+ return ApiResponse(data=response)
890
+ except Exception as e:
891
+ return ApiResponse(error=e)
892
+
893
+ def update_sync(self, attachment_id: str, data: RunAttachmentUpdate) -> ApiResponse:
894
+ """Update a run attachment (e.g., set expiration) (synchronous)."""
895
+ try:
896
+ response = update_run_attachment_v1_run_attachments_attachment_id_put.sync(
897
+ client=self.client,
898
+ attachment_id=_to_uuid(attachment_id),
899
+ body=data
900
+ )
901
+ return ApiResponse(data=response)
902
+ except Exception as e:
903
+ return ApiResponse(error=e)
904
+
905
+ async def delete(self, attachment_id: str) -> ApiResponse:
906
+ """Delete a run attachment."""
907
+ try:
908
+ await delete_run_attachment_v1_run_attachments_attachment_id_delete.asyncio(
909
+ client=self.client,
910
+ attachment_id=_to_uuid(attachment_id)
911
+ )
912
+ return ApiResponse(data={"success": True})
913
+ except Exception as e:
914
+ return ApiResponse(error=e)
915
+
916
+ def delete_sync(self, attachment_id: str) -> ApiResponse:
917
+ """Delete a run attachment (synchronous)."""
918
+ try:
919
+ delete_run_attachment_v1_run_attachments_attachment_id_delete.sync(
920
+ client=self.client,
921
+ attachment_id=_to_uuid(attachment_id)
922
+ )
923
+ return ApiResponse(data={"success": True})
924
+ except Exception as e:
925
+ return ApiResponse(error=e)
926
+
927
+
741
928
  class CyberdeskClient:
742
929
  """Main Cyberdesk SDK client."""
743
930
 
@@ -762,6 +949,7 @@ class CyberdeskClient:
762
949
  self.runs = RunsAPI(self._client)
763
950
  self.connections = ConnectionsAPI(self._client)
764
951
  self.trajectories = TrajectoriesAPI(self._client)
952
+ self.run_attachments = RunAttachmentsAPI(self._client)
765
953
 
766
954
  # TODO: Add computer API for screenshot functionality
767
955
  # The openapi-python-client doesn't generate code for binary responses like PNG images
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cyberdesk
3
- Version: 1.8.0
3
+ Version: 1.9.0
4
4
  Summary: The official Python SDK for Cyberdesk
5
5
  Author-email: Cyberdesk Team <dev@cyberdesk.io>
6
6
  License-Expression: MIT
@@ -26,30 +26,52 @@ pip install cyberdesk
26
26
 
27
27
  ## Quick Start
28
28
 
29
+ The most common use case is to execute workflows that you've created in the [Cyberdesk Dashboard](https://cyberdesk.io/dashboard).
30
+
29
31
  ```python
30
- from cyberdesk import CyberdeskClient
32
+ from cyberdesk import CyberdeskClient, RunCreate
33
+ import time
31
34
 
32
35
  # Initialize the client
33
36
  client = CyberdeskClient(api_key="your-api-key")
34
37
 
35
- # List machines
36
- response = client.machines.list_sync()
37
- if response.data:
38
- for machine in response.data.items:
39
- print(f"Machine: {machine.name} - Status: {machine.status}")
40
-
41
- # Create a workflow
42
- from cyberdesk import WorkflowCreate
43
-
44
- workflow_data = WorkflowCreate(
45
- name="My Workflow",
46
- description="Automated task workflow"
38
+ # Create a run for your workflow
39
+ run_data = RunCreate(
40
+ workflow_id="your-workflow-id",
41
+ machine_id="your-machine-id",
42
+ input_values={
43
+ # Your workflow-specific input data
44
+ "patient_id": "12345",
45
+ "patient_first_name": "John",
46
+ "patient_last_name": "Doe"
47
+ }
47
48
  )
48
- response = client.workflows.create_sync(workflow_data)
49
- if response.data:
50
- print(f"Created workflow: {response.data.id}")
49
+
50
+ response = client.runs.create_sync(run_data)
51
+ if response.error:
52
+ print(f"Error creating run: {response.error}")
53
+ else:
54
+ run = response.data
55
+
56
+ # Wait for the run to complete
57
+ while run.status in ["scheduling", "running"]:
58
+ time.sleep(5) # Wait 5 seconds
59
+ response = client.runs.get_sync(run.id)
60
+ run = response.data
61
+
62
+ # Get the output data
63
+ if run.status == "success":
64
+ print("Result:", run.output_data)
65
+ else:
66
+ print("Run failed:", ", ".join(run.error or []))
51
67
  ```
52
68
 
69
+ ## Full Documentation
70
+
71
+ For complete documentation including async/sync usage, error handling, and all available methods, visit:
72
+
73
+ **[https://docs.cyberdesk.io/sdk-guides/python](https://docs.cyberdesk.io/sdk-guides/python)**
74
+
53
75
  ## Async Support
54
76
 
55
77
  The SDK provides both synchronous and asynchronous methods for all operations:
@@ -1,6 +1,6 @@
1
- cyberdesk/__init__.py,sha256=YVzunEmic2iYsva79cKMkFGrrg5T_AmtBsRIWJsIs04,845
2
- cyberdesk/client.py,sha256=f3kT8v_ip5b49IYVoxNRgILd0SVLs_8MH5OiAkGF_IU,27713
3
- cyberdesk-1.8.0.dist-info/licenses/LICENSE,sha256=06Op63FCwGhuUOz__M8IZW5sxd29WxyGC4X5-Uih7IQ,1071
1
+ cyberdesk/__init__.py,sha256=ZjS5ouIl0k25SujyFhyiuN6Z8YP0qGO7cYvDmAYoT3A,1079
2
+ cyberdesk/client.py,sha256=qmPJ7J1fzZaYWDGZ_xrFojLQSjMWWu_NsmRfZROZXAU,35026
3
+ cyberdesk-1.9.0.dist-info/licenses/LICENSE,sha256=06Op63FCwGhuUOz__M8IZW5sxd29WxyGC4X5-Uih7IQ,1071
4
4
  openapi_client/cyberdesk_cloud_client/__init__.py,sha256=r_uVkNUL-SOK8j7-KiGMIKdinES5X8K1Q250ySX2F-A,158
5
5
  openapi_client/cyberdesk_cloud_client/client.py,sha256=o_mdLqyBCQstu5tS1WZFwqIEbGwkvWQ7eQjuCJw_5VY,12419
6
6
  openapi_client/cyberdesk_cloud_client/errors.py,sha256=gO8GBmKqmSNgAg-E5oT-oOyxztvp7V_6XG7OUTT15q0,546
@@ -8,6 +8,9 @@ openapi_client/cyberdesk_cloud_client/py.typed,sha256=8ZJUsxZiuOy1oJeVhsTWQhTG_6
8
8
  openapi_client/cyberdesk_cloud_client/types.py,sha256=AX4orxQZQJat3vZrgjJ-TYb2sNBL8kNo9yqYDT-n8y8,1391
9
9
  openapi_client/cyberdesk_cloud_client/api/__init__.py,sha256=zTSiG_ujSjAqWPyc435YXaX9XTlpMjiJWBbV-f-YtdA,45
10
10
  openapi_client/cyberdesk_cloud_client/api/computer/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
11
+ openapi_client/cyberdesk_cloud_client/api/computer/fs_list_v1_computer_machine_id_fs_list_get.py,sha256=gI3DVyJZMiLoeer0YiUNyhjIIBIUq2BeNoRPFSr58rY,5794
12
+ openapi_client/cyberdesk_cloud_client/api/computer/fs_read_v1_computer_machine_id_fs_read_get.py,sha256=QstHlkfxARLnNt6WKjfwgER8wq-JfK1JOvU39veSlLI,5607
13
+ openapi_client/cyberdesk_cloud_client/api/computer/fs_write_v1_computer_machine_id_fs_write_post.py,sha256=4Un-26ll3YEKVMQve1MN_JdGEkOVj65FgNKvH1HWLrg,5808
11
14
  openapi_client/cyberdesk_cloud_client/api/computer/get_display_dimensions_v1_computer_machine_id_display_dimensions_get.py,sha256=aHCgck_f0IvtoNtmIF91mFrmNW4jSfh-lQkUFbgZbrY,4356
12
15
  openapi_client/cyberdesk_cloud_client/api/computer/get_mouse_position_v1_computer_machine_id_input_mouse_position_get.py,sha256=6vl34SKSBiRqeuHJrzQIS1hVSrIcQn4UaRejfDq4HvM,4274
13
16
  openapi_client/cyberdesk_cloud_client/api/computer/get_screenshot_v1_computer_machine_id_display_screenshot_get.py,sha256=aXmTIvBfyMR279Qjot6zvyFQovUJs3bI1oFNR8Zcq4Q,3888
@@ -15,6 +18,8 @@ openapi_client/cyberdesk_cloud_client/api/computer/keyboard_key_v1_computer_mach
15
18
  openapi_client/cyberdesk_cloud_client/api/computer/keyboard_type_v1_computer_machine_id_input_keyboard_type_post.py,sha256=tVBv4T6cg5UscdZtFuZpV4WJFF1Lqg7jDP97dbpoPnk,4664
16
19
  openapi_client/cyberdesk_cloud_client/api/computer/mouse_click_v1_computer_machine_id_input_mouse_click_post.py,sha256=_b8dCyAI0W3Fr0Ra5vo35yJuMb36cS0o41SSlLT1xf8,4984
17
20
  openapi_client/cyberdesk_cloud_client/api/computer/mouse_move_v1_computer_machine_id_input_mouse_move_post.py,sha256=CNfIj6oTs8QSRo4674pmHw9kJQIBw7D-u7mKT62tMDg,4704
21
+ openapi_client/cyberdesk_cloud_client/api/computer/powershell_exec_v1_computer_machine_id_shell_powershell_exec_post.py,sha256=iZCvu92FFTVAZfIkw-PIWPllUe4NRuAdjB63IasSxKw,6567
22
+ openapi_client/cyberdesk_cloud_client/api/computer/powershell_session_v1_computer_machine_id_shell_powershell_session_post.py,sha256=Bw-zP9ekElWvHbfts1bGfZX6mkEfrNwZ-A9rajAuzYM,6799
18
23
  openapi_client/cyberdesk_cloud_client/api/connections/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
19
24
  openapi_client/cyberdesk_cloud_client/api/connections/create_connection_v1_connections_post.py,sha256=063OBpx_Hgn5A9kKINc9kD4emMDLPR23acamQ8sBGBY,5046
20
25
  openapi_client/cyberdesk_cloud_client/api/connections/delete_connection_v1_connections_connection_id_delete.py,sha256=-eiGKQa9Y2RW3zKsdygsAt636YyCVoy30DUdu6ce6yE,4653
@@ -38,6 +43,13 @@ openapi_client/cyberdesk_cloud_client/api/request_logs/delete_request_log_v1_req
38
43
  openapi_client/cyberdesk_cloud_client/api/request_logs/get_request_log_v1_request_logs_log_id_get.py,sha256=ooWgn9o_AGVP2EEPQjCAkOmcy4-jF42s2ocTKPU4O2o,4534
39
44
  openapi_client/cyberdesk_cloud_client/api/request_logs/list_request_logs_v1_request_logs_get.py,sha256=_CpUhLbesyefEaC5X_NeKWe3DTjILMDmn28eWrUYvVE,8076
40
45
  openapi_client/cyberdesk_cloud_client/api/request_logs/update_request_log_v1_request_logs_log_id_patch.py,sha256=7PGcu1GnN3EEkPo6cAZO45qRqd5cxK2Ge_rBp0__nfQ,5880
46
+ openapi_client/cyberdesk_cloud_client/api/run_attachments/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
47
+ openapi_client/cyberdesk_cloud_client/api/run_attachments/create_run_attachment_v1_run_attachments_post.py,sha256=DTcoKhj8uflj1FUJAIKrVhbCXaQIjjWH3ZpijDJZdJI,5216
48
+ openapi_client/cyberdesk_cloud_client/api/run_attachments/delete_run_attachment_v1_run_attachments_attachment_id_delete.py,sha256=BUamhNNCzRL_irucvhvlOxkqnOxNv0wUUDUrHvmnDc0,4465
49
+ openapi_client/cyberdesk_cloud_client/api/run_attachments/download_run_attachment_v1_run_attachments_attachment_id_download_get.py,sha256=boplCuACwpIfPQt32CL-OxII1xKiVbFLWLlGg0WrlZM,4389
50
+ openapi_client/cyberdesk_cloud_client/api/run_attachments/get_run_attachment_v1_run_attachments_attachment_id_get.py,sha256=9Rkn4y-3mh-SMEnmvPLeo34Hhp9Bsk_Wb7sWw1xeDhA,4786
51
+ openapi_client/cyberdesk_cloud_client/api/run_attachments/list_run_attachments_v1_run_attachments_get.py,sha256=LGcoHCLkujfTHgwzapuYV8Ve8y4yw_VZ3jkSK5Rt91o,7783
52
+ openapi_client/cyberdesk_cloud_client/api/run_attachments/update_run_attachment_v1_run_attachments_attachment_id_put.py,sha256=4jsIek-Z4U5hbKHRMBsnJr0DgfOoY5B2sC22d5Af-UU,5395
41
53
  openapi_client/cyberdesk_cloud_client/api/runs/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
42
54
  openapi_client/cyberdesk_cloud_client/api/runs/create_run_v1_runs_post.py,sha256=WarcoB_UIzZsTcvFGWAYZhjA0LsIY4wcP89wILtsTZs,5343
43
55
  openapi_client/cyberdesk_cloud_client/api/runs/delete_run_v1_runs_run_id_delete.py,sha256=ux5K74BTi5jarECVfTc5AxgAhDPfuFkt1XmaWWmRdLE,4116
@@ -60,13 +72,19 @@ openapi_client/cyberdesk_cloud_client/api/workflows/get_workflow_v1_workflows_wo
60
72
  openapi_client/cyberdesk_cloud_client/api/workflows/get_workflow_versions_v1_workflows_workflow_id_versions_get.py,sha256=jBJJwJQfKBBYTX1FhSe7qWFxK0ZvYD_QKcrxTgo361U,5857
61
73
  openapi_client/cyberdesk_cloud_client/api/workflows/list_workflows_v1_workflows_get.py,sha256=xM1Ex78PdeJK2IrQ10ghKqk93FwNGOnVOPt666hUhwE,5626
62
74
  openapi_client/cyberdesk_cloud_client/api/workflows/update_workflow_v1_workflows_workflow_id_patch.py,sha256=G6l9aClbapqjCmDsjK01447iqRKhRFp9CnJDLHV8OBc,5705
63
- openapi_client/cyberdesk_cloud_client/models/__init__.py,sha256=RluO9EWqHyLOQm-UGyLx3yDUN1cR0byhdfI-ejljubc,5499
75
+ openapi_client/cyberdesk_cloud_client/models/__init__.py,sha256=jchhYiVrBiL2nnpIBY9Zvfhz4D5_NyHKMqq7Bgw747M,7981
76
+ openapi_client/cyberdesk_cloud_client/models/attachment_type.py,sha256=zqPOsSd2AmxGNqb5HQ6ZYBAYL8k-0UbWHhfAJYNHoro,161
64
77
  openapi_client/cyberdesk_cloud_client/models/connection_create.py,sha256=gCI36DmjJDZxzGFPbykyYw9k4QEf_4dVNz9b-xZfLo4,3288
65
78
  openapi_client/cyberdesk_cloud_client/models/connection_response.py,sha256=aFxqJX75wSEw5dZ-kvh3Wgv_haJ6xYJ7o72vSAbEtHY,5247
66
79
  openapi_client/cyberdesk_cloud_client/models/connection_status.py,sha256=XTpa-W0TinYhypU7P-LaJEI3I2JsEaT3voUZQ3zoJO0,203
67
80
  openapi_client/cyberdesk_cloud_client/models/database_health_check_v1_health_db_get_response_database_health_check_v1_health_db_get.py,sha256=ubG8Qi6xR4BBxLB9fZYfWZ0AqZr3_ywj9-MkWJcOZSM,1544
68
81
  openapi_client/cyberdesk_cloud_client/models/display_dimensions.py,sha256=_YjSuYuJIzETS5QzOUxsUJvgrOuvScDlUSUp36sr5Dk,1640
69
82
  openapi_client/cyberdesk_cloud_client/models/dummy_test_endpoint_v1_test_post_response_dummy_test_endpoint_v1_test_post.py,sha256=9z2ys68FDs76-xnXgUTB76gFEIss6qOKwTekFbBiGA4,1488
83
+ openapi_client/cyberdesk_cloud_client/models/file_input.py,sha256=7RpWoLxoVkGJsqntD2jh6PJZ-SJGWIM1XQziVEGHu5I,3046
84
+ openapi_client/cyberdesk_cloud_client/models/file_write_request.py,sha256=B4NRx8b3D1DcJCJvKezkpVmEehhBkmyEIinZXlrcsvg,2001
85
+ openapi_client/cyberdesk_cloud_client/models/fs_list_v1_computer_machine_id_fs_list_get_response_fs_list_v1_computer_machine_id_fs_list_get.py,sha256=vMvNvXLqVbXPU24_2zq5GsOg6sfmv59Z54qB5szYWyM,1576
86
+ openapi_client/cyberdesk_cloud_client/models/fs_read_v1_computer_machine_id_fs_read_get_response_fs_read_v1_computer_machine_id_fs_read_get.py,sha256=xIH_ifsONpWUEgHO2IjPjrVtWp3VEaU6dVXDJ3T9aP8,1576
87
+ openapi_client/cyberdesk_cloud_client/models/fs_write_v1_computer_machine_id_fs_write_post_response_fs_write_v1_computer_machine_id_fs_write_post.py,sha256=RLeOMxpL9PFC66efgfdvMJmLi9JwzVPPPwPbp080NKU,1606
70
88
  openapi_client/cyberdesk_cloud_client/models/get_workflow_versions_v1_workflows_workflow_id_versions_get_response_200_item.py,sha256=awMbgNS26JsLsyyRMKYHP_BGi9g5VKSVK65z-v4p35g,1505
71
89
  openapi_client/cyberdesk_cloud_client/models/health_check_v1_health_get_response_health_check_v1_health_get.py,sha256=xiy1oRClleq7BPHm8Ud_qd03gVkN9uI23PCm0PkLRNY,1432
72
90
  openapi_client/cyberdesk_cloud_client/models/http_validation_error.py,sha256=OvQ-alRPbtXXwrQunI1Cp1-BWf7ZkVHkigk-YVMFXN0,2213
@@ -82,15 +100,23 @@ openapi_client/cyberdesk_cloud_client/models/mouse_position.py,sha256=t8PW-7xKfy
82
100
  openapi_client/cyberdesk_cloud_client/models/paginated_response.py,sha256=P9bt0Koea8rODsULodX8dDAwm-uP2KRE1mRi8AK-VBY,1988
83
101
  openapi_client/cyberdesk_cloud_client/models/paginated_response_connection_response.py,sha256=2WxYXSS1RoBeh2ealxdQeEBSv0pBpllar1m98toeYHs,2527
84
102
  openapi_client/cyberdesk_cloud_client/models/paginated_response_machine_response.py,sha256=m_bJGQwSQkqPeJwcQ2UnXglhdmPqsj_tjjx_3S-YZyE,2491
103
+ openapi_client/cyberdesk_cloud_client/models/paginated_response_run_attachment_response.py,sha256=OHsnkYeV1_35TYMrYRaG0XxdjaBXp5Qcq64hbHxzjV4,2568
85
104
  openapi_client/cyberdesk_cloud_client/models/paginated_response_run_response.py,sha256=UFk93224AiT0TkMlxxy5UiTUP94JeCxy1EYx55wECWk,2443
86
105
  openapi_client/cyberdesk_cloud_client/models/paginated_response_trajectory_response.py,sha256=gOdLxB8NSEualTnfJ8ww7M7evX8HpPlRgtUS8cgJHy8,2527
87
106
  openapi_client/cyberdesk_cloud_client/models/paginated_response_workflow_response.py,sha256=vjx7RtvrVv9hiE1CPNMdReyc4kKbbTdSEMfU0Z-jhK0,2503
107
+ openapi_client/cyberdesk_cloud_client/models/power_shell_exec_request.py,sha256=LoFKZ1fUeW3NM-fxrAMhbplyEDC_wOWpOjEb2vOQbuQ,3543
108
+ openapi_client/cyberdesk_cloud_client/models/power_shell_session_request.py,sha256=2Ix3dnjljWXO6KuOTPCykkYJim1at0_vAu1dh4Dahcw,2361
109
+ openapi_client/cyberdesk_cloud_client/models/powershell_exec_v1_computer_machine_id_shell_powershell_exec_post_response_powershell_exec_v1_computer_machine_id_shell_powershell_exec_post.py,sha256=N496N5sS2XP1dqAvoB3EplU3Dxwtf867Vr8hhh315V8,1813
110
+ openapi_client/cyberdesk_cloud_client/models/powershell_session_v1_computer_machine_id_shell_powershell_session_post_response_powershell_session_v1_computer_machine_id_shell_powershell_session_post.py,sha256=pmt2dgp_0v1YoLJqDXTXdpJ29TBenyCC4C_xmUCFGgA,1873
88
111
  openapi_client/cyberdesk_cloud_client/models/request_log_create.py,sha256=6CNnBvl9oyGs0J0R994eFn-TIdl6ohsofvCc2SXVfWc,6072
89
112
  openapi_client/cyberdesk_cloud_client/models/request_log_response.py,sha256=mU3lUdbLRFg9XppHnO-GjKcvt4M_BCG5CynWwU7ivZE,7445
90
113
  openapi_client/cyberdesk_cloud_client/models/request_log_update.py,sha256=VcXBNffDOoEYYBjwvdkuSWPz04BW3c8YTcqzlZRb0ns,5677
91
- openapi_client/cyberdesk_cloud_client/models/run_create.py,sha256=MtO_9PWVPgeimH-zqtxD6GDEHyGnnneobVOtWIQGoYc,4343
114
+ openapi_client/cyberdesk_cloud_client/models/run_attachment_create.py,sha256=w58KmB9lLnE2N2EQJz_DP1PQj5OEL__t9ufdQFryp0A,4965
115
+ openapi_client/cyberdesk_cloud_client/models/run_attachment_response.py,sha256=LZEFltiyC_bBVNlz3LM1H5MXFoBkVzk-CzNuvlTumJ4,5769
116
+ openapi_client/cyberdesk_cloud_client/models/run_attachment_update.py,sha256=rGXcB21waSTXG0-mt0XhNcwoJI1PhBpBDUkLfp8mM-0,2573
117
+ openapi_client/cyberdesk_cloud_client/models/run_create.py,sha256=hUMuozdNHMQwndTl-mCfQ8hGwPeJ_EkPeZEmAUQWMHc,6083
92
118
  openapi_client/cyberdesk_cloud_client/models/run_create_input_values_type_0.py,sha256=APV4O0GduU3fhHoJHMMOBk-h92Hf21c1ZU-pIsJoZpg,1282
93
- openapi_client/cyberdesk_cloud_client/models/run_response.py,sha256=JtUerG8he5GjGqwrU914kKvBsxO9HKPzD7LSvWf67nA,9660
119
+ openapi_client/cyberdesk_cloud_client/models/run_response.py,sha256=zZUNgMVc8-Lmm_X3t_XzWdY1x_B7f3JixPWebfwl_40,10689
94
120
  openapi_client/cyberdesk_cloud_client/models/run_response_input_values_type_0.py,sha256=NpMqT3qaMrLGA7mHBjvtS1fnMGc5zxwWLoFWunjjupA,1292
95
121
  openapi_client/cyberdesk_cloud_client/models/run_response_output_data_type_0.py,sha256=rO4YJAa26G_83CFtBTQ_ZKCURAxNS7PcvdKbfuvDcrA,1287
96
122
  openapi_client/cyberdesk_cloud_client/models/run_response_run_message_history_type_0_item.py,sha256=3x1N3yi3kyc1que3bizmHEuGBn5s7pEirEg4TgBV9FU,1348
@@ -110,11 +136,11 @@ openapi_client/cyberdesk_cloud_client/models/trajectory_response_trajectory_data
110
136
  openapi_client/cyberdesk_cloud_client/models/trajectory_update.py,sha256=dzqD6zAT-jySWaASRi833gpHmahpkXd_r3LMD3-M8Lw,3568
111
137
  openapi_client/cyberdesk_cloud_client/models/trajectory_update_trajectory_data_type_0_item.py,sha256=3Zt8-nV3ZHjXzL1y5xKQdrHb-7ILG4EjHvtA4xabde4,1355
112
138
  openapi_client/cyberdesk_cloud_client/models/validation_error.py,sha256=ZlK9hbhWr4zSC-dxZh9giERvMiYf9s2k8e1O9Rch_NI,2181
113
- openapi_client/cyberdesk_cloud_client/models/workflow_create.py,sha256=0W5E5fIw3P0c7hR2XKBsGsa7jvUS2dQXWfWxPfjAGXE,3023
114
- openapi_client/cyberdesk_cloud_client/models/workflow_response.py,sha256=LS3QfsYFaBLwo5OyiOsDNJFn31B8L9mQTphdNwVybVw,6470
139
+ openapi_client/cyberdesk_cloud_client/models/workflow_create.py,sha256=Z7XG8k1js_cXclCJKEBV_xk25mgr3BDuYgPLuQcXWEk,3490
140
+ openapi_client/cyberdesk_cloud_client/models/workflow_response.py,sha256=kC_ZGUweaiogKqyRS1yjByHuYqZW0jzxuEyM9CIfFsc,6937
115
141
  openapi_client/cyberdesk_cloud_client/models/workflow_response_old_versions_type_0_item.py,sha256=W9AxxlBlN3rUwLDcoUx5H7MUiYA9UztfX9iEpNGlgAs,1340
116
- openapi_client/cyberdesk_cloud_client/models/workflow_update.py,sha256=JF82Mw0QkYsfita6nWPBtfDHLduoz8Bf7pJw8VmDXbA,3506
117
- cyberdesk-1.8.0.dist-info/METADATA,sha256=zoiYGTrQQ-ySZo5l1w093qcnZJBP5re-DyLuQKfnh88,6051
118
- cyberdesk-1.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
119
- cyberdesk-1.8.0.dist-info/top_level.txt,sha256=qTYHZHVHh3VClNPQsiFFA8p8tmJgFGhq9G1COd-pX_A,25
120
- cyberdesk-1.8.0.dist-info/RECORD,,
142
+ openapi_client/cyberdesk_cloud_client/models/workflow_update.py,sha256=_zMo2mJbYdKILygBXwebAD37SJJCUZOTkJkMOCzeNTA,4439
143
+ cyberdesk-1.9.0.dist-info/METADATA,sha256=SrCf6y1nUAjvB1t2-I9DQF01Qyd0uiYHyixa2azjDE8,6791
144
+ cyberdesk-1.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
145
+ cyberdesk-1.9.0.dist-info/top_level.txt,sha256=qTYHZHVHh3VClNPQsiFFA8p8tmJgFGhq9G1COd-pX_A,25
146
+ cyberdesk-1.9.0.dist-info/RECORD,,
@@ -0,0 +1,188 @@
1
+ from http import HTTPStatus
2
+ from typing import Any, Optional, Union
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.fs_list_v1_computer_machine_id_fs_list_get_response_fs_list_v1_computer_machine_id_fs_list_get import (
9
+ FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet,
10
+ )
11
+ from ...models.http_validation_error import HTTPValidationError
12
+ from ...types import UNSET, Response, Unset
13
+
14
+
15
+ def _get_kwargs(
16
+ machine_id: str,
17
+ *,
18
+ path: Union[Unset, str] = ".",
19
+ ) -> dict[str, Any]:
20
+ params: dict[str, Any] = {}
21
+
22
+ params["path"] = path
23
+
24
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
25
+
26
+ _kwargs: dict[str, Any] = {
27
+ "method": "get",
28
+ "url": f"/v1/computer/{machine_id}/fs/list",
29
+ "params": params,
30
+ }
31
+
32
+ return _kwargs
33
+
34
+
35
+ def _parse_response(
36
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
37
+ ) -> Optional[Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]]:
38
+ if response.status_code == 200:
39
+ response_200 = FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet.from_dict(
40
+ response.json()
41
+ )
42
+
43
+ return response_200
44
+ if response.status_code == 422:
45
+ response_422 = HTTPValidationError.from_dict(response.json())
46
+
47
+ return response_422
48
+ if client.raise_on_unexpected_status:
49
+ raise errors.UnexpectedStatus(response.status_code, response.content)
50
+ else:
51
+ return None
52
+
53
+
54
+ def _build_response(
55
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
56
+ ) -> Response[Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]]:
57
+ return Response(
58
+ status_code=HTTPStatus(response.status_code),
59
+ content=response.content,
60
+ headers=response.headers,
61
+ parsed=_parse_response(client=client, response=response),
62
+ )
63
+
64
+
65
+ def sync_detailed(
66
+ machine_id: str,
67
+ *,
68
+ client: AuthenticatedClient,
69
+ path: Union[Unset, str] = ".",
70
+ ) -> Response[Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]]:
71
+ """List directory contents
72
+
73
+ List directory contents on the machine.
74
+
75
+ Args:
76
+ machine_id (str):
77
+ path (Union[Unset, str]): Default: '.'.
78
+
79
+ Raises:
80
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
81
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
82
+
83
+ Returns:
84
+ Response[Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]]
85
+ """
86
+
87
+ kwargs = _get_kwargs(
88
+ machine_id=machine_id,
89
+ path=path,
90
+ )
91
+
92
+ response = client.get_httpx_client().request(
93
+ **kwargs,
94
+ )
95
+
96
+ return _build_response(client=client, response=response)
97
+
98
+
99
+ def sync(
100
+ machine_id: str,
101
+ *,
102
+ client: AuthenticatedClient,
103
+ path: Union[Unset, str] = ".",
104
+ ) -> Optional[Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]]:
105
+ """List directory contents
106
+
107
+ List directory contents on the machine.
108
+
109
+ Args:
110
+ machine_id (str):
111
+ path (Union[Unset, str]): Default: '.'.
112
+
113
+ Raises:
114
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
115
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
116
+
117
+ Returns:
118
+ Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]
119
+ """
120
+
121
+ return sync_detailed(
122
+ machine_id=machine_id,
123
+ client=client,
124
+ path=path,
125
+ ).parsed
126
+
127
+
128
+ async def asyncio_detailed(
129
+ machine_id: str,
130
+ *,
131
+ client: AuthenticatedClient,
132
+ path: Union[Unset, str] = ".",
133
+ ) -> Response[Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]]:
134
+ """List directory contents
135
+
136
+ List directory contents on the machine.
137
+
138
+ Args:
139
+ machine_id (str):
140
+ path (Union[Unset, str]): Default: '.'.
141
+
142
+ Raises:
143
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
144
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
145
+
146
+ Returns:
147
+ Response[Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]]
148
+ """
149
+
150
+ kwargs = _get_kwargs(
151
+ machine_id=machine_id,
152
+ path=path,
153
+ )
154
+
155
+ response = await client.get_async_httpx_client().request(**kwargs)
156
+
157
+ return _build_response(client=client, response=response)
158
+
159
+
160
+ async def asyncio(
161
+ machine_id: str,
162
+ *,
163
+ client: AuthenticatedClient,
164
+ path: Union[Unset, str] = ".",
165
+ ) -> Optional[Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]]:
166
+ """List directory contents
167
+
168
+ List directory contents on the machine.
169
+
170
+ Args:
171
+ machine_id (str):
172
+ path (Union[Unset, str]): Default: '.'.
173
+
174
+ Raises:
175
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
176
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
177
+
178
+ Returns:
179
+ Union[FsListV1ComputerMachineIdFsListGetResponseFsListV1ComputerMachineIdFsListGet, HTTPValidationError]
180
+ """
181
+
182
+ return (
183
+ await asyncio_detailed(
184
+ machine_id=machine_id,
185
+ client=client,
186
+ path=path,
187
+ )
188
+ ).parsed