Skip to content

Commit

Permalink
Change return type hinting to support older Python syntax. Moved Netb…
Browse files Browse the repository at this point in the history
…ox api logic from format_dict.py to netbox_data.py.
  • Loading branch information
khalford committed Oct 9, 2023
1 parent e69010d commit a105c64
Showing 1 changed file with 46 additions and 0 deletions.
46 changes: 46 additions & 0 deletions Netbox_CSV_Read/Netbox_Api/netbox_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from Netbox_Api.netbox_connect import NetboxConnect
from Enums.dcim_device_id import DeviceInfoID
from Enums.dcim_device_no_id import DeviceInfoNoID
from operator import attrgetter
from typing import Optional


class NetboxGetID(NetboxConnect):
"""
This class retrieves field value ID's from Netbox.
"""
def __init__(self, url: str, token: str, api: Optional = None):
"""
This method initialises the class with the following parameters.
Also, it allows dependency injection testing.
:param url: Netbox website URL.
:param token: Netbox authentication token.
"""
if not api:
self.netbox = NetboxConnect(url, token).api_object()
else:
self.netbox = api
self.enums_id = DeviceInfoID
self.enums_no_id = DeviceInfoNoID

def get_id(self, attr_string: str, netbox_value: str, site_value: str) -> int | str:
"""
This method uses the Pynetbox Api .get() method to retrieve the ID of a string value from Netbox.
:param attr_string: The attribute string to get.
:param netbox_value: The value to search for in Netbox.
:param site_value: The value of the site key in the dictionary
:return: Returns the value/ID
"""
attr_string = attr_string.upper()
attr_to_look_for = getattr(self.enums_id, attr_string).value # Gets Enums value
value = attrgetter(attr_to_look_for)(self.netbox) # Gets netbox attr
if attr_string == "DEVICE_TYPE":
value = value.get(slug=netbox_value).id
elif attr_string == "LOCATION":
if type(site_value) == int:
site_name = self.netbox.dcim.sites.get(site_value).name
site_slug = site_name.replace(" ", "-").lower()
value = value.get(name=netbox_value, site=site_slug)
else:
value = value.get(name=netbox_value).id
return value

0 comments on commit a105c64

Please sign in to comment.