@@ -27,6 +27,7 @@ at your own risk.
27
27
- get_acl_async
28
28
- set_permissions_async
29
29
- delete_permissions_async
30
+ - list_acl_async
30
31
31
32
[ ] ( ) { #column-reference-async }
32
33
::: synapseclient.models.Column
@@ -64,3 +65,141 @@ at your own risk.
64
65
::: synapseclient.models.CsvTableDescriptor
65
66
[ ] ( ) { #csv-to-pandas-df-reference-async }
66
67
::: synapseclient.models.mixins.table_components.csv_to_pandas_df
68
+
69
+ ## delete_permissions_async Flow Diagram
70
+
71
+ The following sequence diagram illustrates the complete flow and function calls of the ` delete_permissions_async ` method:
72
+
73
+ ``` mermaid
74
+ sequenceDiagram
75
+ participant User as User/Client
76
+ participant Entity as Entity (File/Folder/Project)
77
+ participant Tracker as BenefactorTracker
78
+ participant SynClient as Synapse Client
79
+ participant API as Synapse API
80
+ participant Logger as Logger
81
+
82
+ User->>Entity: delete_permissions_async(params)
83
+
84
+ Note over Entity: Parameter Validation & Setup
85
+ Entity->>Entity: Validate entity.id exists
86
+ Entity->>SynClient: get_client()
87
+
88
+ alt Project Entity
89
+ Entity->>Logger: warn("Project ACL cannot be deleted")
90
+ Entity->>Entity: set include_self=False
91
+ end
92
+
93
+ Entity->>Entity: _normalize_target_entity_types()
94
+ Entity->>Tracker: create BenefactorTracker()
95
+
96
+ alt Recursive or Container Content Processing
97
+ Entity->>Entity: _collect_entities()
98
+ Note over Entity: Gather all entities to process
99
+
100
+ Entity->>Tracker: track_entity_benefactor(entity_ids)
101
+
102
+ loop For each entity_id
103
+ Tracker->>API: get_entity_benefactor(entity_id)
104
+ API-->>Tracker: benefactor_result
105
+ end
106
+
107
+ Note over Tracker: Build benefactor relationships
108
+ Tracker->>Tracker: Update entity_benefactors mapping
109
+ Tracker->>Tracker: Update benefactor_children mapping
110
+ end
111
+
112
+ alt Dry Run Mode
113
+ Entity->>Entity: _build_and_log_dry_run_tree()
114
+ Entity->>Logger: Log what would be deleted
115
+ Entity-->>User: Return (no actual deletion)
116
+ else Actual Deletion
117
+
118
+ alt Include Self
119
+ Entity->>Entity: _delete_current_entity_acl()
120
+
121
+ Entity->>Tracker: track_entity_benefactor([self.id])
122
+ Tracker->>API: get_entity_benefactor(self.id)
123
+ API-->>Tracker: benefactor_result
124
+
125
+ Entity->>Tracker: will_acl_deletion_affect_others(self.id)
126
+ Tracker-->>Entity: boolean result
127
+
128
+ alt Will Affect Others
129
+ Entity->>Logger: info("Deleting ACL will affect X entities")
130
+ end
131
+
132
+ Entity->>API: delete_entity_acl(self.id)
133
+
134
+ alt Success
135
+ API-->>Entity: Success
136
+ Entity->>Logger: debug("Deleted ACL for entity")
137
+ Entity->>Tracker: mark_acl_deleted(self.id)
138
+ Tracker->>Tracker: Update benefactor relationships
139
+ Tracker-->>Entity: affected_entities list
140
+
141
+ alt Has Affected Entities
142
+ Entity->>Logger: info("ACL deletion caused X entities to inherit from new benefactor")
143
+ end
144
+ else HTTP Error
145
+ API-->>Entity: SynapseHTTPError
146
+ alt Already Inherits (403)
147
+ Entity->>Logger: debug("Entity already inherits permissions")
148
+ else Other Error
149
+ Entity->>Entity: raise exception
150
+ end
151
+ end
152
+ end
153
+
154
+ alt Process Container Contents
155
+ Entity->>Entity: _process_container_contents()
156
+
157
+ alt Process Files
158
+ loop For each file
159
+ Entity->>Entity: file.delete_permissions_async(recursive=False)
160
+ Note right of Entity: Recursive call for each file
161
+ end
162
+ end
163
+
164
+ alt Process Folders
165
+ Entity->>Entity: _process_folder_permission_deletion()
166
+
167
+ loop For each folder
168
+ alt Recursive Mode
169
+ Entity->>Entity: folder.delete_permissions_async(recursive=True)
170
+ else Direct Mode
171
+ Entity->>Entity: folder.delete_permissions_async(recursive=False)
172
+ end
173
+ Note right of Entity: Recursive calls for folders
174
+ end
175
+ end
176
+ end
177
+ end
178
+
179
+ Entity-->>User: Complete
180
+
181
+ Note over User,Logger: Key Features:
182
+ Note over User,Logger: • Async operations with asyncio.gather()
183
+ Note over User,Logger: • Benefactor relationship tracking
184
+ Note over User,Logger: • Recursive processing capabilities
185
+ Note over User,Logger: • Dry run mode for preview
186
+ Note over User,Logger: • Error handling for inheritance conflicts
187
+ Note over User,Logger: • Cascading permission updates
188
+ ```
189
+
190
+ ### Key Components:
191
+
192
+ - ** Entity** : The primary object (File, Folder, Project) whose permissions are being deleted
193
+ - ** BenefactorTracker** : Manages benefactor relationships and tracks cascading changes
194
+ - ** Synapse Client** : Handles API communication and logging
195
+ - ** Synapse API** : REST endpoints for ACL operations (` delete_entity_acl ` , ` get_entity_benefactor ` )
196
+ - ** Logger** : Records operations, warnings, and debug information
197
+
198
+ ### Flow Highlights:
199
+
200
+ 1 . ** Validation Phase** : Parameter validation and client setup
201
+ 2 . ** Collection Phase** : Gathering entities for recursive operations
202
+ 3 . ** Tracking Phase** : Parallel benefactor relationship discovery
203
+ 4 . ** Preview Phase** : Dry run mode shows what would be deleted
204
+ 5 . ** Deletion Phase** : Actual ACL deletions with error handling
205
+ 6 . ** Cascading Phase** : Updates benefactor relationships for affected entities
0 commit comments