createfakecategories.py 2.9 KB

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