import graphene from graphene_django import DjangoObjectType from graphene import relay from wagtail.images.models import Image from wagtail.images.views.serve import generate_image_url def get_srcset(image: Image) -> str: return ( f"{generate_image_url(image, 'width-160')} 160w, " f"{generate_image_url(image, 'width-320')} 320w, " f"{generate_image_url(image, 'width-800')} 800w, " f"{generate_image_url(image, 'width-1600')} 1600w" ) def get_src(image: Image) -> str: return generate_image_url(image, f'width-{min(3840, image.width)}') class WagtailImageNode(DjangoObjectType): class Meta: model = Image fields = [ "title", "width", "height", ] interfaces = (relay.Node,) src = graphene.String() alt = graphene.String() srcset = graphene.String() def resolve_src(self, info): return get_src(self) def resolve_alt(self, info): return self.title def resolve_srcset(self, info): return get_srcset(self)