mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-10 13:52:17 -06:00
* Closes #18153: Introduce virtual circuit types * Fix TagTestCase * Fix GraphQL API test
281 lines
8.1 KiB
Python
281 lines
8.1 KiB
Python
from django import forms
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from circuits.choices import *
|
|
from circuits.constants import *
|
|
from circuits.models import *
|
|
from dcim.models import Interface
|
|
from netbox.choices import DistanceUnitChoices
|
|
from netbox.forms import NetBoxModelImportForm
|
|
from tenancy.models import Tenant
|
|
from utilities.forms.fields import CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, SlugField
|
|
|
|
__all__ = (
|
|
'CircuitImportForm',
|
|
'CircuitGroupAssignmentImportForm',
|
|
'CircuitGroupImportForm',
|
|
'CircuitTerminationImportForm',
|
|
'CircuitTerminationImportRelatedForm',
|
|
'CircuitTypeImportForm',
|
|
'ProviderImportForm',
|
|
'ProviderAccountImportForm',
|
|
'ProviderNetworkImportForm',
|
|
'VirtualCircuitImportForm',
|
|
'VirtualCircuitTerminationImportForm',
|
|
'VirtualCircuitTerminationImportRelatedForm',
|
|
'VirtualCircuitTypeImportForm',
|
|
)
|
|
|
|
|
|
class ProviderImportForm(NetBoxModelImportForm):
|
|
slug = SlugField()
|
|
|
|
class Meta:
|
|
model = Provider
|
|
fields = (
|
|
'name', 'slug', 'description', 'comments', 'tags',
|
|
)
|
|
|
|
|
|
class ProviderAccountImportForm(NetBoxModelImportForm):
|
|
provider = CSVModelChoiceField(
|
|
label=_('Provider'),
|
|
queryset=Provider.objects.all(),
|
|
to_field_name='name',
|
|
help_text=_('Assigned provider')
|
|
)
|
|
|
|
class Meta:
|
|
model = ProviderAccount
|
|
fields = (
|
|
'provider', 'name', 'account', 'description', 'comments', 'tags',
|
|
)
|
|
|
|
|
|
class ProviderNetworkImportForm(NetBoxModelImportForm):
|
|
provider = CSVModelChoiceField(
|
|
label=_('Provider'),
|
|
queryset=Provider.objects.all(),
|
|
to_field_name='name',
|
|
help_text=_('Assigned provider')
|
|
)
|
|
|
|
class Meta:
|
|
model = ProviderNetwork
|
|
fields = [
|
|
'provider', 'name', 'service_id', 'description', 'comments', 'tags'
|
|
]
|
|
|
|
|
|
class CircuitTypeImportForm(NetBoxModelImportForm):
|
|
slug = SlugField()
|
|
|
|
class Meta:
|
|
model = CircuitType
|
|
fields = ('name', 'slug', 'color', 'description', 'tags')
|
|
|
|
|
|
class CircuitImportForm(NetBoxModelImportForm):
|
|
provider = CSVModelChoiceField(
|
|
label=_('Provider'),
|
|
queryset=Provider.objects.all(),
|
|
to_field_name='name',
|
|
help_text=_('Assigned provider')
|
|
)
|
|
provider_account = CSVModelChoiceField(
|
|
label=_('Provider account'),
|
|
queryset=ProviderAccount.objects.all(),
|
|
to_field_name='name',
|
|
help_text=_('Assigned provider account'),
|
|
required=False
|
|
)
|
|
type = CSVModelChoiceField(
|
|
label=_('Type'),
|
|
queryset=CircuitType.objects.all(),
|
|
to_field_name='name',
|
|
help_text=_('Type of circuit')
|
|
)
|
|
status = CSVChoiceField(
|
|
label=_('Status'),
|
|
choices=CircuitStatusChoices,
|
|
help_text=_('Operational status')
|
|
)
|
|
distance_unit = CSVChoiceField(
|
|
label=_('Distance unit'),
|
|
choices=DistanceUnitChoices,
|
|
required=False,
|
|
help_text=_('Distance unit')
|
|
)
|
|
tenant = CSVModelChoiceField(
|
|
label=_('Tenant'),
|
|
queryset=Tenant.objects.all(),
|
|
required=False,
|
|
to_field_name='name',
|
|
help_text=_('Assigned tenant')
|
|
)
|
|
|
|
class Meta:
|
|
model = Circuit
|
|
fields = [
|
|
'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'install_date', 'termination_date',
|
|
'commit_rate', 'distance', 'distance_unit', 'description', 'comments', 'tags'
|
|
]
|
|
|
|
|
|
class BaseCircuitTerminationImportForm(forms.ModelForm):
|
|
circuit = CSVModelChoiceField(
|
|
label=_('Circuit'),
|
|
queryset=Circuit.objects.all(),
|
|
to_field_name='cid',
|
|
)
|
|
term_side = CSVChoiceField(
|
|
label=_('Termination'),
|
|
choices=CircuitTerminationSideChoices,
|
|
)
|
|
termination_type = CSVContentTypeField(
|
|
queryset=ContentType.objects.filter(model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES),
|
|
required=False,
|
|
label=_('Termination type (app & model)')
|
|
)
|
|
|
|
|
|
class CircuitTerminationImportRelatedForm(BaseCircuitTerminationImportForm):
|
|
class Meta:
|
|
model = CircuitTermination
|
|
fields = [
|
|
'circuit', 'term_side', 'termination_type', 'termination_id', 'port_speed', 'upstream_speed', 'xconnect_id',
|
|
'pp_info', 'description'
|
|
]
|
|
labels = {
|
|
'termination_id': _('Termination ID'),
|
|
}
|
|
|
|
|
|
class CircuitTerminationImportForm(NetBoxModelImportForm, BaseCircuitTerminationImportForm):
|
|
|
|
class Meta:
|
|
model = CircuitTermination
|
|
fields = [
|
|
'circuit', 'term_side', 'termination_type', 'termination_id', 'port_speed', 'upstream_speed', 'xconnect_id',
|
|
'pp_info', 'description', 'tags'
|
|
]
|
|
labels = {
|
|
'termination_id': _('Termination ID'),
|
|
}
|
|
|
|
|
|
class CircuitGroupImportForm(NetBoxModelImportForm):
|
|
tenant = CSVModelChoiceField(
|
|
label=_('Tenant'),
|
|
queryset=Tenant.objects.all(),
|
|
required=False,
|
|
to_field_name='name',
|
|
help_text=_('Assigned tenant')
|
|
)
|
|
|
|
class Meta:
|
|
model = CircuitGroup
|
|
fields = ('name', 'slug', 'description', 'tenant', 'tags')
|
|
|
|
|
|
class CircuitGroupAssignmentImportForm(NetBoxModelImportForm):
|
|
member_type = CSVContentTypeField(
|
|
queryset=ContentType.objects.filter(CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS),
|
|
label=_('Circuit type (app & model)')
|
|
)
|
|
priority = CSVChoiceField(
|
|
label=_('Priority'),
|
|
choices=CircuitPriorityChoices,
|
|
required=False
|
|
)
|
|
|
|
class Meta:
|
|
model = CircuitGroupAssignment
|
|
fields = ('member_type', 'member_id', 'group', 'priority')
|
|
|
|
|
|
class VirtualCircuitTypeImportForm(NetBoxModelImportForm):
|
|
slug = SlugField()
|
|
|
|
class Meta:
|
|
model = VirtualCircuitType
|
|
fields = ('name', 'slug', 'color', 'description', 'tags')
|
|
|
|
|
|
class VirtualCircuitImportForm(NetBoxModelImportForm):
|
|
provider_network = CSVModelChoiceField(
|
|
label=_('Provider network'),
|
|
queryset=ProviderNetwork.objects.all(),
|
|
to_field_name='name',
|
|
help_text=_('The network to which this virtual circuit belongs')
|
|
)
|
|
provider_account = CSVModelChoiceField(
|
|
label=_('Provider account'),
|
|
queryset=ProviderAccount.objects.all(),
|
|
to_field_name='account',
|
|
help_text=_('Assigned provider account (if any)'),
|
|
required=False
|
|
)
|
|
type = CSVModelChoiceField(
|
|
label=_('Type'),
|
|
queryset=VirtualCircuitType.objects.all(),
|
|
to_field_name='name',
|
|
help_text=_('Type of virtual circuit')
|
|
)
|
|
status = CSVChoiceField(
|
|
label=_('Status'),
|
|
choices=CircuitStatusChoices,
|
|
help_text=_('Operational status')
|
|
)
|
|
tenant = CSVModelChoiceField(
|
|
label=_('Tenant'),
|
|
queryset=Tenant.objects.all(),
|
|
required=False,
|
|
to_field_name='name',
|
|
help_text=_('Assigned tenant')
|
|
)
|
|
|
|
class Meta:
|
|
model = VirtualCircuit
|
|
fields = [
|
|
'cid', 'provider_network', 'provider_account', 'type', 'status', 'tenant', 'description', 'comments',
|
|
'tags',
|
|
]
|
|
|
|
|
|
class BaseVirtualCircuitTerminationImportForm(forms.ModelForm):
|
|
virtual_circuit = CSVModelChoiceField(
|
|
label=_('Virtual circuit'),
|
|
queryset=VirtualCircuit.objects.all(),
|
|
to_field_name='cid',
|
|
)
|
|
role = CSVChoiceField(
|
|
label=_('Role'),
|
|
choices=VirtualCircuitTerminationRoleChoices,
|
|
help_text=_('Operational role')
|
|
)
|
|
interface = CSVModelChoiceField(
|
|
label=_('Interface'),
|
|
queryset=Interface.objects.all(),
|
|
to_field_name='pk',
|
|
)
|
|
|
|
|
|
class VirtualCircuitTerminationImportRelatedForm(BaseVirtualCircuitTerminationImportForm):
|
|
|
|
class Meta:
|
|
model = VirtualCircuitTermination
|
|
fields = [
|
|
'virtual_circuit', 'role', 'interface', 'description',
|
|
]
|
|
|
|
|
|
class VirtualCircuitTerminationImportForm(NetBoxModelImportForm, BaseVirtualCircuitTerminationImportForm):
|
|
|
|
class Meta:
|
|
model = VirtualCircuitTermination
|
|
fields = [
|
|
'virtual_circuit', 'role', 'interface', 'description', 'tags',
|
|
]
|