Example #1
0
class RearPortBulkCreateForm(
        form_from_model(RearPort,
                        ['type', 'color', 'positions', 'mark_connected']),
        DeviceBulkAddComponentForm):
    model = RearPort
    field_order = ('name_pattern', 'label_pattern', 'type', 'positions',
                   'mark_connected', 'description', 'tags')
Example #2
0
class PowerOutletBulkEditForm(
        form_from_model(PowerOutlet, [
            'label', 'type', 'feed_leg', 'power_port', 'mark_connected',
            'description'
        ]), AddRemoveTagsForm, CustomFieldModelBulkEditForm):
    pk = forms.ModelMultipleChoiceField(queryset=PowerOutlet.objects.all(),
                                        widget=forms.MultipleHiddenInput())
    device = forms.ModelChoiceField(queryset=Device.objects.all(),
                                    required=False,
                                    disabled=True,
                                    widget=forms.HiddenInput())
    mark_connected = forms.NullBooleanField(required=False,
                                            widget=BulkEditNullBooleanSelect)

    class Meta:
        nullable_fields = [
            'label', 'type', 'feed_leg', 'power_port', 'description'
        ]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # Limit power_port queryset to PowerPorts which belong to the parent Device
        if 'device' in self.initial:
            device = Device.objects.filter(pk=self.initial['device']).first()
            self.fields['power_port'].queryset = PowerPort.objects.filter(
                device=device)
        else:
            self.fields['power_port'].choices = ()
            self.fields['power_port'].widget.attrs['disabled'] = True
Example #3
0
class ConsoleServerPortBulkCreateForm(
        form_from_model(ConsoleServerPort,
                        ['type', 'speed', 'mark_connected']),
        DeviceBulkAddComponentForm):
    model = ConsoleServerPort
    field_order = ('name_pattern', 'label_pattern', 'type', 'speed',
                   'description', 'tags')
Example #4
0
class DeviceBayBulkEditForm(
        form_from_model(DeviceBay, ['label', 'description']),
        AddRemoveTagsForm, CustomFieldModelBulkEditForm):
    pk = forms.ModelMultipleChoiceField(queryset=DeviceBay.objects.all(),
                                        widget=forms.MultipleHiddenInput())

    class Meta:
        nullable_fields = ['label', 'description']
Example #5
0
class InterfaceBulkCreateForm(
    form_from_model(Interface, ['type', 'enabled', 'mtu', 'mgmt_only', 'mark_connected']),
    DeviceBulkAddComponentForm
):
    model = Interface
    field_order = (
        'name_pattern', 'label_pattern', 'type', 'enabled', 'mtu', 'mgmt_only', 'mark_connected', 'description', 'tags',
    )
Example #6
0
class PowerPortBulkCreateForm(
        form_from_model(
            PowerPort,
            ['type', 'maximum_draw', 'allocated_draw', 'mark_connected']),
        DeviceBulkAddComponentForm):
    model = PowerPort
    field_order = ('name_pattern', 'label_pattern', 'type', 'maximum_draw',
                   'allocated_draw', 'description', 'tags')
Example #7
0
class InventoryItemBulkCreateForm(
    form_from_model(InventoryItem, ['manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered']),
    DeviceBulkAddComponentForm
):
    model = InventoryItem
    field_order = (
        'name_pattern', 'label_pattern', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered', 'description',
        'tags',
    )
Example #8
0
class InterfaceBulkCreateForm(
    form_from_model(Interface, ['enabled', 'mtu', 'description', 'tags']),
    VirtualMachineBulkAddComponentForm
):
    type = forms.ChoiceField(
        choices=VMInterfaceTypeChoices,
        initial=VMInterfaceTypeChoices.TYPE_VIRTUAL,
        widget=forms.HiddenInput()
    )
Example #9
0
class RearPortBulkEditForm(
        form_from_model(
            RearPort,
            ['label', 'type', 'color', 'mark_connected', 'description']),
        AddRemoveTagsForm, CustomFieldModelBulkEditForm):
    pk = forms.ModelMultipleChoiceField(queryset=RearPort.objects.all(),
                                        widget=forms.MultipleHiddenInput())

    class Meta:
        nullable_fields = ['label', 'description']
Example #10
0
class InventoryItemBulkEditForm(
        form_from_model(InventoryItem,
                        ['label', 'manufacturer', 'part_id', 'description']),
        AddRemoveTagsForm, CustomFieldModelBulkEditForm):
    pk = forms.ModelMultipleChoiceField(queryset=InventoryItem.objects.all(),
                                        widget=forms.MultipleHiddenInput())
    manufacturer = DynamicModelChoiceField(queryset=Manufacturer.objects.all(),
                                           required=False)

    class Meta:
        nullable_fields = ['label', 'manufacturer', 'part_id', 'description']
Example #11
0
class PowerPortBulkEditForm(
        form_from_model(PowerPort, [
            'label', 'type', 'maximum_draw', 'allocated_draw',
            'mark_connected', 'description'
        ]), AddRemoveTagsForm, CustomFieldModelBulkEditForm):
    pk = forms.ModelMultipleChoiceField(queryset=PowerPort.objects.all(),
                                        widget=forms.MultipleHiddenInput())
    mark_connected = forms.NullBooleanField(required=False,
                                            widget=BulkEditNullBooleanSelect)

    class Meta:
        nullable_fields = ['label', 'description']
Example #12
0
class ConsolePortBulkEditForm(
        form_from_model(
            ConsolePort,
            ['label', 'type', 'speed', 'mark_connected', 'description']),
        BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
    pk = forms.ModelMultipleChoiceField(queryset=ConsolePort.objects.all(),
                                        widget=forms.MultipleHiddenInput())
    mark_connected = forms.NullBooleanField(required=False,
                                            widget=BulkEditNullBooleanSelect)

    class Meta:
        nullable_fields = ['label', 'description']
Example #13
0
class InterfaceBulkEditForm(
        form_from_model(Interface, [
            'label',
            'type',
            'parent',
            'bridge',
            'lag',
            'mac_address',
            'wwn',
            'mtu',
            'mgmt_only',
            'mark_connected',
            'description',
            'mode',
            'rf_role',
            'rf_channel',
            'rf_channel_frequency',
            'rf_channel_width',
            'tx_power',
        ]), AddRemoveTagsForm, CustomFieldModelBulkEditForm):
    pk = forms.ModelMultipleChoiceField(queryset=Interface.objects.all(),
                                        widget=forms.MultipleHiddenInput())
    device = forms.ModelChoiceField(queryset=Device.objects.all(),
                                    required=False,
                                    disabled=True,
                                    widget=forms.HiddenInput())
    enabled = forms.NullBooleanField(required=False,
                                     widget=BulkEditNullBooleanSelect)
    parent = DynamicModelChoiceField(queryset=Interface.objects.all(),
                                     required=False)
    bridge = DynamicModelChoiceField(queryset=Interface.objects.all(),
                                     required=False)
    lag = DynamicModelChoiceField(queryset=Interface.objects.all(),
                                  required=False,
                                  query_params={
                                      'type': 'lag',
                                  })
    mgmt_only = forms.NullBooleanField(required=False,
                                       widget=BulkEditNullBooleanSelect,
                                       label='Management only')
    mark_connected = forms.NullBooleanField(required=False,
                                            widget=BulkEditNullBooleanSelect)
    untagged_vlan = DynamicModelChoiceField(queryset=VLAN.objects.all(),
                                            required=False)
    tagged_vlans = DynamicModelMultipleChoiceField(queryset=VLAN.objects.all(),
                                                   required=False)

    class Meta:
        nullable_fields = [
            'label',
            'parent',
            'bridge',
            'lag',
            'mac_address',
            'wwn',
            'mtu',
            'description',
            'mode',
            'rf_channel',
            'rf_channel_frequency',
            'rf_channel_width',
            'tx_power',
            'untagged_vlan',
            'tagged_vlans',
        ]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if 'device' in self.initial:
            device = Device.objects.filter(pk=self.initial['device']).first()

            # Restrict parent/bridge/LAG interface assignment by device
            self.fields['parent'].widget.add_query_param(
                'device_id', device.pk)
            self.fields['bridge'].widget.add_query_param(
                'device_id', device.pk)
            self.fields['lag'].widget.add_query_param('device_id', device.pk)

            # Limit VLAN choices by device
            self.fields['untagged_vlan'].widget.add_query_param(
                'available_on_device', device.pk)
            self.fields['tagged_vlans'].widget.add_query_param(
                'available_on_device', device.pk)

        else:
            # See #4523
            if 'pk' in self.initial:
                site = None
                interfaces = Interface.objects.filter(
                    pk__in=self.initial['pk']).prefetch_related('device__site')

                # Check interface sites.  First interface should set site, further interfaces will either continue the
                # loop or reset back to no site and break the loop.
                for interface in interfaces:
                    if site is None:
                        site = interface.device.site
                    elif interface.device.site is not site:
                        site = None
                        break

                if site is not None:
                    self.fields['untagged_vlan'].widget.add_query_param(
                        'site_id', site.pk)
                    self.fields['tagged_vlans'].widget.add_query_param(
                        'site_id', site.pk)

            self.fields['parent'].choices = ()
            self.fields['parent'].widget.attrs['disabled'] = True
            self.fields['bridge'].choices = ()
            self.fields['bridge'].widget.attrs['disabled'] = True
            self.fields['lag'].choices = ()
            self.fields['lag'].widget.attrs['disabled'] = True

    def clean(self):
        super().clean()

        # Untagged interfaces cannot be assigned tagged VLANs
        if self.cleaned_data[
                'mode'] == InterfaceModeChoices.MODE_ACCESS and self.cleaned_data[
                    'tagged_vlans']:
            raise forms.ValidationError({
                'mode':
                "An access interface cannot have tagged VLANs assigned."
            })

        # Remove all tagged VLAN assignments from "tagged all" interfaces
        elif self.cleaned_data['mode'] == InterfaceModeChoices.MODE_TAGGED_ALL:
            self.cleaned_data['tagged_vlans'] = []
Example #14
0
class PowerOutletBulkCreateForm(
    form_from_model(PowerOutlet, ['type', 'feed_leg', 'mark_connected']),
    DeviceBulkAddComponentForm
):
    model = PowerOutlet
    field_order = ('name_pattern', 'label_pattern', 'type', 'feed_leg', 'description', 'tags')
Example #15
0
class VMInterfaceBulkCreateForm(
        form_from_model(VMInterface,
                        ['enabled', 'mtu', 'description', 'tags']),
        VirtualMachineBulkAddComponentForm):
    pass