content: [tool.poetry]
  name = "circuit-maintenance-parser"
  version = "2.8.0"
  description = "Python library to parse Circuit Maintenance notifications and return a structured data back"
  authors = ["Network to Code <opensource@networktocode.com>"]
  license = "Apache-2.0"
  homepage = "https://github.com/networktocode/circuit-maintenance-parser"
  repository = "https://github.com/networktocode/circuit-maintenance-parser"
  readme = "README.md"
  keywords = ["parser", "circuit", "maintenance"]
  classifiers = [
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.9",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
  ]
  include = [
      "README.md",
      "LICENSE",
  ]
  
  [tool.poetry.dependencies]
  python = "^3.9"
  click = ">=7.1, <9.0"
  pydantic = ">=1.10.4,<3"
  icalendar = "^5.0.0"
  bs4 = "^0.0.2"
  lxml = {version = ">= 4.6.2, < 6"}
  geopy = "^2.1.0"
  timezonefinder = "^6.0.1"
  backoff = "^1.11.1"
  chardet = "^5"
  openai = { version = ">=1.2.4", optional = true }
  openpyxl = { version = "^3.1.5", optional = true }
  pandas = { version = "^2.2.3", optional = true }
  python-dateutil = "^2.9.0"
  
  [tool.poetry.extras]
  xlsx = [
      "openpyxl",
      "pandas",
  ]
  openai = [
      "openai",
  ]
  
  [tool.poetry.group.dev.dependencies]
  pytest = "^7.0.0"
  requests_mock = "^1.7.0"
  pyyaml = "^6.0"
  pylint = "^3.1.0"
  yamllint = "^1.20.0"
  invoke = "^2.2.0"
  ruff = "*"
  types-python-dateutil = "^2.8.3"
  types-pytz = "^2022.0.0"
  types-toml = "^0.10.1"
  netconan = "^0.12.3"
  toml = "0.10.2"
  towncrier = "^24.8.0"
  types-chardet = "^5.0.4"
  pandas-stubs = "2.2.2.240603"
  coverage = "^7.6.12"
  
  [tool.poetry.scripts]
  circuit-maintenance-parser = "circuit_maintenance_parser.cli:main"
  
  [tool.ruff]
  line-length = 120
  target-version = "py39"
  
  [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]
  "tests/*" = [
      "D",
      "S"
  ]
  
  
  [tool.pylint.master]
  ignore-patterns=[".venv", "tests"]
  
  [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$)"
  extension-pkg-whitelist = [
      "pydantic",
  ]
  
  [tool.pylint.messages_control]
  disable = [
      "line-too-long",
      "duplicate-code",
      "cyclic-import",
      ]
  
  [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,
      """
  
  [build-system]
  requires = ["poetry_core>=1.0.0"]
  build-backend = "poetry.core.masonry.api"
  
  [tool.pytest.ini_options]
  python_paths = "./"
  testpaths = [
      "tests/"
  ]
  addopts = "-vv --doctest-modules -p no:warnings --ignore-glob='*mock*'"
  
  [tool.towncrier]
  package = "circuit_maintenance_parser"
  directory = "changes"
  filename = "docs/release_notes.md"
  template = "towncrier_template.j2"
  start_string = "<!-- towncrier release notes start -->"
  issue_format = "[#{issue}](https://github.com/networktocode/circuit_maintenance_parser/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
  