diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index e393123..2d513da 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -38,3 +38,6 @@ jobs: - name: Type check Python code run: uv run mypy src + + - name: Check package build + run: uv build --verbose diff --git a/pyproject.toml b/pyproject.toml index 7d31f99..91277e3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "cat-ai" -version = "0.0.5-alpha" +version = "0.0.6" description = "Python client for running CAT tests in a Python codebase" authors = [ { name = "Mike Gehard", email = "mikegehard@artium.ai" }, @@ -10,16 +10,15 @@ authors = [ { name = "Tim Kersey", email = "timkersey@artium.ai" }, { name = "Michael Harris", email = "michaelharris@artium.ai" }, ] -requires-python = "~=3.13" +requires-python = ">=3.13" readme = "README.md" dependencies = [ # this small library should be kept independent - # consider adding dependencies to on of the dependency groups + # consider adding dependencies to one of the dependency groups ] -packages = [{ include = "cat_ai", from = "src" }] -license = "MIT" +license = { file = "LICENSE"} -[dependency-groups] +[project.optional-dependencies] test = [ "matplotlib>=3.10.1", "pytest>=8.3.4,<9", @@ -40,6 +39,33 @@ dev = [ "pytest-timeout>=2.3.1", ] +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["src/cat_ai"] + +[dependency-groups] +test = [ + "matplotlib>=3.10.1", + "pytest>=8.3.4,<9", + "pytest-asyncio>=0.21.0,<0.22", + "mypy>=1.8.0,<2", + "pytest-snapshot>=0.9.0", +] +examples = ["openai>=1.63.2,<2", "python-dotenv>=1.0.1,<2"] +dev = [ + "sphinx>=8.1.3,<9", + "sphinx-rtd-theme>=3.0.2,<4", + "sphinx-markdown-builder>=0.6.8,<0.7", + "notebook>=7.3.2", + "pydrive2>=1.21.3,<2", + "pydantic>=2.10.6,<3", + "ruff>=0.9.10", + "pytest-timeout>=2.3.1", +] + [tool.uv] default-groups = ["test", "examples", "dev"] @@ -47,7 +73,7 @@ default-groups = ["test", "examples", "dev"] asyncio_mode = "auto" pythonpath = [".", "src"] testpaths = ["tests"] -faulthandler_timeout="100" +faulthandler_timeout = "100" [tool.mypy] python_version = "3.13" @@ -71,9 +97,15 @@ target-version = ['py313'] include = '\.pyi?$' [tool.ruff] -# Rule selection and configuration line-length = 100 -lint.extend-ignore = ["E203"] -# Equivalent to max-complexity -lint.mccabe = { max-complexity = 10 } -exclude = [".git", "__pycache__", "build", "dist"] +target-version = "py313" + +[tool.ruff.lint] +extend-ignore = ["E203"] +select = ["E", "F", "B", "I"] + +[tool.ruff.lint.mccabe] +max-complexity = 10 + +[tool.ruff.lint.per-file-ignores] +"__init__.py" = ["F401"] diff --git a/uv.lock b/uv.lock index cb96566..0dd6e5e 100644 --- a/uv.lock +++ b/uv.lock @@ -1,6 +1,6 @@ version = 1 revision = 1 -requires-python = ">=3.13, <4" +requires-python = ">=3.13" [[package]] name = "alabaster" @@ -185,10 +185,10 @@ wheels = [ [[package]] name = "cat-ai" -version = "0.0.5a0" -source = { virtual = "." } +version = "0.0.6" +source = { editable = "." } -[package.dev-dependencies] +[package.optional-dependencies] dev = [ { name = "notebook" }, { name = "pydantic" }, @@ -212,7 +212,49 @@ test = [ { name = "pytest-snapshot" }, ] +[package.dev-dependencies] +dev = [ + { name = "notebook" }, + { name = "pydantic" }, + { name = "pydrive2" }, + { name = "pytest-timeout" }, + { name = "ruff" }, + { name = "sphinx" }, + { name = "sphinx-markdown-builder" }, + { name = "sphinx-rtd-theme" }, +] +examples = [ + { name = "openai" }, + { name = "python-dotenv" }, +] +test = [ + { name = "matplotlib" }, + { name = "mypy" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-snapshot" }, +] + [package.metadata] +requires-dist = [ + { name = "black", marker = "extra == 'test'", specifier = ">=24.2.0,<25" }, + { name = "matplotlib", marker = "extra == 'test'", specifier = ">=3.10.1" }, + { name = "mypy", marker = "extra == 'test'", specifier = ">=1.8.0,<2" }, + { name = "notebook", marker = "extra == 'dev'", specifier = ">=7.3.2" }, + { name = "openai", marker = "extra == 'examples'", specifier = ">=1.63.2,<2" }, + { name = "pydantic", marker = "extra == 'dev'", specifier = ">=2.10.6,<3" }, + { name = "pydrive2", marker = "extra == 'dev'", specifier = ">=1.21.3,<2" }, + { name = "pytest", marker = "extra == 'test'", specifier = ">=8.3.4,<9" }, + { name = "pytest-asyncio", marker = "extra == 'test'", specifier = ">=0.21.0,<0.22" }, + { name = "pytest-snapshot", marker = "extra == 'test'", specifier = ">=0.9.0" }, + { name = "pytest-timeout", marker = "extra == 'dev'", specifier = ">=2.3.1" }, + { name = "python-dotenv", marker = "extra == 'examples'", specifier = ">=1.0.1,<2" }, + { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.9.10" }, + { name = "sphinx", marker = "extra == 'dev'", specifier = ">=8.1.3,<9" }, + { name = "sphinx-markdown-builder", marker = "extra == 'dev'", specifier = ">=0.6.8,<0.7" }, + { name = "sphinx-rtd-theme", marker = "extra == 'dev'", specifier = ">=3.0.2,<4" }, +] +provides-extras = ["test", "examples", "dev"] [package.metadata.requires-dev] dev = [ @@ -230,7 +272,6 @@ examples = [ { name = "python-dotenv", specifier = ">=1.0.1,<2" }, ] test = [ - { name = "black", specifier = ">=24.2.0,<25" }, { name = "matplotlib", specifier = ">=3.10.1" }, { name = "mypy", specifier = ">=1.8.0,<2" }, { name = "pytest", specifier = ">=8.3.4,<9" },