Explorar o código

Fixes #2626: Remove extraneous permissions generated from proxy models

Jeremy Stretch %!s(int64=7) %!d(string=hai) anos
pai
achega
870edbb44a
Modificáronse 5 ficheiros con 64 adicións e 109 borrados
  1. 1 0
      CHANGELOG.md
  2. 0 32
      netbox/dcim/migrations/0066_cables.py
  3. 0 61
      netbox/dcim/models.py
  4. 7 8
      netbox/dcim/tables.py
  5. 56 8
      netbox/dcim/views.py

+ 1 - 0
CHANGELOG.md

@@ -47,6 +47,7 @@ NetBox now supports modeling physical cables for console, power, and interface c
 * [#2616](https://github.com/digitalocean/netbox/issues/2616) - Convert Rack `outer_unit` and Cable `length_unit` to integer-based choice fields
 * [#2616](https://github.com/digitalocean/netbox/issues/2616) - Convert Rack `outer_unit` and Cable `length_unit` to integer-based choice fields
 * [#2632](https://github.com/digitalocean/netbox/issues/2632) - Change representation of null values from `0` to `null`
 * [#2632](https://github.com/digitalocean/netbox/issues/2632) - Change representation of null values from `0` to `null`
 * [#2639](https://github.com/digitalocean/netbox/issues/2639) - Fix preservation of length/dimensions unit for racks and cables
 * [#2639](https://github.com/digitalocean/netbox/issues/2639) - Fix preservation of length/dimensions unit for racks and cables
+* [#2626](https://github.com/digitalocean/netbox/issues/2626) - Remove extraneous permissions generated from proxy models
 
 
 ## API Changes
 ## API Changes
 
 

+ 0 - 32
netbox/dcim/migrations/0066_cables.py

@@ -313,36 +313,4 @@ class Migration(migrations.Migration):
         migrations.DeleteModel(
         migrations.DeleteModel(
             name='InterfaceConnection',
             name='InterfaceConnection',
         ),
         ),
-
-        # Proxy models
-        migrations.CreateModel(
-            name='ConsoleConnection',
-            fields=[
-            ],
-            options={
-                'proxy': True,
-                'indexes': [],
-            },
-            bases=('dcim.consoleport',),
-        ),
-        migrations.CreateModel(
-            name='InterfaceConnection',
-            fields=[
-            ],
-            options={
-                'proxy': True,
-                'indexes': [],
-            },
-            bases=('dcim.interface',),
-        ),
-        migrations.CreateModel(
-            name='PowerConnection',
-            fields=[
-            ],
-            options={
-                'proxy': True,
-                'indexes': [],
-            },
-            bases=('dcim.powerport',),
-        ),
     ]
     ]

+ 0 - 61
netbox/dcim/models.py

@@ -2631,64 +2631,3 @@ class Cable(ChangeLoggedModel):
 
 
         # (A path end, B path end, connected/planned)
         # (A path end, B path end, connected/planned)
         return a_path[-1][2], b_path[-1][2], path_status
         return a_path[-1][2], b_path[-1][2], path_status
-
-
-#
-# Connection proxy models
-#
-
-class ConsoleConnection(ConsolePort):
-
-    csv_headers = [
-        'console_server', 'port', 'device', 'console_port', 'connection_status',
-    ]
-
-    class Meta:
-        proxy = True
-
-    def to_csv(self):
-        return (
-            self.connected_endpoint.device.identifier if self.connected_endpoint else None,
-            self.connected_endpoint.name if self.connected_endpoint else None,
-            self.device.identifier,
-            self.name,
-            self.get_connection_status_display(),
-        )
-
-
-class PowerConnection(PowerPort):
-
-    csv_headers = [
-        'pdu', 'outlet', 'device', 'power_port', 'connection_status',
-    ]
-
-    class Meta:
-        proxy = True
-
-    def to_csv(self):
-        return (
-            self.connected_endpoint.device.identifier if self.connected_endpoint else None,
-            self.connected_endpoint.name if self.connected_endpoint else None,
-            self.device.identifier,
-            self.name,
-            self.get_connection_status_display(),
-        )
-
-
-class InterfaceConnection(Interface):
-
-    csv_headers = [
-        'device_a', 'interface_a', 'device_b', 'interface_b', 'connection_status',
-    ]
-
-    class Meta:
-        proxy = True
-
-    def to_csv(self):
-        return (
-            self.connected_endpoint.device.identifier if self.connected_endpoint else None,
-            self.connected_endpoint.name if self.connected_endpoint else None,
-            self.device.identifier,
-            self.name,
-            self.get_connection_status_display(),
-        )

+ 7 - 8
netbox/dcim/tables.py

@@ -4,11 +4,10 @@ from django_tables2.utils import Accessor
 from tenancy.tables import COL_TENANT
 from tenancy.tables import COL_TENANT
 from utilities.tables import BaseTable, BooleanColumn, ColorColumn, ToggleColumn
 from utilities.tables import BaseTable, BooleanColumn, ColorColumn, ToggleColumn
 from .models import (
 from .models import (
-    Cable, ConsoleConnection, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device,
-    DeviceBay, DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceConnection,
-    InterfaceTemplate, InventoryItem, Manufacturer, Platform, PowerConnection, PowerOutlet, PowerOutletTemplate,
-    PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site,
-    VirtualChassis,
+    Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
+    DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate,
+    InventoryItem, Manufacturer, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
+    RackGroup, RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis,
 )
 )
 
 
 REGION_LINK = """
 REGION_LINK = """
@@ -683,7 +682,7 @@ class ConsoleConnectionTable(BaseTable):
     )
     )
 
 
     class Meta(BaseTable.Meta):
     class Meta(BaseTable.Meta):
-        model = ConsoleConnection
+        model = ConsolePort
         fields = ('console_server', 'connected_endpoint', 'device', 'name', 'connection_status')
         fields = ('console_server', 'connected_endpoint', 'device', 'name', 'connection_status')
 
 
 
 
@@ -706,7 +705,7 @@ class PowerConnectionTable(BaseTable):
     )
     )
 
 
     class Meta(BaseTable.Meta):
     class Meta(BaseTable.Meta):
-        model = PowerConnection
+        model = PowerPort
         fields = ('pdu', 'connected_endpoint', 'device', 'name', 'connection_status')
         fields = ('pdu', 'connected_endpoint', 'device', 'name', 'connection_status')
 
 
 
 
@@ -745,7 +744,7 @@ class InterfaceConnectionTable(BaseTable):
     )
     )
 
 
     class Meta(BaseTable.Meta):
     class Meta(BaseTable.Meta):
-        model = InterfaceConnection
+        model = Interface
         fields = (
         fields = (
             'device_a', 'interface_a', 'description_a', 'device_b', 'interface_b', 'description_b', 'connection_status',
             'device_a', 'interface_a', 'description_a', 'device_b', 'interface_b', 'description_b', 'connection_status',
         )
         )

+ 56 - 8
netbox/dcim/views.py

@@ -17,6 +17,7 @@ from ipam.models import Prefix, VLAN
 from ipam.tables import InterfaceIPAddressTable, InterfaceVLANTable
 from ipam.tables import InterfaceIPAddressTable, InterfaceVLANTable
 from utilities.forms import ConfirmationForm
 from utilities.forms import ConfirmationForm
 from utilities.paginator import EnhancedPaginator
 from utilities.paginator import EnhancedPaginator
+from utilities.utils import csv_format
 from utilities.views import (
 from utilities.views import (
     BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, GetReturnURLMixin,
     BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, GetReturnURLMixin,
     ObjectDeleteView, ObjectEditView, ObjectListView,
     ObjectDeleteView, ObjectEditView, ObjectListView,
@@ -24,11 +25,10 @@ from utilities.views import (
 from virtualization.models import VirtualMachine
 from virtualization.models import VirtualMachine
 from . import filters, forms, tables
 from . import filters, forms, tables
 from .models import (
 from .models import (
-    Cable, ConsoleConnection, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device,
-    DeviceBay, DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceConnection,
-    InterfaceTemplate, InventoryItem, Manufacturer, Platform, PowerConnection, PowerOutlet, PowerOutletTemplate,
-    PowerPort, PowerPortTemplate, Rack, RackGroup, RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site,
-    VirtualChassis,
+    Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
+    DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate,
+    InventoryItem, Manufacturer, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
+    RackGroup, RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis,
 )
 )
 
 
 
 
@@ -1688,7 +1688,7 @@ class CableBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 #
 #
 
 
 class ConsoleConnectionsListView(ObjectListView):
 class ConsoleConnectionsListView(ObjectListView):
-    queryset = ConsoleConnection.objects.select_related(
+    queryset = ConsolePort.objects.select_related(
         'device', 'connected_endpoint__device'
         'device', 'connected_endpoint__device'
     ).filter(
     ).filter(
         connected_endpoint__isnull=False
         connected_endpoint__isnull=False
@@ -1700,9 +1700,25 @@ class ConsoleConnectionsListView(ObjectListView):
     table = tables.ConsoleConnectionTable
     table = tables.ConsoleConnectionTable
     template_name = 'dcim/console_connections_list.html'
     template_name = 'dcim/console_connections_list.html'
 
 
+    def queryset_to_csv(self):
+        csv_data = [
+            # Headers
+            ','.join(['console_server', 'port', 'device', 'console_port', 'connection_status'])
+        ]
+        for obj in self.queryset:
+            csv = csv_format([
+                obj.connected_endpoint.device.identifier if obj.connected_endpoint else None,
+                obj.connected_endpoint.name if obj.connected_endpoint else None,
+                obj.device.identifier,
+                obj.name,
+                obj.get_connection_status_display(),
+            ])
+            csv_data.append(csv)
+        return csv_data
+
 
 
 class PowerConnectionsListView(ObjectListView):
 class PowerConnectionsListView(ObjectListView):
-    queryset = PowerConnection.objects.select_related(
+    queryset = PowerPort.objects.select_related(
         'device', 'connected_endpoint__device'
         'device', 'connected_endpoint__device'
     ).filter(
     ).filter(
         connected_endpoint__isnull=False
         connected_endpoint__isnull=False
@@ -1714,9 +1730,25 @@ class PowerConnectionsListView(ObjectListView):
     table = tables.PowerConnectionTable
     table = tables.PowerConnectionTable
     template_name = 'dcim/power_connections_list.html'
     template_name = 'dcim/power_connections_list.html'
 
 
+    def queryset_to_csv(self):
+        csv_data = [
+            # Headers
+            ','.join(['pdu', 'outlet', 'device', 'power_port', 'connection_status'])
+        ]
+        for obj in self.queryset:
+            csv = csv_format([
+                obj.connected_endpoint.device.identifier if obj.connected_endpoint else None,
+                obj.connected_endpoint.name if obj.connected_endpoint else None,
+                obj.device.identifier,
+                obj.name,
+                obj.get_connection_status_display(),
+            ])
+            csv_data.append(csv)
+        return csv_data
+
 
 
 class InterfaceConnectionsListView(ObjectListView):
 class InterfaceConnectionsListView(ObjectListView):
-    queryset = InterfaceConnection.objects.select_related(
+    queryset = Interface.objects.select_related(
         'device', 'cable', '_connected_interface__device'
         'device', 'cable', '_connected_interface__device'
     ).filter(
     ).filter(
         # Avoid duplicate connections by only selecting the lower PK in a connected pair
         # Avoid duplicate connections by only selecting the lower PK in a connected pair
@@ -1730,6 +1762,22 @@ class InterfaceConnectionsListView(ObjectListView):
     table = tables.InterfaceConnectionTable
     table = tables.InterfaceConnectionTable
     template_name = 'dcim/interface_connections_list.html'
     template_name = 'dcim/interface_connections_list.html'
 
 
+    def queryset_to_csv(self):
+        csv_data = [
+            # Headers
+            ','.join(['device_a', 'interface_a', 'device_b', 'interface_b', 'connection_status'])
+        ]
+        for obj in self.queryset:
+            csv = csv_format([
+                obj.connected_endpoint.device.identifier if obj.connected_endpoint else None,
+                obj.connected_endpoint.name if obj.connected_endpoint else None,
+                obj.device.identifier,
+                obj.name,
+                obj.get_connection_status_display(),
+            ])
+            csv_data.append(csv)
+        return csv_data
+
 
 
 #
 #
 # Inventory items
 # Inventory items