Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use pyproject.toml #1073

Merged
merged 1 commit into from
May 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion dev-requirements.txt

This file was deleted.

247 changes: 247 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
# https://peps.python.org/pep-0517/
[build-system]
requires = ["setuptools>=64"]
build-backend = "setuptools.build_meta"

# https://peps.python.org/pep-0621/
[project]
name = "subliminal"
description = "Subtitles, faster than your thoughts"
requires-python = ">=3.8"
license = { text = "MIT" }
authors = [{ name = "Antoine Bertin", email = "[email protected]" }]
maintainers = [
{ name = "Antoine Bertin", email = "[email protected]" },
{ name = "getzze", email = "[email protected]" },
{ name = "Patrycja Rosa", email = "[email protected]" },
]
keywords = ["subtitle", "subtitles", "video", "movie", "episode", "tv", "show", "series"]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Multimedia :: Video",
]
dynamic = ["version", "readme"]
dependencies = [
"appdirs>=1.3",
"babelfish>=0.6.1",
"beautifulsoup4>=4.4.0",
"chardet>=5.0",
"click>=4.0",
"dogpile.cache>=1.0",
"enzyme>=0.4.1",
"guessit>=3.0.0",
"rarfile>=2.7",
"rebulk>=3.0",
"requests>=2.0",
"srt>=3.5",
"stevedore>=3.0",
]

# extras
# https://peps.python.org/pep-0621/#dependencies-optional-dependencies
[project.optional-dependencies]
docs = [
"sphinx",
"sphinx_rtd_theme",
"sphinxcontrib-programoutput",
]
test = [
"lxml",
"pytest>=6.0",
"pytest-cov",
"pytest-flakes",
"sympy",
"vcrpy>=1.6.1",
]
dev = [
"mypy",
"ruff",
"typos",
"validate-pyproject",
"tox",
]

[project.urls]
homepage = "https://github.com/Diaoul/subliminal"
repository = "https://github.com/Diaoul/subliminal"
documentation = "https://subliminal.readthedocs.org"

[project.scripts]
subliminal = "subliminal.cli:subliminal"

[project.entry-points."subliminal.providers"]
addic7ed = "subliminal.providers.addic7ed:Addic7edProvider"
argenteam = "subliminal.providers.argenteam:ArgenteamProvider"
gestdown = "subliminal.providers.gestdown:GestdownProvider"
napiprojekt = "subliminal.providers.napiprojekt:NapiProjektProvider"
opensubtitles = "subliminal.providers.opensubtitles:OpenSubtitlesProvider"
opensubtitlesvip = "subliminal.providers.opensubtitles:OpenSubtitlesVipProvider"
opensubtitlescom = "subliminal.providers.opensubtitlescom:OpenSubtitlesComProvider"
opensubtitlescomvip = "subliminal.providers.opensubtitlescom:OpenSubtitlesComVipProvider"
podnapisi = "subliminal.providers.podnapisi:PodnapisiProvider"
shooter = "subliminal.providers.shooter:ShooterProvider"
thesubdb = "subliminal.providers.thesubdb:TheSubDBProvider"
tvsubtitles = "subliminal.providers.tvsubtitles:TVsubtitlesProvider"

[project.entry-points."subliminal.refiners"]
hash = "subliminal.refiners.hash:refine"
metadata = "subliminal.refiners.metadata:refine"
omdb = "subliminal.refiners.omdb:refine"
tvdb = "subliminal.refiners.tvdb:refine"

[project.entry-points."babelfish.language_converters"]
addic7ed = "subliminal.converters.addic7ed:Addic7edConverter"
opensubtitlescom = "subliminal.converters.opensubtitlescom:OpenSubtitlesComConverter"
shooter = "subliminal.converters.shooter:ShooterConverter"
thesubdb = "subliminal.converters.thesubdb:TheSubDBConverter"
tvsubtitles = "subliminal.converters.tvsubtitles:TVsubtitlesConverter"

[tool.setuptools]
py-modules = ["subliminal"]
include-package-data = true

[tool.setuptools.package-data]
subliminal = [
"py.typed",
]

[tool.setuptools.packages.find]
namespaces = false
where = ["."]

[tool.setuptools.dynamic]
version = {attr = "subliminal.__version__"}
readme = {file = ["README.rst", "HISTORY.rst"]}


# https://docs.astral.sh/ruff/
[tool.ruff]
line-length = 120
src = ["subliminal", "tests"]

[tool.ruff.lint]
pydocstyle = { convention = "pep257" }
select = [
getzze marked this conversation as resolved.
Show resolved Hide resolved
"E", # style errors
"F", # flakes
"W", # warnings
"D", # pydocstyle
"D417", # Missing argument descriptions in Docstrings
"I", # isort
"UP", # pyupgrade
"S", # bandit
"C4", # flake8-comprehensions
"B", # flake8-bugbear
"TCH", # flake8-typecheck
"TID", # flake8-tidy-imports
"RUF", # ruff-specific rules
"ISC", # flake8-implicit-str-concat
"PT", # flake8-pytest-style
"FA", # flake8-future-annotations
"BLE", # flake8-blind-except
"RET", # flake8-return
"SIM", # flake8-simplify
"DTZ", # flake8-datetimez
"A", # flake8-builtins
"FBT", # flake8-boolean-trap
"ANN2", # flake8-annotations
"ANN001",
"ASYNC", # flake8-async
"TRY", # tryceratops
]
ignore = [
"D401", # First line should be in imperative mood
]

[tool.ruff.lint.per-file-ignores]
"docs/conf*.py" = ["ALL"]
"subliminal/__init__.py" = ["E402"]
"tests/*.py" = ["D", "S", "RUF012"]

# https://docs.astral.sh/ruff/formatter/
[tool.ruff.format]
docstring-code-format = true
quote-style = "single"

# https://docs.pytest.org/en/6.2.x/customize.html
[tool.pytest.ini_options]
minversion = "6.0"
testpaths = ["tests"]
addopts = "--doctest-glob='*.rst'"
markers = [
"integration",
"converter",
]
doctest_optionflags = ["NORMALIZE_WHITESPACE", "IGNORE_EXCEPTION_DETAIL"]

# https://coverage.readthedocs.io/en/latest/config.html
[tool.coverage.report]
exclude_also = [
"pragma: no cover",
"if TYPE_CHECKING:",
"@overload",
"except ImportError",
"\\.\\.\\.",
"raise NotImplementedError()",
]
show_missing = true
skip_covered = true
fail_under = 100

[tool.coverage.run]
source = ["subliminal"]


# https://mypy.readthedocs.io/en/stable/config_file.html
[tool.mypy]
files = "subliminal/**/*.py"
exclude = ['build', 'dist', 'docs']
# global-only flags
pretty = true
show_error_codes = true
namespace_packages = false
warn_redundant_casts = true
# global per-module flags
check_untyped_defs = true
strict_equality = true
disallow_any_generics = false
disallow_subclassing_any = false

[[tool.mypy.overrides]]
module = ["subliminal.*"]
warn_return_any = true
disallow_untyped_defs = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
extra_checks = true

[[tool.mypy.overrides]]
module = ["tests.*"]
disallow_untyped_defs = false
disallow_untyped_calls = false
warn_return_any = false
disable_error_code = ["var-annotated"]


# https://github.com/crate-ci/typos/blob/master/docs/reference.md
[tool.typos.files]
extend-exclude = ["cassettes/", "tests/"]

[tool.typos.default]
extend-ignore-re = [
"(?Rm)^.*#\\s*spellchecker:\\s*disable-line$",
"#\\s*spellchecker:off\\s*\\n.*\\n\\s*#\\s*spellchecker:on"
]
[tool.typos.default.extend-identifiers]
tha = "tha"
14 changes: 0 additions & 14 deletions pytest.ini

This file was deleted.

1 change: 0 additions & 1 deletion requirements.txt

This file was deleted.

10 changes: 0 additions & 10 deletions setup.cfg

This file was deleted.

99 changes: 0 additions & 99 deletions setup.py

This file was deleted.

2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ envlist = {py38,py39,py310,py311,py312}-{native,lxml}
[testenv]
deps =
lxml: lxml
commands = python setup.py test
commands = pytest