0101_eventrule.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import django.db.models.deletion
  2. import taggit.managers
  3. from django.contrib.contenttypes.models import ContentType
  4. from django.db import migrations, models
  5. import utilities.json
  6. from extras.choices import *
  7. def move_webhooks(apps, schema_editor):
  8. Webhook = apps.get_model("extras", "Webhook")
  9. EventRule = apps.get_model("extras", "EventRule")
  10. webhook_ct = ContentType.objects.get_for_model(Webhook).pk
  11. for webhook in Webhook.objects.all():
  12. event = EventRule()
  13. # Replicate attributes from Webhook instance
  14. event.name = webhook.name
  15. event.type_create = webhook.type_create
  16. event.type_update = webhook.type_update
  17. event.type_delete = webhook.type_delete
  18. event.type_job_start = webhook.type_job_start
  19. event.type_job_end = webhook.type_job_end
  20. event.enabled = webhook.enabled
  21. event.conditions = webhook.conditions
  22. event.action_type = EventRuleActionChoices.WEBHOOK
  23. event.action_object_type_id = webhook_ct
  24. event.action_object_id = webhook.id
  25. event.save()
  26. event.content_types.add(*webhook.content_types.all())
  27. class Migration(migrations.Migration):
  28. dependencies = [
  29. ('contenttypes', '0002_remove_content_type_name'),
  30. ('extras', '0100_customfield_ui_attrs'),
  31. ]
  32. operations = [
  33. # Create the EventRule model
  34. migrations.CreateModel(
  35. name='EventRule',
  36. fields=[
  37. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
  38. ('created', models.DateTimeField(auto_now_add=True, null=True)),
  39. ('last_updated', models.DateTimeField(auto_now=True, null=True)),
  40. (
  41. 'custom_field_data',
  42. models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
  43. ),
  44. ('name', models.CharField(max_length=150, unique=True)),
  45. ('description', models.CharField(blank=True, max_length=200)),
  46. ('type_create', models.BooleanField(default=False)),
  47. ('type_update', models.BooleanField(default=False)),
  48. ('type_delete', models.BooleanField(default=False)),
  49. ('type_job_start', models.BooleanField(default=False)),
  50. ('type_job_end', models.BooleanField(default=False)),
  51. ('enabled', models.BooleanField(default=True)),
  52. ('conditions', models.JSONField(blank=True, null=True)),
  53. ('action_type', models.CharField(default='webhook', max_length=30)),
  54. ('action_object_id', models.PositiveBigIntegerField(blank=True, null=True)),
  55. ('action_parameters', models.JSONField(blank=True, null=True)),
  56. ('action_data', models.JSONField(blank=True, null=True)),
  57. ('comments', models.TextField(blank=True)),
  58. ],
  59. options={
  60. 'verbose_name': 'eventrule',
  61. 'verbose_name_plural': 'eventrules',
  62. 'ordering': ('name',),
  63. },
  64. ),
  65. migrations.AddField(
  66. model_name='eventrule',
  67. name='action_object_type',
  68. field=models.ForeignKey(
  69. on_delete=django.db.models.deletion.CASCADE,
  70. related_name='eventrule_actions',
  71. to='contenttypes.contenttype',
  72. ),
  73. ),
  74. migrations.AddField(
  75. model_name='eventrule',
  76. name='content_types',
  77. field=models.ManyToManyField(related_name='eventrules', to='contenttypes.contenttype'),
  78. ),
  79. migrations.AddField(
  80. model_name='eventrule',
  81. name='tags',
  82. field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'),
  83. ),
  84. migrations.AddIndex(
  85. model_name='eventrule',
  86. index=models.Index(fields=['action_object_type', 'action_object_id'], name='extras_even_action__d9e2af_idx'),
  87. ),
  88. # Replicate Webhook data
  89. migrations.RunPython(move_webhooks),
  90. # Remove obsolete fields from Webhook
  91. migrations.RemoveConstraint(
  92. model_name='webhook',
  93. name='extras_webhook_unique_payload_url_types',
  94. ),
  95. migrations.RemoveField(
  96. model_name='webhook',
  97. name='conditions',
  98. ),
  99. migrations.RemoveField(
  100. model_name='webhook',
  101. name='content_types',
  102. ),
  103. migrations.RemoveField(
  104. model_name='webhook',
  105. name='enabled',
  106. ),
  107. migrations.RemoveField(
  108. model_name='webhook',
  109. name='type_create',
  110. ),
  111. migrations.RemoveField(
  112. model_name='webhook',
  113. name='type_delete',
  114. ),
  115. migrations.RemoveField(
  116. model_name='webhook',
  117. name='type_job_end',
  118. ),
  119. migrations.RemoveField(
  120. model_name='webhook',
  121. name='type_job_start',
  122. ),
  123. migrations.RemoveField(
  124. model_name='webhook',
  125. name='type_update',
  126. ),
  127. # Add description field to Webhook
  128. migrations.AddField(
  129. model_name='webhook',
  130. name='description',
  131. field=models.CharField(blank=True, max_length=200),
  132. ),
  133. ]