186 lines
6.8 KiB
Python
186 lines
6.8 KiB
Python
# Generated by Django 4.2.13 on 2024-06-29 03:41
|
|
|
|
import django.db.models.deletion
|
|
import django.db.models.functions.text
|
|
import django.utils.timezone
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
from tqdm import tqdm
|
|
|
|
from catalog.common import jsondata
|
|
|
|
|
|
def move_masto_email(apps, schema_editor):
|
|
User = apps.get_model("users", "User")
|
|
MastodonAccount = apps.get_model("mastodon", "MastodonAccount")
|
|
EmailAccount = apps.get_model("mastodon", "EmailAccount")
|
|
m = 0
|
|
e = 0
|
|
qs = User.objects.filter(username__isnull=True)
|
|
print(f"Deleting {qs.count()} nameless users.")
|
|
qs.delete()
|
|
for user in tqdm(User.objects.filter(is_active=True)):
|
|
if user.mastodon_username:
|
|
MastodonAccount.objects.update_or_create(
|
|
handle=f"{user.mastodon_username}@{user.mastodon_site}",
|
|
defaults={
|
|
"user": user,
|
|
"uid": user.mastodon_id,
|
|
"domain": user.mastodon_site,
|
|
"created": user.date_joined,
|
|
"last_refresh": user.mastodon_last_refresh,
|
|
"last_reachable": user.mastodon_last_reachable,
|
|
"followers": user.mastodon_followers,
|
|
"following": user.mastodon_following,
|
|
"blocks": user.mastodon_blocks,
|
|
"mutes": user.mastodon_mutes,
|
|
"domain_blocks": user.mastodon_domain_blocks,
|
|
"account_data": user.mastodon_account,
|
|
"access_data": {
|
|
"access_token": jsondata.encrypt_str(user.mastodon_token)
|
|
},
|
|
},
|
|
)
|
|
m += 1
|
|
if user.email:
|
|
EmailAccount.objects.update_or_create(
|
|
handle=user.email,
|
|
defaults={
|
|
"user": user,
|
|
"uid": user.email.split("@")[0],
|
|
"domain": user.email.split("@")[1],
|
|
"created": user.date_joined,
|
|
},
|
|
)
|
|
e += 1
|
|
print(f"{m} Mastodon, {e} Email migrated.")
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
("mastodon", "0004_alter_mastodonapplication_api_domain_and_more"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="SocialAccount",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"type",
|
|
models.CharField(
|
|
choices=[
|
|
("mastodon.blueskyaccount", "bluesky account"),
|
|
("mastodon.emailaccount", "email account"),
|
|
("mastodon.mastodonaccount", "mastodon account"),
|
|
("mastodon.threadsaccount", "threads account"),
|
|
],
|
|
db_index=True,
|
|
max_length=255,
|
|
),
|
|
),
|
|
("domain", models.CharField(max_length=255)),
|
|
("uid", models.CharField(max_length=255)),
|
|
("handle", models.CharField(max_length=1000)),
|
|
("access_data", models.JSONField(default=dict)),
|
|
("account_data", models.JSONField(default=dict)),
|
|
("preference_data", models.JSONField(default=dict)),
|
|
("followers", models.JSONField(default=list)),
|
|
("following", models.JSONField(default=list)),
|
|
("mutes", models.JSONField(default=list)),
|
|
("blocks", models.JSONField(default=list)),
|
|
("domain_blocks", models.JSONField(default=list)),
|
|
("created", models.DateTimeField(default=django.utils.timezone.now)),
|
|
("modified", models.DateTimeField(auto_now=True)),
|
|
("last_refresh", models.DateTimeField(default=None, null=True)),
|
|
("last_reachable", models.DateTimeField(default=None, null=True)),
|
|
(
|
|
"user",
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="social_accounts",
|
|
to=settings.AUTH_USER_MODEL,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name="BlueskyAccount",
|
|
fields=[],
|
|
options={
|
|
"proxy": True,
|
|
"indexes": [],
|
|
"constraints": [],
|
|
},
|
|
bases=("mastodon.socialaccount",),
|
|
),
|
|
migrations.CreateModel(
|
|
name="EmailAccount",
|
|
fields=[],
|
|
options={
|
|
"proxy": True,
|
|
"indexes": [],
|
|
"constraints": [],
|
|
},
|
|
bases=("mastodon.socialaccount",),
|
|
),
|
|
migrations.CreateModel(
|
|
name="MastodonAccount",
|
|
fields=[],
|
|
options={
|
|
"proxy": True,
|
|
"indexes": [],
|
|
"constraints": [],
|
|
},
|
|
bases=("mastodon.socialaccount",),
|
|
),
|
|
migrations.CreateModel(
|
|
name="ThreadsAccount",
|
|
fields=[],
|
|
options={
|
|
"proxy": True,
|
|
"indexes": [],
|
|
"constraints": [],
|
|
},
|
|
bases=("mastodon.socialaccount",),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="socialaccount",
|
|
index=models.Index(
|
|
fields=["type", "handle"], name="index_social_type_handle"
|
|
),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="socialaccount",
|
|
index=models.Index(
|
|
fields=["type", "domain", "uid"], name="index_social_type_domain_uid"
|
|
),
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="socialaccount",
|
|
constraint=models.UniqueConstraint(
|
|
django.db.models.functions.text.Lower("domain"),
|
|
django.db.models.functions.text.Lower("uid"),
|
|
name="unique_social_domain_uid",
|
|
),
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="socialaccount",
|
|
constraint=models.UniqueConstraint(
|
|
models.F("type"),
|
|
django.db.models.functions.text.Lower("handle"),
|
|
name="unique_social_type_handle",
|
|
),
|
|
),
|
|
migrations.RunPython(move_masto_email),
|
|
]
|