| 1 | # apps/trees/management/commands/populate_trees.py |
| 2 | from django.core.management.base import BaseCommand |
| 3 | from apps.trees.models import FileSystemTree |
| 4 | |
| 5 | |
| 6 | class Command(BaseCommand): |
| 7 | help = 'Create sample filesystem trees for testing' |
| 8 | |
| 9 | def add_arguments(self, parser): |
| 10 | parser.add_argument( |
| 11 | '--count', |
| 12 | type=int, |
| 13 | default=3, |
| 14 | help='Number of trees to create' |
| 15 | ) |
| 16 | |
| 17 | def handle(self, *args, **options): |
| 18 | count = options['count'] |
| 19 | |
| 20 | self.stdout.write('Creating sample filesystem trees...') |
| 21 | |
| 22 | difficulties = [ |
| 23 | {'name': 'Beginner Tree', 'max_depth': 3, 'dirs_per_level': 2}, |
| 24 | {'name': 'Intermediate Tree', 'max_depth': 4, 'dirs_per_level': 3}, |
| 25 | {'name': 'Advanced Tree', 'max_depth': 5, 'dirs_per_level': 4}, |
| 26 | {'name': 'Expert Tree', 'max_depth': 6, 'dirs_per_level': 5}, |
| 27 | ] |
| 28 | |
| 29 | created_count = 0 |
| 30 | for i in range(count): |
| 31 | difficulty = difficulties[i % len(difficulties)] |
| 32 | |
| 33 | tree = FileSystemTree.objects.create( |
| 34 | name=f"{difficulty['name']} #{i+1}" |
| 35 | ) |
| 36 | tree.generate_tree( |
| 37 | max_depth=difficulty['max_depth'], |
| 38 | directories_per_level=difficulty['dirs_per_level'] |
| 39 | ) |
| 40 | |
| 41 | created_count += 1 |
| 42 | self.stdout.write( |
| 43 | self.style.SUCCESS( |
| 44 | f"Created tree: {tree.name} with {tree.nodes.count()} directories" |
| 45 | ) |
| 46 | ) |
| 47 | self.stdout.write(f" Mole hidden at: {tree.mole_location}") |
| 48 | |
| 49 | self.stdout.write( |
| 50 | self.style.SUCCESS(f'Successfully created {created_count} filesystem trees') |
| 51 | ) |