[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

# ------ build-system ------

[project]
name = "tractor"
version = "0.1.0a6dev0"
description = 'structured concurrent `trio`-"actors"'
authors = [{ name = "Tyler Goodlet", email = "goodboy_foss@protonmail.com" }]
requires-python = ">= 3.11"
readme = "docs/README.rst"
license = "AGPL-3.0-or-later"
keywords = [
  "trio",
  "async",
  "concurrency",
  "structured concurrency",
  "actor model",
  "distributed",
  "multiprocessing",
]
classifiers = [
  "Development Status :: 3 - Alpha",
  "Operating System :: POSIX :: Linux",
  "Framework :: Trio",
  "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
  "Programming Language :: Python :: Implementation :: CPython",
  "Programming Language :: Python :: 3 :: Only",
  "Programming Language :: Python :: 3.11",
  "Topic :: System :: Distributed Computing",
]
dependencies = [
# trio runtime and friends
  # (poetry) proper range specs,
  # https://packaging.python.org/en/latest/discussions/install-requires-vs-requirements/#id5
  # TODO, for 3.13 we must go go `0.27` which means we have to
  # disable strict egs or port to handling them internally!
  # trio='^0.27'
  "trio>=0.24,<0.25",
  "tricycle>=0.4.1,<0.5",
  "trio-typing>=0.10.0,<0.11",

  "wrapt>=1.16.0,<2",
  "colorlog>=6.8.2,<7",

# built-in multi-actor `pdb` REPL
  "pdbp>=1.5.0,<2",

# typed IPC msging
# TODO, get back on release once 3.13 support is out!
  "msgspec",
]

# ------ project ------

[dependency-groups]
dev = [
  # test suite
  # TODO: maybe some of these layout choices?
  # https://docs.pytest.org/en/8.0.x/explanation/goodpractices.html#choosing-a-test-layout-import-rules
  "pytest>=8.2.0,<9",
  "pexpect>=4.9.0,<5",
  # `tractor.devx` tooling
  "greenback>=1.2.1,<2",
  "stackscope>=0.2.2,<0.3",

  # xonsh usage/integration (namely as @goodboy's sh of choice Bp)
  "xonsh>=0.19.1",
  "xontrib-vox>=0.0.1,<0.0.2",
  "prompt-toolkit>=3.0.43,<4",
  "xonsh-vox-tabcomplete>=0.5,<0.6",
  "pyperclip>=1.9.0",
]

[tool.uv.sources]
msgspec = { git = "https://github.com/jcrist/msgspec.git" }

# ------ tool.uv.sources ------
# TODO, distributed (multi-host) extensions
# linux kernel networking
# 'pyroute2

[tool.hatch.build.targets.sdist]
include = ["tractor"]

[tool.hatch.build.targets.wheel]
include = ["tractor"]

# ------ dependency-groups ------

[tool.towncrier]
package = "tractor"
filename = "NEWS.rst"
directory = "nooz/"
version = "0.1.0a6"
title_format = "tractor {version} ({project_date})"
template = "nooz/_template.rst"
all_bullets = true

[[tool.towncrier.type]]
  directory = "feature"
  name = "Features"
  showcontent = true

[[tool.towncrier.type]]
  directory = "bugfix"
  name = "Bug Fixes"
  showcontent = true

[[tool.towncrier.type]]
  directory = "doc"
  name = "Improved Documentation"
  showcontent = true

[[tool.towncrier.type]]
  directory = "trivial"
  name = "Trivial/Internal Changes"
  showcontent = true

# ------ tool.towncrier ------

[tool.pytest.ini_options]
minversion = '6.0'
testpaths = [
  'tests'
]
addopts = [
  # TODO: figure out why this isn't working..
  '--rootdir=./tests',

  '--import-mode=importlib',
  # don't show frickin captured logs AGAIN in the report..
  '--show-capture=no',
]
log_cli = false
# TODO: maybe some of these layout choices?
# https://docs.pytest.org/en/8.0.x/explanation/goodpractices.html#choosing-a-test-layout-import-rules
# pythonpath = "src"