| from pathlib import Path |
| from typing import Any, Dict, Optional, Set, TypedDict |
|
|
| from tomlkit import load |
|
|
|
|
| def get_package_root(cwd: Optional[Path] = None) -> Path: |
| |
| package_root = Path.cwd() if cwd is None else cwd |
| visited: Set[Path] = set() |
| while package_root not in visited: |
| visited.add(package_root) |
|
|
| pyproject_path = package_root / "pyproject.toml" |
| if pyproject_path.exists(): |
| return package_root |
| package_root = package_root.parent |
| raise FileNotFoundError("No pyproject.toml found") |
|
|
|
|
| class LangServeExport(TypedDict): |
| """ |
| Fields from pyproject.toml that are relevant to LangServe |
| |
| Attributes: |
| module: The module to import from, tool.langserve.export_module |
| attr: The attribute to import from the module, tool.langserve.export_attr |
| package_name: The name of the package, tool.poetry.name |
| """ |
|
|
| module: str |
| attr: str |
| package_name: str |
|
|
|
|
| def get_langserve_export(filepath: Path) -> LangServeExport: |
| with open(filepath) as f: |
| data: Dict[str, Any] = load(f) |
| try: |
| module = data["tool"]["langserve"]["export_module"] |
| attr = data["tool"]["langserve"]["export_attr"] |
| package_name = data["tool"]["poetry"]["name"] |
| except KeyError as e: |
| raise KeyError("Invalid LangServe PyProject.toml") from e |
| return LangServeExport(module=module, attr=attr, package_name=package_name) |
|
|