[build-system] requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" [project] name = "cista" dynamic = ["version"] description = "Dropbox-like file server with modern web interface" readme = "README.md" authors = [ { name = "Vasanko" }, ] maintainers = [ { name = "Vasanko" }, ] keywords = ["file-server", "web-interface", "dropbox", "storage"] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: End Users/Desktop", "Intended Audience :: System Administrators", "License :: Public Domain", "License :: OSI Approved :: MIT License", ] requires-python = ">=3.11" dependencies = [ "argon2-cffi>=25.1.0", "av>=15.0.0", "blake3>=1.0.5", "brotli>=1.1.0", "docopt>=0.6.2", "inotify>=0.2.12", "msgspec>=0.19.0", "natsort>=8.4.0", "numpy>=2.3.2", "pathvalidate>=3.3.1", "pillow>=11.3.0", "pillow-heif>=1.1.0", "pyjwt>=2.10.1", "pymupdf>=1.26.3", "sanic>=25.3.0", "setproctitle>=1.3.6", "stream-zip>=0.0.83", "tomli_w>=1.2.0", ] [project.urls] Homepage = "https://git.zi.fi/Vasanko/cista-storage" [project.scripts] cista = "cista.__main__:main" [project.optional-dependencies] dev = [ "pytest>=8.4.1", "ruff>=0.8.0", "mypy>=1.13.0", "pre-commit>=4.0.0", ] test = [ "pytest>=8.4.1", "pytest-cov>=6.0.0", "pytest-asyncio>=0.25.0", ] docs = [ "sphinx>=8.0.0", "sphinx-rtd-theme>=3.0.0", ] [tool.hatch.version] source = "vcs" [tool.hatch.build] artifacts = ["cista/wwwroot"] targets.sdist.hooks.custom.path = "scripts/build-frontend.py" targets.sdist.include = [ "/cista", ] hooks.vcs.version-file = "cista/_version.py" hooks.vcs.template = """ # This file is automatically generated by hatch build. __version__ = {version!r} """ only-packages = true [tool.pytest.ini_options] addopts = [ "--import-mode=importlib", "--verbosity=2", "--strict-markers", "--strict-config", "--cov=cista", "--cov-report=term-missing", "--cov-report=html", "--cov-branch", ] testpaths = ["tests"] python_files = ["test_*.py", "*_test.py"] python_classes = ["Test*"] python_functions = ["test_*"] markers = [ "slow: marks tests as slow (deselect with '-m \"not slow\"')", "integration: marks tests as integration tests", ] filterwarnings = [ "error", "ignore::UserWarning", "ignore::DeprecationWarning", ] [tool.ruff.lint] isort.known-first-party = ["cista"] per-file-ignores."tests/*" = ["S", "ANN", "D", "INP", "PLR2004"] per-file-ignores."scripts/*" = ["T20"] [dependency-groups] dev = [ "pytest>=8.4.1", "ruff>=0.8.0", "mypy>=1.13.0", "pre-commit>=4.0.0", ] test = [ "pytest>=8.4.1", "pytest-cov>=6.0.0", "pytest-asyncio>=0.25.0", ] [tool.coverage.run] source = ["cista"] branch = true omit = [ "*/tests/*", "*/test_*", "*/__pycache__/*", "cista/_version.py", ] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "if self.debug:", "if settings.DEBUG", "raise AssertionError", "raise NotImplementedError", "if 0:", "if __name__ == .__main__.:", "class .*\\bProtocol\\):", "@(abc\\.)?abstractmethod", ] show_missing = true skip_covered = false precision = 2