[tool.poetry]
name = "soundrecording-utils"
version = "3.2.1"
description = "Utility methods related to handling Sound Recording Version files and creating DDEX documents"
authors = ["Sony Music PDE <webdev@theorchard.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.11"
lxml = ">=6.1.0"
typedload = "^2.0"
gql = {version = "^4.0.0", extras = ["requests"]}
pygments = ">=2.20.0"

[tool.poetry.group.dev.dependencies]
flake8 = "^7.0.0"
flake8-docstrings = "^1.7.0"
flake8-isort = "^6.1.0"
flake8-quotes = "^3.4.0"
flake8-builtins = "^2.5.0"
isort = "^5.13.0"
mypy = "^1.11.0"
pytest = "^9.0.3"
pytest-cov = "^5.0.0"
pytest-mock = "^3.14.0"
bump2version = "^1.0.1"
freezegun = "^1.5.5"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.isort]
profile = "black"
line_length = 120
known_first_party = ["soundrecording_utils"]
skip_gitignore = true

[tool.mypy]
python_version = "3.13"
pretty = true
color_output = true
show_error_codes = true
warn_unused_ignores = true
warn_redundant_casts = true
check_untyped_defs = true
ignore_missing_imports = true

[[tool.mypy.overrides]]
module = "tests.*"
ignore_errors = true

[tool.pytest.ini_options]
addopts = [
    "--strict-config",
    "--strict-markers",
    "-m",
    "not integration",
]
xfail_strict = true
junit_family = "xunit2"
markers = [
    "integration: hits real external services; opt-in via -m integration",
]

[tool.coverage.report]
exclude_also = [
    "@abstractmethod",
    "@abc.abstractmethod",
    "if TYPE_CHECKING",
    "raise NotImplementedError",
]
