[project]
name = "moccasin"
version = "0.4.2"
description = "Pythonic smart contract development framework using Titanoboa"
authors = [
    { name = "PatrickAlphac", email = "54278053+PatrickAlphaC@users.noreply.github.com" },
    { name = "charles-cooper", email = "3867501+charles-cooper@users.noreply.github.com" },
]
dependencies = [
    "titanoboa>=v0.2.6",
    "python-dotenv>=1.0.1",
    "titanoboa-zksync>=0.2.10",
    "tqdm>=4.66.5",
    "tomlkit>=0.13.2",
    # For preserving comments when writing to toml
    "tomli-w>=1.0.0",
    "pytest-cov>=5.0.0",
    "uv>=0.4.15",
    "pytest-xdist>=3.6.1",
    "vyper>=0.4.1",
    "ipykernel>=6.29.5",
]
readme = "README.md"
requires-python = ">= 3.11, <= 3.13"
keywords = [
    "moccasin",
    "mox",
    "ethereum",
    "blockchain",
    "smart-contract",
    "zksync",
]
classifiers = [
    "Development Status :: 4 - Beta",
    "Environment :: Console",
    "Intended Audience :: Developers",
    "Operating System :: OS Independent",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3 :: Only",
    "Topic :: Software Development",
    "Topic :: Software Development :: Build Tools",
    "Topic :: Software Development :: Quality Assurance",
    "Topic :: Software Development :: Testing",
    "Topic :: Software Development :: Libraries",
    "Topic :: Utilities",
]
license-files = [
    "LICENSE-MIT",
    "LICENSE-APACHE",
]

[tool.uv]
managed = true
package = true
dev-dependencies = [
    "pytest>=8.3.2",
    "mypy>=1.11.0",
    "snekmate>=0.1.1",
    "vyper>=0.4.1",
    "ruff>=0.6.3",
    "moccasin",
    "mamushi>=0.0.5",
]

[project.urls]
Repository = "https://github.com/cyfrin/moccasin"
Documentation = "https://cyfrin.github.io/moccasin/"
Releases = "https://github.com/Cyfrin/moccasin/releases"

[tool.uv.sources]
moccasin = { workspace = true }

[tool.uv.workspace]
members = [
    "tests/data/project_no_config",
]

[project.scripts]
"mox" = "moccasin:main"
"moccasin" = "moccasin:main"

[project.optional-dependencies]
docs = [
    "sphinx>=8.0.2",
    "shibuya>=2024.8.30",
    "sphinx-argparse>=0.5.2",
    "sphinx-copybutton>=0.5.2",
    "sphinx-multiversion>=0.2.4",
    "sphinx-tabs>=3.4.5",
    "watchdog>=5.0.2",
]

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

[tool.hatch.metadata]
allow-direct-references = true

[tool.hatch.build.targets.wheel]
packages = [
    "moccasin",
]

[tool.mypy]
disable_error_code = 'type-arg, attr-defined'
ignore_missing_imports = true
exclude = [
    'tests/',            # Excludes all files in the tests directory
    '(^|/)test_.*\.py$', # Excludes files that start with test_
]

[tool.pytest.ini_options]
addopts = "--ignore=tests/data/"


[tool.ruff.format]
skip-magic-trailing-comma = true
