Skip to content

Nautobot IP Availability API Package

nautobot_ip_availability.api

REST API module for nautobot_ip_availability app.

serializers

API serializers for nautobot_ip_availability.

AvailablePrefixResultSerializer

Bases: Serializer

Serializes an available prefix result (read-only).

Source code in nautobot_ip_availability/api/serializers.py
class AvailablePrefixResultSerializer(serializers.Serializer):
    """Serializes an available prefix result (read-only)."""

    prefix = serializers.CharField()
    prefix_length = serializers.IntegerField()
    ip_version = serializers.IntegerField()
    size = serializers.IntegerField()
    parent_prefix = serializers.CharField()

    def create(self, validated_data):
        """Not used — this serializer is read-only."""
        raise NotImplementedError("AvailablePrefixResultSerializer is read-only.")

    def update(self, instance, validated_data):
        """Not used — this serializer is read-only."""
        raise NotImplementedError("AvailablePrefixResultSerializer is read-only.")
create(validated_data)

Not used — this serializer is read-only.

Source code in nautobot_ip_availability/api/serializers.py
def create(self, validated_data):
    """Not used — this serializer is read-only."""
    raise NotImplementedError("AvailablePrefixResultSerializer is read-only.")
update(instance, validated_data)

Not used — this serializer is read-only.

Source code in nautobot_ip_availability/api/serializers.py
def update(self, instance, validated_data):
    """Not used — this serializer is read-only."""
    raise NotImplementedError("AvailablePrefixResultSerializer is read-only.")

urls

Django API urlpatterns declaration for nautobot_ip_availability app.

views

API views for nautobot_ip_availability.

AvailablePrefixesAPIView

Bases: APIView

API endpoint to query available IP prefixes across all Leasable supernets.

Source code in nautobot_ip_availability/api/views.py
class AvailablePrefixesAPIView(APIView):
    """API endpoint to query available IP prefixes across all Leasable supernets."""

    permission_classes = [IsAuthenticated]

    def post(self, request):
        """Find available prefixes of the requested size across all Leasable supernets."""
        prefix_length = request.data.get("prefix_length")

        if prefix_length is None:
            return Response(
                {"detail": "prefix_length is required."},
                status=status.HTTP_400_BAD_REQUEST,
            )

        try:
            prefix_length = int(prefix_length)
        except (TypeError, ValueError):
            return Response(
                {"detail": "prefix_length must be an integer."},
                status=status.HTTP_400_BAD_REQUEST,
            )

        if prefix_length < 1 or prefix_length > 128:
            return Response(
                {"detail": "prefix_length must be between 1 and 128."},
                status=status.HTTP_400_BAD_REQUEST,
            )

        results, truncated = find_available_prefixes(prefix_length=prefix_length)

        result_serializer = AvailablePrefixResultSerializer(results, many=True)
        return Response(
            {
                "prefix_length": prefix_length,
                "count": len(results),
                "truncated": truncated,
                "results": result_serializer.data,
            },
            status=status.HTTP_200_OK,
        )
post(request)

Find available prefixes of the requested size across all Leasable supernets.

Source code in nautobot_ip_availability/api/views.py
def post(self, request):
    """Find available prefixes of the requested size across all Leasable supernets."""
    prefix_length = request.data.get("prefix_length")

    if prefix_length is None:
        return Response(
            {"detail": "prefix_length is required."},
            status=status.HTTP_400_BAD_REQUEST,
        )

    try:
        prefix_length = int(prefix_length)
    except (TypeError, ValueError):
        return Response(
            {"detail": "prefix_length must be an integer."},
            status=status.HTTP_400_BAD_REQUEST,
        )

    if prefix_length < 1 or prefix_length > 128:
        return Response(
            {"detail": "prefix_length must be between 1 and 128."},
            status=status.HTTP_400_BAD_REQUEST,
        )

    results, truncated = find_available_prefixes(prefix_length=prefix_length)

    result_serializer = AvailablePrefixResultSerializer(results, many=True)
    return Response(
        {
            "prefix_length": prefix_length,
            "count": len(results),
            "truncated": truncated,
            "results": result_serializer.data,
        },
        status=status.HTTP_200_OK,
    )