Rafał Pitoń 11 лет назад
Родитель
Сommit
1bf4a02ed4
1 измененных файлов с 114 добавлено и 0 удалено
  1. 114 0
      misago/faker/management/commands/createfakebans.py

+ 114 - 0
misago/faker/management/commands/createfakebans.py

@@ -0,0 +1,114 @@
+import random
+from datetime import timedelta
+from faker import Factory
+from django.contrib.auth import get_user_model
+from django.core.exceptions import ValidationError
+from django.core.management.base import BaseCommand
+from django.db import IntegrityError
+from django.utils import timezone
+from misago.users.models import Ban, BAN_NAME, BAN_EMAIL, BAN_IP
+
+
+def fake_username_ban(fake):
+    fake_value = fake.first_name()
+
+    if random.randint(0, 100) < 31:
+        fake_value = '%s*' % fake_value
+    elif random.randint(0, 100) < 31:
+        fake_value = '*%s' % fake_value
+    elif random.randint(0, 100) < 31:
+        fake_value = list(fake_value)
+        fake_value.insert(random.randint(0, len(fake_value) - 1), '*')
+        fake_value = ''.join(fake_value)
+
+    return fake_value
+
+
+def fake_email_ban(fake):
+    if random.randint(0, 100) < 35:
+        return '*@%s' % fake.domain_name()
+    else:
+        return fake.email()
+
+
+def fake_ip_ban(fake):
+    if random.randint(0, 1):
+        fake_value = fake.ipv4()
+        if random.randint(0, 100) < 35:
+            fake_value = fake_value.split('.')
+            fake_value = '.'.join(fake_value[:random.randint(1, 3)])
+            fake_value = '%s.*' % fake_value
+        elif random.randint(0, 100) < 35:
+            fake_value = fake_value.split('.')
+            fake_value = '.'.join(fake_value[random.randint(1, 3):])
+            fake_value = '*.%s' % fake_value
+        elif random.randint(0, 100) < 35:
+            fake_value = fake_value.split('.')
+            fake_value[random.randint(0, 3)] = '*'
+            fake_value = '.'.join(fake_value)
+    else:
+        fake_value = fake.ipv6()
+
+        if random.randint(0, 100) < 35:
+            fake_value = fake_value.split(':')
+            fake_value = ':'.join(fake_value[:random.randint(1, 7)])
+            fake_value = '%s:*' % fake_value
+        elif random.randint(0, 100) < 35:
+            fake_value = fake_value.split(':')
+            fake_value = ':'.join(fake_value[:random.randint(1, 7)])
+            fake_value = '*:%s' % fake_value
+        elif random.randint(0, 100) < 35:
+            fake_value = fake_value.split(':')
+            fake_value[random.randint(0, 7)] = '*'
+            fake_value = ':'.join(fake_value)
+
+    return fake_value
+
+
+def create_fake_test(fake, test_type):
+    if test_type == BAN_NAME:
+        return fake_username_ban(fake)
+    elif test_type == BAN_EMAIL:
+        return fake_email_ban(fake)
+    elif test_type == BAN_IP:
+        return fake_ip_ban(fake)
+
+
+class Command(BaseCommand):
+    help = 'Creates plenty of random fakey bans for testing purposes'
+
+    def handle(self, *args, **options):
+        fake_bans_to_create = 100000
+        fake = Factory.create()
+
+        message = 'Attempting to create %s fake bans!'
+        self.stdout.write(message % fake_bans_to_create)
+
+        message = 'Successfully created %s fake bans!'
+
+        created_count = 0
+        for i in xrange(fake_bans_to_create):
+            ban = Ban(test=random.randint(BAN_NAME, BAN_IP))
+            ban.banned_value = create_fake_test(fake, ban.test)
+
+            if random.randint(0, 10) == 0:
+                ban.user_message = fake.sentence()
+
+            if random.randint(0, 10) == 0:
+                ban.staff_message = fake.sentence()
+
+            if random.randint(0, 1):
+                # Lets make ban temporary
+                ban_length = timedelta(days=random.randint(0, 300))
+                if random.randint(0, 1):
+                    ban.valid_until = timezone.now().date() - ban_length
+                else:
+                    ban.valid_until = timezone.now().date() + ban_length
+
+            ban.save()
+
+            created_count += 1
+            if created_count % 100 == 0:
+                self.stdout.write(message % created_count)
+
+        self.stdout.write(message % Vans.objects.all().count())