Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pynetbox for openSUSE:Factory
checked in at 2022-12-11 17:17:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pynetbox (Old)
and /work/SRC/openSUSE:Factory/.python-pynetbox.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pynetbox"
Sun Dec 11 17:17:07 2022 rev:31 rq:1042184 version:7.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pynetbox/python-pynetbox.changes
2022-10-08 01:23:34.594002810 +0200
+++
/work/SRC/openSUSE:Factory/.python-pynetbox.new.1835/python-pynetbox.changes
2022-12-11 17:17:12.590072855 +0100
@@ -1,0 +2,14 @@
+Sat Dec 10 20:46:27 UTC 2022 - Martin Hauke <[email protected]>
+
+- Update to version 7.0.0
+ BREAKING CHANGE
+ * Due to changes for a_terminations, b_terminations this version
+ only supports NetBox 3.3 and later.
+ Changes
+ * Enable available_ips for ip_ranges.
+ * Remove all Python2 related code.
+ * Do not skip plugins in endpoint URLs.
+ * Fix pickling exception with custom errors.
+ * Support NetBox 3.3 cabling models (breaking change).
+
+-------------------------------------------------------------------
Old:
----
pynetbox-6.6.2.tar.gz
New:
----
pynetbox-7.0.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pynetbox.spec ++++++
--- /var/tmp/diff_new_pack.FaTHRO/_old 2022-12-11 17:17:12.990075083 +0100
+++ /var/tmp/diff_new_pack.FaTHRO/_new 2022-12-11 17:17:12.994075106 +0100
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-pynetbox
-Version: 6.6.2
+Version: 7.0.0
Release: 0
Summary: NetBox API client library
License: Apache-2.0
++++++ pynetbox-6.6.2.tar.gz -> pynetbox-7.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/.github/workflows/py3.yml
new/pynetbox-7.0.0/.github/workflows/py3.yml
--- old/pynetbox-6.6.2/.github/workflows/py3.yml 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/.github/workflows/py3.yml 2022-12-09
18:53:22.000000000 +0100
@@ -12,8 +12,8 @@
runs-on: ubuntu-latest
strategy:
matrix:
- python: ["3.7", "3.10"]
- netbox: ["2.11", "3.0", "3.1"]
+ python: ["3.8", "3.9", "3.10"]
+ netbox: ["3.3"]
steps:
- uses: actions/checkout@v2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/PKG-INFO new/pynetbox-7.0.0/PKG-INFO
--- old/pynetbox-6.6.2/PKG-INFO 2022-04-18 05:28:48.670452800 +0200
+++ new/pynetbox-7.0.0/PKG-INFO 2022-12-09 18:53:33.226451000 +0100
@@ -1,20 +1,16 @@
Metadata-Version: 2.1
Name: pynetbox
-Version: 6.6.2
+Version: 7.0.0
Summary: NetBox API client library
-Home-page: https://github.com/digitalocean/pynetbox
+Home-page: https://github.com/netbox-community/netbox
Author: Zach Moody
Author-email: [email protected]
License: Apache2
Keywords: netbox
-Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Development Status :: 5 - Production/Stable
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
License-File: LICENSE
-
-UNKNOWN
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/README.md new/pynetbox-7.0.0/README.md
--- old/pynetbox-6.6.2/README.md 2022-04-18 05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/README.md 2022-12-09 18:53:22.000000000 +0100
@@ -1,6 +1,7 @@
# Pynetbox
Python API client library for
[NetBox](https://github.com/netbox-community/netbox).
+> **Note:** Version 6.7 and later of the library only supports NetBox 3.3 and
above.
## Installation
@@ -44,7 +45,7 @@
### Threading
-pynetbox supports multithreaded calls (in Python 3 only) for `.filter()` and
`.all()` queries. It is **highly recommended** you have `MAX_PAGE_SIZE` in your
Netbox install set to anything *except* `0` or `None`. The default value of
`1000` is usually a good value to use. To enable threading, add
`threading=True` parameter to the `.api`:
+pynetbox supports multithreaded calls for `.filter()` and `.all()` queries. It
is **highly recommended** you have `MAX_PAGE_SIZE` in your Netbox install set
to anything *except* `0` or `None`. The default value of `1000` is usually a
good value to use. To enable threading, add `threading=True` parameter to the
`.api`:
```python
nb = pynetbox.api(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox/core/api.py
new/pynetbox-7.0.0/pynetbox/core/api.py
--- old/pynetbox-6.6.2/pynetbox/core/api.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/pynetbox/core/api.py 2022-12-09 18:53:22.000000000
+0100
@@ -13,8 +13,6 @@
See the License for the specific language governing permissions and
limitations under the License.
"""
-import sys
-
import requests
from pynetbox.core.query import Request
@@ -22,7 +20,7 @@
from pynetbox.core.response import Record
-class Api(object):
+class Api:
"""The API object is the point of entry to pynetbox.
After instantiating the Api() with the appropriate named arguments
@@ -90,10 +88,6 @@
self.base_url = base_url
self.session_key = None
self.http_session = requests.Session()
- if threading and sys.version_info.major == 2:
- raise NotImplementedError(
- "Threaded pynetbox calls not supported in
Python 2"
- )
self.threading = threading
if self.private_key_file:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox/core/app.py
new/pynetbox-7.0.0/pynetbox/core/app.py
--- old/pynetbox-6.6.2/pynetbox/core/app.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/pynetbox/core/app.py 2022-12-09 18:53:22.000000000
+0100
@@ -26,7 +26,7 @@
)
-class App(object):
+class App:
"""Represents apps in NetBox.
Calls to attributes are returned as Endpoint objects.
@@ -157,7 +157,7 @@
return config
-class PluginsApp(object):
+class PluginsApp:
"""
Basically valid plugins api could be handled by same App class,
but you need to add plugins to request url path.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox/core/endpoint.py
new/pynetbox-7.0.0/pynetbox/core/endpoint.py
--- old/pynetbox-6.6.2/pynetbox/core/endpoint.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/pynetbox/core/endpoint.py 2022-12-09
18:53:22.000000000 +0100
@@ -19,7 +19,7 @@
RESERVED_KWARGS = ()
-class Endpoint(object):
+class Endpoint:
"""Represent actions available on endpoints in the Netbox API.
Takes ``name`` and ``app`` passed from App() and builds the correct
@@ -338,19 +338,25 @@
Updating objects on the `devices` endpoint:
- >>> device = netbox.dcim.devices.update([
+ >>> devices = nb.dcim.devices.update([
... {'id': 1, 'name': 'test'},
... {'id': 2, 'name': 'test2'},
... ])
- >>> True
+ >>> devices
+ [test2, test]
+ >>>
Use bulk update by passing a list of Records:
- >>> devices = nb.dcim.devices.all()
+ >>> devices = list(nb.dcim.devices.filter())
+ >>> devices
+ [Device1, Device2, Device3]
>>> for d in devices:
- >>> d.name = d.name+'-test'
+ ... d.name = d.name+'-test'
+ ...
>>> nb.dcim.devices.update(devices)
- >>> True
+ [Device1-test, Device2-test, Device3-test]
+ >>>
"""
series = []
if not isinstance(objects, list):
@@ -433,7 +439,7 @@
cleaned_ids.append(o.id)
else:
raise ValueError(
- "Invalid object in list of " "objects to delete: " +
str(type(o))
+ "Invalid object in list of objects to delete: " +
str(type(o))
)
req = Request(
@@ -546,7 +552,7 @@
return ret.get_count()
-class DetailEndpoint(object):
+class DetailEndpoint:
"""Enables read/write operations on detail endpoints.
Endpoints like ``available-ips`` that are detail routes off
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox/core/query.py
new/pynetbox-7.0.0/pynetbox/core/query.py
--- old/pynetbox-6.6.2/pynetbox/core/query.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/pynetbox/core/query.py 2022-12-09 18:53:22.000000000
+0100
@@ -13,12 +13,9 @@
See the License for the specific language governing permissions and
limitations under the License.
"""
-try:
- import concurrent.futures as cf
-except ImportError:
- pass
+import concurrent.futures as cf
import json
-from six.moves.urllib.parse import urlencode
+from urllib.parse import urlencode
def calc_pages(limit, count):
@@ -60,7 +57,7 @@
)
)
- super(RequestError, self).__init__(req)
+ super().__init__(self.message)
self.req = req
self.request_body = req.request.body
self.base = req.url
@@ -79,7 +76,7 @@
"""
def __init__(self, req):
- super(AllocationError, self).__init__(req)
+ super().__init__(req)
self.req = req
self.request_body = req.request.body
self.base = req.url
@@ -98,7 +95,7 @@
"""
def __init__(self, req):
- super(ContentError, self).__init__(req)
+ super().__init__(req)
self.req = req
self.request_body = req.request.body
self.base = req.url
@@ -110,7 +107,7 @@
return self.error
-class Request(object):
+class Request:
"""Creates requests to the Netbox API
Responsible for building the url and making the HTTP(S) requests to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox/core/response.py
new/pynetbox-7.0.0/pynetbox/core/response.py
--- old/pynetbox-6.6.2/pynetbox/core/response.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/pynetbox/core/response.py 2022-12-09
18:53:22.000000000 +0100
@@ -17,8 +17,8 @@
from collections import OrderedDict
import pynetbox.core.app
-from six.moves.urllib.parse import urlsplit
-from pynetbox.core.query import Request, RequestError
+from urllib.parse import urlsplit
+from pynetbox.core.query import Request
from pynetbox.core.util import Hashabledict
@@ -63,14 +63,14 @@
}
-class JsonField(object):
+class JsonField:
"""Explicit field type for values that are not to be converted
to a Record object"""
_json_field = True
-class RecordSet(object):
+class RecordSet:
"""Iterator containing Record objects.
Returned by :py:meth:`.Endpoint.all()` and :py:meth:`.Endpoint.filter()`
methods.
@@ -172,7 +172,7 @@
return self.endpoint.delete(self)
-class Record(object):
+class Record:
"""Create Python objects from NetBox API responses.
Creates an object from a NetBox response passed as ``values``.
@@ -354,6 +354,22 @@
values within.
"""
+ def generic_list_parser(key_name, list_item):
+ from pynetbox.models.mapper import CONTENT_TYPE_MAPPER
+
+ if (
+ isinstance(list_item, dict)
+ and "object_type" in list_item
+ and "object" in list_item
+ ):
+ lookup = list_item["object_type"]
+ model = None
+ model = CONTENT_TYPE_MAPPER.get(lookup)
+ if model:
+ return model(list_item["object"], self.api, self.endpoint)
+
+ return list_item
+
def list_parser(key_name, list_item):
if isinstance(list_item, dict):
lookup = getattr(self.__class__, key_name, None)
@@ -364,6 +380,7 @@
else:
model = lookup[0]
return model(list_item, self.api, self.endpoint)
+
return list_item
for k, v in values.items():
@@ -382,8 +399,13 @@
self._add_cache((k, v))
elif isinstance(v, list):
- v = [list_parser(k, i) for i in v]
- to_cache = list(v)
+ # check if GFK
+ if len(v) and isinstance(v[0], dict) and "object_type" in v[0]:
+ v = [generic_list_parser(k, i) for i in v]
+ to_cache = list(v)
+ else:
+ v = [list_parser(k, i) for i in v]
+ to_cache = list(v)
self._add_cache((k, to_cache))
else:
@@ -399,8 +421,8 @@
url_path = url_path[len(extra_path) :]
split_url_path = url_path.split("/")
if split_url_path[2] == "plugins":
- # Skip plugins from the path
- app, name = split_url_path[3:5]
+ app = "plugins/{}".format(split_url_path[3])
+ name = split_url_path[4]
else:
app, name = split_url_path[2:4]
return getattr(pynetbox.core.app.App(self.api, app), name)
@@ -496,7 +518,7 @@
>>> x = nb.dcim.devices.get(name='test1-a3-tor1b')
>>> x.serial
- u''
+ ''
>>> x.serial = '1234'
>>> x.updates()
{'serial': '1234'}
@@ -520,7 +542,7 @@
>>> x = nb.dcim.devices.get(name='test1-a3-tor1b')
>>> x.serial
- u''
+ ''
>>> x.serial = '1234'
>>> x.save()
True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox/models/dcim.py
new/pynetbox-7.0.0/pynetbox/models/dcim.py
--- old/pynetbox-6.6.2/pynetbox/models/dcim.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/pynetbox/models/dcim.py 2022-12-09 18:53:22.000000000
+0100
@@ -13,7 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
"""
-from six.moves.urllib.parse import urlsplit
+from urllib.parse import urlsplit
from pynetbox.core.query import Request
from pynetbox.core.response import Record, JsonField
@@ -23,6 +23,35 @@
class TraceableRecord(Record):
+ def _get_obj_class(self, url):
+ uri_to_obj_class_map = {
+ "dcim/cables": Cables,
+ "dcim/front-ports": FrontPorts,
+ "dcim/interfaces": Interfaces,
+ "dcim/rear-ports": RearPorts,
+ }
+
+ # the url for this item will be something like:
+ # https://netbox/api/dcim/rear-ports/12761/
+ # TODO: Move this to a more general function.
+ app_endpoint = "/".join(
+ urlsplit(url).path[len(urlsplit(self.api.base_url).path)
:].split("/")[1:3]
+ )
+ return uri_to_obj_class_map.get(
+ app_endpoint,
+ Record,
+ )
+
+ def _build_termination_data(self, termination_list):
+ terminations_data = []
+ for hop_item_data in termination_list:
+ return_obj_class = self._get_obj_class(hop_item_data["url"])
+ terminations_data.append(
+ return_obj_class(hop_item_data, self.endpoint.api,
self.endpoint)
+ )
+
+ return terminations_data
+
def trace(self):
req = Request(
key=str(self.id) + "/trace",
@@ -31,38 +60,18 @@
session_key=self.api.session_key,
http_session=self.api.http_session,
).get()
- uri_to_obj_class_map = {
- "dcim/cables": Cables,
- "dcim/front-ports": FrontPorts,
- "dcim/interfaces": Interfaces,
- "dcim/rear-ports": RearPorts,
- }
+
ret = []
- for (termination_a_data, cable_data, termination_b_data) in req:
- this_hop_ret = []
- for hop_item_data in (termination_a_data, cable_data,
termination_b_data):
- # if not fully terminated then some items will be None
- if not hop_item_data:
- this_hop_ret.append(hop_item_data)
- continue
-
- # the url for this item will be something like:
- # https://netbox/api/dcim/rear-ports/12761/
- # TODO: Move this to a more general function.
- app_endpoint = "/".join(
- urlsplit(hop_item_data["url"])
- .path[len(urlsplit(self.api.base_url).path) :]
- .split("/")[1:3]
- )
- return_obj_class = uri_to_obj_class_map.get(
- app_endpoint,
- Record,
- )
- this_hop_ret.append(
- return_obj_class(hop_item_data, self.endpoint.api,
self.endpoint)
+ for (a_terminations_data, cable_data, b_terminations_data) in req:
+ ret.append(self._build_termination_data(a_terminations_data))
+ if not cable_data:
+ ret.append(cable_data)
+ else:
+ return_obj_class = self._get_obj_class(cable_data["url"])
+ ret.append(
+ return_obj_class(cable_data, self.endpoint.api,
self.endpoint)
)
-
- ret.append(this_hop_ret)
+ ret.append(self._build_termination_data(b_terminations_data))
return ret
@@ -225,14 +234,6 @@
class Cables(Record):
def __str__(self):
- if all(
- [
- isinstance(i, Termination)
- for i in (self.termination_a, self.termination_b)
- ]
- ):
- return "{} <> {}".format(self.termination_a, self.termination_b)
+ if len(self.a_terminations) == 1 and len(self.b_terminations) == 1:
+ return "{} <> {}".format(self.a_terminations[0],
self.b_terminations[0])
return "Cable #{}".format(self.id)
-
- termination_a = Termination
- termination_b = Termination
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox/models/ipam.py
new/pynetbox-7.0.0/pynetbox/models/ipam.py
--- old/pynetbox-6.6.2/pynetbox/models/ipam.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/pynetbox/models/ipam.py 2022-12-09 18:53:22.000000000
+0100
@@ -22,6 +22,42 @@
return str(self.address)
+class IpRanges(Record):
+ def __str__(self):
+ return str(self.display)
+
+ @property
+ def available_ips(self):
+ """Represents the ``available-ips`` detail endpoint.
+
+ Returns a DetailEndpoint object that is the interface for
+ viewing and creating IP addresses inside an ip range .
+
+ :returns: :py:class:`.DetailEndpoint`
+
+ :Examples:
+
+ >>> ip_range = nb.ipam.ip_ranges.get(24)
+ >>> ip_range.available_ips.list()
+ [10.0.0.1/24, 10.0.0.2/24, 10.0.0.3/24, 10.0.0.4/24, 10.0.0.5/24, ...]
+
+ To create a single IP:
+
+ >>> ip_range = nb.ipam.ip_ranges.get(24)
+ >>> ip_range.available_ips.create()
+ 10.0.0.1/24
+
+
+ To create multiple IPs:
+
+ >>> ip_range = nb.ipam.ip_ranges.get(24)
+ >>> create = ip_range.available_ips.create([{} for i in range(2)])
+ >>> create
+ [10.0.0.2/24, 10.0.0.3/24]
+ """
+ return DetailEndpoint(self, "available-ips", custom_return=IpAddresses)
+
+
class Prefixes(Record):
def __str__(self):
return str(self.prefix)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox/models/mapper.py
new/pynetbox-7.0.0/pynetbox/models/mapper.py
--- old/pynetbox-6.6.2/pynetbox/models/mapper.py 1970-01-01
01:00:00.000000000 +0100
+++ new/pynetbox-7.0.0/pynetbox/models/mapper.py 2022-12-09
18:53:22.000000000 +0100
@@ -0,0 +1,118 @@
+from .circuits import Circuits, CircuitTerminations
+from .dcim import (
+ DeviceTypes,
+ Devices,
+ Interfaces,
+ PowerOutlets,
+ PowerPorts,
+ ConsolePorts,
+ ConsoleServerPorts,
+ RackReservations,
+ VirtualChassis,
+ FrontPorts,
+ RearPorts,
+ Racks,
+ Termination,
+ Cables,
+)
+from .ipam import (
+ IpAddresses,
+ Prefixes,
+ Aggregates,
+ Vlans,
+ VlanGroups,
+)
+from .virtualization import VirtualMachines
+from .wireless import WirelessLans
+
+
+CONTENT_TYPE_MAPPER = {
+ "circuits.circuit": Circuits,
+ "circuits.circuittermination": CircuitTerminations,
+ "dcim.cable": Cables,
+ "dcim.cablepath": None,
+ "dcim.cabletermination": Termination,
+ "dcim.consoleport": ConsolePorts,
+ "dcim.consoleporttemplate": None,
+ "dcim.consoleserverport": ConsoleServerPorts,
+ "dcim.consoleserverporttemplate": None,
+ "dcim.device": Devices,
+ "dcim.devicebay": None,
+ "dcim.devicebaytemplate": None,
+ "dcim.devicerole": None,
+ "dcim.devicetype": DeviceTypes,
+ "dcim.frontport": FrontPorts,
+ "dcim.frontporttemplate": None,
+ "dcim.interface": Interfaces,
+ "dcim.interfacetemplate": None,
+ "dcim.inventoryitem": None,
+ "dcim.inventoryitemrole": None,
+ "dcim.inventoryitemtemplate": None,
+ "dcim.location": None,
+ "dcim.manufacturer": None,
+ "dcim.module": None,
+ "dcim.modulebay": None,
+ "dcim.modulebaytemplate": None,
+ "dcim.moduletype": None,
+ "dcim.platform": None,
+ "dcim.powerfeed": None,
+ "dcim.poweroutlet": PowerOutlets,
+ "dcim.poweroutlettemplate": None,
+ "dcim.powerpanel": None,
+ "dcim.powerport": ConsolePorts,
+ "dcim.powerporttemplate": None,
+ "dcim.rack": Racks,
+ "dcim.rackreservation": RackReservations,
+ "dcim.rackrole": None,
+ "dcim.rearport": RearPorts,
+ "dcim.rearporttemplate": None,
+ "dcim.region": None,
+ "dcim.site": None,
+ "dcim.sitegroup": None,
+ "dcim.virtualchassis": VirtualChassis,
+ "extras.configcontext": None,
+ "extras.configrevision": None,
+ "extras.customfield": None,
+ "extras.customlink": None,
+ "extras.exporttemplate": None,
+ "extras.imageattachment": None,
+ "extras.jobresult": None,
+ "extras.journalentry": None,
+ "extras.objectchange": None,
+ "extras.report": None,
+ "extras.script": None,
+ "extras.tag": None,
+ "extras.taggeditem": None,
+ "extras.webhook": None,
+ "ipam.aggregate": Aggregates,
+ "ipam.ASN": None,
+ "ipam.FHRPgroup": None,
+ "ipam.FHRPgroupassignment": None,
+ "ipam.IPaddress": IpAddresses,
+ "ipam.IPrange": None,
+ "ipam.L2VPN": None,
+ "ipam.L2VPNtermination": None,
+ "ipam.prefix": Prefixes,
+ "ipam.RIR": None,
+ "ipam.role": None,
+ "ipam.routetarget": None,
+ "ipam.service": None,
+ "ipam.servicetemplate": None,
+ "ipam.VLAN": Vlans,
+ "ipam.VLANgroup": VlanGroups,
+ "ipam.VRF": None,
+ "tenancy.contact": None,
+ "tenancy.contactassignment": None,
+ "tenancy.contactgroup": None,
+ "tenancy.contactrole": None,
+ "tenancy.tenant": None,
+ "tenancy.tenantgroup": None,
+ "virtualization.cluster": None,
+ "virtualization.clustergroup": None,
+ "virtualization.clustertype": None,
+ "virtualization.interface": None,
+ "virtualization.virtualmachine": VirtualMachines,
+ "wireless.WirelessLAN": WirelessLans,
+ "wireless.WirelessLANGroup": None,
+ "wireless.wirelesslink": None,
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox.egg-info/PKG-INFO
new/pynetbox-7.0.0/pynetbox.egg-info/PKG-INFO
--- old/pynetbox-6.6.2/pynetbox.egg-info/PKG-INFO 2022-04-18
05:28:48.000000000 +0200
+++ new/pynetbox-7.0.0/pynetbox.egg-info/PKG-INFO 2022-12-09
18:53:33.000000000 +0100
@@ -1,20 +1,16 @@
Metadata-Version: 2.1
Name: pynetbox
-Version: 6.6.2
+Version: 7.0.0
Summary: NetBox API client library
-Home-page: https://github.com/digitalocean/pynetbox
+Home-page: https://github.com/netbox-community/netbox
Author: Zach Moody
Author-email: [email protected]
License: Apache2
Keywords: netbox
-Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Development Status :: 5 - Production/Stable
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
License-File: LICENSE
-
-UNKNOWN
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox.egg-info/SOURCES.txt
new/pynetbox-7.0.0/pynetbox.egg-info/SOURCES.txt
--- old/pynetbox-6.6.2/pynetbox.egg-info/SOURCES.txt 2022-04-18
05:28:48.000000000 +0200
+++ new/pynetbox-7.0.0/pynetbox.egg-info/SOURCES.txt 2022-12-09
18:53:33.000000000 +0100
@@ -34,6 +34,7 @@
pynetbox/models/dcim.py
pynetbox/models/extras.py
pynetbox/models/ipam.py
+pynetbox/models/mapper.py
pynetbox/models/users.py
pynetbox/models/virtualization.py
pynetbox/models/wireless.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/pynetbox.egg-info/requires.txt
new/pynetbox-7.0.0/pynetbox.egg-info/requires.txt
--- old/pynetbox-6.6.2/pynetbox.egg-info/requires.txt 2022-04-18
05:28:48.000000000 +0200
+++ new/pynetbox-7.0.0/pynetbox.egg-info/requires.txt 2022-12-09
18:53:33.000000000 +0100
@@ -1,2 +1 @@
requests<3.0,>=2.20.0
-six==1.*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/requirements-dev.txt
new/pynetbox-7.0.0/requirements-dev.txt
--- old/pynetbox-6.6.2/requirements-dev.txt 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/requirements-dev.txt 2022-12-09 18:53:22.000000000
+0100
@@ -1,3 +1,4 @@
-black~=22.0
-pytest==6.2.*
-pytest-docker==0.10.*
+black~=22.10
+pytest==7.1.*
+pytest-docker==1.0.*
+PyYAML==6.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/requirements.txt
new/pynetbox-7.0.0/requirements.txt
--- old/pynetbox-6.6.2/requirements.txt 2022-04-18 05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/requirements.txt 2022-12-09 18:53:22.000000000 +0100
@@ -1,2 +1 @@
requests>=2.20.0,<3.0
-six==1.*
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/setup.py new/pynetbox-7.0.0/setup.py
--- old/pynetbox-6.6.2/setup.py 2022-04-18 05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/setup.py 2022-12-09 18:53:22.000000000 +0100
@@ -3,7 +3,7 @@
setup(
name="pynetbox",
description="NetBox API client library",
- url="https://github.com/digitalocean/pynetbox",
+ url="https://github.com/netbox-community/netbox",
author="Zach Moody",
author_email="[email protected]",
license="Apache2",
@@ -13,16 +13,15 @@
packages=find_packages(exclude=["tests", "tests.*"]),
install_requires=[
"requests>=2.20.0,<3.0",
- "six==1.*",
],
zip_safe=False,
keywords=["netbox"],
classifiers=[
"Intended Audience :: Developers",
"Development Status :: 5 - Production/Stable",
- "Programming Language :: Python :: 2",
- "Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.6",
+ "Programming Language :: Python :: 3.8",
+ "Programming Language :: Python :: 3.9",
+ "Programming Language :: Python :: 3.10",
],
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/conftest.py
new/pynetbox-7.0.0/tests/conftest.py
--- old/pynetbox-6.6.2/tests/conftest.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/tests/conftest.py 2022-12-09 18:53:22.000000000
+0100
@@ -4,7 +4,7 @@
from packaging import version
-DEFAULT_NETBOX_VERSIONS = "2.11, 3.0, 3.1"
+DEFAULT_NETBOX_VERSIONS = "3.3"
def pytest_addoption(parser):
@@ -58,7 +58,7 @@
url_parse = parse.urlparse(config.option.url_override)
- class DockerServicesMock(object):
+ class DockerServicesMock:
def __init__(self, ports):
self.ports = ports
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/integration/conftest.py
new/pynetbox-7.0.0/tests/integration/conftest.py
--- old/pynetbox-6.6.2/tests/integration/conftest.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/tests/integration/conftest.py 2022-12-09
18:53:22.000000000 +0100
@@ -28,12 +28,8 @@
"""
major, minor = netbox_version.major, netbox_version.minor
- if (major, minor) == (3, 1):
- tag = "1.5.1"
- elif (major, minor) == (3, 0):
- tag = "1.5.1"
- elif (major, minor) == (2, 11):
- tag = "1.2.0"
+ if (major, minor) == (3, 3):
+ tag = "2.2.0"
else:
raise NotImplementedError(
"Version %s is not currently supported" % netbox_version
@@ -82,6 +78,7 @@
netbox_versions_by_repo_dirpaths = {}
for netbox_version in pytestconfig.option.netbox_versions:
repo_version_tag =
get_netbox_docker_version_tag(netbox_version=netbox_version)
+ print("top: ", git_toplevel)
repo_fpath = os.path.join(
git_toplevel, ".netbox-docker-%s" % str(repo_version_tag)
)
@@ -384,14 +381,10 @@
"""
netbox_integration_version = request.param
- if netbox_integration_version >= version.Version("2.10"):
- netbox_service_name = "netbox_v%s_netbox" % str(
- netbox_integration_version
- ).replace(".", "_")
- else:
- netbox_service_name = "netbox_v%s_nginx" % str(
- netbox_integration_version
- ).replace(".", "_")
+ netbox_service_name = "netbox_v%s_netbox" %
str(netbox_integration_version).replace(
+ ".", "_"
+ )
+
netbox_service_port = 8080
try:
# `port_for` takes a container port and returns the corresponding host
port
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/integration/test_dcim.py
new/pynetbox-7.0.0/tests/integration/test_dcim.py
--- old/pynetbox-6.6.2/tests/integration/test_dcim.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/tests/integration/test_dcim.py 2022-12-09
18:53:22.000000000 +0100
@@ -207,10 +207,12 @@
@pytest.fixture(scope="class")
def power_cable(self, api, power_outlet, power_port):
cable = api.dcim.cables.create(
- termination_a_id=power_port.id,
- termination_a_type="dcim.powerport",
- termination_b_id=power_outlet.id,
- termination_b_type="dcim.poweroutlet",
+ a_terminations=[
+ {"object_type": "dcim.powerport", "object_id": power_port.id},
+ ],
+ b_terminations=[
+ {"object_type": "dcim.poweroutlet", "object_id":
power_outlet.id},
+ ],
)
yield cable
cable.delete()
@@ -247,10 +249,15 @@
@pytest.fixture(scope="class")
def console_cable(self, api, console_port, console_server_port):
ret = api.dcim.cables.create(
- termination_a_id=console_port.id,
- termination_a_type="dcim.consoleport",
- termination_b_id=console_server_port.id,
- termination_b_type="dcim.consoleserverport",
+ a_terminations=[
+ {"object_type": "dcim.consoleport", "object_id":
console_port.id},
+ ],
+ b_terminations=[
+ {
+ "object_type": "dcim.consoleserverport",
+ "object_id": console_server_port.id,
+ },
+ ],
)
yield ret
ret.delete()
@@ -291,10 +298,12 @@
@pytest.fixture(scope="class")
def interface_cable(self, api, interface_a, interface_b):
ret = api.dcim.cables.create(
- termination_a_id=interface_a.id,
- termination_a_type="dcim.interface",
- termination_b_id=interface_b.id,
- termination_b_type="dcim.interface",
+ a_terminations=[
+ {"object_type": "dcim.interface", "object_id": interface_a.id},
+ ],
+ b_terminations=[
+ {"object_type": "dcim.interface", "object_id": interface_b.id},
+ ],
)
yield ret
ret.delete()
@@ -313,4 +322,4 @@
test = interface_a.trace()
assert test
assert test[0][0].name == "Ethernet1"
- assert test[0][2].name == "Ethernet1"
+ assert test[2][0].name == "Ethernet1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/test_api.py
new/pynetbox-7.0.0/tests/test_api.py
--- old/pynetbox-6.6.2/tests/test_api.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/tests/test_api.py 2022-12-09 18:53:22.000000000
+0100
@@ -1,13 +1,9 @@
import unittest
-import six
+from unittest.mock import patch
import pynetbox
from .util import Response
-if six.PY3:
- from unittest.mock import patch
-else:
- from mock import patch
host = "http://localhost:8000"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/test_app.py
new/pynetbox-7.0.0/tests/test_app.py
--- old/pynetbox-6.6.2/tests/test_app.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/tests/test_app.py 2022-12-09 18:53:22.000000000
+0100
@@ -1,13 +1,8 @@
import unittest
-
-import six
+from unittest.mock import patch
import pynetbox
-if six.PY3:
- from unittest.mock import patch
-else:
- from mock import patch
host = "http://localhost:8000"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/test_circuits.py
new/pynetbox-7.0.0/tests/test_circuits.py
--- old/pynetbox-6.6.2/tests/test_circuits.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/tests/test_circuits.py 2022-12-09 18:53:22.000000000
+0100
@@ -1,13 +1,9 @@
import unittest
-import six
+from unittest.mock import patch
from .util import Response
import pynetbox
-if six.PY3:
- from unittest.mock import patch
-else:
- from mock import patch
api = pynetbox.api(
"http://localhost:8000",
@@ -18,7 +14,7 @@
HEADERS = {"accept": "application/json;"}
-class Generic(object):
+class Generic:
class Tests(unittest.TestCase):
name = ""
ret = pynetbox.core.response.Record
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/test_tenancy.py
new/pynetbox-7.0.0/tests/test_tenancy.py
--- old/pynetbox-6.6.2/tests/test_tenancy.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/tests/test_tenancy.py 2022-12-09 18:53:22.000000000
+0100
@@ -1,14 +1,9 @@
import unittest
-import six
+from unittest.mock import patch
import pynetbox
from .util import Response
-if six.PY3:
- from unittest.mock import patch
-else:
- from mock import patch
-
api = pynetbox.api(
"http://localhost:8000",
@@ -19,7 +14,7 @@
HEADERS = {"accept": "application/json;"}
-class Generic(object):
+class Generic:
class Tests(unittest.TestCase):
name = ""
ret = pynetbox.core.response.Record
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/test_users.py
new/pynetbox-7.0.0/tests/test_users.py
--- old/pynetbox-6.6.2/tests/test_users.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/tests/test_users.py 2022-12-09 18:53:22.000000000
+0100
@@ -1,14 +1,9 @@
import unittest
-import six
+from unittest.mock import patch
import pynetbox
from .util import Response
-if six.PY3:
- from unittest.mock import patch
-else:
- from mock import patch
-
api = pynetbox.api(
"http://localhost:8000",
@@ -19,7 +14,7 @@
HEADERS = {"accept": "application/json;"}
-class Generic(object):
+class Generic:
class Tests(unittest.TestCase):
name = ""
ret = pynetbox.core.response.Record
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/test_virtualization.py
new/pynetbox-7.0.0/tests/test_virtualization.py
--- old/pynetbox-6.6.2/tests/test_virtualization.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/tests/test_virtualization.py 2022-12-09
18:53:22.000000000 +0100
@@ -1,14 +1,9 @@
import unittest
-import six
+from unittest.mock import patch
from .util import Response
import pynetbox
-if six.PY3:
- from unittest.mock import patch
-else:
- from mock import patch
-
api = pynetbox.api(
"http://localhost:8000",
@@ -19,7 +14,7 @@
HEADERS = {"accept": "application/json;"}
-class Generic(object):
+class Generic:
class Tests(unittest.TestCase):
name = ""
ret = pynetbox.core.response.Record
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/test_wireless.py
new/pynetbox-7.0.0/tests/test_wireless.py
--- old/pynetbox-6.6.2/tests/test_wireless.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/tests/test_wireless.py 2022-12-09 18:53:22.000000000
+0100
@@ -1,14 +1,9 @@
import unittest
-import six
+from unittest.mock import patch
import pynetbox
from .util import Response
-if six.PY3:
- from unittest.mock import patch
-else:
- from mock import patch
-
api = pynetbox.api("http://localhost:8000")
@@ -17,7 +12,7 @@
HEADERS = {"accept": "application/json;"}
-class Generic(object):
+class Generic:
class Tests(unittest.TestCase):
name = ""
ret = pynetbox.core.response.Record
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/unit/test_detailendpoint.py
new/pynetbox-7.0.0/tests/unit/test_detailendpoint.py
--- old/pynetbox-6.6.2/tests/unit/test_detailendpoint.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/tests/unit/test_detailendpoint.py 2022-12-09
18:53:22.000000000 +0100
@@ -1,20 +1,15 @@
import unittest
-
-import six
+from unittest.mock import patch
import pynetbox
-if six.PY3:
- from unittest.mock import patch
-else:
- from mock import patch
-
nb = pynetbox.api("http://localhost:8000")
class DetailEndpointTestCase(unittest.TestCase):
def test_detail_endpoint_create_single(self):
+ # Prefixes
with patch(
"pynetbox.core.query.Request._make_call",
return_value={"id": 123, "prefix": "1.2.3.0/24"},
@@ -27,8 +22,22 @@
):
ip_obj = prefix_obj.available_ips.create()
self.assertEqual(ip_obj.address, "1.2.3.1/24")
+ # IP Ranges
+ with patch(
+ "pynetbox.core.query.Request._make_call",
+ return_value={"id": 321, "display": "1.2.4.1-254/24"},
+ ):
+ ip_range_obj = nb.ipam.ip_ranges.get(321)
+ self.assertEqual(ip_range_obj.display, "1.2.4.1-254/24")
+ with patch(
+ "pynetbox.core.query.Request._make_call",
+ return_value={"address": "1.2.4.2/24"},
+ ):
+ ip_obj = ip_range_obj.available_ips.create()
+ self.assertEqual(ip_obj.address, "1.2.4.2/24")
def test_detail_endpoint_create_list(self):
+ # Prefixes
with patch(
"pynetbox.core.query.Request._make_call",
return_value={"id": 123, "prefix": "1.2.3.0/24"},
@@ -42,3 +51,17 @@
ip_list = prefix_obj.available_ips.create([{} for _ in range(2)])
self.assertTrue(isinstance(ip_list, list))
self.assertEqual(len(ip_list), 2)
+ # IP Ranges
+ with patch(
+ "pynetbox.core.query.Request._make_call",
+ return_value={"id": 321, "display": "1.2.4.1-254/24"},
+ ):
+ ip_range_obj = nb.ipam.ip_ranges.get(321)
+ self.assertEqual(ip_range_obj.display, "1.2.4.1-254/24")
+ with patch(
+ "pynetbox.core.query.Request._make_call",
+ return_value=[{"address": "1.2.4.2/24"}, {"address":
"1.2.4.3/24"}],
+ ):
+ ip_list = ip_range_obj.available_ips.create([{} for _ in range(2)])
+ self.assertTrue(isinstance(ip_list, list))
+ self.assertEqual(len(ip_list), 2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/unit/test_endpoint.py
new/pynetbox-7.0.0/tests/unit/test_endpoint.py
--- old/pynetbox-6.6.2/tests/unit/test_endpoint.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/tests/unit/test_endpoint.py 2022-12-09
18:53:22.000000000 +0100
@@ -1,14 +1,8 @@
import unittest
-
-import six
+from unittest.mock import patch, Mock
from pynetbox.core.endpoint import Endpoint
-if six.PY3:
- from unittest.mock import patch, Mock, call
-else:
- from mock import patch, Mock, call
-
class EndPointTestCase(unittest.TestCase):
def test_filter(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/unit/test_extras.py
new/pynetbox-7.0.0/tests/unit/test_extras.py
--- old/pynetbox-6.6.2/tests/unit/test_extras.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/tests/unit/test_extras.py 2022-12-09
18:53:22.000000000 +0100
@@ -1,7 +1,5 @@
import unittest
-import six
-
from pynetbox.models.extras import ConfigContexts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/unit/test_query.py
new/pynetbox-7.0.0/tests/unit/test_query.py
--- old/pynetbox-6.6.2/tests/unit/test_query.py 2022-04-18 05:28:33.000000000
+0200
+++ new/pynetbox-7.0.0/tests/unit/test_query.py 2022-12-09 18:53:22.000000000
+0100
@@ -1,14 +1,8 @@
import unittest
-
-import six
+from unittest.mock import Mock, call
from pynetbox.core.query import Request
-if six.PY3:
- from unittest.mock import Mock, call
-else:
- from mock import Mock, call
-
class RequestTestCase(unittest.TestCase):
def test_get_count(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/unit/test_request.py
new/pynetbox-7.0.0/tests/unit/test_request.py
--- old/pynetbox-6.6.2/tests/unit/test_request.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/tests/unit/test_request.py 2022-12-09
18:53:22.000000000 +0100
@@ -1,14 +1,8 @@
import unittest
-
-import six
+from unittest.mock import Mock
from pynetbox.core.query import Request
-if six.PY3:
- from unittest.mock import Mock
-else:
- from mock import Mock
-
class RequestTestCase(unittest.TestCase):
def test_get_openapi(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/unit/test_response.py
new/pynetbox-7.0.0/tests/unit/test_response.py
--- old/pynetbox-6.6.2/tests/unit/test_response.py 2022-04-18
05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/tests/unit/test_response.py 2022-12-09
18:53:22.000000000 +0100
@@ -1,15 +1,9 @@
import unittest
-
-import six
+from unittest.mock import patch, Mock
from pynetbox.core.response import Record, RecordSet
from pynetbox.core.endpoint import Endpoint
-if six.PY3:
- from unittest.mock import patch, Mock, call
-else:
- from mock import patch, Mock, call
-
class RecordTestCase(unittest.TestCase):
def test_attribute_access(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynetbox-6.6.2/tests/util.py
new/pynetbox-7.0.0/tests/util.py
--- old/pynetbox-6.6.2/tests/util.py 2022-04-18 05:28:33.000000000 +0200
+++ new/pynetbox-7.0.0/tests/util.py 2022-12-09 18:53:22.000000000 +0100
@@ -1,7 +1,7 @@
import json
-class Response(object):
+class Response:
def __init__(self, fixture=None, status_code=200, ok=True, content=None):
self.status_code = status_code
self.content = json.dumps(content) if content else
self.load_fixture(fixture)