Files
GIA/core/migrations/0031_commandvariantpolicy.py

108 lines
4.0 KiB
Python

# Generated by Django 5.2.11 on 2026-03-02 14:17
import django.db.models.deletion
from django.db import migrations, models
def _backfill_variant_policies(apps, schema_editor):
CommandProfile = apps.get_model("core", "CommandProfile")
CommandAction = apps.get_model("core", "CommandAction")
CommandVariantPolicy = apps.get_model("core", "CommandVariantPolicy")
for profile in CommandProfile.objects.all().iterator():
actions = list(CommandAction.objects.filter(profile=profile))
post_result_enabled = any(
str(getattr(row, "action_type", "")) == "post_result"
and bool(getattr(row, "enabled", False))
for row in actions
)
send_status_to_source = (
str(getattr(profile, "visibility_mode", "") or "") == "status_in_source"
)
if str(getattr(profile, "slug", "") or "") == "bp":
rows = (
("bp", "ai", 0),
("bp_set", "verbatim", 1),
("bp_set_range", "verbatim", 2),
)
else:
rows = (("default", "verbatim", 0),)
for key, generation_mode, position in rows:
CommandVariantPolicy.objects.get_or_create(
profile=profile,
variant_key=key,
defaults={
"enabled": True,
"generation_mode": generation_mode,
"send_plan_to_egress": bool(post_result_enabled),
"send_status_to_source": bool(send_status_to_source),
"send_status_to_egress": False,
"position": int(position),
},
)
class Migration(migrations.Migration):
dependencies = [
("core", "0030_chattasksource_settings"),
]
operations = [
migrations.CreateModel(
name="CommandVariantPolicy",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("variant_key", models.CharField(default="default", max_length=64)),
("enabled", models.BooleanField(default=True)),
(
"generation_mode",
models.CharField(
choices=[("ai", "AI"), ("verbatim", "Verbatim")],
default="verbatim",
max_length=32,
),
),
("send_plan_to_egress", models.BooleanField(default=True)),
("send_status_to_source", models.BooleanField(default=True)),
("send_status_to_egress", models.BooleanField(default=False)),
("position", models.PositiveIntegerField(default=0)),
("created_at", models.DateTimeField(auto_now_add=True)),
("updated_at", models.DateTimeField(auto_now=True)),
(
"profile",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="variant_policies",
to="core.commandprofile",
),
),
],
options={
"ordering": ["position", "id"],
"indexes": [
models.Index(
fields=["profile", "enabled", "variant_key"],
name="core_comman_profile_7913f5_idx",
)
],
"constraints": [
models.UniqueConstraint(
fields=("profile", "variant_key"),
name="unique_command_variant_policy_per_profile",
)
],
},
),
migrations.RunPython(_backfill_variant_policies, migrations.RunPython.noop),
]