[project]
name = "suno-dagster"
version = "0.1.0"
description = "suno dagster repo"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
  "boto3>=1.36.25",
  "certifi==2025.1.31", # pinning due to a Snowflake issue: https://status.snowflake.com/incidents/txclg2cyzq32
  "dagster-cloud",
  "dagster-dbt>=0.26.17",
  "dagster-postgres>=0.26.1",
  "dagster-snowflake-pandas",
  "dagster-snowflake",
  "dagster-webserver>=1.10.1",
  "dagster",
  "dagster>=1.12.0",
  "datadog>=0.51.0",
  "dbt-core>=1.9.5",
  "dbt-snowflake>=1.9.4",
  "geoip2>=4.8.1",
  "numpy>=2.2.3",
  "openpyxl>=3.1.5",
  "pandas",
  "pandas>=2.2.3",
  "pyarrow>=19.0.0",
  "python-dotenv>=1.0.1",
  "ruff>=0.9.6",
  "snowflake-connector-python",
  "snowflake-connector-python[pandas]>=3.17.4",
  "snowflake-snowpark-python>=1.26.0",
  "sqlalchemy>=2.0.0",
  "sqlparse>=0.5.3",
  "stripe>=9.12.0",
  "user-agents>=2.2.0",
  "sqlfluff-templater-dbt>=3.4.2",
]

[project.optional-dependencies]
dev = [
    "pytest"
]

[build-system]
requires = ["setuptools>=42", "wheel", "tomli; python_version < '3.11'"]
build-backend = "setuptools.build_meta"

[tool.dagster]
module_name = "src.definitions"
code_location_name = "src"

[tool.ruff]

target-version = "py38"

# Codebase-wide default line length. Override in package-specific pyproject.toml where a different
# length is desired.
line-length = 100

[tool.ruff.lint]

ignore = [

  # (missing public docstrings) These work off of the Python sense of "public", rather than our
  # bespoke definition based off of `@public`. When ruff supports custom plugins then we can write
  # appropriate rules to require docstrings for `@public`.
  "D100",
  "D101",
  "D102",
  "D103",
  "D104",
  "D105",
  "D106",
  "D107",

  # (docstring imperative mood) Overly restrictive.
  "D401",

  # (module level import not at top) There are several places where we use e.g.
  # warnings.filterwarings calls before imports.
  "E402",

  # (line too long): This fires for comments, which the ruff formatter won't auto-wrap. Disabling
  # until there is an autoformat solution available for comments.
  "E501",

  # (no type comparison): There are a few places where we use `== type(None)` which are more clear
  # than the equivalent `isinstance` check.
  'E721',

  # (bare exception): There are many places where we want to catch a maximally generic exception.
  'E722',

  # (no assign lambda): existing code assigns lambdas in a few places. With ruff formatting
  # requiring extra empty lines between defs, disallowing lambda assignment can make code less
  # readable.
  "E731",

  # (try-except-in-loop) we use this pattern in many places and the performance impact is negligible
  "PERF203",

  # (no concatenation) Existing codebase has many concatentations, no reason to disallow them.
  "RUF005",

  # (use ClassVar for attr declarations with defaults) This is a good rule for vanilla Python, but
  # triggers false positives for many libs that have DSLs that make use of attr defaults.
  "RUF012",

  ##### TEMPORARY DISABLES

  # (assorted docstring rules) There are too many violations of these to enable
  # right now, but we should enable after fixing the violations.
  "D200", # (one-line docstring should fit)
  "D205", # (blank line after summary)
  "D417", # (missing arg in docstring)

  # (assorted perf rules) We have a lot of violations, enable when autofix is available
  "PERF401", # (manual-list-comprehension)
  "PERF402", # (manual-list-copy)

  # (disallow print statements) Allow print statements for debugging
  "T201",
]

# By default, ruff only uses all "E" (pycodestyle) and "F" (pyflakes) rules.
# Here we append to the defaults.
select = [

  # (flake8-builtins) detect shadowing of python builtin symbols by variables and arguments.
  # Attributes are OK (which is why A003) is not included here.
  "A001",
  "A002",

  # (useless expression): Expressions that aren't assigned to anything are typically bugs.
  "B018",

  # (static key dict comprehension): Flag reuse of a key in dict comprehensions.
  "B035",

  # (pydocstyle) Docstring-related rules. A large subset of these are ignored by the
  # "convention=google" setting, we set under tool.ruff.pydocstyle.
  "D",

  # (pycodestyle) pycodestyle rules
  "E",

  # (pyflakes) pyflakes rules
  "F",

  # (isort) detect improperly sorted imports
  "I001",

  # (performance) perflint rules
  "PERF",

  # (pylint) use all pylint rules from categories "Convention", "Error", and "Warning" (ruff
  # currently implements only a subset of pylint's rules)
  "PLE",
  "PLW",

  # (no commented out code) keep commented out code blocks out of the codebase
  # "ERA001",

  # (ruff-specific) Enable all ruff-specific checks (i.e. not ports of
  # functionality from an existing linter).
  "RUF",

  # (private member access) Flag access to `_`-prefixed symbols. By default the various special
  # methods on `NamedTuple` are ignored (e.g. `_replace`).
  "SLF001",

  # (flake8-type-checking) Auto-sort imports into TYPE_CHECKING blocks depending on whether
  # they are runtime or type-only imports.
  "TCH",

  # (banned-api) Flag use of banned APIs. See tool.ruff.flake8-tidy-imports.banned-api for details.
  "TID251",

  # (f-strings) use f-strings instead of .format()
  "UP032",

  # (invalid escape sequence) flag errant backslashes
  "W605",
]

[tool.ruff.lint.flake8-builtins]

# We use `id` in many places and almost never want to use the python builtin.
builtins-ignorelist = ["id"]

[tool.ruff.lint.flake8-tidy-imports.banned-api]

"__future__.annotations".msg = "Directly quote annotations instead."

[tool.ruff.lint.isort]

# Combine multiple `from foo import bar as baz` statements with the same source
# (`foo`) into a single statement.
combine-as-imports = true

# Imports of the form `from foo import bar as baz` show one `import bar as baz`
# per line. Useful for __init__.py files that just re-export symbols.
force-wrap-aliases = true

[tool.ruff.lint.per-file-ignores]

# Don't format docstrings in alembic migrations.
"**/alembic/versions/*.py" = ["D"]

[tool.ruff.lint.pydocstyle]

# Enforce google-style docstrings. This is equivalent to ignoring a large number of pydocstyle (D)
# rules incompatible with google-style docstrings. See:
# https://google.github.io/styleguide/pyguide.html#383-functions-and-methods
convention = "google"
