Skip to content

Instantly share code, notes, and snippets.

@kayluhb
Last active February 26, 2022 18:30
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kayluhb/4e06ab4830e29fadc89bf452a7d4d2cb to your computer and use it in GitHub Desktop.
Save kayluhb/4e06ab4830e29fadc89bf452a7d4d2cb to your computer and use it in GitHub Desktop.
from collections import defaultdict
from promise import Promise
from promise.dataloader import DataLoader
def generate_loader(Type, attr):
""" Generate a Loader on the fly.
"""
class Loader(DataLoader):
def batch_load_fn(self, keys):
results_by_ids = defaultdict(list)
lookup = {"{0}__in".format(attr): keys}
for result in Type._meta.model.objects.filter(**lookup).iterator():
results_by_ids[getattr(result, attr)].append(result)
return Promise.resolve([results_by_ids.get(id, []) for id in keys])
return Loader
loader = generate_loader(CommentType, "article_id")()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment