[project]
name = "suno_recs"
version = "0.1.0"
description = ""
authors = [
    {name = "Suno", email = "code@suno.ai"},
]
dependencies = [
    "boto3>=1.39.12",
    "datadog>=0.52.0",
    "ddtrace>=3.10.2",
    "elasticsearch>=8.0.0,<9.0.0",
    "modal>=1.0.1",
    "msgpack>=1.0.0",
    "numpy>=1.24.0",
    "pydantic>=2.0",
    "pysocks>=1.7.1",
    "redis>=5.2.1",
    "socks>=0",
    "zstandard>=0.21.0",
]
requires-python = ">=3.12"
readme = "README.md"
license = {text = "UNLICENSED"}
[project.optional-dependencies]
worker = [
    "modal==1.0.1",
    "redis==5.2.1",
]

[tool.uv]
dev-dependencies = [
    "black==25.1.0",
    "ruff==0.7.1",
    "pytest==8.3.5",
    "pyright==1.1.396",
    "modal==1.0.1",
    "redis==5.2.1",
    "setuptools==75.8.2",
    "pip-licenses>=5.0.0",
]

[tool.ruff]
line-length = 105

exclude = [
"suno_recs/worker/assets",  # contains a bunch of .py files that aren't actually python
"*.json.py",  # contains a bunch of .py files that aren't actually python
"*.txt.py",  # contains a bunch of .py files that aren't actually python
]  
lint.ignore-init-module-imports = true

lint.select = [
# "A",  # flake8-builtins
# "B",  # bugbear
# "C",  # complexity
# "D",  # pydocstyle
"E",  # pyflakes errors
"F",  # pyflakes
# "G",  # logging format
# "I",  # imports, fixable
#  "N",  # variable names
# "Q",  # flake quotes
# "S",  # security
# "T",  # print statements
# "W",  # warnings, fixable
# "ANN",  # annotations
# "ARG",  # unused arguments
# "BLE",  # blind exceptions
# "DTZ",  # datetimes
# "EM", # string formatting in execptions, fixable
# "ERA",  # commented code
# "EXE",  # flake8 executables
# "FBT",  # boolean traps
# "ICN",  # import conventions
# "ISC",  # implicit string concatenation
# "NPY",  # numpy specific rules
# "PD",  # pandas rules
# "PGH", # blanket type ignores
# "PIE",  # misc linting
# "PL",  # refactoring
# "PT",  # unittest-style asserts
# "PTH",  # pathlib
# "RET",  # return statements
# "RSE",  # raise statements
# "RUF",  # ruff-specific rules
# "SIM",  # simplifications
# "SLF",  # check for access of private class attributes
# "TCH",  # type-checking
# "TRY",  # try-statement linting
# "UP",  # pyupgrade
# "YTT",  # sys.version lints
]

lint.ignore = [
# these errors need to be fixed eventually
"E402",
"E501",
"E711",
"E722",
"E741",
"F403",
"F811",
"F841",
]

lint.unfixable = [
"F841",  # don't let ruff remove unused variables by default-- results are often very confusing.
]

[tool.black]
line-length = 105

[tool.ruff.format]
exclude = ["suno_recs/scripts/*", "*.json.py", "*.txt.py"]

[tool.pytest.ini_options]
markers = [
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
    "serial",
]

[tool.pyright]
include = ["suno_recs"]
exclude = ["suno_recs/worker/assets/*"]
