Просмотр исходного кода

Convert additional_headers to a TextField

Jeremy Stretch 6 лет назад
Родитель
Сommit
1fbd3a2c26

+ 0 - 23
netbox/extras/migrations/0038_webhook_body_template.py

@@ -1,23 +0,0 @@
-# Generated by Django 2.2.10 on 2020-02-24 20:12
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('extras', '0037_configcontexts_clusters'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='webhook',
-            name='body_template',
-            field=models.TextField(blank=True),
-        ),
-        migrations.AlterField(
-            model_name='webhook',
-            name='http_content_type',
-            field=models.CharField(default='application/json', max_length=100),
-        ),
-    ]

+ 43 - 0
netbox/extras/migrations/0038_webhook_template_support.py

@@ -0,0 +1,43 @@
+import json
+
+from django.db import migrations, models
+
+
+def json_to_text(apps, schema_editor):
+    """
+    Convert a JSON representation of HTTP headers to key-value pairs (one header per line)
+    """
+    Webhook = apps.get_model('extras', 'Webhook')
+    for webhook in Webhook.objects.exclude(additional_headers=''):
+        data = json.loads(webhook.additional_headers)
+        headers = ['{}: {}'.format(k, v) for k, v in data.items()]
+        Webhook.objects.filter(pk=webhook.pk).update(additional_headers='\n'.join(headers))
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('extras', '0037_configcontexts_clusters'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='webhook',
+            name='body_template',
+            field=models.TextField(blank=True),
+        ),
+        migrations.AlterField(
+            model_name='webhook',
+            name='additional_headers',
+            field=models.TextField(blank=True, default=''),
+            preserve_default=False,
+        ),
+        migrations.AlterField(
+            model_name='webhook',
+            name='http_content_type',
+            field=models.CharField(default='application/json', max_length=100),
+        ),
+        migrations.RunPython(
+            code=json_to_text
+        ),
+    ]

+ 1 - 2
netbox/extras/models.py

@@ -90,8 +90,7 @@ class Webhook(models.Model):
         help_text='The complete list of official content types is available '
         help_text='The complete list of official content types is available '
                   '<a href="https://www.iana.org/assignments/media-types/media-types.xhtml">here</a>.'
                   '<a href="https://www.iana.org/assignments/media-types/media-types.xhtml">here</a>.'
     )
     )
-    additional_headers = JSONField(
-        null=True,
+    additional_headers = models.TextField(
         blank=True,
         blank=True,
         help_text="User supplied headers which should be added to the request in addition to the HTTP content type. "
         help_text="User supplied headers which should be added to the request in addition to the HTTP content type. "
                   "Headers are supplied as key/value pairs in a JSON object."
                   "Headers are supplied as key/value pairs in a JSON object."