content: [build-system]
  requires = [ "setuptools" ]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "parsons"
  version = "5.2.0"
  description = "A python library of connectors for the progressive community."
  readme = { file = "README.md", content-type = "text/markdown" }
  requires-python = ">=3.9"
  license-files = [ "LICENSE.md" ]
  authors = [
      { name = "The Movement Cooperative", email = "info@movementcooperative.org" },
  ]
  maintainers = [
      { name = "Shauna Gordon-McKeon" },
  ]
  keywords = [ "PROGRESSIVE", "API", "ETL" ]
  classifiers = [
      "Development Status :: 3 - Alpha",
      "Intended Audience :: Developers",
      "Programming Language :: Python :: 3.9",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Programming Language :: Python :: 3.13",
  ]
  dynamic = [
      "dependencies",
      "optional-dependencies",
  ]
  
  [project.urls]
  homepage = "https://www.parsonsproject.org/"
  documentation = "https://move-coop.github.io/parsons/html/stable/index.html"
  releasenotes = "https://github.com/move-coop/parsons/releases"
  funding = "https://secure.actblue.com/donate/parsonsproject?refcode=parsonswebsite"
  issues = "https://github.com/move-coop/parsons/issues"
  github = "https://github.com/move-coop/parsons"
  repository = "https://github.com/move-coop/parsons.git"
  
  [tool.setuptools]
  packages = ["parsons"]
  
  [tool.ruff]
  # Exclude a variety of commonly ignored directories.
  include = [
      "**/*.py",
  ]
  exclude = [
      ".bzr",
      ".direnv",
      ".eggs",
      ".git",
      ".git-rewrite",
      ".hg",
      ".ipynb_checkpoints",
      ".mypy_cache",
      ".nox",
      ".pants.d",
      ".pyenv",
      ".pytest_cache",
      ".pytype",
      ".ruff_cache",
      ".svn",
      ".tox",
      ".venv",
      ".vscode",
      "__pypackages__",
      "_build",
      "buck-out",
      "build",
      "dist",
      "node_modules",
      "site-packages",
      "venv",
  ]
  
  # Default line length is 88
  # Changed to 100 to match previous pyproject black config
  line-length = 100
  indent-width = 4
  
  # Assume Python 3.9
  target-version = "py39"
  
  [tool.ruff.lint]
  # Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`)  codes by default.
  # Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
  # McCabe complexity (`C901`) by default.
  select = [
      "B", # flake8-bugbear (B)
      "E", # pycodestyle errors (E)
      "W", # pycodestyle warnings (W)
      "C4", # flake8-comprehensions (C4)
      "F", # Pyflakes (F)
      "UP", # pyupgrade (UP)
      "I", # isort (I)
      "TID", # flake8-tidy-imports (TID)
      "ICN", # flake8-import-conventions (ICN)
      "Q", # flake8-quotes (Q)
      "TC", # flake8-type-checking (TC)
      "YTT", # flake8-2020 (YTT)
      "SIM", # flake8-simplify (SIM)
      "PTH", # flake8-use-pathlib (PTH)
      "ISC", # flake8-implicit-str-concat (ISC)
      "PT", # flake8-pytest-style (PT)
  ]
  ignore = [
      "E501", # line-too-long (E501)
      # Pathlib stuff that isn't autofixable
      "PTH116", # os-stat (PTH116)
      "PTH118", # os-path-join (PTH118)
      "PTH122", # os-path-splitext (PTH122)
      "PTH124", # py-path (PTH124)
      "PTH206", # os-sep-split (PTH206)
      "PTH207", # glob (PTH207)
      "PTH208", # os-listdir (PTH208)
  ]
  
  # Allow fix for all enabled rules (when `--fix`) is provided.
  fixable = ["ALL"]
  unfixable = []
  
  [tool.ruff.format]
  # Like Black, use double quotes for strings.
  quote-style = "double"
  
  # Like Black, indent with spaces, rather than tabs.
  indent-style = "space"
  
  # Like Black, respect magic trailing commas.
  skip-magic-trailing-comma = false
  
  # Like Black, automatically detect the appropriate line ending.
  line-ending = "auto"
  
  # Enable auto-formatting of code examples in docstrings. Markdown,
  # reStructuredText code/literal blocks and doctests are all supported.
  #
  # This is currently disabled by default, but it is planned for this
  # to be opt-out in the future.
  docstring-code-format = false
  
  # Set the line length limit used when formatting code snippets in
  # docstrings.
  #
  # This only has an effect when the `docstring-code-format` setting is
  # enabled.
  docstring-code-line-length = "dynamic"
  
  [tool.pytest.ini_options]
  addopts = "-rf --cov=parsons --no-cov-on-fail -n auto"
  testpaths = [
      "test",
  ]
  filterwarnings = [
      # Warnings triggered by libraries we use (not our own code)
      "ignore:invalid escape sequence:SyntaxWarning", # typically due to using "/" in docstrings that aren't raw strings
      "ignore:invalid escape sequence:DeprecationWarning", # typically due to using "/" in docstrings that aren't raw strings
      "ignore:Use ProtectionLevel enum instead:DeprecationWarning", # braintree throws these
      "ignore:Use protection_level parameter instead:DeprecationWarning", # braintree throws these
      "ignore:Argument login_or_token is deprecated:DeprecationWarning",
  ]
  
  [tool.isort]
  profile = "hug"
  src_paths = [
      "parsons/",
      "test/",
      "useful_resources/",
  ]
  
  [tool.coverage.run]
  branch = true
  relative_files = true
  
  [tool.coverage.paths]
  source = [
      "parsons/",
      ]
  