Repository: nautobot/nautobot-plugin-ssot-arista-cloudvision (language: python)

Issue:
Updated fix for the get device tags function
This PR is to fix the [issue](https://github.com/nautobot/nautobot-plugin-ssot-arista-cloudvision/issues/159) with retrieving tags with tag.v2. Arista support confirmed that the path `TagAssignmentConfigService` will only return user-assigned tags and will not return system-assigned device tags. I have swapped this to use the path `TagAssignmentService`.

workspace_id is the ID of a workspace. The special ID "" identifies the location where merged assignments reside.

From the documentation

> TagAssignment holds a merge-preview or the existing merged state (if the workspace ID is “”) of an assignment between a tag and a network element.

https://aristanetworks.github.io/cloudvision-apis/models/tag.v2/#arista.tag.v2.TagAssignmentService 


Discussion / hints:

Fix patch:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bdb1cba..92c894d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -116,7 +116,7 @@ jobs:
     strategy:
       fail-fast: true
       matrix:
-        python-version: ["3.7", "3.8", "3.9", "3.10"]
+        python-version: ["3.8", "3.9", "3.10"]
         nautobot-version: ["1.4.2", "latest"]
     runs-on: "ubuntu-20.04"
     env:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6c5b158..25b1f18 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog
 
+## v1.6.1 - 2023-09-14
+
+### Fixed
+
+- #164 - Update fix for Device Tag retrieval.
+
 ## v1.6.0 - 2023-04-26
 
 ### Added
diff --git a/development/docker-compose.base.yml b/development/docker-compose.base.yml
index e7bf030..6b7bac7 100644
--- a/development/docker-compose.base.yml
+++ b/development/docker-compose.base.yml
@@ -23,8 +23,7 @@ services:
     depends_on:
       - "postgres"
       - "redis"
-    <<: *nautobot-build
-    <<: *nautobot-base
+    <<: [*nautobot-build, *nautobot-base]
   worker:
     entrypoint: "nautobot-server rqworker"
     depends_on:
diff --git a/nautobot_ssot_aristacv/utils/cloudvision.py b/nautobot_ssot_aristacv/utils/cloudvision.py
index 90d2ea5..6ee43f6 100644
--- a/nautobot_ssot_aristacv/utils/cloudvision.py
+++ b/nautobot_ssot_aristacv/utils/cloudvision.py
@@ -308,12 +308,14 @@ def get_tags_by_type(client, creator_type: int = tag_models.CREATOR_TYPE_USER):
 
 def get_device_tags(client, device_id: str):
     """Get tags for specific device."""
-    tag_stub = tag_services.TagAssignmentConfigServiceStub(client)
+    tag_stub = tag_services.TagAssignmentServiceStub(client)
     req = tag_services.TagAssignmentConfigStreamRequest(
         partial_eq_filter=[
             tag_models.TagAssignmentConfig(
                 key=tag_models.TagAssignmentKey(
                     device_id=StringValue(value=device_id),
+                    element_type=tag_models.ELEMENT_TYPE_DEVICE,
+                    workspace_id=StringValue(value=""),
                 )
             )
         ]
diff --git a/poetry.lock b/poetry.lock
index 9d58490..5189339 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,10 +1,9 @@
-# This file is automatically @generated by Poetry and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
 
 [[package]]
 name = "amqp"
 version = "5.1.1"
 description = "Low-level AMQP client for Python (fork of amqplib)."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -19,7 +18,6 @@ vine = ">=5.0.0"
 name = "aniso8601"
 version = "7.0.0"
 description = "A library for parsing ISO 8601 strings."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -31,7 +29,6 @@ files = [
 name = "asgiref"
 version = "3.6.0"
 description = "ASGI specs, helper code, and adapters"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -49,7 +46,6 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"]
 name = "astroid"
 version = "2.11.7"
 description = "An abstract syntax tree for Python with inference support."
-category = "dev"
 optional = false
 python-versions = ">=3.6.2"
 files = [
@@ -68,7 +64,6 @@ wrapt = ">=1.11,<2"
 name = "async-timeout"
 version = "4.0.2"
 description = "Timeout context manager for asyncio programs"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -83,7 +78,6 @@ typing-extensions = {version = ">=3.6.5", markers = "python_version < \"3.8\""}
 name = "attrs"
 version = "23.1.0"
 description = "Classes Without Boilerplate"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -105,7 +99,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte
 name = "bandit"
 version = "1.7.5"
 description = "Security oriented static analyser for python code."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -129,7 +122,6 @@ yaml = ["PyYAML"]
 name = "billiard"
 version = "3.6.4.0"
 description = "Python multiprocessing fork with improvements and bugfixes"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -141,7 +133,6 @@ files = [
 name = "black"
 version = "22.12.0"
 description = "The uncompromising code formatter."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -178,7 +169,6 @@ uvloop = ["uvloop (>=0.15.2)"]
 name = "cached-property"
 version = "1.5.2"
 description = "A decorator for caching properties in classes."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -190,7 +180,6 @@ files = [
 name = "celery"
 version = "5.2.7"
 description = "Distributed Task Queue."
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -246,7 +235,6 @@ zstd = ["zstandard"]
 name = "certifi"
 version = "2022.12.7"
 description = "Python package for providing Mozilla's CA Bundle."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -258,7 +246,6 @@ files = [
 name = "cffi"
 version = "1.15.1"
 description = "Foreign Function Interface for Python calling C code."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -335,7 +322,6 @@ pycparser = "*"
 name = "charset-normalizer"
 version = "3.1.0"
 description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
-category = "main"
 optional = false
 python-versions = ">=3.7.0"
 files = [
@@ -420,7 +406,6 @@ files = [
 name = "click"
 version = "8.1.3"
 description = "Composable command line interface toolkit"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -436,7 +421,6 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
 name = "click-didyoumean"
 version = "0.3.0"
 description = "Enables git-like *did-you-mean* feature in click"
-category = "main"
 optional = false
 python-versions = ">=3.6.2,<4.0.0"
 files = [
@@ -451,7 +435,6 @@ click = ">=7"
 name = "click-plugins"
 version = "1.1.1"
 description = "An extension module for click to enable registering CLI commands via setuptools entry-points."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -469,7 +452,6 @@ dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"]
 name = "click-repl"
 version = "0.2.0"
 description = "REPL plugin for Click"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -486,7 +468,6 @@ six = "*"
 name = "cloudvision"
 version = "1.9.1"
 description = "A Python library for Arista's CloudVision APIs."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -509,7 +490,6 @@ typing-extensions = ">=4.2.0"
 name = "colorama"
 version = "0.4.6"
 description = "Cross-platform colored terminal text."
-category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
 files = [
@@ -521,7 +501,6 @@ files = [
 name = "coreapi"
 version = "2.3.3"
 description = "Python client library for Core API."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -539,7 +518,6 @@ uritemplate = "*"
 name = "coreschema"
 version = "0.0.4"
 description = "Core Schema."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -554,7 +532,6 @@ jinja2 = "*"
 name = "coverage"
 version = "7.2.3"
 description = "Code coverage measurement for Python"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -618,7 +595,6 @@ toml = ["tomli"]
 name = "cryptography"
 version = "39.0.2"
 description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -664,7 +640,6 @@ tox = ["tox"]
 name = "cvprac"
 version = "1.3.1"
 description = "Arista Cloudvision(R) Portal Rest API Client written in python"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -681,7 +656,6 @@ dev = ["check-manifest", "coverage", "pep8", "pyflakes", "pylint", "pyyaml"]
 name = "cycler"
 version = "0.11.0"
 description = "Composable style cycles"
-category = "dev"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -693,7 +667,6 @@ files = [
 name = "defusedxml"
 version = "0.7.1"
 description = "XML bomb protection for Python stdlib modules"
-category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -705,7 +678,6 @@ files = [
 name = "diffsync"
 version = "1.8.0"
 description = "Library to easily sync/diff/update 2 different data sources"
-category = "main"
 optional = false
 python-versions = ">=3.7,<4.0"
 files = [
@@ -726,7 +698,6 @@ redis = ["redis (>=4.3,<5.0)"]
 name = "dill"
 version = "0.3.6"
 description = "serialize all of python"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -741,7 +712,6 @@ graph = ["objgraph (>=1.7.2)"]
 name = "django"
 version = "3.2.18"
 description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -762,7 +732,6 @@ bcrypt = ["bcrypt"]
 name = "django-ajax-tables"
 version = "1.1.1"
 description = "Django tag for ajax-enabled tables"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -774,7 +743,6 @@ files = [
 name = "django-appconf"
 version = "1.0.5"
 description = "A helper class for handling configuration defaults of packaged apps gracefully."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -789,7 +757,6 @@ django = "*"
 name = "django-cacheops"
 version = "6.0"
 description = "A slick ORM cache with automatic granular event-driven invalidation for Django."
-category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -807,7 +774,6 @@ six = ">=1.4.0"
 name = "django-celery-beat"
 version = "2.2.1"
 description = "Database-backed Periodic Tasks."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -825,7 +791,6 @@ python-crontab = ">=2.3.4"
 name = "django-constance"
 version = "2.9.1"
 description = "Django live settings with pluggable backends, including Redis."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -844,7 +809,6 @@ redis = ["redis"]
 name = "django-cors-headers"
 version = "3.13.0"
 description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)."
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -859,7 +823,6 @@ Django = ">=3.2"
 name = "django-cryptography"
 version = "1.0"
 description = "Easily encrypt data in Django"
-category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -875,7 +838,6 @@ django-appconf = "*"
 name = "django-db-file-storage"
 version = "0.5.5"
 description = "Custom FILE_STORAGE for Django. Saves files in your database instead of your file system."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -889,7 +851,6 @@ Django = "*"
 name = "django-debug-toolbar"
 version = "3.8.1"
 description = "A configurable set of panels that display various debug information about the current request/response."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -905,7 +866,6 @@ sqlparse = ">=0.2"
 name = "django-extensions"
 version = "3.2.1"
 description = "Extensions for Django"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -920,7 +880,6 @@ Django = ">=3.2"
 name = "django-filter"
 version = "21.1"
 description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -935,7 +894,6 @@ Django = ">=2.2"
 name = "django-health-check"
 version = "3.16.5"
 description = "Run checks on services like databases, queue servers, celery processes, etc."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -950,7 +908,6 @@ django = ">=2.2"
 name = "django-jinja"
 version = "2.10.2"
 description = "Jinja2 templating language integrated in Django."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -966,7 +923,6 @@ jinja2 = ">=3"
 name = "django-js-asset"
 version = "2.0.0"
 description = "script tag with additional attributes for django.forms.Media"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -984,7 +940,6 @@ tests = ["coverage"]
 name = "django-mptt"
 version = "0.14.0"
 description = "Utilities for implementing Modified Preorder Tree Traversal with your Django Models and working with trees of Model instances."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1002,7 +957,6 @@ tests = ["coverage", "mock-django"]
 name = "django-picklefield"
 version = "3.1"
 description = "Pickled object field for Django"
-category = "main"
 optional = false
 python-versions = ">=3"
 files = [
@@ -1020,7 +974,6 @@ tests = ["tox"]
 name = "django-prometheus"
 version = "2.2.0"
 description = "Django middlewares to monitor your application with Prometheus.io."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1035,7 +988,6 @@ prometheus-client = ">=0.7"
 name = "django-redis"
 version = "5.2.0"
 description = "Full featured redis cache backend for Django."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1054,7 +1006,6 @@ hiredis = ["redis[hiredis] (>=3,!=4.0.0,!=4.0.1)"]
 name = "django-rq"
 version = "2.5.1"
 description = "An app that provides django integration for RQ (Redis Queue)"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1075,7 +1026,6 @@ testing = ["mock (>=2.0.0)"]
 name = "django-tables2"
 version = "2.4.1"
 description = "Table/data-grid framework for Django"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1093,7 +1043,6 @@ tablib = ["tablib"]
 name = "django-taggit"
 version = "3.0.0"
 description = "django-taggit is a reusable Django application for simple tagging."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1108,7 +1057,6 @@ Django = ">=3.2"
 name = "django-timezone-field"
 version = "4.1.2"
 description = "A Django app providing database and form fields for pytz timezone objects."
-category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -1127,7 +1075,6 @@ rest-framework = ["djangorestframework (>=3.0.0)"]
 name = "django-tree-queries"
 version = "0.11.0"
 description = "Tree queries with explicit opt-in, without configurability"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1142,7 +1089,6 @@ tests = ["coverage"]
 name = "django-webserver"
 version = "1.2.0"
 description = "Django management commands for production webservers"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1164,7 +1110,6 @@ waitress = ["waitress"]
 name = "djangorestframework"
 version = "3.14.0"
 description = "Web APIs for Django, made easy."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1180,7 +1125,6 @@ pytz = "*"
 name = "drf-spectacular"
 version = "0.24.2"
 description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1206,7 +1150,6 @@ sidecar = ["drf-spectacular-sidecar"]
 name = "drf-spectacular-sidecar"
 version = "2023.4.1"
 description = "Serve self-contained distribution builds of Swagger UI and Redoc with Django"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1221,7 +1164,6 @@ Django = ">=2.2"
 name = "drf-yasg"
 version = "1.21.5"
 description = "Automated generation of real Swagger/OpenAPI 2.0 schemas from Django Rest Framework code."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1248,7 +1190,6 @@ validation = ["swagger-spec-validator (>=2.1.0)"]
 name = "flake8"
 version = "3.9.2"
 description = "the modular source code checker: pep8 pyflakes and co"
-category = "dev"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
 files = [
@@ -1266,7 +1207,6 @@ pyflakes = ">=2.3.0,<2.4.0"
 name = "fonttools"
 version = "4.38.0"
 description = "Tools to manipulate font files"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1292,7 +1232,6 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"]
 name = "funcy"
 version = "1.18"
 description = "A fancy and practical functional tools"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1304,7 +1243,6 @@ files = [
 name = "ghp-import"
 version = "2.1.0"
 description = "Copy your docs directly to the gh-pages branch."
-category = "dev"
 optional = false
 python-versions = "*"
 files = [
@@ -1322,7 +1260,6 @@ dev = ["flake8", "markdown", "twine", "wheel"]
 name = "gitdb"
 version = "4.0.10"
 description = "Git Object Database"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1337,7 +1274,6 @@ smmap = ">=3.0.1,<6"
 name = "gitpython"
 version = "3.1.31"
 description = "GitPython is a Python library used to interact with Git repositories"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1353,7 +1289,6 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""
 name = "graphene"
 version = "2.1.9"
 description = "GraphQL Framework for Python"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1376,7 +1311,6 @@ test = ["coveralls", "fastdiff (==0.2.0)", "iso8601", "mock", "promise", "pytest
 name = "graphene-django"
 version = "2.15.0"
 description = "Graphene Django integration"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1402,7 +1336,6 @@ test = ["coveralls", "django-filter (<2)", "django-filter (>=2)", "djangorestfra
 name = "graphene-django-optimizer"
 version = "0.8.0"
 description = "Optimize database access inside graphene queries."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1413,7 +1346,6 @@ files = [
 name = "graphql-core"
 version = "2.3.2"
 description = "GraphQL implementation for Python"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1434,7 +1366,6 @@ test = ["coveralls (==1.11.1)", "cython (==0.29.17)", "gevent (==1.5.0)", "pyann
 name = "graphql-relay"
 version = "2.0.1"
 description = "Relay implementation for Python"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1451,7 +1382,6 @@ six = ">=1.12"
 name = "grpcio"
 version = "1.54.0"
 description = "HTTP/2-based RPC framework"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1509,7 +1439,6 @@ protobuf = ["grpcio-tools (>=1.54.0)"]
 name = "idna"
 version = "3.4"
 description = "Internationalized Domain Names in Applications (IDNA)"
-category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -1521,7 +1450,6 @@ files = [
 name = "importlib-metadata"
 version = "4.13.0"
 description = "Read metadata from Python packages"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1542,7 +1470,6 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag
 name = "importlib-resources"
 version = "5.12.0"
 description = "Read resources from Python packages"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1561,7 +1488,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec
 name = "inflection"
 version = "0.5.1"
 description = "A port of Ruby on Rails inflector to Python"
-category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -1573,7 +1499,6 @@ files = [
 name = "invoke"
 version = "2.0.0"
 description = "Pythonic task execution"
-category = "dev"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1585,7 +1510,6 @@ files = [
 name = "isort"
 version = "5.11.5"
 description = "A Python utility / library to sort Python imports."
-category = "dev"
 optional = false
 python-versions = ">=3.7.0"
 files = [
@@ -1603,7 +1527,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"]
 name = "itypes"
 version = "1.2.0"
 description = "Simple immutable types for python."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1615,7 +1538,6 @@ files = [
 name = "jinja2"
 version = "3.1.2"
 description = "A very fast and expressive template engine."
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1633,7 +1555,6 @@ i18n = ["Babel (>=2.7)"]
 name = "jsonschema"
 version = "4.7.2"
 description = "An implementation of JSON Schema validation for Python"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1656,7 +1577,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-
 name = "kiwisolver"
 version = "1.4.4"
 description = "A fast implementation of the Cassowary constraint solver"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1737,7 +1657,6 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
 name = "kombu"
 version = "5.2.4"
 description = "Messaging library for Python."
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1771,7 +1690,6 @@ zookeeper = ["kazoo (>=1.3.1)"]
 name = "lazy-object-proxy"
 version = "1.9.0"
 description = "A fast and thorough lazy object proxy."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1817,7 +1735,6 @@ files = [
 name = "markdown"
 version = "3.3.7"
 description = "Python implementation of Markdown."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1835,7 +1752,6 @@ testing = ["coverage", "pyyaml"]
 name = "markdown-include"
 version = "0.8.1"
 description = "A Python-Markdown extension which provides an 'include' function"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1853,7 +1769,6 @@ tests = ["pytest"]
 name = "markdown-it-py"
 version = "2.2.0"
 description = "Python port of markdown-it. Markdown parsing, done right!"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1879,7 +1794,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
 name = "markupsafe"
 version = "2.1.2"
 description = "Safely add untrusted strings to HTML/XML markup."
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1939,7 +1853,6 @@ files = [
 name = "matplotlib"
 version = "3.5.3"
 description = "Python plotting package"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1994,7 +1907,6 @@ python-dateutil = ">=2.7"
 name = "mccabe"
 version = "0.6.1"
 description = "McCabe checker, plugin for flake8"
-category = "dev"
 optional = false
 python-versions = "*"
 files = [
@@ -2006,7 +1918,6 @@ files = [
 name = "mdurl"
 version = "0.1.2"
 description = "Markdown URL utilities"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2018,7 +1929,6 @@ files = [
 name = "mergedeep"
 version = "1.3.4"
 description = "A deep merge function for 🐍."
-category = "dev"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2030,7 +1940,6 @@ files = [
 name = "mkdocs"
 version = "1.4.2"
 description = "Project documentation with Markdown."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2060,7 +1969,6 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp
 name = "msgpack"
 version = "1.0.5"
 description = "MessagePack serializer"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2133,7 +2041,6 @@ files = [
 name = "mypy-extensions"
 version = "1.0.0"
 description = "Type system extensions for programs checked with the mypy type checker."
-category = "dev"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -2145,7 +2052,6 @@ files = [
 name = "nautobot"
 version = "1.5.16"
 description = "Source of truth and network automation platform."
-category = "main"
 optional = false
 python-versions = ">=3.7,<4.0"
 files = [
@@ -2210,7 +2116,6 @@ sso = ["social-auth-core[openidconnect,saml] (>=4.3.0,<4.4.0)"]
 name = "nautobot-device-lifecycle-mgmt"
 version = "1.2.0"
 description = "Manages device lifecycles for platforms and software."
-category = "dev"
 optional = false
 python-versions = ">=3.7,<4.0"
 files = [
@@ -2225,27 +2130,28 @@ pycountry = ">=22.3.5,<23.0.0"
 
 [[package]]
 name = "nautobot-ssot"
-version = "1.2.0"
+version = "1.3.2"
 description = "Nautobot Single Source of Truth"
-category = "main"
 optional = false
 python-versions = ">=3.7,<4.0"
 files = [
-    {file = "nautobot-ssot-1.2.0.tar.gz", hash = "sha256:f6e8eaed3795669f311adeb3ddb73c87458f7890b392540421776dfb9958f4d4"},
-    {file = "nautobot_ssot-1.2.0-py3-none-any.whl", hash = "sha256:2f5005662a1f0e2d8bd6a976db74ace1eadc16e950de1f946204c0ed45e3f5f1"},
+    {file = "nautobot_ssot-1.3.2-py3-none-any.whl", hash = "sha256:fecfbf782b1b395b67accdff5b8cd999d7f245f833562dfa18561f477c4b644f"},
+    {file = "nautobot_ssot-1.3.2.tar.gz", hash = "sha256:c3ea4d97f7593f2b08affe1ab97419d4cc33af31a97e884611757792d5062e06"},
 ]
 
 [package.dependencies]
 diffsync = ">=1.6.0,<2.0.0"
 Markdown = "!=3.3.5"
-nautobot = "*"
-packaging = ">=21.3,<22.0"
+packaging = ">=21.3,<24"
+prometheus-client = ">=0.14.1,<0.15.0"
+
+[package.extras]
+nautobot = ["nautobot (>=1.4.0,<2.0.0)"]
 
 [[package]]
 name = "netaddr"
 version = "0.8.0"
 description = "A network address manipulation library for Python"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2257,7 +2163,6 @@ files = [
 name = "netutils"
 version = "1.4.1"
 description = "Common helper functions useful in network automation."
-category = "main"
 optional = false
 python-versions = ">=3.7,<4.0"
 files = [
@@ -2272,7 +2177,6 @@ optionals = ["napalm (>=4.0.0,<5.0.0)"]
 name = "numpy"
 version = "1.21.1"
 description = "NumPy is the fundamental package for array computing with Python."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2310,7 +2214,6 @@ files = [
 name = "oauthlib"
 version = "3.2.2"
 description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2327,7 +2230,6 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
 name = "packaging"
 version = "21.3"
 description = "Core utilities for Python packages"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2342,7 +2244,6 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
 name = "parameterized"
 version = "0.8.1"
 description = "Parameterized testing with any Python test framework"
-category = "dev"
 optional = false
 python-versions = "*"
 files = [
@@ -2357,7 +2258,6 @@ dev = ["jinja2"]
 name = "pathspec"
 version = "0.11.1"
 description = "Utility library for gitignore style pattern matching of file paths."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2369,7 +2269,6 @@ files = [
 name = "pbr"
 version = "5.11.1"
 description = "Python Build Reasonableness"
-category = "dev"
 optional = false
 python-versions = ">=2.6"
 files = [
@@ -2381,7 +2280,6 @@ files = [
 name = "pillow"
 version = "9.3.0"
 description = "Python Imaging Library (Fork)"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2456,7 +2354,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
 name = "platformdirs"
 version = "3.3.0"
 description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2475,7 +2372,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-
 name = "prometheus-client"
 version = "0.14.1"
 description = "Python client for the Prometheus monitoring system."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2490,7 +2386,6 @@ twisted = ["twisted"]
 name = "promise"
 version = "2.3"
 description = "Promises/A+ implementation for Python"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2507,7 +2402,6 @@ test = ["coveralls", "futures", "mock", "pytest (>=2.7.3)", "pytest-benchmark",
 name = "prompt-toolkit"
 version = "3.0.38"
 description = "Library for building powerful interactive command lines in Python"
-category = "main"
 optional = false
 python-versions = ">=3.7.0"
 files = [
@@ -2522,7 +2416,6 @@ wcwidth = "*"
 name = "protobuf"
 version = "3.20.3"
 description = "Protocol Buffers"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2554,7 +2447,6 @@ files = [
 name = "psycopg2-binary"
 version = "2.9.6"
 description = "psycopg2 - Python-PostgreSQL Database Adapter"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2626,7 +2518,6 @@ files = [
 name = "pycodestyle"
 version = "2.7.0"
 description = "Python style guide checker"
-category = "dev"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -2638,7 +2529,6 @@ files = [
 name = "pycountry"
 version = "22.3.5"
 description = "ISO country, subdivision, language, currency and script definitions and their translations"
-category = "dev"
 optional = false
 python-versions = ">=3.6, <4"
 files = [
@@ -2652,7 +2542,6 @@ setuptools = "*"
 name = "pycparser"
 version = "2.21"
 description = "C parser in Python"
-category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -2664,7 +2553,6 @@ files = [
 name = "pycryptodome"
 version = "3.13.0"
 description = "Cryptographic library for Python"
-category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -2704,7 +2592,6 @@ files = [
 name = "pydantic"
 version = "1.10.7"
 description = "Data validation and settings management using python type hints"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2757,7 +2644,6 @@ email = ["email-validator (>=1.0.3)"]
 name = "pydocstyle"
 version = "6.3.0"
 description = "Python docstring style checker"
-category = "dev"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2776,7 +2662,6 @@ toml = ["tomli (>=1.2.3)"]
 name = "pyflakes"
 version = "2.3.1"
 description = "passive checker of Python programs"
-category = "dev"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -2788,7 +2673,6 @@ files = [
 name = "pygments"
 version = "2.15.1"
 description = "Pygments is a syntax highlighting package written in Python."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2803,7 +2687,6 @@ plugins = ["importlib-metadata"]
 name = "pyjwt"
 version = "2.6.0"
 description = "JSON Web Token implementation in Python"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2821,7 +2704,6 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"]
 name = "pylint"
 version = "2.13.9"
 description = "python code static checker"
-category = "dev"
 optional = false
 python-versions = ">=3.6.2"
 files = [
@@ -2846,7 +2728,6 @@ testutil = ["gitpython (>3)"]
 name = "pylint-django"
 version = "2.5.3"
 description = "A Pylint plugin to help Pylint understand the Django web framework"
-category = "dev"
 optional = false
 python-versions = "*"
 files = [
@@ -2866,7 +2747,6 @@ with-django = ["Django"]
 name = "pylint-plugin-utils"
 version = "0.7"
 description = "Utilities and helpers for writing Pylint plugins"
-category = "dev"
 optional = false
 python-versions = ">=3.6.2"
 files = [
@@ -2881,7 +2761,6 @@ pylint = ">=1.7"
 name = "pyparsing"
 version = "3.0.9"
 description = "pyparsing module - Classes and methods to define and execute parsing grammars"
-category = "main"
 optional = false
 python-versions = ">=3.6.8"
 files = [
@@ -2896,7 +2775,6 @@ diagrams = ["jinja2", "railroad-diagrams"]
 name = "pyrsistent"
 version = "0.19.3"
 description = "Persistent/Functional/Immutable data structures"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2933,7 +2811,6 @@ files = [
 name = "pysocks"
 version = "1.7.1"
 description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information."
-category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -2946,7 +2823,6 @@ files = [
 name = "python-crontab"
 version = "2.7.1"
 description = "Python Crontab API"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2965,7 +2841,6 @@ cron-schedule = ["croniter"]
 name = "python-dateutil"
 version = "2.8.2"
 description = "Extensions to the standard Python datetime module"
-category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
 files = [
@@ -2980,7 +2855,6 @@ six = ">=1.5"
 name = "python3-openid"
 version = "3.2.0"
 description = "OpenID support for modern servers and consumers."
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2999,7 +2873,6 @@ postgresql = ["psycopg2"]
 name = "pytz"
 version = "2023.3"
 description = "World timezone definitions, modern and historical"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3011,7 +2884,6 @@ files = [
 name = "pyuwsgi"
 version = "2.0.21"
 description = "The uWSGI server"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3057,7 +2929,6 @@ files = [
 name = "pyyaml"
 version = "6.0"
 description = "YAML parser and emitter for Python"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3107,7 +2978,6 @@ files = [
 name = "pyyaml-env-tag"
 version = "0.1"
 description = "A custom YAML tag for referencing environment variables in YAML files. "
-category = "dev"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3122,7 +2992,6 @@ pyyaml = "*"
 name = "redis"
 version = "4.5.4"
 description = "Python client for Redis database and key-value store"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3143,7 +3012,6 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"
 name = "requests"
 version = "2.28.2"
 description = "Python HTTP for Humans."
-category = "main"
 optional = false
 python-versions = ">=3.7, <4"
 files = [
@@ -3166,7 +3034,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
 name = "requests-oauthlib"
 version = "1.3.1"
 description = "OAuthlib authentication support for Requests."
-category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -3185,7 +3052,6 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"]
 name = "rich"
 version = "13.3.4"
 description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-category = "dev"
 optional = false
 python-versions = ">=3.7.0"
 files = [
@@ -3205,7 +3071,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
 name = "rq"
 version = "1.13.0"
 description = "RQ is a simple, lightweight, library for creating background jobs, and processing them."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3221,7 +3086,6 @@ redis = ">=3.5.0"
 name = "ruamel-yaml"
 version = "0.17.21"
 description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order"
-category = "main"
 optional = false
 python-versions = ">=3"
 files = [
@@ -3240,7 +3104,6 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"]
 name = "ruamel-yaml-clib"
 version = "0.2.7"
 description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml"
-category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -3251,8 +3114,11 @@ files = [
     {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"},
     {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"},
     {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"},
-    {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"},
+    {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81"},
+    {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf"},
     {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"},
+    {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"},
+    {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"},
     {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"},
     {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"},
     {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"},
@@ -3284,7 +3150,6 @@ files = [
 name = "rx"
 version = "1.6.3"
 description = "Reactive Extensions (Rx) for Python"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3295,7 +3160,6 @@ files = [
 name = "setuptools"
 version = "67.7.2"
 description = "Easily download, build, install, upgrade, and uninstall Python packages"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3312,7 +3176,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (
 name = "singledispatch"
 version = "4.0.0"
 description = "Backport functools.singledispatch to older Pythons."
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3328,7 +3191,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec
 name = "six"
 version = "1.16.0"
 description = "Python 2 and 3 compatibility utilities"
-category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
 files = [
@@ -3340,7 +3202,6 @@ files = [
 name = "smmap"
 version = "5.0.0"
 description = "A pure Python implementation of a sliding window memory map manager"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3352,7 +3213,6 @@ files = [
 name = "snowballstemmer"
 version = "2.2.0"
 description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
-category = "dev"
 optional = false
 python-versions = "*"
 files = [
@@ -3364,7 +3224,6 @@ files = [
 name = "social-auth-app-django"
 version = "5.0.0"
 description = "Python Social Authentication, Django integration."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3379,7 +3238,6 @@ social-auth-core = ">=4.1.0"
 name = "social-auth-core"
 version = "4.4.2"
 description = "Python social authentication made simple."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3407,7 +3265,6 @@ saml = ["python3-saml (>=1.5.0)"]
 name = "sqlparse"
 version = "0.4.4"
 description = "A non-validating SQL parser."
-category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -3424,7 +3281,6 @@ test = ["pytest", "pytest-cov"]
 name = "stevedore"
 version = "3.5.2"
 description = "Manage dynamic plugins for Python applications"
-category = "dev"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3440,7 +3296,6 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0"
 name = "structlog"
 version = "22.3.0"
 description = "Structured Logging for Python"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3462,7 +3317,6 @@ typing = ["mypy", "rich", "twisted"]
 name = "svgwrite"
 version = "1.4.3"
 description = "A Python library to create SVG drawings."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3474,7 +3328,6 @@ files = [
 name = "swagger-spec-validator"
 version = "3.0.3"
 description = "Validation of Swagger specifications"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3491,7 +3344,6 @@ typing-extensions = "*"
 name = "text-unidecode"
 version = "1.3"
 description = "The most basic Text::Unidecode port"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3503,7 +3355,6 @@ files = [
 name = "tomli"
 version = "2.0.1"
 description = "A lil' TOML parser"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3515,7 +3366,6 @@ files = [
 name = "typed-ast"
 version = "1.5.4"
 description = "a fork of Python 2 and 3 ast modules with type comment support"
-category = "dev"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3549,7 +3399,6 @@ files = [
 name = "types-protobuf"
 version = "3.20.4.6"
 description = "Typing stubs for protobuf"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3561,7 +3410,6 @@ files = [
 name = "types-pyyaml"
 version = "6.0.12.9"
 description = "Typing stubs for PyYAML"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3573,7 +3421,6 @@ files = [
 name = "types-requests"
 version = "2.28.11.17"
 description = "Typing stubs for requests"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3588,7 +3435,6 @@ types-urllib3 = "<1.27"
 name = "types-urllib3"
 version = "1.26.25.10"
 description = "Typing stubs for urllib3"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3600,7 +3446,6 @@ files = [
 name = "typing-extensions"
 version = "4.5.0"
 description = "Backported and Experimental Type Hints for Python 3.7+"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3612,7 +3457,6 @@ files = [
 name = "uritemplate"
 version = "4.1.1"
 description = "Implementation of RFC 6570 URI Templates"
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3624,7 +3468,6 @@ files = [
 name = "urllib3"
 version = "1.26.15"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
 files = [
@@ -3641,7 +3484,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
 name = "vine"
 version = "5.0.0"
 description = "Promises, promises, promises."
-category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3653,7 +3495,6 @@ files = [
 name = "watchdog"
 version = "3.0.0"
 description = "Filesystem events monitoring"
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3693,7 +3534,6 @@ watchmedo = ["PyYAML (>=3.10)"]
 name = "wcwidth"
 version = "0.2.6"
 description = "Measures the displayed width of unicode strings in a terminal"
-category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3705,7 +3545,6 @@ files = [
 name = "wrapt"
 version = "1.15.0"
 description = "Module for decorators, wrappers and monkey patching."
-category = "dev"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
 files = [
@@ -3790,7 +3629,6 @@ files = [
 name = "yamllint"
 version = "1.31.0"
 description = "A linter for YAML files."
-category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3809,7 +3647,6 @@ dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"]
 name = "zipp"
 version = "3.15.0"
 description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3828,4 +3665,4 @@ nautobot-device-lifecycle-mgmt = []
 [metadata]
 lock-version = "2.0"
 python-versions = "^3.7"
-content-hash = "ec0122f77398425efe1f42a7d68bcedf78399feba67691b49b530ee0c884fc1d"
+content-hash = "06d0a80262fbe6ecbc6e47a32eab8880b8daf7c93785353720513e4b28d3c79f"
diff --git a/pyproject.toml b/pyproject.toml
index 4f3467e..6d41046 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "nautobot-ssot-aristacv"
-version = "1.6.0"
+version = "1.6.1"
 description = "Nautobot SSoT Arista CloudVision"
 authors = ["Network to Code, LLC <info@networktocode.com>"]
 
@@ -21,7 +21,7 @@ packages = [
 [tool.poetry.dependencies]
 python = "^3.7"
 nautobot = "^1.4.0"
-nautobot-ssot = "^1.0.1"
+nautobot-ssot = "1.3.2"
 cloudvision = "^1.9.0"
 cvprac = "^1.2.2"
 
diff --git a/tasks.py b/tasks.py
index 2b52433..f21de11 100644
--- a/tasks.py
+++ b/tasks.py
@@ -40,7 +40,7 @@ def is_truthy(arg):
         "nautobot_ssot_aristacv": {
             "nautobot_ver": "1.4.0",
             "project_name": "nautobot-ssot-aristacv",
-            "python_ver": "3.7",
+            "python_ver": "3.8",
             "local": False,
             "compose_dir": os.path.join(os.path.dirname(__file__), "development"),
             "compose_files": [


Test patch:
diff --git a/nautobot_ssot_aristacv/tests/test_utils_cloudvision.py b/nautobot_ssot_aristacv/tests/test_utils_cloudvision.py
index 20714a2..492c0c6 100644
--- a/nautobot_ssot_aristacv/tests/test_utils_cloudvision.py
+++ b/nautobot_ssot_aristacv/tests/test_utils_cloudvision.py
@@ -123,7 +123,7 @@ def test_get_device_tags(self):
         mock_tag.value.device_id.value = "JPE12345678"
 
         tag_stub = MagicMock()
-        tag_stub.TagAssignmentConfigServiceStub.return_value.GetAll.return_value = [mock_tag]
+        tag_stub.TagAssignmentServiceStub.return_value.GetAll.return_value = [mock_tag]
 
         with patch("nautobot_ssot_aristacv.utils.cloudvision.tag_services", tag_stub):
             results = cloudvision.get_device_tags(client=self.client, device_id="JPE12345678")