Skip to content

Commit

Permalink
add pyproject.toml
Browse files Browse the repository at this point in the history
  • Loading branch information
getzze committed May 14, 2024
1 parent 9cda8df commit c8e42ca
Show file tree
Hide file tree
Showing 8 changed files with 238 additions and 129 deletions.
1 change: 0 additions & 1 deletion dev-requirements.txt

This file was deleted.

234 changes: 234 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,234 @@
# 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]" }]
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",
"requests_cache>=1.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 = [
"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
"A001", # flake8-builtins
"TCH", # flake8-typecheck
"TID", # flake8-tidy-imports
"RUF", # ruff-specific rules
"ISC", # flake8-implicit-str-concat
"PT", # flake8-pytest-style
]
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


# 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.

6 changes: 3 additions & 3 deletions subliminal/__init__.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from __future__ import annotations

__title__ = 'subliminal'
import logging

__version__ = '2.1.1-dev'
__short_version__ = '.'.join(__version__.split('.')[:2])
__title__ = 'subliminal'
__author__ = 'Antoine Bertin'
__license__ = 'MIT'
__copyright__ = 'Copyright 2016, Antoine Bertin'

import logging

from .core import (AsyncProviderPool, ProviderPool, check_video, download_best_subtitles, download_subtitles,
list_subtitles, refine, save_subtitles, scan_video, scan_videos)
from .cache import region
Expand Down
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

0 comments on commit c8e42ca

Please sign in to comment.