mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
* Closes #14436: Add PostgreSQL indexes for all GenericForeignKeys * Add note about GFK indexes to developer docs
147 lines
5.3 KiB
Python
147 lines
5.3 KiB
Python
import django.db.models.deletion
|
|
import taggit.managers
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.db import migrations, models
|
|
|
|
import utilities.json
|
|
from extras.choices import *
|
|
|
|
|
|
def move_webhooks(apps, schema_editor):
|
|
Webhook = apps.get_model("extras", "Webhook")
|
|
EventRule = apps.get_model("extras", "EventRule")
|
|
|
|
webhook_ct = ContentType.objects.get_for_model(Webhook).pk
|
|
for webhook in Webhook.objects.all():
|
|
event = EventRule()
|
|
|
|
# Replicate attributes from Webhook instance
|
|
event.name = webhook.name
|
|
event.type_create = webhook.type_create
|
|
event.type_update = webhook.type_update
|
|
event.type_delete = webhook.type_delete
|
|
event.type_job_start = webhook.type_job_start
|
|
event.type_job_end = webhook.type_job_end
|
|
event.enabled = webhook.enabled
|
|
event.conditions = webhook.conditions
|
|
|
|
event.action_type = EventRuleActionChoices.WEBHOOK
|
|
event.action_object_type_id = webhook_ct
|
|
event.action_object_id = webhook.id
|
|
event.save()
|
|
event.content_types.add(*webhook.content_types.all())
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [
|
|
('contenttypes', '0002_remove_content_type_name'),
|
|
('extras', '0100_customfield_ui_attrs'),
|
|
]
|
|
|
|
operations = [
|
|
|
|
# Create the EventRule model
|
|
migrations.CreateModel(
|
|
name='EventRule',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
|
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
|
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
|
(
|
|
'custom_field_data',
|
|
models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
|
|
),
|
|
('name', models.CharField(max_length=150, unique=True)),
|
|
('description', models.CharField(blank=True, max_length=200)),
|
|
('type_create', models.BooleanField(default=False)),
|
|
('type_update', models.BooleanField(default=False)),
|
|
('type_delete', models.BooleanField(default=False)),
|
|
('type_job_start', models.BooleanField(default=False)),
|
|
('type_job_end', models.BooleanField(default=False)),
|
|
('enabled', models.BooleanField(default=True)),
|
|
('conditions', models.JSONField(blank=True, null=True)),
|
|
('action_type', models.CharField(default='webhook', max_length=30)),
|
|
('action_object_id', models.PositiveBigIntegerField(blank=True, null=True)),
|
|
('action_parameters', models.JSONField(blank=True, null=True)),
|
|
('action_data', models.JSONField(blank=True, null=True)),
|
|
('comments', models.TextField(blank=True)),
|
|
],
|
|
options={
|
|
'verbose_name': 'eventrule',
|
|
'verbose_name_plural': 'eventrules',
|
|
'ordering': ('name',),
|
|
},
|
|
),
|
|
migrations.AddField(
|
|
model_name='eventrule',
|
|
name='action_object_type',
|
|
field=models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name='eventrule_actions',
|
|
to='contenttypes.contenttype',
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='eventrule',
|
|
name='content_types',
|
|
field=models.ManyToManyField(related_name='eventrules', to='contenttypes.contenttype'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='eventrule',
|
|
name='tags',
|
|
field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name='eventrule',
|
|
index=models.Index(fields=['action_object_type', 'action_object_id'], name='extras_even_action__d9e2af_idx'),
|
|
),
|
|
|
|
# Replicate Webhook data
|
|
migrations.RunPython(move_webhooks),
|
|
|
|
# Remove obsolete fields from Webhook
|
|
migrations.RemoveConstraint(
|
|
model_name='webhook',
|
|
name='extras_webhook_unique_payload_url_types',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='webhook',
|
|
name='conditions',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='webhook',
|
|
name='content_types',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='webhook',
|
|
name='enabled',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='webhook',
|
|
name='type_create',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='webhook',
|
|
name='type_delete',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='webhook',
|
|
name='type_job_end',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='webhook',
|
|
name='type_job_start',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='webhook',
|
|
name='type_update',
|
|
),
|
|
|
|
# Add description field to Webhook
|
|
migrations.AddField(
|
|
model_name='webhook',
|
|
name='description',
|
|
field=models.CharField(blank=True, max_length=200),
|
|
),
|
|
]
|