From ea92e92c5ab7ee5882b4f5e3ff07db06cd98ebb3 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 3 Nov 2016 14:49:02 -0400 Subject: [PATCH] Fixes #632: Use semicolons instead of commas to separate regexes in topology maps --- docs/data-model/extras.md | 2 +- netbox/extras/api/views.py | 4 +-- ...4_topologymap_change_comma_to_semicolon.py | 29 +++++++++++++++++++ netbox/extras/models.py | 9 +++--- 4 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 netbox/extras/migrations/0004_topologymap_change_comma_to_semicolon.py diff --git a/docs/data-model/extras.md b/docs/data-model/extras.md index 9d69af40a..dca6d7f03 100644 --- a/docs/data-model/extras.md +++ b/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. diff --git a/netbox/extras/api/views.py b/netbox/extras/api/views.py index b5928dae1..19d7fab5f 100644 --- a/netbox/extras/api/views.py +++ b/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 diff --git a/netbox/extras/migrations/0004_topologymap_change_comma_to_semicolon.py b/netbox/extras/migrations/0004_topologymap_change_comma_to_semicolon.py new file mode 100644 index 000000000..bf2711c43 --- /dev/null +++ b/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), + ] diff --git a/netbox/extras/models.py b/netbox/extras/models.py index 40ce4a1f5..609e878e9 100644 --- a/netbox/extras/models.py +++ b/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: