@@ -607,24 +607,11 @@ async def main():
607
607
target_entity_types = normalized_types ,
608
608
benefactor_tracker = benefactor_tracker ,
609
609
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 ,
622
611
include_container_content = include_container_content ,
623
- benefactor_tracker = benefactor_tracker ,
624
- progress_bar = progress_bar ,
625
612
)
626
613
if progress_bar :
627
- progress_bar .update (1 )
614
+ progress_bar .update (1 ) # Process container contents complete
628
615
629
616
def _normalize_target_entity_types (
630
617
self , target_entity_types : Optional [List [str ]]
@@ -703,15 +690,19 @@ async def _process_container_contents(
703
690
target_entity_types : List [str ],
704
691
benefactor_tracker : BenefactorTracker ,
705
692
progress_bar : Optional [tqdm ] = None ,
693
+ recursive : bool = False ,
694
+ include_container_content : bool = True ,
706
695
) -> None :
707
696
"""
708
- Process the direct contents of a container entity.
697
+ Process the contents of a container entity, optionally recursively .
709
698
710
699
Arguments:
711
700
client: The Synapse client instance to use for API calls.
712
701
target_entity_types: A list of normalized entity types to process.
713
702
benefactor_tracker: Tracker for managing benefactor relationships.
714
703
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.
715
706
716
707
Returns:
717
708
None
@@ -757,21 +748,23 @@ async def process_single_file(file):
757
748
if progress_bar :
758
749
progress_bar .update (1 )
759
750
760
- if "folder" in target_entity_types and hasattr (self , "folders" ):
751
+ if hasattr (self , "folders" ):
761
752
await self ._process_folder_permission_deletion (
762
753
client = client ,
763
- recursive = False ,
754
+ recursive = recursive ,
764
755
benefactor_tracker = benefactor_tracker ,
765
756
progress_bar = progress_bar ,
757
+ target_entity_types = target_entity_types ,
758
+ include_container_content = include_container_content ,
766
759
)
767
760
768
761
async def _process_folder_permission_deletion (
769
762
self ,
770
763
client : Synapse ,
771
764
recursive : bool ,
772
765
benefactor_tracker : BenefactorTracker ,
766
+ target_entity_types : List [str ],
773
767
progress_bar : Optional [tqdm ] = None ,
774
- target_entity_types : Optional [List [str ]] = None ,
775
768
include_container_content : bool = False ,
776
769
) -> None :
777
770
"""
@@ -782,9 +775,9 @@ async def _process_folder_permission_deletion(
782
775
recursive: If True, process folders recursively; if False, process only direct folders.
783
776
benefactor_tracker: Tracker for managing benefactor relationships.
784
777
Only used for non-recursive processing.
785
- progress_bar: Optional progress bar to update as tasks complete.
786
778
target_entity_types: A list of normalized entity types to process.
787
779
For non-recursive processing, defaults to ["folder"].
780
+ progress_bar: Optional progress bar to update as tasks complete.
788
781
include_container_content: Whether to include the content of containers in processing.
789
782
Only used for recursive processing.
790
783
@@ -814,37 +807,21 @@ async def _process_folder_permission_deletion(
814
807
progress_bar .update (1 ) # Each tracking task complete
815
808
816
809
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
+ )
827
813
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
+ )
848
825
849
826
folder_tasks = [process_single_folder (folder ) for folder in self .folders ]
850
827
0 commit comments