pynetbox 5.0 it is possible to set the HTTP request connect timeout in your
pynetbox.Api instance. Actually, it is not just a timeout value but you can instantiate a full
requests.Session() object to customize the HTTP calls.
As a side effect, since the SSL/TLS certificate checking parameter can also be set in the session object,
pynetbox chose to migrate away from the
ssl_verify argument for
pynetbox.Api. Thus you may need to use
requests.Session() right away when using
pynetbox 5.1.0 (the latest as of now). Here are some examples of using it.
First, if you only desire the functionality of the previous
ssl_verify argument, this is what you need:
import pynetbox import requests netbox = pynetbox.api("https://my.server/", token="verysecret") session = requests.Session() session.verify = False # Or set it to the location of your CA certificate file: # session.verify = "/usr/local/share/ca-certificates/my-root.crt" netbox.http_session = session print(netbox.dcim.devices.all()) # Or whatever you do with it
Obviously that’s a bit different from
pynetbox 4.x but that’s the way it is now.
The actual benefit of using the
requests.Session() instance is to be able to configure other options as well, and the one mentioned in
pynetbox documentation is the connect timeout value. By default the
requests library does not set any timeout values, so if your NetBox server does not respond, your automation applications may hang waiting for response. Here is what you can do about it:
import pynetbox import requests from requests.adapters import HTTPAdapter class TimeoutHTTPAdapter(HTTPAdapter): """ Adapter for setting pynetbox timeouts """ def __init__(self, *args, **kwargs): self.timeout = 5 # Or whatever you want as default if "timeout" in kwargs: self.timeout = kwargs["timeout"] del kwargs["timeout"] super().__init__(*args, **kwargs) def send(self, request, **kwargs): if kwargs["timeout"] is None: kwargs["timeout"] = self.timeout return super().send(request, **kwargs) netbox = pynetbox.api("https://my.server/", token="verysecret") session = requests.Session() session.verify = False # See the previous snippet adapter = TimeoutHTTPAdapter() session.mount("https://", adapter) # If using http, modify this netbox.http_session = session
You can also use
adapter = TimeoutHTTPAdapter(timeout=1) to override the default timeout, or you can just change the default value in the class definition if this is the only place where you use this code.