Skip to content

Commit

Permalink
adds custom field on webhook model #11936
Browse files Browse the repository at this point in the history
  • Loading branch information
abhi1693 committed Aug 1, 2023
1 parent c1ca8d5 commit 836e6e0
Showing 10 changed files with 44 additions and 11 deletions.
6 changes: 3 additions & 3 deletions netbox/extras/api/serializers.py
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@
from netbox.api.exceptions import SerializerNotFound
from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelatedField
from netbox.api.serializers import BaseModelSerializer, NetBoxModelSerializer, ValidatedModelSerializer
from netbox.api.serializers.features import TaggableModelSerializer
from netbox.api.serializers.features import CustomFieldModelSerializer, TaggableModelSerializer
from netbox.constants import NESTED_SERIALIZER_PREFIX
from tenancy.api.nested_serializers import NestedTenantSerializer, NestedTenantGroupSerializer
from tenancy.models import Tenant, TenantGroup
@@ -61,7 +61,7 @@
# Webhooks
#

class WebhookSerializer(ValidatedModelSerializer):
class WebhookSerializer(CustomFieldModelSerializer, ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:webhook-detail')
content_types = ContentTypeField(
queryset=ContentType.objects.filter(FeatureQuery('webhooks').get_query()),
@@ -74,7 +74,7 @@ class Meta:
'id', 'url', 'display', 'content_types', 'name', 'type_create', 'type_update', 'type_delete',
'type_job_start', 'type_job_end', 'payload_url', 'enabled', 'http_method', 'http_content_type',
'additional_headers', 'body_template', 'secret', 'conditions', 'ssl_verification', 'ca_file_path',
'created', 'last_updated',
'custom_fields', 'created', 'last_updated',
]


9 changes: 8 additions & 1 deletion netbox/extras/forms/bulk_edit.py
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@

from extras.choices import *
from extras.models import *
from netbox.forms import NetBoxModelBulkEditForm
from utilities.forms import BulkEditForm, add_blank_choice
from utilities.forms.fields import ColorField, DynamicModelChoiceField
from utilities.forms.widgets import BulkEditNullBooleanSelect
@@ -165,7 +166,9 @@ class SavedFilterBulkEditForm(BulkEditForm):
nullable_fields = ('description',)


class WebhookBulkEditForm(BulkEditForm):
class WebhookBulkEditForm(NetBoxModelBulkEditForm):
model = Webhook

pk = forms.ModelMultipleChoiceField(
queryset=Webhook.objects.all(),
widget=forms.MultipleHiddenInput
@@ -223,6 +226,10 @@ class WebhookBulkEditForm(BulkEditForm):
label=_('CA file path')
)

add_tags = None

remove_tags = None

nullable_fields = ('secret', 'conditions', 'ca_file_path')


4 changes: 3 additions & 1 deletion netbox/extras/forms/bulk_import.py
Original file line number Diff line number Diff line change
@@ -140,14 +140,16 @@ class Meta:
)


class WebhookImportForm(CSVModelForm):
class WebhookImportForm(NetBoxModelImportForm):
content_types = CSVMultipleContentTypeField(
label=_('Content types'),
queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('webhooks'),
help_text=_("One or more assigned object types")
)

tags = None

class Meta:
model = Webhook
fields = (
6 changes: 4 additions & 2 deletions netbox/extras/forms/filtersets.py
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@
)
from utilities.forms.widgets import APISelectMultiple, DateTimePicker
from virtualization.models import Cluster, ClusterGroup, ClusterType
from .mixins import SavedFiltersMixin
from .mixins import *

__all__ = (
'ConfigContextFilterForm',
@@ -219,7 +219,9 @@ class SavedFilterFilterForm(SavedFiltersMixin, FilterForm):
)


class WebhookFilterForm(SavedFiltersMixin, FilterForm):
class WebhookFilterForm(CustomFieldsMixin, SavedFiltersMixin, FilterForm):
model = Webhook

fieldsets = (
(None, ('q', 'filter_id')),
(_('Attributes'), ('content_type_id', 'http_method', 'enabled')),
4 changes: 3 additions & 1 deletion netbox/extras/forms/model_forms.py
Original file line number Diff line number Diff line change
@@ -214,13 +214,15 @@ class Meta:
fields = ('object_type', 'object_id')


class WebhookForm(BootstrapMixin, forms.ModelForm):
class WebhookForm(NetBoxModelForm):
content_types = ContentTypeMultipleChoiceField(
label=_('Content types'),
queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('webhooks')
)

tags = None

fieldsets = (
(_('Webhook'), ('name', 'content_types', 'enabled')),
(_('Events'), ('type_create', 'type_update', 'type_delete', 'type_job_start', 'type_job_end')),
2 changes: 1 addition & 1 deletion netbox/extras/graphql/types.py
Original file line number Diff line number Diff line change
@@ -106,7 +106,7 @@ class Meta:
filterset_class = filtersets.TagFilterSet


class WebhookType(ObjectType):
class WebhookType(CustomFieldsMixin, ObjectType):

class Meta:
model = models.Webhook
19 changes: 19 additions & 0 deletions netbox/extras/migrations/0098_webhook_custom_field_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 4.1.10 on 2023-08-01 15:29

from django.db import migrations, models
import utilities.json


class Migration(migrations.Migration):

dependencies = [
('extras', '0097_customfield_remove_choices'),
]

operations = [
migrations.AddField(
model_name='webhook',
name='custom_field_data',
field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
),
]
2 changes: 1 addition & 1 deletion netbox/extras/models/models.py
Original file line number Diff line number Diff line change
@@ -39,7 +39,7 @@
)


class Webhook(ExportTemplatesMixin, ChangeLoggedModel):
class Webhook(CustomFieldsMixin, ExportTemplatesMixin, ChangeLoggedModel):
"""
A Webhook defines a request that will be sent to a remote application when an object is created, updated, and/or
delete in NetBox. The request will contain a representation of the object, which the remote application can act on.
2 changes: 1 addition & 1 deletion netbox/netbox/forms/base.py
Original file line number Diff line number Diff line change
@@ -36,7 +36,7 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

# Limit tags to those applicable to the object type
if (ct := self._get_content_type()) and hasattr(self.fields['tags'].widget, 'add_query_param'):
if self.fields.get('tags') and (ct := self._get_content_type()) and hasattr(self.fields['tags'].widget, 'add_query_param'):
self.fields['tags'].widget.add_query_param('for_object_type_id', ct.pk)

def _get_content_type(self):
1 change: 1 addition & 0 deletions netbox/templates/extras/webhook.html
Original file line number Diff line number Diff line change
@@ -147,6 +147,7 @@ <h5 class="card-header">
{% endif %}
</div>
</div>
{% include 'inc/panels/custom_fields.html' %}
{% plugin_right_page object %}
</div>
</div>

0 comments on commit 836e6e0

Please sign in to comment.