From 74a0a1404906d45dcd7f30bbcad1071bf243df5f Mon Sep 17 00:00:00 2001 From: bakebot Date: Thu, 29 Aug 2024 03:41:25 +0000 Subject: [PATCH 1/4] Cookie updated by NetworkToCode Cookie Drift Manager Tool Template: ``` { "template": "https://github.com/nautobot/cookiecutter-nautobot-app.git", "dir": "nautobot-app", "ref": "refs/tags/nautobot-app-v2.3.2", "path": null } ``` Cookie: ``` { "remote": "https://github.com/nautobot/nautobot-app-ssot.git", "path": "/tmp/tmpcyvdbm03/nautobot-app-ssot", "repository_path": "/tmp/tmpcyvdbm03/nautobot-app-ssot", "dir": "", "branch_prefix": "drift-manager", "context": { "codeowner_github_usernames": "@smith-ntc", "full_name": "Network to Code, LLC", "email": "opensource@networktocode.com", "github_org": "nautobot", "app_name": "nautobot_ssot", "verbose_name": "Single Source of Truth", "app_slug": "nautobot-ssot", "project_slug": "nautobot-app-ssot", "repo_url": "https://github.com/nautobot/nautobot-app-ssot", "base_url": "ssot", "min_nautobot_version": "2.0.0", "max_nautobot_version": "2.9999", "camel_name": "NautobotSSOTApp", "project_short_description": "Nautobot Single Source of Truth", "model_class_name": "None", "open_source_license": "Apache-2.0", "docs_base_url": "https://docs.nautobot.com", "docs_app_url": "https://docs.nautobot.com/projects/ssot/en/latest", "_template": "https://github.com/nautobot/cookiecutter-nautobot-app.git", "_output_dir": "/tmp/tmpcyvdbm03", "_repo_dir": "/github/home/.cookiecutters/cookiecutter-nautobot-app/nautobot-app", "_checkout": "refs/tags/nautobot-app-v2.3.2" }, "base_branch": "develop", "remote_name": "origin", "pull_request_strategy": "PullRequestStrategy.CREATE", "post_actions": [ "PostAction.BLACK" ], "baked_commit_ref": "edf831ea98364f9a475ef147f13c1fb2f17b825f", "draft": true } ``` CLI Arguments: ``` { "cookie_dir": "", "input": false, "json_filename": "", "output_dir": "", "push": true, "template": "", "template_dir": "", "template_ref": "refs/tags/nautobot-app-v2.3.2", "pull_request": null, "post_action": [], "disable_post_actions": false, "draft": null } ``` --- .cookiecutter.json | 4 +- .github/workflows/ci.yml | 18 ++++-- development/Dockerfile | 31 +++------ development/app_config_schema.py | 4 +- development/nautobot_config.py | 12 +++- docs/requirements.txt | 2 +- invoke.example.yml | 19 +++--- mkdocs.yml | 2 +- nautobot_ssot/tests/test_basic.py | 18 ++++-- pyproject.toml | 22 +++---- tasks.py | 103 ++++++++++++++++++++++++++---- 11 files changed, 162 insertions(+), 73 deletions(-) diff --git a/.cookiecutter.json b/.cookiecutter.json index 02ef3f20f..dbce566c3 100644 --- a/.cookiecutter.json +++ b/.cookiecutter.json @@ -21,7 +21,7 @@ "_drift_manager": { "template": "https://github.com/nautobot/cookiecutter-nautobot-app.git", "template_dir": "nautobot-app", - "template_ref": "refs/tags/nautobot-app-v2.3.0", + "template_ref": "refs/tags/nautobot-app-v2.3.2", "cookie_dir": "", "branch_prefix": "drift-manager", "pull_request_strategy": "create", @@ -29,7 +29,7 @@ "black" ], "draft": true, - "baked_commit_ref": "edf831ea98364f9a475ef147f13c1fb2f17b825f" + "baked_commit_ref": "022954d51f46c54813d3c8c81584a16f0faea1f5" } } } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 445bf4ea1..64d8816b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ on: # yamllint disable-line rule:truthy rule:comments pull_request: ~ env: - APP_NAME: "nautobot-app-ssot" + APP_NAME: "nautobot-ssot" jobs: ruff-format: @@ -91,6 +91,10 @@ jobs: uses: "actions/checkout@v4" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v6" + - name: "Constrain Nautobot version and regenerate lock file" + env: + INVOKE_NAUTOBOT_SSOT_LOCAL: "true" + run: "poetry run invoke lock --constrain-nautobot-ver --constrain-python-ver" - name: "Set up Docker Buildx" id: "buildx" uses: "docker/setup-buildx-action@v3" @@ -108,6 +112,7 @@ jobs: build-args: | NAUTOBOT_VER=${{ matrix.nautobot-version }} PYTHON_VER=${{ matrix.python-version }} + CI=true - name: "Copy credentials" run: "cp development/creds.example.env development/creds.env" - name: "Linting: pylint" @@ -122,14 +127,14 @@ jobs: strategy: fail-fast: true matrix: - python-version: ["3.8", "3.11"] + python-version: ["3.8", "3.12"] db-backend: ["postgresql"] nautobot-version: ["stable"] include: - python-version: "3.11" db-backend: "postgresql" - nautobot-version: "2.2.1" - - python-version: "3.11" + nautobot-version: "2.0.0" + - python-version: "3.12" db-backend: "mysql" nautobot-version: "stable" runs-on: "ubuntu-22.04" @@ -158,6 +163,7 @@ jobs: build-args: | NAUTOBOT_VER=${{ matrix.nautobot-version }} PYTHON_VER=${{ matrix.python-version }} + CI=true - name: "Copy credentials" run: "cp development/creds.example.env development/creds.env" - name: "Use Mysql invoke settings when needed" @@ -195,7 +201,7 @@ jobs: - name: "Set up Python" uses: "actions/setup-python@v5" with: - python-version: "3.11" + python-version: "3.12" - name: "Install Python Packages" run: "pip install poetry" - name: "Set env" @@ -230,7 +236,7 @@ jobs: - name: "Set up Python" uses: "actions/setup-python@v5" with: - python-version: "3.11" + python-version: "3.12" - name: "Install Python Packages" run: "pip install poetry" - name: "Set env" diff --git a/development/Dockerfile b/development/Dockerfile index 84f2eadd0..c689be7dd 100644 --- a/development/Dockerfile +++ b/development/Dockerfile @@ -53,29 +53,18 @@ RUN which poetry || curl -sSL https://install.python-poetry.org | python3 - && \ WORKDIR /source COPY . /source -# Get container's installed Nautobot version as a forced constraint -# NAUTOBOT_VER may be a branch name and not a published release therefor we need to get the installed version -# so pip can use it to recognize local constraints. -RUN pip show nautobot | grep "^Version: " | sed -e 's/Version: /nautobot==/' > constraints.txt +# Build args must be declared in each stage +ARG PYTHON_VER -# Use Poetry to grab dev dependencies from the lock file -# Can be improved in Poetry 1.2 which allows `poetry install --only dev` -# -# We can't use the entire freeze as it takes forever to resolve with rigidly fixed non-direct dependencies, -# especially those that are only direct to Nautobot but the container included versions slightly mismatch -RUN poetry export -f requirements.txt --without-hashes --extras all --output poetry_freeze_base.txt -RUN poetry export -f requirements.txt --without-hashes --extras all --with dev --output poetry_freeze_all.txt -RUN sort poetry_freeze_base.txt poetry_freeze_all.txt | uniq -u > poetry_freeze_dev.txt - -# Install all local project as editable, constrained on Nautobot version, to get any additional -# direct dependencies of the app -RUN --mount=type=cache,target="/root/.cache/pip",sharing=locked \ - pip install -c constraints.txt -e .[all] +# Constrain the Nautobot version to NAUTOBOT_VER +# In CI, this should be done outside of the Dockerfile to prevent cross-compile build failures +ARG CI +RUN if [ -z "${CI+x}" ]; then \ + INSTALLED_NAUTOBOT_VER=$(pip show nautobot | grep "^Version" | sed "s/Version: //"); \ + poetry add --lock nautobot@${INSTALLED_NAUTOBOT_VER} --python ${PYTHON_VER}; fi -# Install any dev dependencies frozen from Poetry -# Can be improved in Poetry 1.2 which allows `poetry install --only dev` -RUN --mount=type=cache,target="/root/.cache/pip",sharing=locked \ - pip install -c constraints.txt -r poetry_freeze_dev.txt +# Install the app +RUN poetry install --extras all --with dev COPY development/nautobot_config.py ${NAUTOBOT_ROOT}/nautobot_config.py # !!! USE CAUTION WHEN MODIFYING LINES ABOVE diff --git a/development/app_config_schema.py b/development/app_config_schema.py index a779b14ef..e52e24786 100644 --- a/development/app_config_schema.py +++ b/development/app_config_schema.py @@ -40,7 +40,9 @@ def _main(): **SchemaBuilder().to_json_schema(app_config), # type: ignore } app_config = import_module(package_name).config - _enrich_object_schema(schema, app_config.default_settings, app_config.required_settings) + _enrich_object_schema( + schema, app_config.default_settings, app_config.required_settings + ) schema_path.write_text(json.dumps(schema, indent=4) + "\n") print(f"\n==================\nGenerated schema:\n\n{schema_path}\n") print( diff --git a/development/nautobot_config.py b/development/nautobot_config.py index 123ad7ec2..33bb80280 100644 --- a/development/nautobot_config.py +++ b/development/nautobot_config.py @@ -18,8 +18,12 @@ if "debug_toolbar" not in INSTALLED_APPS: # noqa: F405 INSTALLED_APPS.append("debug_toolbar") # noqa: F405 - if "debug_toolbar.middleware.DebugToolbarMiddleware" not in MIDDLEWARE: # noqa: F405 - MIDDLEWARE.insert(0, "debug_toolbar.middleware.DebugToolbarMiddleware") # noqa: F405 + if ( + "debug_toolbar.middleware.DebugToolbarMiddleware" not in MIDDLEWARE + ): # noqa: F405 + MIDDLEWARE.insert( + 0, "debug_toolbar.middleware.DebugToolbarMiddleware" + ) # noqa: F405 # # Misc. settings @@ -51,7 +55,9 @@ "NAUTOBOT_DB_PORT", default_db_settings[nautobot_db_engine]["NAUTOBOT_DB_PORT"], ), # Database port, default to postgres - "CONN_MAX_AGE": int(os.getenv("NAUTOBOT_DB_TIMEOUT", "300")), # Database timeout + "CONN_MAX_AGE": int( + os.getenv("NAUTOBOT_DB_TIMEOUT", "300") + ), # Database timeout "ENGINE": nautobot_db_engine, } } diff --git a/docs/requirements.txt b/docs/requirements.txt index 777f1b50b..bf10c13b2 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -3,4 +3,4 @@ mkdocs-material==9.5.32 markdown-version-annotations==1.0.1 griffe==1.1.1 mkdocstrings-python==1.10.8 -mkdocstrings==0.25.2 \ No newline at end of file +mkdocstrings==0.25.2 diff --git a/invoke.example.yml b/invoke.example.yml index 8ca4164a1..a71bc4ffa 100644 --- a/invoke.example.yml +++ b/invoke.example.yml @@ -1,12 +1,15 @@ --- nautobot_ssot: - project_name: "nautobot-ssot" nautobot_ver: "2.0.0" - local: false python_ver: "3.11" - compose_dir: "development" - compose_files: - - "docker-compose.base.yml" - - "docker-compose.redis.yml" - - "docker-compose.postgres.yml" - - "docker-compose.dev.yml" + # local: false + # compose_dir: "/full/path/to/nautobot-app-ssot/development" + +# The following is an example of using MySQL as the database backend +# --- +# nautobot_ssot: +# compose_files: +# - "docker-compose.base.yml" +# - "docker-compose.redis.yml" +# - "docker-compose.mysql.yml" +# - "docker-compose.dev.yml" diff --git a/mkdocs.yml b/mkdocs.yml index 992eac2f8..68f26a38d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,6 @@ --- dev_addr: "127.0.0.1:8001" -edit_uri: "edit/main/nautobot-app-ssot/docs" +edit_uri: "edit/main/docs" site_dir: "nautobot_ssot/static/nautobot_ssot/docs" site_name: "Single Source of Truth Documentation" site_url: "https://docs.nautobot.com/projects/ssot/en/latest/" diff --git a/nautobot_ssot/tests/test_basic.py b/nautobot_ssot/tests/test_basic.py index d72f2d02e..83142face 100644 --- a/nautobot_ssot/tests/test_basic.py +++ b/nautobot_ssot/tests/test_basic.py @@ -11,11 +11,21 @@ class TestDocsPackaging(unittest.TestCase): def test_version(self): """Verify that pyproject.toml dev dependencies have the same versions as in the docs requirements.txt.""" - parent_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) + parent_path = os.path.dirname( + os.path.dirname(os.path.dirname(os.path.realpath(__file__))) + ) poetry_path = os.path.join(parent_path, "pyproject.toml") - poetry_details = toml.load(poetry_path)["tool"]["poetry"]["group"]["dev"]["dependencies"] - with open(f"{parent_path}/docs/requirements.txt", "r", encoding="utf-8") as file: - requirements = [line for line in file.read().splitlines() if (len(line) > 0 and not line.startswith("#"))] + poetry_details = toml.load(poetry_path)["tool"]["poetry"]["group"]["dev"][ + "dependencies" + ] + with open( + f"{parent_path}/docs/requirements.txt", "r", encoding="utf-8" + ) as file: + requirements = [ + line + for line in file.read().splitlines() + if (len(line) > 0 and not line.startswith("#")) + ] for pkg in requirements: package_name = pkg if len(pkg.split("==")) == 2: # noqa: PLR2004 diff --git a/pyproject.toml b/pyproject.toml index 0a749a19c..b0cfecb0d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ classifiers = [ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", ] packages = [ { include = "nautobot_ssot" }, @@ -27,7 +28,7 @@ include = [ ] [tool.poetry.dependencies] -python = ">=3.8,<3.12" +python = ">=3.8,<3.13" # Used for local development nautobot = "^2.1.0" diffsync = "^2.0.0" @@ -168,12 +169,12 @@ nautobot-device-lifecycle-mgmt = [ [tool.pylint.master] # Include the pylint_django plugin to avoid spurious warnings about Django patterns -load-plugins="pylint_django, pylint_nautobot" -ignore=".venv" +load-plugins = "pylint_django, pylint_nautobot" +ignore = ".venv" [tool.pylint.basic] # No docstrings required for private methods (Pylint default), or for test_ functions, or for inner Meta classes. -no-docstring-rgx="^(_|test_|Meta$)" +no-docstring-rgx = "^(_|test_|Meta$)" [tool.pylint.messages_control] disable = """, @@ -199,10 +200,11 @@ target-version = "py38" [tool.ruff.lint] select = [ - "D", # pydocstyle - "F", "E", "W", # flake8 - "S", # bandit - "I", # isort + "D", # pydocstyle + "F", "E", "W", # flake8 + "PL", # pylint + "S", # bandit + "I", # isort ] ignore = [ # warning: `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible. @@ -221,10 +223,6 @@ ignore = [ "D407", # Missing dashed underline after section "D416", # Section name ends in colon "E501", # Line too long - - # Package specific ignores - "D104", # Missing docstring in public package - "D417", # Missing argument descriptions in the docstring for ... ] [tool.ruff.lint.pydocstyle] diff --git a/tasks.py b/tasks.py index 270b43314..b6364a371 100644 --- a/tasks.py +++ b/tasks.py @@ -13,10 +13,12 @@ """ import os +import re from pathlib import Path from time import sleep from invoke.collection import Collection +from invoke.exceptions import Exit from invoke.tasks import task as invoke_task @@ -70,7 +72,9 @@ def _is_compose_included(context, name): def _await_healthy_service(context, service): - container_id = docker_compose(context, f"ps -q -- {service}", pty=False, echo=False, hide=True).stdout.strip() + container_id = docker_compose( + context, f"ps -q -- {service}", pty=False, echo=False, hide=True + ).stdout.strip() _await_healthy_container(context, container_id) @@ -162,7 +166,9 @@ def docker_compose(context, command, **kwargs): ] for compose_file in context.nautobot_ssot.compose_files: - compose_file_path = os.path.join(context.nautobot_ssot.compose_dir, compose_file) + compose_file_path = os.path.join( + context.nautobot_ssot.compose_dir, compose_file + ) compose_command_tokens.append(f' -f "{compose_file_path}"') compose_command_tokens.append(command) @@ -199,7 +205,16 @@ def run_command(context, command, **kwargs): pty = kwargs.pop("pty", True) - return docker_compose(context, compose_command, **kwargs, pty=pty, env=env) + if "nautobot" in results.stdout: + compose_command = f"exec{command_env_args} nautobot {command}" + else: + compose_command = ( + f"run{command_env_args} --rm --entrypoint='{command}' nautobot" + ) + + pty = kwargs.pop("pty", True) + + docker_compose(context, compose_command, pty=pty, **kwargs) # ------------------------------------------------------------------------------ @@ -231,17 +246,63 @@ def generate_packages(context): run_command(context, command) +def _get_docker_nautobot_version(context, nautobot_ver=None, python_ver=None): + """Extract Nautobot version from base docker image.""" + if nautobot_ver is None: + nautobot_ver = context.nautobot_ssot.nautobot_ver + if python_ver is None: + python_ver = context.nautobot_ssot.python_ver + dockerfile_path = os.path.join(context.nautobot_ssot.compose_dir, "Dockerfile") + base_image = ( + context.run(f"grep --max-count=1 '^FROM ' {dockerfile_path}", hide=True) + .stdout.strip() + .split(" ")[1] + ) + base_image = base_image.replace(r"${NAUTOBOT_VER}", nautobot_ver).replace( + r"${PYTHON_VER}", python_ver + ) + pip_nautobot_ver = context.run( + f"docker run --rm --entrypoint '' {base_image} pip show nautobot", hide=True + ) + match_version = re.search( + r"^Version: (.+)$", pip_nautobot_ver.stdout.strip(), flags=re.MULTILINE + ) + if match_version: + return match_version.group(1) + else: + raise Exit(f"Nautobot version not found in Docker base image {base_image}.") + + @task( help={ "check": ( "If enabled, check for outdated dependencies in the poetry.lock file, " "instead of generating a new one. (default: disabled)" - ) + ), + "constrain_nautobot_ver": ( + "Run 'poetry add nautobot@[version] --lock' to generate the lockfile, " + "where [version] is the version installed in the Dockerfile's base image. " + "Generally intended to be used in CI and not for local development. (default: disabled)" + ), + "constrain_python_ver": ( + "When using `constrain_nautobot_ver`, further constrain the nautobot version " + "to python_ver so that poetry doesn't complain about python version incompatibilities. " + "Generally intended to be used in CI and not for local development. (default: disabled)" + ), } ) -def lock(context, check=False): - """Generate poetry.lock inside the Nautobot container.""" - run_command(context, f"poetry {'check' if check else 'lock --no-update'}") +def lock( + context, check=False, constrain_nautobot_ver=False, constrain_python_ver=False +): + """Generate poetry.lock file.""" + if constrain_nautobot_ver: + docker_nautobot_version = _get_docker_nautobot_version(context) + command = f"poetry add --lock nautobot@{docker_nautobot_version}" + if constrain_python_ver: + command += f" --python {context.nautobot_ssot.python_ver}" + else: + command = f"poetry {'check' if check else 'lock --no-update'}" + run_command(context, command) # ------------------------------------------------------------------------------ @@ -272,7 +333,9 @@ def restart(context, service=""): def stop(context, service=""): """Stop specified or all services, if service is not specified, remove all containers.""" print("Stopping Nautobot...") - docker_compose(context, "stop" if service else "down --remove-orphans", service=service) + docker_compose( + context, "stop" if service else "down --remove-orphans", service=service + ) @task( @@ -291,7 +354,9 @@ def destroy(context, volumes=True, import_db_file=""): return if not volumes: - raise ValueError("Cannot specify `--no-volumes` and `--import-db-file` arguments at the same time.") + raise ValueError( + "Cannot specify `--no-volumes` and `--import-db-file` arguments at the same time." + ) print(f"Importing database file: {import_db_file}...") @@ -308,12 +373,16 @@ def destroy(context, volumes=True, import_db_file=""): "db", ] - container_id = docker_compose(context, " ".join(command), pty=False, echo=False, hide=True).stdout.strip() + container_id = docker_compose( + context, " ".join(command), pty=False, echo=False, hide=True + ).stdout.strip() _await_healthy_container(context, container_id) print("Stopping database container...") context.run(f"docker stop {container_id}", pty=False, echo=False, hide=True) - print("Database import complete, you can start Nautobot with the following command:") + print( + "Database import complete, you can start Nautobot with the following command:" + ) print("invoke start") @@ -489,7 +558,9 @@ def dbshell(context, db_name="", input_file="", output_file="", query=""): if input_file and query: raise ValueError("Cannot specify both, `input_file` and `query` arguments") if output_file and not (input_file or query): - raise ValueError("`output_file` argument requires `input_file` or `query` argument") + raise ValueError( + "`output_file` argument requires `input_file` or `query` argument" + ) env = {} if query: @@ -627,7 +698,9 @@ def backup_db(context, db_name="", output_file="dump.sql", readable=True): docker_compose(context, " ".join(command), pty=False) print(50 * "=") - print("The database backup has been successfully completed and saved to the following file:") + print( + "The database backup has been successfully completed and saved to the following file:" + ) print(output_file) print("You can import this database backup with the following command:") print(f"invoke import-db --input-file '{output_file}'") @@ -796,7 +869,9 @@ def unittest( # noqa: PLR0913 @task def unittest_coverage(context): """Report on code test coverage as measured by 'invoke unittest'.""" - command = "coverage report --skip-covered --include 'nautobot_ssot/*' --omit *migrations*" + command = ( + "coverage report --skip-covered --include 'nautobot_ssot/*' --omit *migrations*" + ) run_command(context, command) From 1aee536fe26403f59294f9981a761edb06c2bdf1 Mon Sep 17 00:00:00 2001 From: Stephen Kiely Date: Fri, 6 Sep 2024 09:56:39 -0500 Subject: [PATCH 2/4] Fix tasks.py, Poetry Lock and Change Fragment Also add back lines in pyproject.toml that drift manager removed. --- .github/workflows/ci.yml | 2 +- changes/527.housekeeping | 1 + poetry.lock | 226 +++++++++++++++++++++++++++++++++++---- pyproject.toml | 5 +- tasks.py | 11 +- 5 files changed, 211 insertions(+), 34 deletions(-) create mode 100644 changes/527.housekeeping diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 64d8816b3..0a41f6411 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -133,7 +133,7 @@ jobs: include: - python-version: "3.11" db-backend: "postgresql" - nautobot-version: "2.0.0" + nautobot-version: "2.2.1" - python-version: "3.12" db-backend: "mysql" nautobot-version: "stable" diff --git a/changes/527.housekeeping b/changes/527.housekeeping new file mode 100644 index 000000000..f3a074535 --- /dev/null +++ b/changes/527.housekeeping @@ -0,0 +1 @@ +Rebaked from the cookie 'nautobot-app-v2.3.2'. diff --git a/poetry.lock b/poetry.lock index 81210318c..58d7ceaa7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -102,17 +102,22 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] name = "astroid" -version = "3.2.4" +version = "2.15.8" description = "An abstract syntax tree for Python with inference support." optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.7.2" files = [ - {file = "astroid-3.2.4-py3-none-any.whl", hash = "sha256:413658a61eeca6202a59231abb473f932038fbcbf1666587f66d482083413a25"}, - {file = "astroid-3.2.4.tar.gz", hash = "sha256:0e14202810b30da1b735827f78f5157be2bbd4a7a59b7707ca0bfc2fb4c0063a"}, + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, ] [package.dependencies] +lazy-object-proxy = ">=1.4.0" typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +wrapt = [ + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, +] [[package]] name = "asttokens" @@ -693,7 +698,10 @@ files = [ ] [package.dependencies] -numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} +numpy = [ + {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""}, + {version = ">=1.26.0rc1,<2.0", markers = "python_version >= \"3.12\""}, +] [package.extras] bokeh = ["bokeh", "selenium"] @@ -2396,6 +2404,52 @@ sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=2.8.0)"] +[[package]] +name = "lazy-object-proxy" +version = "1.10.0" +description = "A fast and thorough lazy object proxy." +optional = false +python-versions = ">=3.8" +files = [ + {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, + {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, +] + [[package]] name = "macaddress" version = "2.0.2" @@ -2988,18 +3042,22 @@ sso = ["social-auth-core[saml] (>=4.5.3,<4.6.0)"] [[package]] name = "nautobot-device-lifecycle-mgmt" -version = "2.1.2" +version = "2.2.0" description = "Manages device lifecycles for platforms and software." optional = true -python-versions = "<3.12,>=3.8" +python-versions = "<3.13,>=3.8" files = [ - {file = "nautobot_device_lifecycle_mgmt-2.1.2-py3-none-any.whl", hash = "sha256:dd011895ce20409733018ff1282a49878ec248efa86a82baa2247a193eab7d16"}, - {file = "nautobot_device_lifecycle_mgmt-2.1.2.tar.gz", hash = "sha256:7f8b7373a2943f622031a67518e25e15c8930288ecc7b48c5cea210a8a9c19b2"}, + {file = "nautobot_device_lifecycle_mgmt-2.2.0-py3-none-any.whl", hash = "sha256:00020a8ef553d2cbf5994c59b0b2dd1c815624d0781fec99c9761b970b017bbd"}, + {file = "nautobot_device_lifecycle_mgmt-2.2.0.tar.gz", hash = "sha256:0e45ca79f6e7f2eb40e558160e254fdf9f49804cb3afb60afbe89697bb6e2841"}, ] [package.dependencies] matplotlib = ">=3.3.4,<4.0.0" nautobot = ">=2.0.0,<3.0.0" +numpy = [ + {version = "<1.25", markers = "python_version == \"3.8\""}, + {version = ">=1.26,<2.0", markers = "python_version >= \"3.9\""}, +] pycountry = ">=22.3.5,<23.0.0" [[package]] @@ -3092,6 +3150,51 @@ files = [ {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, ] +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = true +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + [[package]] name = "oauthlib" version = "3.2.2" @@ -3731,23 +3834,23 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "3.2.6" +version = "2.17.7" description = "python code static checker" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.7.2" files = [ - {file = "pylint-3.2.6-py3-none-any.whl", hash = "sha256:03c8e3baa1d9fb995b12c1dbe00aa6c4bcef210c2a2634374aedeb22fb4a8f8f"}, - {file = "pylint-3.2.6.tar.gz", hash = "sha256:a5d01678349454806cff6d886fb072294f56a58c4761278c97fb557d708e1eb3"}, + {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, + {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, ] [package.dependencies] -astroid = ">=3.2.4,<=3.3.0-dev0" +astroid = ">=2.15.8,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, ] -isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" +isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} @@ -3778,18 +3881,18 @@ with-django = ["Django (>=2.2)"] [[package]] name = "pylint-nautobot" -version = "0.3.0" +version = "0.3.1" description = "Custom Pylint Rules for Nautobot" optional = false -python-versions = ">=3.8,<3.12" +python-versions = "<4.0,>=3.8" files = [ - {file = "pylint_nautobot-0.3.0-py3-none-any.whl", hash = "sha256:91fed48d9a9f565c6aa46c679b930d64b06d014061f6e7e802e6de8b6b8e3f87"}, - {file = "pylint_nautobot-0.3.0.tar.gz", hash = "sha256:387a1d73b49186a7b325b6c1a3634e2c57ec0f2350e93494304c47073400099b"}, + {file = "pylint_nautobot-0.3.1-py3-none-any.whl", hash = "sha256:097bb85405aabe766395a9d09dc474e39c8d9d23700d0e64e21f3855b4188466"}, + {file = "pylint_nautobot-0.3.1.tar.gz", hash = "sha256:3a637f03dccf29db47d6fdfa348f6fbcd97e9471ade5c8eca7efd0921740dd94"}, ] [package.dependencies] importlib-resources = ">=5.12.0" -pylint = ">=2.17.5" +pylint = ">=2.17,<3.0" pyyaml = ">=6.0.1" toml = ">=0.10.2" @@ -5005,6 +5108,85 @@ files = [ [package.extras] test = ["pytest (>=6.0.0)", "setuptools (>=65)"] +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + [[package]] name = "yamllint" version = "1.35.1" @@ -5052,5 +5234,5 @@ servicenow = ["Jinja2", "PyYAML", "ijson", "oauthlib", "python-magic", "pytz", " [metadata] lock-version = "2.0" -python-versions = ">=3.8,<3.12" -content-hash = "bf0e6910c05f2f59adfd8351f25b196fb6f28e3c6903d2fbe630433ffd4db491" +python-versions = ">=3.8,<3.13" +content-hash = "0969d1260d94aabfb9612f6faae17bb0c7f76dbe37ceda3474817c53e3257157" diff --git a/pyproject.toml b/pyproject.toml index b0cfecb0d..3d8cd7c58 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -202,7 +202,6 @@ target-version = "py38" select = [ "D", # pydocstyle "F", "E", "W", # flake8 - "PL", # pylint "S", # bandit "I", # isort ] @@ -223,6 +222,10 @@ ignore = [ "D407", # Missing dashed underline after section "D416", # Section name ends in colon "E501", # Line too long + + # Package specific ignores + "D104", # Missing docstring in public package + "D417", # Missing argument descriptions in the docstring for ... ] [tool.ruff.lint.pydocstyle] diff --git a/tasks.py b/tasks.py index b6364a371..3006f401b 100644 --- a/tasks.py +++ b/tasks.py @@ -205,16 +205,7 @@ def run_command(context, command, **kwargs): pty = kwargs.pop("pty", True) - if "nautobot" in results.stdout: - compose_command = f"exec{command_env_args} nautobot {command}" - else: - compose_command = ( - f"run{command_env_args} --rm --entrypoint='{command}' nautobot" - ) - - pty = kwargs.pop("pty", True) - - docker_compose(context, compose_command, pty=pty, **kwargs) + return docker_compose(context, compose_command, **kwargs, pty=pty, env=env) # ------------------------------------------------------------------------------ From 790687dd192b3f68b6d7ba2b97768ddff31c1362 Mon Sep 17 00:00:00 2001 From: Stephen Kiely Date: Fri, 6 Sep 2024 10:14:04 -0500 Subject: [PATCH 3/4] Fix pylint issues. --- nautobot_ssot/integrations/infoblox/diffsync/models/infoblox.py | 2 +- nautobot_ssot/integrations/itential/forms.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nautobot_ssot/integrations/infoblox/diffsync/models/infoblox.py b/nautobot_ssot/integrations/infoblox/diffsync/models/infoblox.py index d090c36e6..7b7424f0d 100644 --- a/nautobot_ssot/integrations/infoblox/diffsync/models/infoblox.py +++ b/nautobot_ssot/integrations/infoblox/diffsync/models/infoblox.py @@ -81,7 +81,7 @@ class InfobloxVLAN(Vlan): """Infoblox implementation of the VLAN Model.""" -class InfobloxIPAddress(IPAddress): +class InfobloxIPAddress(IPAddress): # pylint: disable=too-many-instance-attributes """Infoblox implementation of the VLAN Model.""" @classmethod diff --git a/nautobot_ssot/integrations/itential/forms.py b/nautobot_ssot/integrations/itential/forms.py index 9a07da7dd..72f196675 100644 --- a/nautobot_ssot/integrations/itential/forms.py +++ b/nautobot_ssot/integrations/itential/forms.py @@ -39,4 +39,4 @@ class Meta: """Meta class definition.""" model = models.AutomationGatewayModel - fields = ["name", "description", "location", "location_descendants", "gateway", "enabled"] + fields = "__all__" From fd9648a86ee47d75319d29b7641ca5484d699d85 Mon Sep 17 00:00:00 2001 From: Stephen Kiely Date: Fri, 6 Sep 2024 11:19:13 -0500 Subject: [PATCH 4/4] Add change fragement for Python 3.12 --- changes/527.added | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/527.added diff --git a/changes/527.added b/changes/527.added new file mode 100644 index 000000000..c738255f0 --- /dev/null +++ b/changes/527.added @@ -0,0 +1 @@ +Added Python 3.12 support.