[project] name = "visaapply" version = "0.1.0" description = "Watches Visametric (Belgrade) German-Schengen visa appointment slots and notifies Telegram when slots appear. Notify-only — does not book." readme = "README.md" requires-python = ">=3.13" authors = [{ name = "Pavel Kirilin", email = "s3riussan@gmail.com" }] dependencies = [ "pydantic-settings>=2.15.0", "requests>=2.34.2", "solvecaptcha-python>=1.0.2", ] [dependency-groups] dev = [ "mypy>=2.3.1", "ruff>=0.16.9", ] [build-system] requires = ["uv_build>=0.12.20,<0.13.0"] build-backend = "uv_build" [tool.mypy] python_version = "3.10" strict = true plugins = ["pydantic.mypy"] ignore_missing_imports = true disallow_untyped_calls = false disallow_subclassing_any = false pretty = true implicit_reexport = true allow_untyped_decorators = true warn_return_any = false warn_unused_ignores = false [tool.ruff] target-version = "py310" exclude = [".venv/"] line-length = 88 # List of enabled rulsets. # See https://docs.astral.sh/ruff/rules/ for more information. lint.select = [ "E", # Error "F", # Pyflakes "W", # Pycodestyle "C90", # McCabe complexity "I", # Isort "N", # pep8-naming "D", # Pydocstyle "ANN", # Pytype annotations "S", # Bandit "B", # Bugbear "COM", # Commas "C4", # Comprehensions "ISC", # Implicit string concat "PIE", # Unnecessary code "T20", # Catch prints "PYI", # validate pyi files "Q", # Checks for quotes "RSE", # Checks raise statements "RET", # Checks return statements "SLF", # Self checks "SIM", # Simplificator "PTH", # Pathlib checks "ERA", # Checks for commented out code "PL", # PyLint checks "RUF", # Specific to Ruff checks "FA102", # Future annotations "UP", # Pyupgrade "G", # flake8-logging-format ] lint.ignore = [ "D105", # Missing docstring in magic method "D107", # Missing docstring in __init__ "D212", # Multi-line docstring summary should start at the first line "D401", # First line should be in imperative mood "D104", # Missing docstring in public package "D100", # Missing docstring in public module "ANN401", # typing.Any are disallowed in `**kwargs "PLR0913", # Too many arguments for function call "PLR0917", # Too many positional arguments "D106" # Missing docstring in public nested class ] lint.mccabe = { max-complexity = 10 } [tool.ruff.lint.per-file-ignores] "tests/**/*" = [ "S101", # Use of assert detected "S301", # Use of pickle detected "D103", # Missing docstring in public function "SLF001", # Private member accessed "S311", # Standard pseudo-random generators are not suitable for security/cryptographic purposes "D101", # Missing docstring in public class "D102", # Missing docstring in public method "PLR2004" # Magic value ] [tool.ruff.lint.flake8-bugbear] extend-immutable-calls = ["taskiq_dependencies.Depends", "taskiq.TaskiqDepends"] [tool.ruff.lint.pydocstyle] convention = "pep257" ignore-decorators = ["typing.overload"] [tool.ruff.lint.pylint] allow-magic-value-types = ["int", "str", "float"] [tool.uv.build-backend] module-root = ""