[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "bewerbungs-assistent" version = "1.8.5" description = "PBP — KI-gestuetzter Bewerbungsassistent als MCP-Server fuer Claude Desktop. Stellensuche, Bewerbungs-Tracking, Lebenslauf-/Anschreiben-Generierung, Interview-Coaching." readme = "README.md" license = "MIT" requires-python = ">=3.11" authors = [ { name = "Markus Birzite" } ] keywords = [ "mcp", "model-context-protocol", "claude", "claude-desktop", "anthropic", "ai", "llm", "bewerbung", "job-search", "career", "ats", "lebenslauf", "cv", "resume", "anschreiben", "cover-letter", "scraper", "stellensuche", "personalvermittlung", ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Operating System :: Microsoft :: Windows", "Operating System :: MacOS", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Office/Business", "Topic :: Office/Business :: Scheduling", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Communications", "Natural Language :: German", ] dependencies = [ # #692/K6: Major-Version begrenzen. FastMCP 3.x hat interne APIs umgebaut # (_prompt_manager entfiel) — ein ungepinntes >=2.0 liess den Bump lautlos # durch. <4 verhindert, dass der naechste Major-Sprung erneut Interna bricht. "fastmcp>=3.0,<4", "uvicorn>=0.30", "fastapi>=0.115", "python-multipart>=0.0.9", "httpx>=0.27", "geopy>=2.4", "beautifulsoup4>=4.12", "lxml>=5.0", # #500: Jobsuche ist Kern-Feature — JobSpy liefert Indeed/LinkedIn/Glassdoor/Google # ohne Login. Vorher im [scraper]-Extra, war damit aber bei den meisten # Installationen nicht aktiv -> Booster nicht sichtbar. # #1252: 1.4.0 (19.10.2026) hat desired_order, JobResponse und create_logger entfernt und die Logger umgebaut; # bis die Uebernahme gemessen ist, bleibt PBP bei 1.2/1.3 (beide Stellen und die pip-Zeile in INSTALLIEREN.bat gleich). "python-jobspy>=1.2,<1.4", ] [project.optional-dependencies] scraper = [ "playwright>=1.40", "beautifulsoup4>=4.12", "lxml>=5.0", "python-jobspy>=1.2,<1.4", ] docs = [ "python-docx>=1.1", "pypdf>=4.0", "fpdf2>=2.7", "matplotlib>=3.8", # E19 (#750, v1.8.0-beta.0): Scan-PDF -> Bild fuers Komponenten-OCR. # pypdfium2 bringt PDFium gebundelt mit (kein Poppler noetig — der # alte pdf2image-Pfad aus #192 scheiterte genau daran). "pypdfium2>=4.0", "pillow>=10.0", ] export = [ "openpyxl>=3.1", ] email = [ "extract-msg>=0.48", "icalendar>=5.0", ] dev = [ "pytest>=8.0", "pytest-asyncio>=0.23", # tests/test_undefinierte_namen.py: ein Name, den es nicht gibt, faellt # in Python erst zur Laufzeit auf — und ein `except` schluckt ihn still. "pyflakes>=3.0", ] all = [ "bewerbungs-assistent[scraper,docs,export,email]", ] [project.urls] Homepage = "https://github.com/MadGapun/PBP" Repository = "https://github.com/MadGapun/PBP" Documentation = "https://github.com/MadGapun/PBP/wiki" Changelog = "https://github.com/MadGapun/PBP/blob/main/CHANGELOG.md" Issues = "https://github.com/MadGapun/PBP/issues" Releases = "https://github.com/MadGapun/PBP/releases" [project.scripts] bewerbungs-assistent = "bewerbungs_assistent:main" [tool.hatch.build.targets.wheel] packages = ["src/bewerbungs_assistent"] [tool.pytest.ini_options] # test_demo.py im Projekt-Root ist ein Dashboard-Launcher-Script, kein Pytest-Test. # Ohne testpaths wuerde pytest es einsammeln und beim Start des Uvicorn-Servers haengen. testpaths = ["tests"]