@@ -607,24 +607,11 @@ async def main():
607607 target_entity_types = normalized_types ,
608608 benefactor_tracker = benefactor_tracker ,
609609 progress_bar = progress_bar ,
610- )
611- if progress_bar :
612- progress_bar .update (1 ) # Process container contents complete
613-
614- if recursive and hasattr (self , "folders" ):
615- if progress_bar :
616- progress_bar .total += 1
617- progress_bar .refresh ()
618- await self ._process_folder_permission_deletion (
619- client = client ,
620- recursive = True ,
621- target_entity_types = normalized_types ,
610+ recursive = recursive ,
622611 include_container_content = include_container_content ,
623- benefactor_tracker = benefactor_tracker ,
624- progress_bar = progress_bar ,
625612 )
626613 if progress_bar :
627- progress_bar .update (1 )
614+ progress_bar .update (1 ) # Process container contents complete
628615
629616 def _normalize_target_entity_types (
630617 self , target_entity_types : Optional [List [str ]]
@@ -703,15 +690,19 @@ async def _process_container_contents(
703690 target_entity_types : List [str ],
704691 benefactor_tracker : BenefactorTracker ,
705692 progress_bar : Optional [tqdm ] = None ,
693+ recursive : bool = False ,
694+ include_container_content : bool = True ,
706695 ) -> None :
707696 """
708- Process the direct contents of a container entity.
697+ Process the contents of a container entity, optionally recursively .
709698
710699 Arguments:
711700 client: The Synapse client instance to use for API calls.
712701 target_entity_types: A list of normalized entity types to process.
713702 benefactor_tracker: Tracker for managing benefactor relationships.
714703 progress_bar: Optional progress bar to update as tasks complete.
704+ recursive: If True, process folders recursively; if False, process only direct contents.
705+ include_container_content: Whether to include the content of containers in processing.
715706
716707 Returns:
717708 None
@@ -757,21 +748,23 @@ async def process_single_file(file):
757748 if progress_bar :
758749 progress_bar .update (1 )
759750
760- if "folder" in target_entity_types and hasattr (self , "folders" ):
751+ if hasattr (self , "folders" ):
761752 await self ._process_folder_permission_deletion (
762753 client = client ,
763- recursive = False ,
754+ recursive = recursive ,
764755 benefactor_tracker = benefactor_tracker ,
765756 progress_bar = progress_bar ,
757+ target_entity_types = target_entity_types ,
758+ include_container_content = include_container_content ,
766759 )
767760
768761 async def _process_folder_permission_deletion (
769762 self ,
770763 client : Synapse ,
771764 recursive : bool ,
772765 benefactor_tracker : BenefactorTracker ,
766+ target_entity_types : List [str ],
773767 progress_bar : Optional [tqdm ] = None ,
774- target_entity_types : Optional [List [str ]] = None ,
775768 include_container_content : bool = False ,
776769 ) -> None :
777770 """
@@ -782,9 +775,9 @@ async def _process_folder_permission_deletion(
782775 recursive: If True, process folders recursively; if False, process only direct folders.
783776 benefactor_tracker: Tracker for managing benefactor relationships.
784777 Only used for non-recursive processing.
785- progress_bar: Optional progress bar to update as tasks complete.
786778 target_entity_types: A list of normalized entity types to process.
787779 For non-recursive processing, defaults to ["folder"].
780+ progress_bar: Optional progress bar to update as tasks complete.
788781 include_container_content: Whether to include the content of containers in processing.
789782 Only used for recursive processing.
790783
@@ -814,37 +807,21 @@ async def _process_folder_permission_deletion(
814807 progress_bar .update (1 ) # Each tracking task complete
815808
816809 async def process_single_folder (folder ):
817- if recursive :
818- # Recursive processing logic
819- if target_entity_types is None :
820- target_entity_types_to_use = []
821- else :
822- target_entity_types_to_use = target_entity_types
823-
824- should_delete_folder_acl = (
825- "folder" in target_entity_types_to_use and include_container_content
826- )
810+ should_delete_folder_acl = (
811+ "folder" in target_entity_types and include_container_content
812+ )
827813
828- await folder .delete_permissions_async (
829- include_self = should_delete_folder_acl ,
830- recursive = recursive ,
831- include_container_content = include_container_content ,
832- target_entity_types = target_entity_types_to_use ,
833- dry_run = False ,
834- _benefactor_tracker = benefactor_tracker ,
835- synapse_client = client ,
836- )
837- else :
838- # Non-recursive (direct) processing logic
839- await folder .delete_permissions_async (
840- include_self = True ,
841- recursive = False ,
842- include_container_content = False ,
843- target_entity_types = target_entity_types or ["folder" ],
844- dry_run = False ,
845- _benefactor_tracker = benefactor_tracker ,
846- synapse_client = client ,
847- )
814+ await folder .delete_permissions_async (
815+ include_self = should_delete_folder_acl ,
816+ recursive = recursive ,
817+ # This is needed to ensure we do not delete children ACLs when not
818+ # recursive, but still allow us to delete the ACL on the folder
819+ include_container_content = include_container_content and recursive ,
820+ target_entity_types = target_entity_types ,
821+ dry_run = False ,
822+ _benefactor_tracker = benefactor_tracker ,
823+ synapse_client = client ,
824+ )
848825
849826 folder_tasks = [process_single_folder (folder ) for folder in self .folders ]
850827
0 commit comments