45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
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)
|