content: [build-system]
  build-backend = "hatchling.build"
  requires = [
    "hatchling>=1.27.0",
  ]
  
  [project]
  name = "openlineage-python"
  version = "1.40.0"
  description = "OpenLineage Python Client"
  license-files.globs = ["LICENSE",]
  readme = "README.md"
  keywords = [
    "openlineage",
  ]
  authors = [{ name = "OpenLineage", email = "info@openlineage.io" }]
  requires-python = ">=3.9"
  classifiers = [
    "License :: OSI Approved :: Apache Software License",
    "Operating System :: OS Independent",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3 :: Only",
    "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",
  ]
  dependencies = [
    "attrs>=20.0",
    "python-dateutil>=2.8.2",
    "pyyaml>=5.4",
    "requests>=2.32.4",
    "httpx>=0.27.0",
    "packaging>=21.0",
    "build>=1.2.2"
  ]
  optional-dependencies.kafka = [
    "confluent-kafka>=2.1.1",
  ]
  optional-dependencies.msk-iam = [
    "aws-msk-iam-sasl-signer-python>=1.0.1",
    "confluent-kafka>=2.1.1",
  ]
  optional-dependencies.datazone = [
    "boto3>=1.34.134"
  ]
  optional-dependencies.gcplineage = [
    "google-cloud-datacatalog-lineage>=0.3.14"
  ]
  optional-dependencies.fsspec = [
    "fsspec>=2023.1.0"
  ]
  optional-dependencies.test = [
    "covdefaults>=2.3",
    "pytest>=7.3.1",
    "pytest-cov>=4.1",
    "pytest-mock>=3.10",
    "pyyaml>=5.4",
    "uvicorn>=0.20.0",
    "fastapi>=0.100.0",
  ]
  
  optional-dependencies.docs = [
    "sphinx>=7.0",
    "beautifulsoup4>=4.12.0",
    "sphinx-autodoc-typehints>=2.0.0",
    "pydata-sphinx-theme>=0.13"
  ]
  
  optional-dependencies.generator = [
    "ruff",
    "click",
    "datamodel-code-generator==0.33.0"
  ]
  
  [tool.hatch.build]
  exclude = [".idea", ".ruff_cache", ".gitignore", "setup.cfg"]
  targets.wheel = {packages = ["openlineage"]}
  
  [tool.coverage]
  html.show_contexts = true
  html.skip_covered = false
  report.fail_under = 90
  run.parallel = true
  run.plugins = ["covdefaults"]
  run.omit = [
      "tests/*",
      "*/tests/*",
      "test_*.py",
      "*_test.py"
  ]
  
  [tool.mypy]
  disable_error_code = "no-redef"
  warn_redundant_casts = true
  show_error_codes = true
  overrides = [
    { ignore_missing_imports = true, module = [
    "confluent_kafka.*",
    "google.cloud.*",
    "google.oauth2.*",
  ] } ]
  strict = true
  pretty = true
  
  [project.scripts]
  ol-generate-code = "openlineage.client.generator.cli:main"
  
  [tool.ruff]
  line-length = 110
  lint.select = [
      "F",
      "E",
      "W",
      "I001"
  ]
  lint.ignore-init-module-imports = true
  src = ["openlineage", "tests"]
  namespace-packages = ["openlineage/client"]
  
  [tool.pytest.ini_options]
  markers = [
      "integration: Integration tests requiring test server",
      "unit: Unit tests"
  ]
  testpaths = ["tests"]
  filterwarnings = [
      "ignore::DeprecationWarning",
      "ignore::PendingDeprecationWarning"
  ]
  addopts = [
      "--strict-markers",
      "--strict-config",
      "-ra"
  ]
  
  [dependency-groups]
  dev = [
      "ruff>=0.12.2",
  ]
  