createfakecategories.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import random
  2. import sys
  3. import time
  4. from django.core.management.base import BaseCommand
  5. from faker import Factory
  6. from misago.acl import version as acl_version
  7. from misago.core.management.progressbar import show_progress
  8. from misago.categories.models import Category, RoleCategoryACL
  9. class Command(BaseCommand):
  10. help = 'Creates random fakey categories for testing purposes'
  11. def handle(self, *args, **options):
  12. try:
  13. fake_cats_to_create = int(args[0])
  14. except IndexError:
  15. fake_cats_to_create = 5
  16. except ValueError:
  17. self.stderr.write("\nOptional argument should be integer.")
  18. sys.exit(1)
  19. categories = Category.objects.all_categories(True)
  20. try:
  21. min_level = int(args[1])
  22. except (IndexError):
  23. min_level = 0
  24. except ValueError:
  25. self.stderr.write("\nSecond optional argument should be integer.")
  26. sys.exit(1)
  27. categories = categories.filter(level__gte=min_level)
  28. fake = Factory.create()
  29. message = 'Creating %s fake categories...\n'
  30. self.stdout.write(message % fake_cats_to_create)
  31. message = '\n\nSuccessfully created %s fake categories'
  32. created_count = 0
  33. start_time = time.time()
  34. show_progress(self, created_count, fake_cats_to_create)
  35. for i in xrange(fake_cats_to_create):
  36. parent = random.choice(categories)
  37. new_category = Category()
  38. if random.randint(1, 100) > 75:
  39. new_category.set_name(fake.catch_phrase().title())
  40. else:
  41. new_category.set_name(fake.street_name())
  42. if random.randint(1, 100) > 50:
  43. if random.randint(1, 100) > 80:
  44. new_category.description = '\r\n'.join(fake.paragraphs())
  45. else:
  46. new_category.description = fake.paragraph()
  47. new_category.insert_at(parent,
  48. position='last-child',
  49. save=True,
  50. )
  51. copied_acls = []
  52. copy_acl_from = random.choice(Category.objects.all_categories())
  53. for acl in copy_acl_from.category_role_set.all():
  54. copied_acls.append(RoleCategoryACL(
  55. role_id=acl.role_id,
  56. category=new_category,
  57. category_role_id=acl.category_role_id,
  58. ))
  59. if copied_acls:
  60. acl_version.invalidate()
  61. RoleCategoryACL.objects.bulk_create(copied_acls)
  62. created_count += 1
  63. show_progress(
  64. self, created_count, fake_cats_to_create, start_time)
  65. self.stdout.write(message % created_count)