content: [tool.poetry]
  name = "nautobot-chatops"
  version = "3.2.1a0"
  description = "A app providing chatbot capabilities for Nautobot"
  authors = ["Network to Code, LLC <opensource@networktocode.com>"]
  license = "Apache-2.0"
  readme = "README.md"
  homepage = "https://github.com/nautobot/nautobot-app-chatops"
  repository = "https://github.com/nautobot/nautobot-app-chatops"
  documentation = "https://docs.nautobot.com/projects/chatops/en/latest/"
  keywords = ["nautobot", "nautobot-app", "nautobot-plugin"]
  classifiers = [
      "Intended Audience :: Developers",
      "Development Status :: 5 - Production/Stable",
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.9",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
  ]
  packages = [
      { include = "nautobot_chatops" },
  ]
  include = [
      # Poetry by default will exclude files that are in .gitignore
      { path = "nautobot_chatops/static/nautobot_chatops/docs/**/*", format = ["sdist", "wheel"] }
  ]
  
  [tool.poetry.plugins."nautobot.workers"]
  "aci" = "nautobot_chatops.integrations.aci.worker:aci"
  "ansible" = "nautobot_chatops.integrations.ansible.worker:ansible"
  "clear" = "nautobot_chatops.workers.clear:clear"
  "cloudvision" = "nautobot_chatops.integrations.cloudvision.worker:cloudvision"
  "grafana" = "nautobot_chatops.integrations.grafana.worker:grafana"
  "ipfabric" = "nautobot_chatops.integrations.ipfabric.worker:ipfabric"
  "meraki" = "nautobot_chatops.integrations.meraki.worker:cisco_meraki"
  "nautobot" = "nautobot_chatops.workers.nautobot:nautobot"
  "panorama" = "nautobot_chatops.integrations.panorama.worker:panorama"
  "nso" = "nautobot_chatops.integrations.nso.worker:nso"
  "slurpit" = "nautobot_chatops.integrations.slurpit.worker:slurpit"
  
  [tool.poetry.dependencies]
  python = ">=3.9.2,<3.13"
  # Used for local development
  nautobot = ">=2.4.16,<3.0.0"
  
  Markdown = "!=3.3.5"
  PyJWT = "^2.1.0"
  PyYAML = { version = "^6.0", optional = true }
  aiodns = "^1.0"
  aiohttp = "^3.7.3"
  asgiref = "^3.4.1"
  certifi = { version = ">=2021.5.30", optional = true }
  cloudvision = { version = "^1.1", optional = true }
  cvprac = { version = "^1.0.6", optional = true }
  defusedxml = { version = "^0.7.1", optional = true }
  diffsync = { version = "^1.3.0", optional = true }
  ipaddr = { version = "^2.2.0", optional = true }
  ipfabric = { version = "^6.6.2", optional = true }
  isodate =  { version = "^0.6.1", optional = true }
  meraki = { version = ">=1.7.2,<=1.45.0", optional = true }
  nautobot-capacity-metrics = "^3.0.0"
  netmiko = { version = "^4.0.0", optional = true }
  netutils = { version = "^1.1.0", optional = true }
  pan-os-python = { version = "^1.3.0", optional = true }
  prettytable = { version = "^2.1.0", optional = true }
  protobuf = { version = "^3.17", optional = true }
  pydantic = { version = "^2.0.0", optional = true }
  requests = ">=2.25.1"
  schema-enforcer = { version = "^1.4.0", optional = true }
  slack-sdk = ">=3.19.0, <4.0.0"
  termcolor = { version = "1.1.0", optional = true }
  texttable = "^1.6.2"
  webexteamssdk = "^1.3"
  slurpit-sdk = { version = ">=0.9.55", python = ">=3.8,<=3.13", optional = true }
  
  [tool.poetry.group.dev.dependencies]
  coverage = "*"
  django-debug-toolbar = "<6.0.0"
  invoke = "*"
  ipython = "*"
  # Python implementation of markdownlint
  pymarkdownlnt = "~0.9.30"
  Markdown = "*"
  responses = "^0.24.0"
  prybar = "*"
  pylint = "*"
  pylint-django = "*"
  pylint-nautobot = "*"
  requests-mock = "^1.9.3"
  ruff = "0.5.5"
  yamllint = "*"
  toml = "*"
  towncrier = ">=23.6.0,<=24.8.0"
  to-json-schema = "*"
  jsonschema = "*"
  djlint = ">=1.36.4,<2.0.0"
  djhtml = ">=3.0.8,<4.0.0"
  
  [tool.poetry.group.docs.dependencies]
  # Render custom markdown for version added/changed/remove notes
  markdown-version-annotations = "1.0.1"
  # Rendering docs to HTML
  mkdocs = "1.6.0"
  # Material for MkDocs theme
  mkdocs-material = "9.5.32"
  # Automatic documentation from sources, for MkDocs
  mkdocstrings = "0.25.2"
  mkdocstrings-python = "1.10.8"
  mkdocs-autorefs = "1.2.0"
  griffe = "1.1.1"
  mkdocs-include-markdown-plugin = "6.0.3"
  
  [tool.poetry.extras]
  all = [
      "PyYAML",
      "certifi",
      "cloudvision",
      "cvprac",
      "defusedxml",
      "diffsync",
      "ipaddr",
      "ipfabric",
      "isodate",
      "meraki",
      "netmiko",
      "netutils",
      "pan-os-python",
      "prettytable",
      "protobuf",
      "pydantic",
      "schema-enforcer",
      "termcolor",
      "slurpit-sdk",
  ]
  aci = [
      "prettytable",
  ]
  aristacv = [
      "certifi",
      "cloudvision",
      "cvprac",
      "protobuf"
  ]
  ansible = [
      "PyYAML",
  ]
  grafana = [
      "diffsync",
      "isodate",
      "pydantic",
      "schema-enforcer",
      "termcolor",
  ]
  ipfabric = [
      "ipfabric",
      "netutils",
  ]
  meraki = [
      "meraki",
  ]
  panorama = [
      "defusedxml",
      "ipaddr",
      "netmiko",
      "netutils",
      "pan-os-python",
  ]
  slurpit = [
      "slurpit-sdk",
  ]
  
  [tool.pylint.master]
  # Include the pylint_django plugin to avoid spurious warnings about Django patterns
  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$)"
  
  [tool.pylint.messages_control]
  disable = """
      line-too-long,
      nb-incorrect-base-class,
      nb-warn-dunder-filter-field,
      nb-no-search-function,
      nb-no-char-filter-q,
      too-few-public-methods,
      too-many-ancestors,
      too-many-arguments,
      too-many-lines,
      too-many-positional-arguments,
  """
  
  [tool.pylint.miscellaneous]
  # Don't flag TODO as a failure, let us commit with things that still need to be done in the code
  notes = """,
      FIXME,
      XXX,
      """
  
  [tool.pylint.similarities]
  ignore-imports = true
  min-similarity-lines = 0
  
  [tool.pylint-nautobot]
  supported_nautobot_versions = [
      "2"
  ]
  
  [tool.ruff]
  line-length = 120
  target-version = "py38"
  
  [tool.ruff.lint]
  select = [
      "D",  # pydocstyle
      "F", "E", "W",  # flake8
      "S",  # bandit
      "I",  # isort
  ]
  ignore = [
      # warning: `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible.
      "D203", # 1 blank line required before class docstring
  
      # D212 is enabled by default in google convention, and complains if we have a docstring like:
      # """
      # My docstring is on the line after the opening quotes instead of on the same line as them.
      # """
      # We've discussed and concluded that we consider this to be a valid style choice.
      "D212", # Multi-line docstring summary should start at the first line
      "D213", # Multi-line docstring summary should start at the second line
  
      # Produces a lot of issues in the current codebase.
      "D401", # First line of docstring should be in imperative mood
      "D407", # Missing dashed underline after section
      "D416", # Section name ends in colon
      "E501", # Line too long
  ]
  
  [tool.ruff.lint.pydocstyle]
  convention = "google"
  
  [tool.ruff.lint.per-file-ignores]
  "nautobot_chatops/migrations/*" = [
      "D",
  ]
  "nautobot_chatops/tests/*" = [
      "D",
      "S"
  ]
  
  [tool.coverage.run]
  disable_warnings = ["already-imported"]
  relative_files = true
  omit = [
      # Skip Tests
      "*/tests/*",
  ]
  include = [
      "nautobot_chatops/*",
  ]
  
  [tool.pymarkdown]
  plugins.selectively_enable_rules = true
  plugins.blanks-around-lists.enabled = true
  plugins.list-anchored-indent.enabled = true
  extensions.front-matter.enabled = true
  
  [build-system]
  requires = ["poetry-core>=2.0.0,<3.0.0"]
  build-backend = "poetry.core.masonry.api"
  
  [tool.towncrier]
  package = "nautobot_chatops"
  directory = "changes"
  filename = "docs/admin/release_notes/version_X.Y.md"
  template = "development/towncrier_template.j2"
  start_string = "<!-- towncrier release notes start -->"
  issue_format = "[#{issue}](https://github.com/nautobot/nautobot-app-chatops/issues/{issue})"
  
  [[tool.towncrier.type]]
  directory = "security"
  name = "Security"
  showcontent = true
  
  [[tool.towncrier.type]]
  directory = "added"
  name = "Added"
  showcontent = true
  
  [[tool.towncrier.type]]
  directory = "changed"
  name = "Changed"
  showcontent = true
  
  [[tool.towncrier.type]]
  directory = "deprecated"
  name = "Deprecated"
  showcontent = true
  
  [[tool.towncrier.type]]
  directory = "removed"
  name = "Removed"
  showcontent = true
  
  [[tool.towncrier.type]]
  directory = "fixed"
  name = "Fixed"
  showcontent = true
  
  [[tool.towncrier.type]]
  directory = "dependencies"
  name = "Dependencies"
  showcontent = true
  
  [[tool.towncrier.type]]
  directory = "documentation"
  name = "Documentation"
  showcontent = true
  
  [[tool.towncrier.type]]
  directory = "housekeeping"
  name = "Housekeeping"
  showcontent = true
  
  [tool.djlint]
  ignore = "H005,H006,H008,H011,H012,H013,H014,H015,H016,H019,H020,H021,H022,H023,H025,H026,H030,H031,H037"
  profile="django"
  extend_exclude = "docs/,nautobot_chatops/static/"
  