Reserve a package name on PyPI.
Registered as init_reserve via axm.tools entry point.
Source code in packages/axm-init/src/axm_init/tools/reserve.py
| class InitReserveTool:
"""Reserve a package name on PyPI.
Registered as ``init_reserve`` via axm.tools entry point.
"""
@property
def name(self) -> str:
"""Tool name used for MCP registration."""
return "init_reserve"
def execute(self, **kwargs: Any) -> ToolResult:
"""Reserve a package name on PyPI.
Args:
**kwargs: Keyword arguments.
name: Package name to reserve.
author: Author name for the placeholder package.
email: Author email for the placeholder package.
dry_run: If True, skip the actual publish step.
Returns:
ToolResult with reservation status.
"""
if "name" not in kwargs:
return ToolResult(success=False, error="'name' is required")
name: str = kwargs["name"]
author: str = kwargs.get("author", "")
email: str = kwargs.get("email", "")
dry_run: bool = kwargs.get("dry_run", False)
error = _validate_identity(author, email)
if error:
return error
try:
from axm_init.adapters.credentials import CredentialManager
from axm_init.core.reserver import reserve_pypi
creds = CredentialManager()
if not dry_run:
token = creds.get_pypi_token()
if not token:
return ToolResult(
success=False,
error=(
"No PyPI token found. Set PYPI_TOKEN or configure keyring."
),
)
else:
token = creds.get_pypi_token() or ""
result = reserve_pypi(
name=name,
author=author,
email=email,
token=token or "",
dry_run=dry_run,
)
return ToolResult(
success=result.success,
data={
"package_name": result.package_name,
"version": result.version,
"message": result.message,
},
error=None if result.success else result.message,
)
except Exception as exc:
return ToolResult(success=False, error=str(exc))
|
Tool name used for MCP registration.
Reserve a package name on PyPI.
Parameters:
| Name |
Type |
Description |
Default |
**kwargs
|
Any
|
Keyword arguments.
name: Package name to reserve.
author: Author name for the placeholder package.
email: Author email for the placeholder package.
dry_run: If True, skip the actual publish step.
|
{}
|
Returns:
| Type |
Description |
ToolResult
|
ToolResult with reservation status.
|
Source code in packages/axm-init/src/axm_init/tools/reserve.py
| def execute(self, **kwargs: Any) -> ToolResult:
"""Reserve a package name on PyPI.
Args:
**kwargs: Keyword arguments.
name: Package name to reserve.
author: Author name for the placeholder package.
email: Author email for the placeholder package.
dry_run: If True, skip the actual publish step.
Returns:
ToolResult with reservation status.
"""
if "name" not in kwargs:
return ToolResult(success=False, error="'name' is required")
name: str = kwargs["name"]
author: str = kwargs.get("author", "")
email: str = kwargs.get("email", "")
dry_run: bool = kwargs.get("dry_run", False)
error = _validate_identity(author, email)
if error:
return error
try:
from axm_init.adapters.credentials import CredentialManager
from axm_init.core.reserver import reserve_pypi
creds = CredentialManager()
if not dry_run:
token = creds.get_pypi_token()
if not token:
return ToolResult(
success=False,
error=(
"No PyPI token found. Set PYPI_TOKEN or configure keyring."
),
)
else:
token = creds.get_pypi_token() or ""
result = reserve_pypi(
name=name,
author=author,
email=email,
token=token or "",
dry_run=dry_run,
)
return ToolResult(
success=result.success,
data={
"package_name": result.package_name,
"version": result.version,
"message": result.message,
},
error=None if result.success else result.message,
)
except Exception as exc:
return ToolResult(success=False, error=str(exc))
|