Make license type optional and add lifetime or recurring renewal terms, license file and key storage, and provider portal URLs across the UI, API, filters, imports, translations, and migrations.
154 lines
5.5 KiB
Python
154 lines
5.5 KiB
Python
from django.db.models import Q
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django_filters import CharFilter, ModelMultipleChoiceFilter, MultipleChoiceFilter, NumberFilter
|
|
|
|
from dcim.models import Device, Manufacturer
|
|
from netbox.filtersets import NetBoxModelFilterSet
|
|
from netbox_slm.models import (
|
|
SoftwareProduct,
|
|
SoftwareProductVersion,
|
|
SoftwareProductInstallation,
|
|
SoftwareLicense,
|
|
SoftwareReleaseTypes,
|
|
RenewalIntervalUnits,
|
|
)
|
|
from virtualization.models import Cluster, VirtualMachine
|
|
from tenancy.models import Tenant, TenantGroup
|
|
|
|
|
|
class SoftwareProductFilterSet(NetBoxModelFilterSet):
|
|
"""Filter capabilities for SoftwareProduct instances."""
|
|
|
|
name = CharFilter(lookup_expr="icontains")
|
|
description = CharFilter(lookup_expr="icontains")
|
|
|
|
manufacturer_id = ModelMultipleChoiceFilter(queryset=Manufacturer.objects.all())
|
|
|
|
class Meta:
|
|
model = SoftwareProduct
|
|
fields = tuple()
|
|
|
|
def search(self, queryset, name, value):
|
|
"""Perform the filtered search."""
|
|
if not value.strip():
|
|
return queryset
|
|
qs_filter = (
|
|
Q(name__icontains=value)
|
|
| Q(description__icontains=value)
|
|
| Q(manufacturer__name__icontains=value)
|
|
| Q(comments__icontains=value)
|
|
)
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
class SoftwareProductVersionFilterSet(NetBoxModelFilterSet):
|
|
"""Filter capabilities for SoftwareProductVersion instances."""
|
|
|
|
name = CharFilter(lookup_expr="icontains")
|
|
description = CharFilter(lookup_expr="icontains")
|
|
filename = CharFilter(lookup_expr="icontains")
|
|
|
|
release_type = MultipleChoiceFilter(choices=SoftwareReleaseTypes.choices)
|
|
|
|
manufacturer_id = ModelMultipleChoiceFilter(
|
|
field_name="software_product__manufacturer",
|
|
queryset=Manufacturer.objects.all(),
|
|
)
|
|
|
|
software_product_id = ModelMultipleChoiceFilter(
|
|
queryset=SoftwareProduct.objects.all(),
|
|
label=_("Software Product"),
|
|
)
|
|
|
|
class Meta:
|
|
model = SoftwareProductVersion
|
|
fields = tuple()
|
|
|
|
def search(self, queryset, name, value):
|
|
"""Perform the filtered search."""
|
|
if not value.strip():
|
|
return queryset
|
|
qs_filter = (
|
|
Q(name__icontains=value)
|
|
| Q(description__icontains=value)
|
|
| Q(software_product__name__icontains=value)
|
|
| Q(software_product__manufacturer__name__icontains=value)
|
|
| Q(comments__icontains=value)
|
|
)
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
class SoftwareProductInstallationFilterSet(NetBoxModelFilterSet):
|
|
"""Filter capabilities for SoftwareProductInstallation instances."""
|
|
|
|
device_id = ModelMultipleChoiceFilter(queryset=Device.objects.all())
|
|
virtualmachine_id = ModelMultipleChoiceFilter(
|
|
queryset=VirtualMachine.objects.all(),
|
|
label=_("Virtual Machine"),
|
|
)
|
|
cluster_id = ModelMultipleChoiceFilter(queryset=Cluster.objects.all())
|
|
software_product_id = ModelMultipleChoiceFilter(
|
|
queryset=SoftwareProduct.objects.all(),
|
|
label=_("Software Product"),
|
|
)
|
|
version_id = ModelMultipleChoiceFilter(queryset=SoftwareProductVersion.objects.all())
|
|
|
|
class Meta:
|
|
model = SoftwareProductInstallation
|
|
fields = tuple()
|
|
|
|
def search(self, queryset, name, value):
|
|
"""Perform the filtered search."""
|
|
if not value.strip():
|
|
return queryset
|
|
qs_filter = (
|
|
Q(software_product__name__icontains=value)
|
|
| Q(software_product__manufacturer__name__icontains=value)
|
|
| Q(version__name__icontains=value)
|
|
| Q(comments__icontains=value)
|
|
)
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
class SoftwareLicenseFilterSet(NetBoxModelFilterSet):
|
|
"""Filter capabilities for SoftwareLicense instances."""
|
|
|
|
name = CharFilter(lookup_expr="icontains")
|
|
description = CharFilter(lookup_expr="icontains")
|
|
type = CharFilter(lookup_expr="icontains")
|
|
spdx_expression = CharFilter(lookup_expr="icontains", label=_("SPDX expression"))
|
|
stored_location = CharFilter(lookup_expr="icontains")
|
|
renewal_interval = NumberFilter()
|
|
renewal_interval_unit = MultipleChoiceFilter(choices=RenewalIntervalUnits.choices)
|
|
|
|
software_product_id = ModelMultipleChoiceFilter(
|
|
queryset=SoftwareProduct.objects.all(),
|
|
label=_("Software Product"),
|
|
)
|
|
version_id = ModelMultipleChoiceFilter(queryset=SoftwareProductVersion.objects.all())
|
|
installation_id = ModelMultipleChoiceFilter(queryset=SoftwareProductInstallation.objects.all())
|
|
tenant_group_id = ModelMultipleChoiceFilter(queryset=TenantGroup.objects.all(), label=_("Tenant Group"))
|
|
tenant_id = ModelMultipleChoiceFilter(queryset=Tenant.objects.all(), label=_("Tenant"))
|
|
|
|
class Meta:
|
|
model = SoftwareLicense
|
|
fields = ("support", "lifetime")
|
|
|
|
def search(self, queryset, name, value):
|
|
"""Perform the filtered search."""
|
|
if not value.strip():
|
|
return queryset
|
|
qs_filter = (
|
|
Q(name__icontains=value)
|
|
| Q(description__icontains=value)
|
|
| Q(software_product__name__icontains=value)
|
|
| Q(version__name__icontains=value)
|
|
| Q(installation__device__name__icontains=value)
|
|
| Q(installation__virtualmachine__name__icontains=value)
|
|
| Q(installation__cluster__name__icontains=value)
|
|
| Q(tenant_group__name__icontains=value)
|
|
| Q(tenant__name__icontains=value)
|
|
| Q(comments__icontains=value)
|
|
)
|
|
return queryset.filter(qs_filter)
|