From 419c889a9ab0203dc572d951b11cb137fda711d9 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 24 Dec 2020 17:58:18 +0530 Subject: [PATCH] feat: add docstrings --- erpnext/shopping_cart/product_query.py | 34 +++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/erpnext/shopping_cart/product_query.py b/erpnext/shopping_cart/product_query.py index 0f3eabb21c..0cd8088ea5 100644 --- a/erpnext/shopping_cart/product_query.py +++ b/erpnext/shopping_cart/product_query.py @@ -1,4 +1,4 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals @@ -10,13 +10,17 @@ class ProductQuery: Attributes: cart_settings (Document): Settings for Cart fields (list): Fields to fetch in query - filters (list) - or_filters (list) + filters (TYPE): Description + or_filters (list): Description page_length (Int): Length of page for the query settings (Document): Products Settings DocType + filters (list) + or_filters (list) """ def __init__(self): + """Summary + """ self.settings = frappe.get_doc("Products Settings") self.cart_settings = frappe.get_doc("Shopping Cart Settings") self.page_length = self.settings.products_per_page or 20 @@ -25,6 +29,17 @@ class ProductQuery: self.or_filters = [] def query(self, attributes=None, fields=None, search_term=None, start=0): + """Summary + + Args: + attributes (dict, optional): Item Attribute filters + fields (dict, optional): Field level filters + search_term (str, optional): Search term to lookup + start (int, optional): Page start + + Returns: + list: List of results with set fields + """ if fields: self.build_fields_filters(fields) if search_term: self.build_search_filters(search_term) @@ -49,6 +64,7 @@ class ProductQuery: ) items_dict = {item.name: item for item in items} + # TODO: Replace Variants by their parent templates all_items.append(set(items.keys())) @@ -59,16 +75,28 @@ class ProductQuery: return result def build_fields_filters(self, filters): + """Build filters for field values + + Args: + filters (dict): Filters + """ for field, values in filters.items(): if not values: continue if isinstance(values, list): + # If value is a list use `IN` query self.filters.append([field, 'IN', values]) else: + # `=` will be faster than `IN` for most cases self.filters.append([field, '=', values]) def build_search_filters(self, search_term): + """Query search term in specified fields + + Args: + search_term (str): Search candidate + """ # Default fields to search from default_fields = {'name', 'item_name', 'description', 'item_group'}