[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",
  "tricycle>=0.4.1,<0.5",
  "wrapt>=1.16.0,<2",
  "colorlog>=6.8.2,<7",
  # built-in multi-actor `pdb` REPL
  "pdbp>=1.6,<2", # windows only (from `pdbp`)
  # typed IPC msging
  "msgspec>=0.19.0",
  "cffi>=1.17.1",
]

# ------ 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.3.5",
  "pexpect>=4.9.0,<5",
  # `tractor.devx` tooling
  "greenback>=1.2.1,<2",
  "stackscope>=0.2.2,<0.3",
  "pyperclip>=1.9.0",
  "prompt-toolkit>=3.0.50",
  "xonsh>=0.19.2",
]
# TODO, add these with sane versions; were originally in
# `requirements-docs.txt`..
# docs = [
#   "sphinx>="
#   "sphinx_book_theme>="
# ]

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

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

[tool.uv.sources]
# XXX NOTE, only for @goodboy's hacking on `pprint(sort_dicts=False)`
# for the `pp` alias..
# pdbp = { path = "../pdbp", editable = true }

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

# ------ tool.uv.sources ------

[tool.uv]
# XXX NOTE, prefer the sys python bc apparently the distis from
# `astral` are built in a way that breaks `pdbp`+`tabcompleter`'s
# likely due to linking against `libedit` over `readline`..
# |_https://docs.astral.sh/uv/concepts/python-versions/#managed-python-distributions
# |_https://gregoryszorc.com/docs/python-build-standalone/main/quirks.html#use-of-libedit-on-linux
#
# https://docs.astral.sh/uv/reference/settings/#python-preference
python-preference = 'system'

# ------ tool.uv ------

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

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

# ------ tool.hatch ------

[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"

# ------ tool.pytest ------