@@ -27,6 +27,7 @@ at your own risk.
2727 - get_acl_async
2828 - set_permissions_async
2929 - delete_permissions_async
30+ - list_acl_async
3031
3132[ ] ( ) { #column-reference-async }
3233::: synapseclient.models.Column
@@ -64,3 +65,141 @@ at your own risk.
6465::: synapseclient.models.CsvTableDescriptor
6566[ ] ( ) { #csv-to-pandas-df-reference-async }
6667::: 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