Skip to content

Pypi

pypi

PyPI Adapter — check package name availability.

Uses PyPI JSON API to verify if a package name is taken.

AvailabilityStatus

Bases: StrEnum

Package name availability status.

Source code in packages/axm-init/src/axm_init/adapters/pypi.py
class AvailabilityStatus(StrEnum):
    """Package name availability status."""

    AVAILABLE = "available"
    TAKEN = "taken"
    ERROR = "error"

PyPIAdapter

Adapter for PyPI package name availability checks.

Uses the PyPI JSON API to check if a package exists.

Source code in packages/axm-init/src/axm_init/adapters/pypi.py
class PyPIAdapter:
    """Adapter for PyPI package name availability checks.

    Uses the PyPI JSON API to check if a package exists.
    """

    PYPI_URL = "https://pypi.org/pypi/{name}/json"
    DEFAULT_TIMEOUT = 10.0

    def __init__(self, *, timeout: float = DEFAULT_TIMEOUT) -> None:
        self.timeout = timeout

    def check_availability(self, name: str) -> AvailabilityStatus:
        """Check if a package name is available on PyPI.

        Args:
            name: Package name to check.

        Returns:
            AvailabilityStatus indicating if name is available.
        """
        if not name or not name.strip():
            return AvailabilityStatus.ERROR

        try:
            url = self.PYPI_URL.format(name=name.lower().strip())
            response = httpx.get(url, timeout=self.timeout, follow_redirects=True)

            if response.status_code == 404:
                return AvailabilityStatus.AVAILABLE
            if response.status_code == 200:
                return AvailabilityStatus.TAKEN
            return AvailabilityStatus.ERROR

        except httpx.HTTPError:
            return AvailabilityStatus.ERROR
check_availability(name)

Check if a package name is available on PyPI.

Parameters:

Name Type Description Default
name str

Package name to check.

required

Returns:

Type Description
AvailabilityStatus

AvailabilityStatus indicating if name is available.

Source code in packages/axm-init/src/axm_init/adapters/pypi.py
def check_availability(self, name: str) -> AvailabilityStatus:
    """Check if a package name is available on PyPI.

    Args:
        name: Package name to check.

    Returns:
        AvailabilityStatus indicating if name is available.
    """
    if not name or not name.strip():
        return AvailabilityStatus.ERROR

    try:
        url = self.PYPI_URL.format(name=name.lower().strip())
        response = httpx.get(url, timeout=self.timeout, follow_redirects=True)

        if response.status_code == 404:
            return AvailabilityStatus.AVAILABLE
        if response.status_code == 200:
            return AvailabilityStatus.TAKEN
        return AvailabilityStatus.ERROR

    except httpx.HTTPError:
        return AvailabilityStatus.ERROR