diff --git a/frappe/frappeclient.py b/frappe/frappeclient.py index 5cf6a91293..f8c619fc6b 100644 --- a/frappe/frappeclient.py +++ b/frappe/frappeclient.py @@ -107,12 +107,23 @@ class FrappeClient: headers=self.headers, ) - def get_list(self, doctype, fields='["name"]', filters=None, limit_start=0, limit_page_length=None): + def get_list( + self, + doctype, + fields='["name"]', + filters=None, + limit_start=0, + limit_page_length=None, + order_by=None, + group_by=None, + ): """Return list of records of a particular type.""" if not isinstance(fields, str): fields = json.dumps(fields) params = { "fields": fields, + "order_by": order_by, + "group_by": group_by, } if filters: params["filters"] = json.dumps(filters) diff --git a/frappe/tests/test_frappe_client.py b/frappe/tests/test_frappe_client.py index a5e0a9c966..61a1754319 100644 --- a/frappe/tests/test_frappe_client.py +++ b/frappe/tests/test_frappe_client.py @@ -52,6 +52,36 @@ class TestFrappeClient(IntegrationTestCase): self.assertTrue(len(doc_list)) + def test_list_summary(self): + server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) + server.insert_many( + [ + {"doctype": "Note", "title": "Sing"}, + {"doctype": "Note", "title": "a"}, + {"doctype": "Note", "title": "song"}, + {"doctype": "Note", "title": "of"}, + {"doctype": "Note", "title": "sixpence"}, + ] + ) + notes = server.get_list("Note", fields=["title"], order_by="creation desc") + + notes = [d.get("title") for d in notes] + self.assertEqual(notes[0], "sixpence") + + getlist_users = server.get_list( + "User", + fields=["count(name) as user_count"], + filters={"user_type": "System User"}, + group_by="user_type", + ) + getall_users = frappe.db.get_all( + "User", + fields=["count(name) as system_user_count"], + filters={"user_type": "System User"}, + group_by="user_type", + ) + self.assertEqual(getlist_users[0]["user_count"], getall_users[0]["system_user_count"]) + def test_get_doc(self): USER = "Administrator" TITLE = "get_this"