mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-18 04:56:29 -06:00
Merge pull request #4112 from netbox-community/4109-devicetype-component-tests
Closes #4109: Add view tests for device component templates
This commit is contained in:
commit
077d692d6d
@ -1043,11 +1043,17 @@ class ConsolePortTemplateForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class ConsolePortTemplateCreateForm(BootstrapMixin, forms.Form):
|
class ConsolePortTemplateCreateForm(BootstrapMixin, forms.Form):
|
||||||
|
device_type = forms.ModelChoiceField(
|
||||||
|
queryset=DeviceType.objects.all(),
|
||||||
|
widget=APISelect(
|
||||||
|
api_url='/api/dcim/device-types/'
|
||||||
|
)
|
||||||
|
)
|
||||||
name_pattern = ExpandableNameField(
|
name_pattern = ExpandableNameField(
|
||||||
label='Name'
|
label='Name'
|
||||||
)
|
)
|
||||||
type = forms.ChoiceField(
|
type = forms.ChoiceField(
|
||||||
choices=ConsolePortTypeChoices,
|
choices=add_blank_choice(ConsolePortTypeChoices),
|
||||||
widget=StaticSelect2()
|
widget=StaticSelect2()
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1065,6 +1071,12 @@ class ConsoleServerPortTemplateForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class ConsoleServerPortTemplateCreateForm(BootstrapMixin, forms.Form):
|
class ConsoleServerPortTemplateCreateForm(BootstrapMixin, forms.Form):
|
||||||
|
device_type = forms.ModelChoiceField(
|
||||||
|
queryset=DeviceType.objects.all(),
|
||||||
|
widget=APISelect(
|
||||||
|
api_url='/api/dcim/device-types/'
|
||||||
|
)
|
||||||
|
)
|
||||||
name_pattern = ExpandableNameField(
|
name_pattern = ExpandableNameField(
|
||||||
label='Name'
|
label='Name'
|
||||||
)
|
)
|
||||||
@ -1087,6 +1099,12 @@ class PowerPortTemplateForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class PowerPortTemplateCreateForm(BootstrapMixin, forms.Form):
|
class PowerPortTemplateCreateForm(BootstrapMixin, forms.Form):
|
||||||
|
device_type = forms.ModelChoiceField(
|
||||||
|
queryset=DeviceType.objects.all(),
|
||||||
|
widget=APISelect(
|
||||||
|
api_url='/api/dcim/device-types/'
|
||||||
|
)
|
||||||
|
)
|
||||||
name_pattern = ExpandableNameField(
|
name_pattern = ExpandableNameField(
|
||||||
label='Name'
|
label='Name'
|
||||||
)
|
)
|
||||||
@ -1129,6 +1147,12 @@ class PowerOutletTemplateForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class PowerOutletTemplateCreateForm(BootstrapMixin, forms.Form):
|
class PowerOutletTemplateCreateForm(BootstrapMixin, forms.Form):
|
||||||
|
device_type = forms.ModelChoiceField(
|
||||||
|
queryset=DeviceType.objects.all(),
|
||||||
|
widget=APISelect(
|
||||||
|
api_url='/api/dcim/device-types/'
|
||||||
|
)
|
||||||
|
)
|
||||||
name_pattern = ExpandableNameField(
|
name_pattern = ExpandableNameField(
|
||||||
label='Name'
|
label='Name'
|
||||||
)
|
)
|
||||||
@ -1147,12 +1171,14 @@ class PowerOutletTemplateCreateForm(BootstrapMixin, forms.Form):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
# Limit power_port choices to current DeviceType
|
# Limit power_port choices to current DeviceType
|
||||||
|
device_type = DeviceType.objects.get(
|
||||||
|
pk=self.initial.get('device_type') or self.data.get('device_type')
|
||||||
|
)
|
||||||
self.fields['power_port'].queryset = PowerPortTemplate.objects.filter(
|
self.fields['power_port'].queryset = PowerPortTemplate.objects.filter(
|
||||||
device_type=self.parent
|
device_type=device_type
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -1170,6 +1196,12 @@ class InterfaceTemplateForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class InterfaceTemplateCreateForm(BootstrapMixin, forms.Form):
|
class InterfaceTemplateCreateForm(BootstrapMixin, forms.Form):
|
||||||
|
device_type = forms.ModelChoiceField(
|
||||||
|
queryset=DeviceType.objects.all(),
|
||||||
|
widget=APISelect(
|
||||||
|
api_url='/api/dcim/device-types/'
|
||||||
|
)
|
||||||
|
)
|
||||||
name_pattern = ExpandableNameField(
|
name_pattern = ExpandableNameField(
|
||||||
label='Name'
|
label='Name'
|
||||||
)
|
)
|
||||||
@ -1227,6 +1259,12 @@ class FrontPortTemplateForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class FrontPortTemplateCreateForm(BootstrapMixin, forms.Form):
|
class FrontPortTemplateCreateForm(BootstrapMixin, forms.Form):
|
||||||
|
device_type = forms.ModelChoiceField(
|
||||||
|
queryset=DeviceType.objects.all(),
|
||||||
|
widget=APISelect(
|
||||||
|
api_url='/api/dcim/device-types/'
|
||||||
|
)
|
||||||
|
)
|
||||||
name_pattern = ExpandableNameField(
|
name_pattern = ExpandableNameField(
|
||||||
label='Name'
|
label='Name'
|
||||||
)
|
)
|
||||||
@ -1241,18 +1279,21 @@ class FrontPortTemplateCreateForm(BootstrapMixin, forms.Form):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
device_type = DeviceType.objects.get(
|
||||||
|
pk=self.initial.get('device_type') or self.data.get('device_type')
|
||||||
|
)
|
||||||
|
|
||||||
# Determine which rear port positions are occupied. These will be excluded from the list of available mappings.
|
# Determine which rear port positions are occupied. These will be excluded from the list of available mappings.
|
||||||
occupied_port_positions = [
|
occupied_port_positions = [
|
||||||
(front_port.rear_port_id, front_port.rear_port_position)
|
(front_port.rear_port_id, front_port.rear_port_position)
|
||||||
for front_port in self.parent.frontport_templates.all()
|
for front_port in device_type.frontport_templates.all()
|
||||||
]
|
]
|
||||||
|
|
||||||
# Populate rear port choices
|
# Populate rear port choices
|
||||||
choices = []
|
choices = []
|
||||||
rear_ports = RearPortTemplate.objects.filter(device_type=self.parent)
|
rear_ports = RearPortTemplate.objects.filter(device_type=device_type)
|
||||||
for rear_port in rear_ports:
|
for rear_port in rear_ports:
|
||||||
for i in range(1, rear_port.positions + 1):
|
for i in range(1, rear_port.positions + 1):
|
||||||
if (rear_port.pk, i) not in occupied_port_positions:
|
if (rear_port.pk, i) not in occupied_port_positions:
|
||||||
@ -1297,6 +1338,12 @@ class RearPortTemplateForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class RearPortTemplateCreateForm(BootstrapMixin, forms.Form):
|
class RearPortTemplateCreateForm(BootstrapMixin, forms.Form):
|
||||||
|
device_type = forms.ModelChoiceField(
|
||||||
|
queryset=DeviceType.objects.all(),
|
||||||
|
widget=APISelect(
|
||||||
|
api_url='/api/dcim/device-types/'
|
||||||
|
)
|
||||||
|
)
|
||||||
name_pattern = ExpandableNameField(
|
name_pattern = ExpandableNameField(
|
||||||
label='Name'
|
label='Name'
|
||||||
)
|
)
|
||||||
@ -1325,6 +1372,12 @@ class DeviceBayTemplateForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class DeviceBayTemplateCreateForm(BootstrapMixin, forms.Form):
|
class DeviceBayTemplateCreateForm(BootstrapMixin, forms.Form):
|
||||||
|
device_type = forms.ModelChoiceField(
|
||||||
|
queryset=DeviceType.objects.all(),
|
||||||
|
widget=APISelect(
|
||||||
|
api_url='/api/dcim/device-types/'
|
||||||
|
)
|
||||||
|
)
|
||||||
name_pattern = ExpandableNameField(
|
name_pattern = ExpandableNameField(
|
||||||
label='Name'
|
label='Name'
|
||||||
)
|
)
|
||||||
|
@ -524,6 +524,372 @@ device-bays:
|
|||||||
self.assertEqual(data[0]['model'], 'Device Type 1')
|
self.assertEqual(data[0]['model'], 'Device Type 1')
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# DeviceType components
|
||||||
|
#
|
||||||
|
|
||||||
|
class ConsolePortTemplateTestCase(StandardTestCases.Views):
|
||||||
|
model = ConsolePortTemplate
|
||||||
|
|
||||||
|
# Disable inapplicable views
|
||||||
|
test_get_object = None
|
||||||
|
test_list_objects = None
|
||||||
|
test_create_object = None
|
||||||
|
test_delete_object = None
|
||||||
|
test_import_objects = None
|
||||||
|
test_bulk_edit_objects = None
|
||||||
|
|
||||||
|
def test_bulk_create_objects(self):
|
||||||
|
return self._test_bulk_create_objects(expected_count=3)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
|
devicetypes = (
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'),
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 2', slug='device-type-2'),
|
||||||
|
)
|
||||||
|
DeviceType.objects.bulk_create(devicetypes)
|
||||||
|
|
||||||
|
ConsolePortTemplate.objects.bulk_create((
|
||||||
|
ConsolePortTemplate(device_type=devicetypes[0], name='Console Port Template 1'),
|
||||||
|
ConsolePortTemplate(device_type=devicetypes[0], name='Console Port Template 2'),
|
||||||
|
ConsolePortTemplate(device_type=devicetypes[0], name='Console Port Template 3'),
|
||||||
|
))
|
||||||
|
|
||||||
|
cls.form_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name': 'Console Port Template X',
|
||||||
|
'type': ConsolePortTypeChoices.TYPE_RJ45,
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.bulk_create_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name_pattern': 'Console Port Template [4-6]',
|
||||||
|
'type': ConsolePortTypeChoices.TYPE_RJ45,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class ConsoleServerPortTemplateTestCase(StandardTestCases.Views):
|
||||||
|
model = ConsoleServerPortTemplate
|
||||||
|
|
||||||
|
# Disable inapplicable views
|
||||||
|
test_get_object = None
|
||||||
|
test_list_objects = None
|
||||||
|
test_create_object = None
|
||||||
|
test_delete_object = None
|
||||||
|
test_import_objects = None
|
||||||
|
test_bulk_edit_objects = None
|
||||||
|
|
||||||
|
def test_bulk_create_objects(self):
|
||||||
|
return self._test_bulk_create_objects(expected_count=3)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
|
devicetypes = (
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'),
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 2', slug='device-type-2'),
|
||||||
|
)
|
||||||
|
DeviceType.objects.bulk_create(devicetypes)
|
||||||
|
|
||||||
|
ConsoleServerPortTemplate.objects.bulk_create((
|
||||||
|
ConsoleServerPortTemplate(device_type=devicetypes[0], name='Console Server Port Template 1'),
|
||||||
|
ConsoleServerPortTemplate(device_type=devicetypes[0], name='Console Server Port Template 2'),
|
||||||
|
ConsoleServerPortTemplate(device_type=devicetypes[0], name='Console Server Port Template 3'),
|
||||||
|
))
|
||||||
|
|
||||||
|
cls.form_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name': 'Console Server Port Template X',
|
||||||
|
'type': ConsolePortTypeChoices.TYPE_RJ45,
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.bulk_create_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name_pattern': 'Console Server Port Template [4-6]',
|
||||||
|
'type': ConsolePortTypeChoices.TYPE_RJ45,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class PowerPortTemplateTestCase(StandardTestCases.Views):
|
||||||
|
model = PowerPortTemplate
|
||||||
|
|
||||||
|
# Disable inapplicable views
|
||||||
|
test_get_object = None
|
||||||
|
test_list_objects = None
|
||||||
|
test_create_object = None
|
||||||
|
test_delete_object = None
|
||||||
|
test_import_objects = None
|
||||||
|
test_bulk_edit_objects = None
|
||||||
|
|
||||||
|
def test_bulk_create_objects(self):
|
||||||
|
return self._test_bulk_create_objects(expected_count=3)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
|
devicetypes = (
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'),
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 2', slug='device-type-2'),
|
||||||
|
)
|
||||||
|
DeviceType.objects.bulk_create(devicetypes)
|
||||||
|
|
||||||
|
PowerPortTemplate.objects.bulk_create((
|
||||||
|
PowerPortTemplate(device_type=devicetypes[0], name='Power Port Template 1'),
|
||||||
|
PowerPortTemplate(device_type=devicetypes[0], name='Power Port Template 2'),
|
||||||
|
PowerPortTemplate(device_type=devicetypes[0], name='Power Port Template 3'),
|
||||||
|
))
|
||||||
|
|
||||||
|
cls.form_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name': 'Power Port Template X',
|
||||||
|
'type': PowerPortTypeChoices.TYPE_IEC_C14,
|
||||||
|
'maxiumum_draw': 100,
|
||||||
|
'allocated_draw': 50,
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.bulk_create_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name_pattern': 'Power Port Template [4-6]',
|
||||||
|
'type': PowerPortTypeChoices.TYPE_IEC_C14,
|
||||||
|
'maxiumum_draw': 100,
|
||||||
|
'allocated_draw': 50,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class PowerOutletTemplateTestCase(StandardTestCases.Views):
|
||||||
|
model = PowerOutletTemplate
|
||||||
|
|
||||||
|
# Disable inapplicable views
|
||||||
|
test_get_object = None
|
||||||
|
test_list_objects = None
|
||||||
|
test_create_object = None
|
||||||
|
test_delete_object = None
|
||||||
|
test_import_objects = None
|
||||||
|
test_bulk_edit_objects = None
|
||||||
|
|
||||||
|
def test_bulk_create_objects(self):
|
||||||
|
return self._test_bulk_create_objects(expected_count=3)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
|
devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1')
|
||||||
|
|
||||||
|
PowerOutletTemplate.objects.bulk_create((
|
||||||
|
PowerOutletTemplate(device_type=devicetype, name='Power Outlet Template 1'),
|
||||||
|
PowerOutletTemplate(device_type=devicetype, name='Power Outlet Template 2'),
|
||||||
|
PowerOutletTemplate(device_type=devicetype, name='Power Outlet Template 3'),
|
||||||
|
))
|
||||||
|
|
||||||
|
powerports = (
|
||||||
|
PowerPortTemplate(device_type=devicetype, name='Power Port Template 1'),
|
||||||
|
)
|
||||||
|
PowerPortTemplate.objects.bulk_create(powerports)
|
||||||
|
|
||||||
|
cls.form_data = {
|
||||||
|
'device_type': devicetype.pk,
|
||||||
|
'name': 'Power Outlet Template X',
|
||||||
|
'type': PowerOutletTypeChoices.TYPE_IEC_C13,
|
||||||
|
'power_port': powerports[0].pk,
|
||||||
|
'feed_leg': PowerOutletFeedLegChoices.FEED_LEG_B,
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.bulk_create_data = {
|
||||||
|
'device_type': devicetype.pk,
|
||||||
|
'name_pattern': 'Power Outlet Template [4-6]',
|
||||||
|
'type': PowerOutletTypeChoices.TYPE_IEC_C13,
|
||||||
|
'power_port': powerports[0].pk,
|
||||||
|
'feed_leg': PowerOutletFeedLegChoices.FEED_LEG_B,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceTemplateTestCase(StandardTestCases.Views):
|
||||||
|
model = InterfaceTemplate
|
||||||
|
|
||||||
|
# Disable inapplicable views
|
||||||
|
test_get_object = None
|
||||||
|
test_list_objects = None
|
||||||
|
test_create_object = None
|
||||||
|
test_delete_object = None
|
||||||
|
test_import_objects = None
|
||||||
|
|
||||||
|
def test_bulk_create_objects(self):
|
||||||
|
return self._test_bulk_create_objects(expected_count=3)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
|
devicetypes = (
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'),
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 2', slug='device-type-2'),
|
||||||
|
)
|
||||||
|
DeviceType.objects.bulk_create(devicetypes)
|
||||||
|
|
||||||
|
InterfaceTemplate.objects.bulk_create((
|
||||||
|
InterfaceTemplate(device_type=devicetypes[0], name='Interface Template 1'),
|
||||||
|
InterfaceTemplate(device_type=devicetypes[0], name='Interface Template 2'),
|
||||||
|
InterfaceTemplate(device_type=devicetypes[0], name='Interface Template 3'),
|
||||||
|
))
|
||||||
|
|
||||||
|
cls.form_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name': 'Interface Template X',
|
||||||
|
'type': InterfaceTypeChoices.TYPE_1GE_GBIC,
|
||||||
|
'mgmt_only': True,
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.bulk_create_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name_pattern': 'Interface Template [4-6]',
|
||||||
|
'type': InterfaceTypeChoices.TYPE_1GE_GBIC,
|
||||||
|
'mgmt_only': True,
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.bulk_edit_data = {
|
||||||
|
'type': InterfaceTypeChoices.TYPE_1GE_GBIC,
|
||||||
|
'mgmt_only': True,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class FrontPortTemplateTestCase(StandardTestCases.Views):
|
||||||
|
model = FrontPortTemplate
|
||||||
|
|
||||||
|
# Disable inapplicable views
|
||||||
|
test_get_object = None
|
||||||
|
test_list_objects = None
|
||||||
|
test_create_object = None
|
||||||
|
test_delete_object = None
|
||||||
|
test_import_objects = None
|
||||||
|
test_bulk_edit_objects = None
|
||||||
|
|
||||||
|
def test_bulk_create_objects(self):
|
||||||
|
return self._test_bulk_create_objects(expected_count=3)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
|
devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1')
|
||||||
|
|
||||||
|
rearports = (
|
||||||
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 1'),
|
||||||
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 2'),
|
||||||
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 3'),
|
||||||
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 4'),
|
||||||
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 5'),
|
||||||
|
RearPortTemplate(device_type=devicetype, name='Rear Port Template 6'),
|
||||||
|
)
|
||||||
|
RearPortTemplate.objects.bulk_create(rearports)
|
||||||
|
|
||||||
|
FrontPortTemplate.objects.bulk_create((
|
||||||
|
FrontPortTemplate(device_type=devicetype, name='Front Port Template 1', rear_port=rearports[0], rear_port_position=1),
|
||||||
|
FrontPortTemplate(device_type=devicetype, name='Front Port Template 2', rear_port=rearports[1], rear_port_position=1),
|
||||||
|
FrontPortTemplate(device_type=devicetype, name='Front Port Template 3', rear_port=rearports[2], rear_port_position=1),
|
||||||
|
))
|
||||||
|
|
||||||
|
cls.form_data = {
|
||||||
|
'device_type': devicetype.pk,
|
||||||
|
'name': 'Front Port X',
|
||||||
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
|
'rear_port': rearports[3].pk,
|
||||||
|
'rear_port_position': 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.bulk_create_data = {
|
||||||
|
'device_type': devicetype.pk,
|
||||||
|
'name_pattern': 'Front Port [4-6]',
|
||||||
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
|
'rear_port_set': [
|
||||||
|
'{}:1'.format(rp.pk) for rp in rearports[3:6]
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class RearPortTemplateTestCase(StandardTestCases.Views):
|
||||||
|
model = RearPortTemplate
|
||||||
|
|
||||||
|
# Disable inapplicable views
|
||||||
|
test_get_object = None
|
||||||
|
test_list_objects = None
|
||||||
|
test_create_object = None
|
||||||
|
test_delete_object = None
|
||||||
|
test_import_objects = None
|
||||||
|
test_bulk_edit_objects = None
|
||||||
|
|
||||||
|
def test_bulk_create_objects(self):
|
||||||
|
return self._test_bulk_create_objects(expected_count=3)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
|
devicetypes = (
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'),
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 2', slug='device-type-2'),
|
||||||
|
)
|
||||||
|
DeviceType.objects.bulk_create(devicetypes)
|
||||||
|
|
||||||
|
RearPortTemplate.objects.bulk_create((
|
||||||
|
RearPortTemplate(device_type=devicetypes[0], name='Rear Port Template 1'),
|
||||||
|
RearPortTemplate(device_type=devicetypes[0], name='Rear Port Template 2'),
|
||||||
|
RearPortTemplate(device_type=devicetypes[0], name='Rear Port Template 3'),
|
||||||
|
))
|
||||||
|
|
||||||
|
cls.form_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name': 'Rear Port Template X',
|
||||||
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
|
'positions': 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.bulk_create_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name_pattern': 'Rear Port Template [4-6]',
|
||||||
|
'type': PortTypeChoices.TYPE_8P8C,
|
||||||
|
'positions': 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceBayTemplateTestCase(StandardTestCases.Views):
|
||||||
|
model = DeviceBayTemplate
|
||||||
|
|
||||||
|
# Disable inapplicable views
|
||||||
|
test_get_object = None
|
||||||
|
test_list_objects = None
|
||||||
|
test_create_object = None
|
||||||
|
test_delete_object = None
|
||||||
|
test_import_objects = None
|
||||||
|
test_bulk_edit_objects = None
|
||||||
|
|
||||||
|
def test_bulk_create_objects(self):
|
||||||
|
return self._test_bulk_create_objects(expected_count=3)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
|
devicetypes = (
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'),
|
||||||
|
DeviceType(manufacturer=manufacturer, model='Device Type 2', slug='device-type-2'),
|
||||||
|
)
|
||||||
|
DeviceType.objects.bulk_create(devicetypes)
|
||||||
|
|
||||||
|
DeviceBayTemplate.objects.bulk_create((
|
||||||
|
DeviceBayTemplate(device_type=devicetypes[0], name='Device Bay Template 1'),
|
||||||
|
DeviceBayTemplate(device_type=devicetypes[0], name='Device Bay Template 2'),
|
||||||
|
DeviceBayTemplate(device_type=devicetypes[0], name='Device Bay Template 3'),
|
||||||
|
))
|
||||||
|
|
||||||
|
cls.form_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name': 'Device Bay Template X',
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.bulk_create_data = {
|
||||||
|
'device_type': devicetypes[1].pk,
|
||||||
|
'name_pattern': 'Device Bay Template [4-6]',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class DeviceRoleTestCase(StandardTestCases.Views):
|
class DeviceRoleTestCase(StandardTestCases.Views):
|
||||||
model = DeviceRole
|
model = DeviceRole
|
||||||
|
|
||||||
|
@ -91,44 +91,44 @@ urlpatterns = [
|
|||||||
path('device-types/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='devicetype_changelog', kwargs={'model': DeviceType}),
|
path('device-types/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='devicetype_changelog', kwargs={'model': DeviceType}),
|
||||||
|
|
||||||
# Console port templates
|
# Console port templates
|
||||||
path('device-types/<int:pk>/console-ports/add/', views.ConsolePortTemplateCreateView.as_view(), name='devicetype_add_consoleport'),
|
path('console-port-templates/add/', views.ConsolePortTemplateCreateView.as_view(), name='consoleporttemplate_add'),
|
||||||
path('device-types/<int:pk>/console-ports/delete/', views.ConsolePortTemplateBulkDeleteView.as_view(), name='devicetype_delete_consoleport'),
|
path('console-port-templates/delete/', views.ConsolePortTemplateBulkDeleteView.as_view(), name='consoleporttemplate_bulk_delete'),
|
||||||
path('console-port-templates/<int:pk>/edit/', views.ConsolePortTemplateEditView.as_view(), name='consoleporttemplate_edit'),
|
path('console-port-templates/<int:pk>/edit/', views.ConsolePortTemplateEditView.as_view(), name='consoleporttemplate_edit'),
|
||||||
|
|
||||||
# Console server port templates
|
# Console server port templates
|
||||||
path('device-types/<int:pk>/console-server-ports/add/', views.ConsoleServerPortTemplateCreateView.as_view(), name='devicetype_add_consoleserverport'),
|
path('console-server-port-templates/add/', views.ConsoleServerPortTemplateCreateView.as_view(), name='consoleserverporttemplate_add'),
|
||||||
path('device-types/<int:pk>/console-server-ports/delete/', views.ConsoleServerPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_consoleserverport'),
|
path('console-server-port-templates/delete/', views.ConsoleServerPortTemplateBulkDeleteView.as_view(), name='consoleserverporttemplate_bulk_delete'),
|
||||||
path('console-server-port-templates/<int:pk>/edit/', views.ConsoleServerPortTemplateEditView.as_view(), name='consoleserverporttemplate_edit'),
|
path('console-server-port-templates/<int:pk>/edit/', views.ConsoleServerPortTemplateEditView.as_view(), name='consoleserverporttemplate_edit'),
|
||||||
|
|
||||||
# Power port templates
|
# Power port templates
|
||||||
path('device-types/<int:pk>/power-ports/add/', views.PowerPortTemplateCreateView.as_view(), name='devicetype_add_powerport'),
|
path('power-port-templates/add/', views.PowerPortTemplateCreateView.as_view(), name='powerporttemplate_add'),
|
||||||
path('device-types/<int:pk>/power-ports/delete/', views.PowerPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_powerport'),
|
path('power-port-templates/delete/', views.PowerPortTemplateBulkDeleteView.as_view(), name='powerporttemplate_bulk_delete'),
|
||||||
path('power-port-templates/<int:pk>/edit/', views.PowerPortTemplateEditView.as_view(), name='powerporttemplate_edit'),
|
path('power-port-templates/<int:pk>/edit/', views.PowerPortTemplateEditView.as_view(), name='powerporttemplate_edit'),
|
||||||
|
|
||||||
# Power outlet templates
|
# Power outlet templates
|
||||||
path('device-types/<int:pk>/power-outlets/add/', views.PowerOutletTemplateCreateView.as_view(), name='devicetype_add_poweroutlet'),
|
path('power-outlet-templates/add/', views.PowerOutletTemplateCreateView.as_view(), name='poweroutlettemplate_add'),
|
||||||
path('device-types/<int:pk>/power-outlets/delete/', views.PowerOutletTemplateBulkDeleteView.as_view(), name='devicetype_delete_poweroutlet'),
|
path('power-outlet-templates/delete/', views.PowerOutletTemplateBulkDeleteView.as_view(), name='poweroutlettemplate_bulk_delete'),
|
||||||
path('power-outlet-templates/<int:pk>/edit/', views.PowerOutletTemplateEditView.as_view(), name='poweroutlettemplate_edit'),
|
path('power-outlet-templates/<int:pk>/edit/', views.PowerOutletTemplateEditView.as_view(), name='poweroutlettemplate_edit'),
|
||||||
|
|
||||||
# Interface templates
|
# Interface templates
|
||||||
path('device-types/<int:pk>/interfaces/add/', views.InterfaceTemplateCreateView.as_view(), name='devicetype_add_interface'),
|
path('interface-templates/add/', views.InterfaceTemplateCreateView.as_view(), name='interfacetemplate_add'),
|
||||||
path('device-types/<int:pk>/interfaces/edit/', views.InterfaceTemplateBulkEditView.as_view(), name='devicetype_bulkedit_interface'),
|
path('interface-templates/edit/', views.InterfaceTemplateBulkEditView.as_view(), name='interfacetemplate_bulk_edit'),
|
||||||
path('device-types/<int:pk>/interfaces/delete/', views.InterfaceTemplateBulkDeleteView.as_view(), name='devicetype_delete_interface'),
|
path('interface-templates/delete/', views.InterfaceTemplateBulkDeleteView.as_view(), name='interfacetemplate_bulk_delete'),
|
||||||
path('interface-templates/<int:pk>/edit/', views.InterfaceTemplateEditView.as_view(), name='interfacetemplate_edit'),
|
path('interface-templates/<int:pk>/edit/', views.InterfaceTemplateEditView.as_view(), name='interfacetemplate_edit'),
|
||||||
|
|
||||||
# Front port templates
|
# Front port templates
|
||||||
path('device-types/<int:pk>/front-ports/add/', views.FrontPortTemplateCreateView.as_view(), name='devicetype_add_frontport'),
|
path('front-port-templates/add/', views.FrontPortTemplateCreateView.as_view(), name='frontporttemplate_add'),
|
||||||
path('device-types/<int:pk>/front-ports/delete/', views.FrontPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_frontport'),
|
path('front-port-templates/delete/', views.FrontPortTemplateBulkDeleteView.as_view(), name='frontporttemplate_bulk_delete'),
|
||||||
path('front-port-templates/<int:pk>/edit/', views.FrontPortTemplateEditView.as_view(), name='frontporttemplate_edit'),
|
path('front-port-templates/<int:pk>/edit/', views.FrontPortTemplateEditView.as_view(), name='frontporttemplate_edit'),
|
||||||
|
|
||||||
# Rear port templates
|
# Rear port templates
|
||||||
path('device-types/<int:pk>/rear-ports/add/', views.RearPortTemplateCreateView.as_view(), name='devicetype_add_rearport'),
|
path('rear-port-templates/add/', views.RearPortTemplateCreateView.as_view(), name='rearporttemplate_add'),
|
||||||
path('device-types/<int:pk>/rear-ports/delete/', views.RearPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_rearport'),
|
path('rear-port-templates/delete/', views.RearPortTemplateBulkDeleteView.as_view(), name='rearporttemplate_bulk_delete'),
|
||||||
path('rear-port-templates/<int:pk>/edit/', views.RearPortTemplateEditView.as_view(), name='rearporttemplate_edit'),
|
path('rear-port-templates/<int:pk>/edit/', views.RearPortTemplateEditView.as_view(), name='rearporttemplate_edit'),
|
||||||
|
|
||||||
# Device bay templates
|
# Device bay templates
|
||||||
path('device-types/<int:pk>/device-bays/add/', views.DeviceBayTemplateCreateView.as_view(), name='devicetype_add_devicebay'),
|
path('device-bay-templates/add/', views.DeviceBayTemplateCreateView.as_view(), name='devicebaytemplate_add'),
|
||||||
path('device-types/<int:pk>/device-bays/delete/', views.DeviceBayTemplateBulkDeleteView.as_view(), name='devicetype_delete_devicebay'),
|
path('device-bay-templates/delete/', views.DeviceBayTemplateBulkDeleteView.as_view(), name='devicebaytemplate_bulk_delete'),
|
||||||
path('device-bay-templates/<int:pk>/edit/', views.DeviceBayTemplateEditView.as_view(), name='devicebaytemplate_edit'),
|
path('device-bay-templates/<int:pk>/edit/', views.DeviceBayTemplateEditView.as_view(), name='devicebaytemplate_edit'),
|
||||||
|
|
||||||
# Device roles
|
# Device roles
|
||||||
|
@ -705,8 +705,6 @@ class DeviceTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|||||||
|
|
||||||
class ConsolePortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
class ConsolePortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
||||||
permission_required = 'dcim.add_consoleporttemplate'
|
permission_required = 'dcim.add_consoleporttemplate'
|
||||||
parent_model = DeviceType
|
|
||||||
parent_field = 'device_type'
|
|
||||||
model = ConsolePortTemplate
|
model = ConsolePortTemplate
|
||||||
form = forms.ConsolePortTemplateCreateForm
|
form = forms.ConsolePortTemplateCreateForm
|
||||||
model_form = forms.ConsolePortTemplateForm
|
model_form = forms.ConsolePortTemplateForm
|
||||||
@ -722,14 +720,11 @@ class ConsolePortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
|
|||||||
class ConsolePortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
class ConsolePortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
permission_required = 'dcim.delete_consoleporttemplate'
|
permission_required = 'dcim.delete_consoleporttemplate'
|
||||||
queryset = ConsolePortTemplate.objects.all()
|
queryset = ConsolePortTemplate.objects.all()
|
||||||
parent_model = DeviceType
|
|
||||||
table = tables.ConsolePortTemplateTable
|
table = tables.ConsolePortTemplateTable
|
||||||
|
|
||||||
|
|
||||||
class ConsoleServerPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
class ConsoleServerPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
||||||
permission_required = 'dcim.add_consoleserverporttemplate'
|
permission_required = 'dcim.add_consoleserverporttemplate'
|
||||||
parent_model = DeviceType
|
|
||||||
parent_field = 'device_type'
|
|
||||||
model = ConsoleServerPortTemplate
|
model = ConsoleServerPortTemplate
|
||||||
form = forms.ConsoleServerPortTemplateCreateForm
|
form = forms.ConsoleServerPortTemplateCreateForm
|
||||||
model_form = forms.ConsoleServerPortTemplateForm
|
model_form = forms.ConsoleServerPortTemplateForm
|
||||||
@ -745,14 +740,11 @@ class ConsoleServerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView)
|
|||||||
class ConsoleServerPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
class ConsoleServerPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
permission_required = 'dcim.delete_consoleserverporttemplate'
|
permission_required = 'dcim.delete_consoleserverporttemplate'
|
||||||
queryset = ConsoleServerPortTemplate.objects.all()
|
queryset = ConsoleServerPortTemplate.objects.all()
|
||||||
parent_model = DeviceType
|
|
||||||
table = tables.ConsoleServerPortTemplateTable
|
table = tables.ConsoleServerPortTemplateTable
|
||||||
|
|
||||||
|
|
||||||
class PowerPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
class PowerPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
||||||
permission_required = 'dcim.add_powerporttemplate'
|
permission_required = 'dcim.add_powerporttemplate'
|
||||||
parent_model = DeviceType
|
|
||||||
parent_field = 'device_type'
|
|
||||||
model = PowerPortTemplate
|
model = PowerPortTemplate
|
||||||
form = forms.PowerPortTemplateCreateForm
|
form = forms.PowerPortTemplateCreateForm
|
||||||
model_form = forms.PowerPortTemplateForm
|
model_form = forms.PowerPortTemplateForm
|
||||||
@ -768,14 +760,11 @@ class PowerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
|
|||||||
class PowerPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
class PowerPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
permission_required = 'dcim.delete_powerporttemplate'
|
permission_required = 'dcim.delete_powerporttemplate'
|
||||||
queryset = PowerPortTemplate.objects.all()
|
queryset = PowerPortTemplate.objects.all()
|
||||||
parent_model = DeviceType
|
|
||||||
table = tables.PowerPortTemplateTable
|
table = tables.PowerPortTemplateTable
|
||||||
|
|
||||||
|
|
||||||
class PowerOutletTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
class PowerOutletTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
||||||
permission_required = 'dcim.add_poweroutlettemplate'
|
permission_required = 'dcim.add_poweroutlettemplate'
|
||||||
parent_model = DeviceType
|
|
||||||
parent_field = 'device_type'
|
|
||||||
model = PowerOutletTemplate
|
model = PowerOutletTemplate
|
||||||
form = forms.PowerOutletTemplateCreateForm
|
form = forms.PowerOutletTemplateCreateForm
|
||||||
model_form = forms.PowerOutletTemplateForm
|
model_form = forms.PowerOutletTemplateForm
|
||||||
@ -791,14 +780,11 @@ class PowerOutletTemplateEditView(PermissionRequiredMixin, ObjectEditView):
|
|||||||
class PowerOutletTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
class PowerOutletTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
permission_required = 'dcim.delete_poweroutlettemplate'
|
permission_required = 'dcim.delete_poweroutlettemplate'
|
||||||
queryset = PowerOutletTemplate.objects.all()
|
queryset = PowerOutletTemplate.objects.all()
|
||||||
parent_model = DeviceType
|
|
||||||
table = tables.PowerOutletTemplateTable
|
table = tables.PowerOutletTemplateTable
|
||||||
|
|
||||||
|
|
||||||
class InterfaceTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
class InterfaceTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
||||||
permission_required = 'dcim.add_interfacetemplate'
|
permission_required = 'dcim.add_interfacetemplate'
|
||||||
parent_model = DeviceType
|
|
||||||
parent_field = 'device_type'
|
|
||||||
model = InterfaceTemplate
|
model = InterfaceTemplate
|
||||||
form = forms.InterfaceTemplateCreateForm
|
form = forms.InterfaceTemplateCreateForm
|
||||||
model_form = forms.InterfaceTemplateForm
|
model_form = forms.InterfaceTemplateForm
|
||||||
@ -814,7 +800,6 @@ class InterfaceTemplateEditView(PermissionRequiredMixin, ObjectEditView):
|
|||||||
class InterfaceTemplateBulkEditView(PermissionRequiredMixin, BulkEditView):
|
class InterfaceTemplateBulkEditView(PermissionRequiredMixin, BulkEditView):
|
||||||
permission_required = 'dcim.change_interfacetemplate'
|
permission_required = 'dcim.change_interfacetemplate'
|
||||||
queryset = InterfaceTemplate.objects.all()
|
queryset = InterfaceTemplate.objects.all()
|
||||||
parent_model = DeviceType
|
|
||||||
table = tables.InterfaceTemplateTable
|
table = tables.InterfaceTemplateTable
|
||||||
form = forms.InterfaceTemplateBulkEditForm
|
form = forms.InterfaceTemplateBulkEditForm
|
||||||
|
|
||||||
@ -822,14 +807,11 @@ class InterfaceTemplateBulkEditView(PermissionRequiredMixin, BulkEditView):
|
|||||||
class InterfaceTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
class InterfaceTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
permission_required = 'dcim.delete_interfacetemplate'
|
permission_required = 'dcim.delete_interfacetemplate'
|
||||||
queryset = InterfaceTemplate.objects.all()
|
queryset = InterfaceTemplate.objects.all()
|
||||||
parent_model = DeviceType
|
|
||||||
table = tables.InterfaceTemplateTable
|
table = tables.InterfaceTemplateTable
|
||||||
|
|
||||||
|
|
||||||
class FrontPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
class FrontPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
||||||
permission_required = 'dcim.add_frontporttemplate'
|
permission_required = 'dcim.add_frontporttemplate'
|
||||||
parent_model = DeviceType
|
|
||||||
parent_field = 'device_type'
|
|
||||||
model = FrontPortTemplate
|
model = FrontPortTemplate
|
||||||
form = forms.FrontPortTemplateCreateForm
|
form = forms.FrontPortTemplateCreateForm
|
||||||
model_form = forms.FrontPortTemplateForm
|
model_form = forms.FrontPortTemplateForm
|
||||||
@ -845,14 +827,11 @@ class FrontPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
|
|||||||
class FrontPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
class FrontPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
permission_required = 'dcim.delete_frontporttemplate'
|
permission_required = 'dcim.delete_frontporttemplate'
|
||||||
queryset = FrontPortTemplate.objects.all()
|
queryset = FrontPortTemplate.objects.all()
|
||||||
parent_model = DeviceType
|
|
||||||
table = tables.FrontPortTemplateTable
|
table = tables.FrontPortTemplateTable
|
||||||
|
|
||||||
|
|
||||||
class RearPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
class RearPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
||||||
permission_required = 'dcim.add_rearporttemplate'
|
permission_required = 'dcim.add_rearporttemplate'
|
||||||
parent_model = DeviceType
|
|
||||||
parent_field = 'device_type'
|
|
||||||
model = RearPortTemplate
|
model = RearPortTemplate
|
||||||
form = forms.RearPortTemplateCreateForm
|
form = forms.RearPortTemplateCreateForm
|
||||||
model_form = forms.RearPortTemplateForm
|
model_form = forms.RearPortTemplateForm
|
||||||
@ -868,14 +847,11 @@ class RearPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
|
|||||||
class RearPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
class RearPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
permission_required = 'dcim.delete_rearporttemplate'
|
permission_required = 'dcim.delete_rearporttemplate'
|
||||||
queryset = RearPortTemplate.objects.all()
|
queryset = RearPortTemplate.objects.all()
|
||||||
parent_model = DeviceType
|
|
||||||
table = tables.RearPortTemplateTable
|
table = tables.RearPortTemplateTable
|
||||||
|
|
||||||
|
|
||||||
class DeviceBayTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
class DeviceBayTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
|
||||||
permission_required = 'dcim.add_devicebaytemplate'
|
permission_required = 'dcim.add_devicebaytemplate'
|
||||||
parent_model = DeviceType
|
|
||||||
parent_field = 'device_type'
|
|
||||||
model = DeviceBayTemplate
|
model = DeviceBayTemplate
|
||||||
form = forms.DeviceBayTemplateCreateForm
|
form = forms.DeviceBayTemplateCreateForm
|
||||||
model_form = forms.DeviceBayTemplateForm
|
model_form = forms.DeviceBayTemplateForm
|
||||||
@ -891,7 +867,6 @@ class DeviceBayTemplateEditView(PermissionRequiredMixin, ObjectEditView):
|
|||||||
class DeviceBayTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
class DeviceBayTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
permission_required = 'dcim.delete_devicebaytemplate'
|
permission_required = 'dcim.delete_devicebaytemplate'
|
||||||
queryset = DeviceBayTemplate.objects.all()
|
queryset = DeviceBayTemplate.objects.all()
|
||||||
parent_model = DeviceType
|
|
||||||
table = tables.DeviceBayTemplateTable
|
table = tables.DeviceBayTemplateTable
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,14 +22,14 @@
|
|||||||
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add Components <span class="caret"></span>
|
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add Components <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
{% if perms.dcim.add_consoleporttemplate %}<li><a href="{% url 'dcim:devicetype_add_consoleport' pk=devicetype.pk %}">Console Ports</a></li>{% endif %}
|
{% if perms.dcim.add_consoleporttemplate %}<li><a href="{% url 'dcim:consoleporttemplate_add' %}?device_type={{ devicetype.pk }}&return_url={{ devicetype.get_absolute_url }}">Console Ports</a></li>{% endif %}
|
||||||
{% if perms.dcim.add_consoleserverporttemplate %}<li><a href="{% url 'dcim:devicetype_add_consoleserverport' pk=devicetype.pk %}">Console Server Ports</a></li>{% endif %}
|
{% if perms.dcim.add_consoleserverporttemplate %}<li><a href="{% url 'dcim:consoleserverporttemplate_add' %}?device_type={{ devicetype.pk }}&return_url={{ devicetype.get_absolute_url }}">Console Server Ports</a></li>{% endif %}
|
||||||
{% if perms.dcim.add_powerporttemplate %}<li><a href="{% url 'dcim:devicetype_add_powerport' pk=devicetype.pk %}">Power Ports</a></li>{% endif %}
|
{% if perms.dcim.add_powerporttemplate %}<li><a href="{% url 'dcim:powerporttemplate_add' %}?device_type={{ devicetype.pk }}&return_url={{ devicetype.get_absolute_url }}">Power Ports</a></li>{% endif %}
|
||||||
{% if perms.dcim.add_poweroutlettemplate %}<li><a href="{% url 'dcim:devicetype_add_poweroutlet' pk=devicetype.pk %}">Power Outlets</a></li>{% endif %}
|
{% if perms.dcim.add_poweroutlettemplate %}<li><a href="{% url 'dcim:poweroutlettemplate_add' %}?device_type={{ devicetype.pk }}&return_url={{ devicetype.get_absolute_url }}">Power Outlets</a></li>{% endif %}
|
||||||
{% if perms.dcim.add_interfacetemplate %}<li><a href="{% url 'dcim:devicetype_add_interface' pk=devicetype.pk %}">Interfaces</a></li>{% endif %}
|
{% if perms.dcim.add_interfacetemplate %}<li><a href="{% url 'dcim:interfacetemplate_add' %}?device_type={{ devicetype.pk }}&return_url={{ devicetype.get_absolute_url }}">Interfaces</a></li>{% endif %}
|
||||||
{% if perms.dcim.add_frontporttemplate %}<li><a href="{% url 'dcim:devicetype_add_frontport' pk=devicetype.pk %}">Front Ports</a></li>{% endif %}
|
{% if perms.dcim.add_frontporttemplate %}<li><a href="{% url 'dcim:frontporttemplate_add' %}?device_type={{ devicetype.pk }}&return_url={{ devicetype.get_absolute_url }}">Front Ports</a></li>{% endif %}
|
||||||
{% if perms.dcim.add_rearporttemplate %}<li><a href="{% url 'dcim:devicetype_add_rearport' pk=devicetype.pk %}">Rear Ports</a></li>{% endif %}
|
{% if perms.dcim.add_rearporttemplate %}<li><a href="{% url 'dcim:rearporttemplate_add' %}?device_type={{ devicetype.pk }}&return_url={{ devicetype.get_absolute_url }}">Rear Ports</a></li>{% endif %}
|
||||||
{% if perms.dcim.add_devicebaytemplate %}<li><a href="{% url 'dcim:devicetype_add_devicebay' pk=devicetype.pk %}">Device Bays</a></li>{% endif %}
|
{% if perms.dcim.add_devicebaytemplate %}<li><a href="{% url 'dcim:devicebaytemplate_add' %}?device_type={{ devicetype.pk }}&return_url={{ devicetype.get_absolute_url }}">Device Bays</a></li>{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -136,48 +136,48 @@
|
|||||||
{% if devicetype.consoleport_templates.exists or devicetype.powerport_templates.exists %}
|
{% if devicetype.consoleport_templates.exists or devicetype.powerport_templates.exists %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
{% include 'dcim/inc/devicetype_component_table.html' with table=consoleport_table title='Console Ports' add_url='dcim:devicetype_add_consoleport' delete_url='dcim:devicetype_delete_consoleport' %}
|
{% include 'dcim/inc/devicetype_component_table.html' with table=consoleport_table title='Console Ports' add_url='dcim:consoleporttemplate_add' edit_url=None delete_url='dcim:consoleporttemplate_bulk_delete' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
{% include 'dcim/inc/devicetype_component_table.html' with table=powerport_table title='Power Ports' add_url='dcim:devicetype_add_powerport' delete_url='dcim:devicetype_delete_powerport' %}
|
{% include 'dcim/inc/devicetype_component_table.html' with table=powerport_table title='Power Ports' add_url='dcim:powerporttemplate_add' edit_url=None delete_url='dcim:powerporttemplate_bulk_delete' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if devicetype.is_parent_device or devicebay_table.rows %}
|
{% if devicetype.is_parent_device or devicebay_table.rows %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{% include 'dcim/inc/devicetype_component_table.html' with table=devicebay_table title='Device Bays' add_url='dcim:devicetype_add_devicebay' delete_url='dcim:devicetype_delete_devicebay' %}
|
{% include 'dcim/inc/devicetype_component_table.html' with table=devicebay_table title='Device Bays' add_url='dcim:devicebaytemplate_add' edit_url=None delete_url='dcim:devicebaytemplate_bulk_delete' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if devicetype.consoleserverport_templates.exists %}
|
{% if devicetype.consoleserverport_templates.exists %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{% include 'dcim/inc/devicetype_component_table.html' with table=consoleserverport_table title='Console Server Ports' add_url='dcim:devicetype_add_consoleserverport' delete_url='dcim:devicetype_delete_consoleserverport' %}
|
{% include 'dcim/inc/devicetype_component_table.html' with table=consoleserverport_table title='Console Server Ports' add_url='dcim:consoleserverporttemplate_add' edit_url=None delete_url='dcim:consoleserverporttemplate_bulk_delete' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if devicetype.poweroutlet_templates.exists %}
|
{% if devicetype.poweroutlet_templates.exists %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{% include 'dcim/inc/devicetype_component_table.html' with table=poweroutlet_table title='Power Outlets' add_url='dcim:devicetype_add_poweroutlet' delete_url='dcim:devicetype_delete_poweroutlet' %}
|
{% include 'dcim/inc/devicetype_component_table.html' with table=poweroutlet_table title='Power Outlets' add_url='dcim:poweroutlettemplate_add' edit_url=None delete_url='dcim:poweroutlettemplate_bulk_delete' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if devicetype.interface_templates.exists %}
|
{% if devicetype.interface_templates.exists %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{% include 'dcim/inc/devicetype_component_table.html' with table=interface_table title='Interfaces' add_url='dcim:devicetype_add_interface' delete_url='dcim:devicetype_delete_interface' %}
|
{% include 'dcim/inc/devicetype_component_table.html' with table=interface_table title='Interfaces' add_url='dcim:interfacetemplate_add' edit_url='dcim:interfacetemplate_bulk_edit' delete_url='dcim:interfacetemplate_bulk_delete' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if devicetype.frontport_templates.exists or devicetype.rearport_templates.exists %}
|
{% if devicetype.frontport_templates.exists or devicetype.rearport_templates.exists %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
{% include 'dcim/inc/devicetype_component_table.html' with table=front_port_table title='Front Ports' add_url='dcim:devicetype_add_frontport' delete_url='dcim:devicetype_delete_frontport' %}
|
{% include 'dcim/inc/devicetype_component_table.html' with table=front_port_table title='Front Ports' add_url='dcim:frontporttemplate_add' edit_url=None delete_url='dcim:frontporttemplate_bulk_delete' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
{% include 'dcim/inc/devicetype_component_table.html' with table=rear_port_table title='Rear Ports' add_url='dcim:devicetype_add_rearport' delete_url='dcim:devicetype_delete_rearport' %}
|
{% include 'dcim/inc/devicetype_component_table.html' with table=rear_port_table title='Rear Ports' add_url='dcim:rearporttemplate_add' edit_url=None delete_url='dcim:rearporttemplate_bulk_delete' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -9,18 +9,18 @@
|
|||||||
<div class="panel-footer noprint">
|
<div class="panel-footer noprint">
|
||||||
{% if table.rows %}
|
{% if table.rows %}
|
||||||
{% if edit_url %}
|
{% if edit_url %}
|
||||||
<button type="submit" name="_edit" formaction="{% url edit_url pk=devicetype.pk %}?return_url={{ devicetype.get_absolute_url }}" class="btn btn-xs btn-warning">
|
<button type="submit" name="_edit" formaction="{% url edit_url %}?return_url={{ devicetype.get_absolute_url }}" class="btn btn-xs btn-warning">
|
||||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit Selected
|
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit Selected
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if delete_url %}
|
{% if delete_url %}
|
||||||
<button type="submit" name="_delete" formaction="{% url delete_url pk=devicetype.pk %}?return_url={{ devicetype.get_absolute_url }}" class="btn btn-xs btn-danger">
|
<button type="submit" name="_delete" formaction="{% url delete_url %}?return_url={{ devicetype.get_absolute_url }}" class="btn btn-xs btn-danger">
|
||||||
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete Selected
|
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete Selected
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
<a href="{% url add_url pk=devicetype.pk %}{{ add_url_extra }}" class="btn btn-primary btn-xs">
|
<a href="{% url add_url %}" class="btn btn-primary btn-xs">
|
||||||
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
|
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
|
||||||
Add {{ title }}
|
Add {{ title }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -825,8 +825,6 @@ class ComponentCreateView(GetReturnURLMixin, View):
|
|||||||
"""
|
"""
|
||||||
Add one or more components (e.g. interfaces, console ports, etc.) to a Device or VirtualMachine.
|
Add one or more components (e.g. interfaces, console ports, etc.) to a Device or VirtualMachine.
|
||||||
"""
|
"""
|
||||||
parent_model = None
|
|
||||||
parent_field = None
|
|
||||||
model = None
|
model = None
|
||||||
form = None
|
form = None
|
||||||
model_form = None
|
model_form = None
|
||||||
|
Loading…
Reference in New Issue
Block a user