From f2aeca0a7ea983248fc4279515d80fd06f3f9467 Mon Sep 17 00:00:00 2001 From: "ricardo.bartels@telekom.de" Date: Wed, 13 Oct 2021 11:45:50 +0200 Subject: [PATCH 1/2] adds ":" to characters in format_slug to substitute with "-" --- module/netbox/object_classes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/netbox/object_classes.py b/module/netbox/object_classes.py index 81c51a6..4462e25 100644 --- a/module/netbox/object_classes.py +++ b/module/netbox/object_classes.py @@ -391,7 +391,7 @@ class NetBoxObject: ) # Replace separators with dash - for sep in [" ", ",", "."]: + for sep in [" ", ",", ".", ":"]: text = text.replace(sep, "-") # Strip unacceptable characters From 48ab641d06961c316d38b8251aeafee2f9c0b8b6 Mon Sep 17 00:00:00 2001 From: "ricardo.bartels@telekom.de" Date: Fri, 15 Oct 2021 15:10:10 +0200 Subject: [PATCH 2/2] adds finding objects by slug name to match first when searching for objects refs: #79 --- module/netbox/inventory.py | 11 +++++++---- module/netbox/object_classes.py | 9 ++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/module/netbox/inventory.py b/module/netbox/inventory.py index d42cb94..1d58f4f 100644 --- a/module/netbox/inventory.py +++ b/module/netbox/inventory.py @@ -100,12 +100,15 @@ class NetBoxInventory: if data_id is not None and data_id != 0: return self.get_by_id(object_type, nb_id=data_id) - # add slug to data if slug is primary key - if object_type.primary_key == "slug" and data.get("name") is not None: - data["slug"] = NetBoxObject.format_slug(data.get("name")) + # try to find object by slug + if "slug" in object_type.data_model.keys() and data.get("name") is not None: + object_slug = NetBoxObject.format_slug(data.get("name")) + for this_object in self.get_all_items(object_type): + if this_object.data.get("slug") == object_slug: + return this_object # try to find by primary/secondary key - if data.get(object_type.primary_key) is not None: + elif data.get(object_type.primary_key) is not None: object_name_to_find = None for this_object in self.get_all_items(object_type): diff --git a/module/netbox/object_classes.py b/module/netbox/object_classes.py index 4462e25..88f1755 100644 --- a/module/netbox/object_classes.py +++ b/module/netbox/object_classes.py @@ -391,7 +391,7 @@ class NetBoxObject: ) # Replace separators with dash - for sep in [" ", ",", ".", ":"]: + for sep in [" ", ",", "."]: text = text.replace(sep, "-") # Strip unacceptable characters @@ -468,15 +468,14 @@ class NetBoxObject: # value must be a string witch a certain max length if isinstance(defined_value_type, int): if not isinstance(value, str): - log.error(f"Invalid data type for '{self.__class__.__name__}.{key}' (must be str), got: '{value}'") + log.error(f"Invalid data type for '{self.__class__.__name__}.{key}' (must be str), got: " + f"{value} ({type(value)})") continue value = value[0:defined_value_type] if key == "slug": value = self.format_slug(text=value, max_len=defined_value_type) - else: - value = value[0:defined_value_type] if isinstance(defined_value_type, list): @@ -1220,7 +1219,7 @@ class NBPrefix(NetBoxObject): class NBManufacturer(NetBoxObject): name = "manufacturer" api_path = "dcim/manufacturers" - primary_key = "slug" + primary_key = "name" prune = False data_model = { "name": 50,