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.

Domain value object describing the outcome of an availability check. Lives in the application layer so the core package can depend on it without importing any concrete adapter.

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

    Domain value object describing the outcome of an availability
    check. Lives in the application layer so the ``core`` package can
    depend on it without importing any concrete adapter.
    """

    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
Python
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
Python
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