[project] name = "TISbackup" version = "1.8.0" description = "Backup server side executed python scripts for managing linux and windows system and application data backups, developed by adminsys for adminsys" readme = "README.md" dependencies = [ "authlib>=1.3.0", "bcrypt>=4.0.0", "flask==3.1.0", "flask-login>=0.6.0", "huey==2.5.3", "iniparse==0.5", "paramiko==4.0.0", "peewee==3.17.9", "pexpect==4.9.0", "pyvmomi>=8.0.0", "redis==5.2.1", "requests==2.32.3", "ruff>=0.13.3", "simplejson==3.20.1", "six==1.17.0", ] requires-python = ">=3.13" [project.optional-dependencies] # Documentation dependencies docs = [ "docutils", "sphinx>=7.0.0,<8.0.0", "sphinx_rtd_theme", "sphinxjp.themes.revealjs", "sphinx-intl", "sphinx-tabs", ] [tool.black] line-length = 140 [tool.ruff] # Allow lines to be as long as 120. line-length = 140 indent-width = 4 [tool.ruff.lint] ignore = ["F401", "F403", "F405", "E402", "E701", "E722", "E741"] [tool.pytest.ini_options] # Pytest configuration for TISBackup # Test discovery patterns python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] # Test paths testpaths = ["tests"] # Output options addopts = [ "-v", "--strict-markers", "--tb=short", "--color=yes", ] # Markers for categorizing tests markers = [ "unit: Unit tests for individual functions/methods", "integration: Integration tests that test multiple components together", "ssh: Tests related to SSH functionality", "slow: Tests that take a long time to run", ] # Minimum Python version minversion = "3.13" # Coverage options (optional - uncomment when pytest-cov is installed) # addopts = ["--cov=libtisbackup", "--cov-report=html", "--cov-report=term-missing"] [tool.pylint.main] # Maximum line length max-line-length = 140 # Files or directories to skip ignore = ["tests", ".venv", "__pycache__", ".pytest_cache", "build", "dist"] [tool.pylint."messages control"] # Disable specific warnings to align with ruff configuration disable = [ "C0103", # invalid-name (similar to ruff E741) "C0114", # missing-module-docstring "C0115", # missing-class-docstring "C0116", # missing-function-docstring "R0902", # too-many-instance-attributes "R0903", # too-few-public-methods "R0913", # too-many-arguments "R0914", # too-many-locals "W0703", # broad-except (similar to ruff E722) "W0719", # broad-exception-raised ] [tool.pylint.format] # Indentation settings indent-string = " " [tool.coverage.run] # Source code to measure coverage for source = ["libtisbackup"] # Omit certain files omit = [ "*/tests/*", "*/__pycache__/*", "*/site-packages/*", "*/.venv/*", ] [tool.coverage.report] # Precision for coverage percentage precision = 2 # Show lines that weren't covered show_missing = true # Skip files with no executable code skip_empty = true # Fail if coverage is below this percentage # fail_under = 80 [tool.coverage.html] # Directory for HTML coverage report directory = "htmlcov" [dependency-groups] dev = [ "pylint>=3.0.0", "pytest>=8.4.2", "pytest-cov>=6.0.0", "pytest-mock>=3.15.1", ]