Initial implementation.

Signed-off-by: Pavel Kirilin <s3riussan@gmail.com>
This commit is contained in:
2026-09-30 23:38:03 +02:00
parent 4a3c899dff
commit cd80501986
16 changed files with 1303 additions and 13 deletions
+94 -5
View File
@@ -1,21 +1,110 @@
[project]
name = "visaapply"
version = "0.1.0"
description = "Add your description here"
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 = [
"requests>=2.34.2",
"solvecaptcha-python>=1.0.2",
"pydantic-settings>=2.15.0",
"requests>=2.34.2",
"solvecaptcha-python>=1.0.2",
]
[project.scripts]
visaapply = "visaapply:main"
[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 = ""