[project] name = "pyzotero" version = "1.15.1" description = "Python wrapper for the Zotero API" readme = "README.md" requires-python = ">=3.10" dependencies = [ "feedparser >= 6.0.12", "bibtexparser>=1.4.3,<2.0.0", "whenever>=0.8.8", "httpx2>=2.12.0", ] authors = [{ name = "Stephan Hügel" }, { email = "urschrei@gmail.com" }] maintainers = [{ name = "Stephan Hügel" }, { email = "urschrei@gmail.com" }] license = "BlueOak-1.0.0" license-files = ["LICENSE.md"] keywords = ["Zotero", "DH"] classifiers = [ "Programming Language :: Python", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Intended Audience :: Education", "Operating System :: OS Independent", "Topic :: Software Development :: Libraries :: Python Modules", ] [project.urls] Repository = "https://github.com/urschrei/pyzotero" Tracker = "https://github.com/urschrei/pyzotero/issues" documentation = "https://pyzotero.readthedocs.org" [project.optional-dependencies] cli = ["click>=8.0.0"] mcp = ["mcp[cli]>=2.0.0; python_version>='3.10'"] [project.scripts] pyzotero = "pyzotero._entry:cli" pyzotero-mcp = "pyzotero._entry:mcp" [dependency-groups] dev = [ "pytest >= 8.4.2", "pytz>=2025.2", "python-dateutil", "ipython", "pytest-asyncio", "pytest-cov>=6.0.0", "tzdata>=2025.2", ] doc = [ "sphinx", "sphinx-rtd-theme" ] [build-system] requires = ["uv_build>=0.8.14,<0.12.0"] build-backend = "uv_build" [tool.uv.build-backend] source-include = ["tests/**", "doc/**"] [tool.pytest.ini_options] minversion = "8.3.0" addopts = [ "--import-mode=importlib", "--cov=pyzotero", "--cov-report=xml", ] testpaths = [ "tests", ] asyncio_mode = "strict" asyncio_default_fixture_loop_scope = "function" [tool.ruff] exclude = [ ".bzr", ".direnv", ".eggs", ".git", ".git-rewrite", ".hg", ".ipynb_checkpoints", ".mypy_cache", ".nox", ".pants.d", ".pyenv", ".pytest_cache", ".pytype", ".ruff_cache", ".svn", ".tox", ".venv", ".vscode", "__pypackages__", "_build", "buck-out", "build", "dist", "node_modules", "site-packages", "venv", ] [tool.ruff.lint] select = ["F", "E", "W", "N", "D4", "UP", "PL", "TRY", "PERF", "FURB", "RUF", "S", "DTZ"] ignore = ["ANN001", "ANN003", "ANN202", "ANN201", "DOC201", "E501", "PLR0904", "PLR0913", "PLR0917", "SLF001", "FIX002", "D400", "D415"] fixable = ["ALL"] unfixable = [] [tool.ruff.lint.per-file-ignores] "tests/*" = ["S101"] # Allow assert in tests [tool.ruff.format] # Like Black, use double quotes for strings. quote-style = "double" # Like Black, indent with spaces, rather than tabs. indent-style = "space" [tool.ty.src] exclude = ["tests/", "doc/"] [tool.ty.rules] all = "warn" possibly-missing-attribute = "ignore"