def resolve_menu(info, id=None, name=None): assert id or name, 'No ID or name provided.' if name is not None: qs = models.Menu.objects.filter(name=name) qs = gql_optimizer.query(qs, info) return qs[0] if qs else None return graphene.Node.get_node_from_global_id(info, id, Menu)
def resolve_staff_users(info, query): qs = models.User.objects.filter(is_staff=True) qs = filter_by_query_param( queryset=qs, query=query, search_fields=USER_SEARCH_FIELDS) qs = qs.order_by('email') qs = qs.distinct() return gql_optimizer.query(qs, info)
def resolve_customers(info, query): qs = models.User.objects.filter( Q(is_staff=False) | (Q(is_staff=True) & Q(orders__isnull=False)) ) qs = filter_by_query_param( queryset=qs, query=query, search_fields=USER_SEARCH_FIELDS ) qs = qs.order_by("email") qs = qs.distinct() return gql_optimizer.query(qs, info)
def prefetch_products(info, *args, **kwargs): """Prefetch products visible to the current user. Can be used with models that have the `products` relationship. Queryset of products being prefetched is filtered based on permissions of the viewing user, to restrict access to unpublished products to non-staff users. """ user = info.context.user qs = models.Product.objects.visible_to_user(user) return Prefetch( 'products', queryset=gql_optimizer.query(qs, info), to_attr='prefetched_products')
def resolve_products(root: models.Category, info, **_kwargs): # If the category has no children, we use the prefetched data. children = root.children.all() if not children and hasattr(root, "prefetched_products"): return root.prefetched_products # Otherwise we want to include products from child categories which # requires performing additional logic. tree = root.get_descendants(include_self=True) qs = models.Product.objects.published() qs = qs.filter(category__in=tree) return gql_optimizer.query(qs, info)
def filter_orders(qs, info, created, status, query): qs = filter_by_query_param(qs, query, ORDER_SEARCH_FIELDS) # filter orders by status if status is not None: if status == OrderStatusFilter.READY_TO_FULFILL: qs = qs.ready_to_fulfill() elif status == OrderStatusFilter.READY_TO_CAPTURE: qs = qs.ready_to_capture() # filter orders by creation date if created is not None: qs = filter_by_period(qs, created, 'created') return gql_optimizer.query(qs, info)
def resolve_products(self, info, **kwargs): if hasattr(self, 'prefetched_products'): return self.prefetched_products qs = self.products.visible_to_user(info.context.user) return gql_optimizer.query(qs, info)
def resolve_menu_items(info, query): qs = models.MenuItem.objects.all() qs = filter_by_query_param(qs, query, MENU_ITEM_SEARCH_FIELDS) return gql_optimizer.query(qs, info)
def resolve_urls(root: models.DigitalContent, info, **_kwargs): qs = root.urls.all() return gql_optimizer.query(qs, info)
def prefetch_menus(info, *args, **kwargs): qs = models.MenuItem.objects.filter(level=0) return Prefetch( 'items', queryset=gql_optimizer.query(qs, info), to_attr='prefetched_items')
def resolve_ancestors(self, info, **kwargs): qs = self.get_ancestors() return gql_optimizer.query(qs, info)
def resolve_delivery_zones(info): qs = models.DeliveryZone.objects.all() return gql_optimizer.query(qs, info)
def resolve_stocks(self, info, **data): qs = models.Stock.objects.all() return gql_optimizer.query(qs, info)
def resolve_children(root: models.Category, info, **_kwargs): qs = root.children.all() return gql_optimizer.query(qs, info)
def resolve_images(self, info: ResolveInfo): return with_collection_permissions( info.context, gql_optimizer.query(wagtailImage.objects.all(), info))
def resolve_products(root: models.Collection, info, **_kwargs): if hasattr(root, "prefetched_products"): return root.prefetched_products qs = root.products.visible_to_user(info.context.user) return gql_optimizer.query(qs, info)
def resolve_ancestors(root: models.Category, info, **_kwargs): qs = root.get_ancestors() return gql_optimizer.query(qs, info)
def resolve_children(self, info, **kwargs): qs = self.children.all() return gql_optimizer.query(qs, info)
def resolve_vouchers(info, query): qs = models.Voucher.objects.all() qs = filter_by_query_param(qs, query, VOUCHER_SEARCH_FIELDS) return gql_optimizer.query(qs, info)
def resolve_sales(info, query): qs = models.Sale.objects.all() qs = filter_by_query_param(qs, query, SALE_SEARCH_FIELDS) return gql_optimizer.query(qs, info)
def resolve_products(root: models.Collection, info, **_kwargs): if hasattr(root, "prefetched_products"): return root.prefetched_products qs = root.products.collection_sorted(info.context.user) return gql_optimizer.query(qs, info)
def resolve_warehouses(self, info, **kwargs): qs = models.Warehouse.objects.all() return gql_optimizer.query(qs, info)
def resolve_urls(self, info, **kwargs): qs = self.urls.all() return gql_optimizer.query(qs, info)
def resolve_image(self, info: ResolveInfo, id: int): image = with_collection_permissions( info.context, gql_optimizer.query(wagtailImage.objects.filter(id=id), info)).first() return image
def resolve_payments(info, query): queryset = models.Payment.objects.all().distinct() queryset = filter_by_query_param(queryset, query, PAYMENT_SEARCH_FIELDS) return gql_optimizer.query(queryset, info)
def resolve_products(root: models.ProductType, info, **_kwargs): if hasattr(root, "prefetched_products"): return root.prefetched_products qs = root.products.visible_to_user(info.context.user) return gql_optimizer.query(qs, info)
def resolve_shipping_methods(info): qs = shipping_models.ShippingMethod.objects.all() return gql_optimizer.query(qs, info)
def resolve_attribute_values(info): qs = product_models.AttributeValue.objects.all() return gql_optimizer.query(qs, info)
def get_node_optimized(qs, lookup, info): qs = qs.filter(**lookup) qs = gql_optimizer.query(qs, info) return qs[0] if qs else None
def resolve_shipping_zones(info): qs = models.ShippingZone.objects.all() return gql_optimizer.query(qs, info)