Browse Source

Fixes #632: Use semicolons instead of commas to separate regexes in topology maps

Jeremy Stretch 8 years ago
parent
commit
ea92e92c5a

+ 1 - 1
docs/data-model/extras.md

@@ -98,4 +98,4 @@ dist-switch\d
 access-switch\d+,oob-switch\d+
 ```
 
-Note that you can combine multiple regexes onto one line using commas. (Commas can only be used for separating regexes; they will not be processed as part of a regex.) The order in which regexes are listed on a line is significant: devices matching the first regex will be rendered first, and subsequent groups will be rendered to the right of those.
+Note that you can combine multiple regexes onto one line using semicolons. The order in which regexes are listed on a line is significant: devices matching the first regex will be rendered first, and subsequent groups will be rendered to the right of those.

+ 2 - 2
netbox/extras/api/views.py

@@ -80,7 +80,7 @@ class TopologyMapView(APIView):
 
             # Add each device to the graph
             devices = []
-            for query in device_set.split(','):
+            for query in device_set.split(';'):  # Split regexes on semicolons
                 devices += Device.objects.filter(name__regex=query)
             for d in devices:
                 subgraph.node(d.name)
@@ -94,7 +94,7 @@ class TopologyMapView(APIView):
         # Compile list of all devices
         device_superset = Q()
         for device_set in tmap.device_sets:
-            for query in device_set.split(','):
+            for query in device_set.split(';'):  # Split regexes on semicolons
                 device_superset = device_superset | Q(name__regex=query)
 
         # Add all connections to the graph

+ 29 - 0
netbox/extras/migrations/0004_topologymap_change_comma_to_semicolon.py

@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10 on 2016-11-03 18:33
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+from extras.models import TopologyMap
+
+
+def commas_to_semicolons(apps, schema_editor):
+    for tm in TopologyMap.objects.filter(device_patterns__contains=','):
+        tm.device_patterns = tm.device_patterns.replace(',', ';')
+        tm.save()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('extras', '0003_exporttemplate_add_description'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='topologymap',
+            name='device_patterns',
+            field=models.TextField(help_text=b'Identify devices to include in the diagram using regular expressions, one per line. Each line will result in a new tier of the drawing. Separate multiple regexes within a line using semicolons. Devices will be rendered in the order they are defined.'),
+        ),
+        migrations.RunPython(commas_to_semicolons),
+    ]

+ 5 - 4
netbox/extras/models.py

@@ -268,10 +268,11 @@ class TopologyMap(models.Model):
     name = models.CharField(max_length=50, unique=True)
     slug = models.SlugField(unique=True)
     site = models.ForeignKey('dcim.Site', related_name='topology_maps', blank=True, null=True)
-    device_patterns = models.TextField(help_text="Identify devices to include in the diagram using regular expressions,"
-                                                 "one per line. Each line will result in a new tier of the drawing. "
-                                                 "Separate multiple regexes on a line using commas. Devices will be "
-                                                 "rendered in the order they are defined.")
+    device_patterns = models.TextField(
+        help_text="Identify devices to include in the diagram using regular expressions, one per line. Each line will "
+                  "result in a new tier of the drawing. Separate multiple regexes within a line using semicolons. "
+                  "Devices will be rendered in the order they are defined."
+    )
     description = models.CharField(max_length=100, blank=True)
 
     class Meta: