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

Always use a JSON object to convey change data when no body template is present

Jeremy Stretch 6 лет назад
Родитель
Сommit
c3b64164ba
3 измененных файлов с 9 добавлено и 9 удалено
  1. 1 1
      docs/additional-features/webhooks.md
  2. 1 1
      netbox/extras/admin.py
  3. 7 7
      netbox/extras/models.py

+ 1 - 1
docs/additional-features/webhooks.md

@@ -42,7 +42,7 @@ The following data is available as context for Jinja2 templates:
 
 ### Default Request Body
 
-If no body template is specified, and the HTTP content type is `application/json`, the request body will be populated with a JSON object containing the context data. For example, a newly created site might appear as follows:
+If no body template is specified, the request body will be populated with a JSON object containing the context data. For example, a newly created site might appear as follows:
 
 ```no-highlight
 {

+ 1 - 1
netbox/extras/admin.py

@@ -58,7 +58,7 @@ class WebhookAdmin(admin.ModelAdmin):
         }),
         ('HTTP Request', {
             'fields': (
-                'http_method', 'payload_url', 'http_content_type', 'additional_headers', 'body_template', 'secret',
+                'payload_url', 'http_method', 'http_content_type', 'additional_headers', 'body_template', 'secret',
             )
         }),
         ('SSL', {

+ 7 - 7
netbox/extras/models.py

@@ -106,10 +106,9 @@ class Webhook(models.Model):
     )
     body_template = models.TextField(
         blank=True,
-        help_text='Jinja2 template for a custom request body. If blank, a JSON object or form data representing the '
-                  'change will be included. Available context data includes: <code>event</code>, '
-                  '<code>timestamp</code>, <code>model</code>, <code>username</code>, <code>request_id</code>, and '
-                  '<code>data</code>.'
+        help_text='Jinja2 template for a custom request body. If blank, a JSON object representing the change will be '
+                  'included. Available context data includes: <code>event</code>, <code>model</code>, '
+                  '<code>timestamp</code>, <code>username</code>, <code>request_id</code>, and <code>data</code>.'
     )
     secret = models.CharField(
         max_length=255,
@@ -165,12 +164,13 @@ class Webhook(models.Model):
         return ret
 
     def render_body(self, context):
+        """
+        Render the body template, if defined. Otherwise, jump the context as a JSON object.
+        """
         if self.body_template:
             return render_jinja2(self.body_template, context)
-        elif self.http_content_type == HTTP_CONTENT_TYPE_JSON:
-            return json.dumps(context, cls=JSONEncoder)
         else:
-            return context
+            return json.dumps(context, cls=JSONEncoder)
 
 
 #