content: [build-system]
  requires = ["pbr>=6.1.1"]
  build-backend = "pbr.build"
  
  [project]
  name = "taskflow"
  description = "Taskflow structured state management library."
  authors = [
      {name = "OpenStack", email = "openstack-discuss@lists.openstack.org"},
  ]
  readme = {file = "README.rst", content-type = "text/x-rst"}
  license = {text = "Apache-2.0"}
  dynamic = ["version", "dependencies"]
  requires-python = ">=3.10"
  classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Environment :: Console",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: Apache Software License",
    "Operating System :: POSIX :: Linux",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Topic :: Software Development :: Libraries",
    "Topic :: System :: Distributed Computing",
  ]
  
  [project.urls]
  Homepage = "https://docs.openstack.org/taskflow"
  Repository = "https://opendev.org/openstack/taskflow"
  
  [project.optional-dependencies]
  # NOTE(dhellmann): The entries in this section of the file need to be
  # kept consistent with the entries in test-requirements.txt.
  zookeeper = [
    "kazoo>=2.6.0", # Apache-2.0
  ]
  redis = [
    "redis>=4.0.0", # MIT
  ]
  etcd = [
    "etcd3gw>=2.0.0", # Apache-2.0
  ]
  workers = [
    "kombu>=4.3.0", # BSD
  ]
  eventlet = [
    "eventlet>=0.18.2", # MIT
  ]
  database = [
    "SQLAlchemy>=1.0.10", # MIT
    "alembic>=0.8.10", # MIT
    "SQLAlchemy-Utils>=0.30.11", # BSD License
    "PyMySQL>=0.7.6", # MIT License
    "psycopg2>=2.8.0", # LGPL/ZPL
  ]
  
  [project.entry-points."taskflow.jobboards"]
  zookeeper = "taskflow.jobs.backends.impl_zookeeper:ZookeeperJobBoard"
  redis = "taskflow.jobs.backends.impl_redis:RedisJobBoard"
  etcd = "taskflow.jobs.backends.impl_etcd:EtcdJobBoard"
  
  [project.entry-points."taskflow.conductors"]
  blocking = "taskflow.conductors.backends.impl_blocking:BlockingConductor"
  nonblocking = "taskflow.conductors.backends.impl_nonblocking:NonBlockingConductor"
  
  [project.entry-points."taskflow.persistence"]
  dir = "taskflow.persistence.backends.impl_dir:DirBackend"
  file = "taskflow.persistence.backends.impl_dir:DirBackend"
  memory = "taskflow.persistence.backends.impl_memory:MemoryBackend"
  mysql = "taskflow.persistence.backends.impl_sqlalchemy:SQLAlchemyBackend"
  postgresql = "taskflow.persistence.backends.impl_sqlalchemy:SQLAlchemyBackend"
  sqlite = "taskflow.persistence.backends.impl_sqlalchemy:SQLAlchemyBackend"
  zookeeper = "taskflow.persistence.backends.impl_zookeeper:ZkBackend"
  
  [project.entry-points."taskflow.engines"]
  default = "taskflow.engines.action_engine.engine:SerialActionEngine"
  serial = "taskflow.engines.action_engine.engine:SerialActionEngine"
  parallel = "taskflow.engines.action_engine.engine:ParallelActionEngine"
  worker-based = "taskflow.engines.worker_based.engine:WorkerBasedActionEngine"
  workers = "taskflow.engines.worker_based.engine:WorkerBasedActionEngine"
  
  [tool.setuptools]
  packages = [
      "taskflow"
  ]
  