[project]
name = "seacogs"
version = "0.1.0"
description = "My assorted cogs for Red-DiscordBot."
authors = [{ name = "cswimr", email = "seaswimmerthefsh@gmail.com" }]
license = { file = "LICENSE" }
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
  "aiosqlite==0.21.0",
  "beautifulsoup4==4.12.3",
  "colorthief==0.2.1",
  "markdownify==0.14.1",
  "numpy==2.2.2",
  "phx-class-registry==5.1.1",
  "pillow==10.4.0",
  "pip==25.0",
  "py-dactyl",
  "pydantic==2.10.6",
  "red-discordbot==3.5.17",
  "watchdog==6.0.0",
  "websockets==14.2",
]

[dependency-groups]
documentation = [
  "mkdocs==1.6.1",
  "mkdocs-git-authors-plugin==0.9.4",
  "mkdocs-git-revision-date-localized-plugin==1.3.0",
  "mkdocs-material[imaging]==9.5.50",
  "mkdocs-redirects==1.2.2",
  "mkdocstrings[python]==0.27.0",
]

[tool.uv]
dev-dependencies = ["pylint==3.3.6", "ruff==0.9.3", "sqlite-web==0.6.4"]

[tool.uv.sources]
py-dactyl = { git = "https://github.com/iamkubi/pydactyl", tag = "v2.0.5" }

[tool.basedpyright]
typeCheckingMode = "basic"
reportAttributeAccessIssue = false # disabled because `commands.group.command` is listed as Any / Unknown for some reason

[tool.ruff]
# Exclude a variety of commonly ignored directories.
exclude = [
  ".bzr",
  ".direnv",
  ".eggs",
  ".git",
  ".git-rewrite",
  ".hg",
  ".ipynb_checkpoints",
  ".mypy_cache",
  ".nox",
  ".pants.d",
  ".pyenv",
  ".pytest_cache",
  ".pytype",
  ".ruff_cache",
  ".svn",
  ".tox",
  ".venv",
  ".vscode",
  "__pypackages__",
  "_build",
  "buck-out",
  "build",
  "dist",
  "node_modules",
  "site-packages",
  "venv",
]

# Same as Black.
line-length = 320
indent-width = 4

# Assume Python 3.11
target-version = "py311"

[tool.ruff.lint]
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`)  codes by default.
# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
# McCabe complexity (`C901`) by default.
select = [
  "I",
  "N",
  "F",
  "W",
  "E",
  "G",
  "A",
  "COM",
  "INP",
  "T20",
  "PLC",
  "PLE",
  "PLW",
  "PLR",
  "LOG",
  "SLF",
  "ERA",
  "FIX",
  "PERF",
  "C4",
  "EM",
  "RET",
  "RSE",
]
ignore = ["PLR0911", "PLR0912", "PLR0915", "PLR2004", "PLR0913", "EM101"]

# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = ["ALL"]
unfixable = []

# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"

[tool.ruff.format]
# Like Black, use double quotes for strings.
quote-style = "double"

# Like Black, indent with spaces, rather than tabs.
indent-style = "space"

# Like Black, respect magic trailing commas.
skip-magic-trailing-comma = false

# Like Black, automatically detect the appropriate line ending.
line-ending = "auto"

# Enable auto-formatting of code examples in docstrings. Markdown,
# reStructuredText code/literal blocks and doctests are all supported.
#
# This is currently disabled by default, but it is planned for this
# to be opt-out in the future.
docstring-code-format = false

# Set the line length limit used when formatting code snippets in
# docstrings.
#
# This only has an effect when the `docstring-code-format` setting is
# enabled.
docstring-code-line-length = "dynamic"