[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "pronote-sync" version = "0.1.0" description = "Synchronisation Pronote → CalDAV + XMPP" license = {text = "MIT"} requires-python = ">=3.13.5" authors = [ {name = "Votre Nom", email = "votre@email.com"} ] keywords = ["pronote", "caldav", "xmpp", "sync", "school"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Office/Business :: Scheduling", "Topic :: Communications :: Chat", "Topic :: Utilities", ] dependencies = [ "requests>=2.31.0", "icalendar>=5.0.0", "caldav>=1.3.0", "slixmpp>=1.8.0", "pydantic>=2.0.0", "pydantic-settings>=2.0.0", "pronotepy>=2.15.0", "openai>=1.0.0", "httpx>=0.25.0", "feedparser>=6.0.0", "beautifulsoup4>=4.12.0", ] [project.optional-dependencies] ai-litellm = ["litellm>=1.0"] dev = [ "pytest>=7.0.0", "pytest-cov>=4.0.0", "pytest-mock>=3.0.0", "requests-mock>=1.11.0", "aioresponses>=0.7.0", "bandit>=1.7.0", "safety>=2.0.0", "pre-commit>=3.0.0", "detect-secrets>=1.4.0", "ruff>=0.4.0", "mypy>=1.8.0", ] [project.scripts] pronote-sync = "pronote_sync.cli.main:main" [project.urls] Homepage = "https://github.com/votre-utilisateur/pronote-sync" Documentation = "https://github.com/votre-utilisateur/pronote-sync#readme" Repository = "https://github.com/votre-utilisateur/pronote-sync" Issues = "https://github.com/votre-utilisateur/pronote-sync/issues" [tool.setuptools.packages.find] where = ["."] include = ["pronote_sync*"] [tool.pytest.ini_options] minversion = "7.0" testpaths = ["tests"] python_files = ["test_*.py"] python_functions = ["test_*"] addopts = "-v --tb=short" [tool.coverage.run] source = ["pronote_sync"] branch = true [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "raise NotImplementedError", "if TYPE_CHECKING:", ] fail_under = 90 [tool.bandit] exclude_dirs = ["tests", "venv"] skips = ["B101"] # Ignorer les assertions (utilisées dans les tests) [tool.ruff] line-length = 100 target-version = "py313" # Exclure la documentation markdown (ruff format ne doit pas toucher aux blocs de code Python inclus) extend-exclude = ["GUIDE_DEV_PYTHON.md", ".worktrees"] [tool.ruff.lint] select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # Pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade ] ignore = [ "E501", # line too long (géré par line-length) ] [tool.mypy] python_version = "3.13" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true strict = true [[tool.mypy.overrides]] module = "litellm" ignore_missing_imports = true [[tool.mypy.overrides]] module = "slixmpp" ignore_missing_imports = true [[tool.mypy.overrides]] module = "openai.*" follow_imports = "skip" ignore_missing_imports = true