content: [build-system]
  requires = ["setuptools>=75.6.0", "setuptools-scm[toml]>=8.1.0", "wheel"]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "mlinfra"
  description = "A tool to deploy mlops tooling at the click of a button."
  dynamic = ["version"]
  keywords = ["mlinfra"]
  requires-python = ">=3.11"
  readme = "README.md"
  license = { file = "LICENSE" }
  authors = [{ name = "Ali Abbas Jaffri", email = "ali.abbasjaffri@live.com" }]
  maintainers = [{ name = "Ali Abbas Jaffri", email = "ali.abbasjaffri@live.com" }]
  classifiers = [
      "Development Status :: 3 - Alpha",
      "Intended Audience :: Developers",
      "Intended Audience :: Science/Research",
      "License :: OSI Approved :: Apache Software License",
      "Operating System :: OS Independent",
      "Programming Language :: Python :: 3",
      "Topic :: Scientific/Engineering",
      "Topic :: Scientific/Engineering :: Artificial Intelligence",
      "Topic :: Software Development",
      "Topic :: Software Development :: Libraries :: Python Modules",
      "Topic :: Utilities",
      "Topic :: System :: Distributed Computing"
  ]
  
  dependencies = [
      "boto3",
      "pyyaml",
      "GitPython",
      "mypy",
      "getmac",
      "requests",
      "typer",
      "rich"
  ]
  
  [tool.setuptools]
  package-dir = { "" = "src" }
  
  [tool.setuptools.package-data]
  mlinfra = ["**/*.tf", "**/*.tpl", "**/*.json", "**/*.yaml"]
  
  [project.urls]
  Homepage = "https://github.com/mlinfra-io/mlinfra"
  Repository = "https://github.com/mlinfra-io/mlinfra.git"
  Documentation = "https://mlinfra.io/"
  
  [project.optional-dependencies]
  dev = [
      "pre-commit",
      "pytest",
      "pytest-mock",
      "zipp>=3.20.2"
  ]
  docs = [
      "mkdocs-material",
      "mkdocs-git-revision-date-localized-plugin",
      "mike",
      "mkdocs-section-index"
  ]
  
  # Automatically determine version number from Git tags
  [tool.setuptools_scm]
  
  [tool.mypy]
  allow_redefinition = true
  check_untyped_defs = true
  disallow_incomplete_defs = true
  pretty = true
  python_version = "3.11"
  strict_optional = false
  warn_unreachable = true
  
  [[tool.mypy.overrides]]
  module = ["yaml"]
  ignore_missing_imports = true
  
  [tool.ruff]
  # explicitly set src folder for isort to understand first-party imports correctly.
  src = ["mlinfra"]
  line-length = 100
  # Enable pycodestyle errors & warnings (`E`, `W`), Pyflakes (`F`), and isort (`I`) by default.
  lint.select = ["E", "F", "I", "W"]
  lint.ignore = [
      # Line too long
      "E501",
      # Allow capitalized variable names
      "F841",
  ]
  
  [tool.isort]
  multi_line_output = 3
  include_trailing_comma = true
  force_grid_wrap = 0
  use_parentheses = true
  line_length = 90
  skip_glob = ['**/venv/**']
  
  [project.scripts]
  mlinfra = "mlinfra.cli.cli:cli"
  
  [tool.pytest.ini_options]
  log_cli = true
  log_cli_level = "WARNING"
  
  [tool.bandit]
  exclude_dirs = ["tests/", "docs/"]
  