[project] name = "luk" version = "0.1.0" description = "A CLI tool for syncing Microsoft Outlook email, calendar, and tasks to local file-based formats. Look at your Outlook data locally." readme = "README.md" requires-python = ">=3.12" license = {text = "MIT"} authors = [ {name = "Timothy Bendt", email = "timothy@example.com"} ] keywords = ["email", "calendar", "tasks", "sync", "cli", "microsoft-graph", "outlook", "maildir", "vdir"] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Communications :: Email", "Topic :: Office/Business :: Scheduling", "Topic :: Utilities", ] dependencies = [ "aiohttp>=3.11.18", "certifi>=2025.4.26", "click>=8.1.0", "html2text>=2025.4.15", "mammoth>=1.9.0", "markitdown[all]>=0.1.1", "msal>=1.32.3", "openai>=1.78.1", "orjson>=3.10.18", "pillow>=11.2.1", "pydantic>=2.0.0", "pydantic-settings>=2.0.0", "python-dateutil>=2.9.0.post0", "python-docx>=1.1.2", "requests>=2.31.0", "rich>=14.0.0", "textual>=3.2.0", "textual-image>=0.8.2", "ticktick-py>=2.0.0", "toml>=0.10.0", ] [project.scripts] luk = "src.cli.__main__:main" [project.urls] Homepage = "https://github.com/timothybendt/luk" Repository = "https://github.com/timothybendt/luk" Issues = "https://github.com/timothybendt/luk/issues" Documentation = "https://github.com/timothybendt/luk#readme" [dependency-groups] dev = [ "ruff>=0.11.8", "textual>=3.2.0", "pytest>=8.0.0", "pytest-asyncio>=0.24.0", "pytest-cov>=6.0.0", "black>=24.0.0", "mypy>=1.8.0", "pre-commit>=3.5.0", "build>=1.0.0", "twine>=5.0.0", ] [tool.ruff] line-length = 88 target-version = "py312" select = ["E", "F", "W", "I", "N", "UP", "B", "A", "C4", "DTZ", "T10", "EM", "ISC", "ICN", "G", "PIE", "PYI", "PT", "Q", "RSE", "RET", "SIM", "TID", "TCH", "ARG", "PTH", "ERA", "PGH", "PL", "TRY", "NPY", "RUF"] ignore = ["E501", "PLR0913", "PLR0915"] [tool.ruff.format] quote-style = "double" indent-style = "space" [tool.mypy] python_version = "3.12" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true disallow_incomplete_defs = true check_untyped_defs = true disallow_untyped_decorators = true no_implicit_optional = true warn_redundant_casts = true warn_unused_ignores = true warn_no_return = true warn_unreachable = true strict_equality = true [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py", "*_test.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = [ "--cov=src", "--cov-report=term-missing", "--cov-report=html", "--cov-fail-under=80", "-v" ] asyncio_mode = "auto" [tool.black] line-length = 88 target-version = ['py312'] include = '\.pyi?$' extend-exclude = ''' /( # directories \.eggs | \.git | \.hg | \.mypy_cache | \.tox | \.venv | build | dist )/ ''' [tool.setuptools.packages.find] where = ["."] include = ["src*"] [tool.setuptools.package-data] "*" = ["*.tcss", "*.css", "*.json", "*.md"]