createfakecategories.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import random
  2. import sys
  3. import time
  4. from faker import Factory
  5. from django.core.management.base import BaseCommand
  6. from misago.acl import version as acl_version
  7. from misago.categories.models import Category, RoleCategoryACL
  8. from misago.core.management.progressbar import show_progress
  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. copy_acl_from = list(Category.objects.all_categories())[0]
  28. categories = categories.filter(level__gte=min_level)
  29. fake = Factory.create()
  30. message = 'Creating %s fake categories...\n'
  31. self.stdout.write(message % fake_cats_to_create)
  32. message = '\n\nSuccessfully created %s fake categories in %s'
  33. created_count = 0
  34. start_time = time.time()
  35. show_progress(self, created_count, fake_cats_to_create)
  36. for i in xrange(fake_cats_to_create):
  37. parent = random.choice(categories)
  38. new_category = Category()
  39. if random.randint(1, 100) > 75:
  40. new_category.set_name(fake.catch_phrase().title())
  41. else:
  42. new_category.set_name(fake.street_name())
  43. if random.randint(1, 100) > 50:
  44. if random.randint(1, 100) > 80:
  45. new_category.description = '\r\n'.join(fake.paragraphs())
  46. else:
  47. new_category.description = fake.paragraph()
  48. new_category.insert_at(parent,
  49. position='last-child',
  50. save=True,
  51. )
  52. copied_acls = []
  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. RoleCategoryACL.objects.bulk_create(copied_acls)
  61. created_count += 1
  62. show_progress(
  63. self, created_count, fake_cats_to_create, start_time)
  64. acl_version.invalidate()
  65. total_time = time.time() - start_time
  66. total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time))
  67. self.stdout.write(message % (created_count, total_humanized))