45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
|
# Generated by Django 4.2.12 on 2024-07-11 12:24
|
||
|
|
||
|
import random
|
||
|
|
||
|
from django.db import migrations
|
||
|
|
||
|
alphabet = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
|
||
|
|
||
|
|
||
|
def generate_password(size):
|
||
|
random.seed()
|
||
|
|
||
|
return "".join(random.choice(alphabet) for _ in range(size))
|
||
|
|
||
|
|
||
|
def pseudonymize_users(apps, _):
|
||
|
Question = apps.get_model("elections", "Question")
|
||
|
Vote = apps.get_model("elections", "Vote")
|
||
|
|
||
|
votes = set()
|
||
|
|
||
|
for q in Question.objects.filter(election__tallied=True).prefetch_related(
|
||
|
"options__vote_set"
|
||
|
):
|
||
|
|
||
|
for v in q.voters.all():
|
||
|
pseudonym = generate_password(16)
|
||
|
|
||
|
for opt in q.options.all():
|
||
|
for vote in opt.vote_set.filter(user=v):
|
||
|
vote.pseudonymous_user = pseudonym
|
||
|
vote.user = None
|
||
|
votes.add(vote)
|
||
|
|
||
|
Vote.objects.bulk_update(votes, ["pseudonymous_user", "user"])
|
||
|
|
||
|
|
||
|
class Migration(migrations.Migration):
|
||
|
|
||
|
dependencies = [
|
||
|
("elections", "0034_vote_pseudonymous_user_alter_vote_user"),
|
||
|
]
|
||
|
|
||
|
operations = [migrations.RunPython(pseudonymize_users)]
|