← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~alexsander-souza/maas:lp1997281_ws_machine_fix_count_filter into maas:master

 

Alexsander de Souza has proposed merging ~alexsander-souza/maas:lp1997281_ws_machine_fix_count_filter into maas:master.

Commit message:
use QS with annotations required by filters

fixes LP#1997281

Requested reviews:
  MAAS Maintainers (maas-maintainers)
Related bugs:
  Bug #1997281 in MAAS: "machine.count fails for new filter options"
  https://bugs.launchpad.net/maas/+bug/1997281

For more details, see:
https://code.launchpad.net/~alexsander-souza/maas/+git/maas/+merge/433394
-- 
Your team MAAS Committers is subscribed to branch maas:master.
diff --git a/src/maasserver/websockets/handlers/machine.py b/src/maasserver/websockets/handlers/machine.py
index dd4e85c..7572062 100644
--- a/src/maasserver/websockets/handlers/machine.py
+++ b/src/maasserver/websockets/handlers/machine.py
@@ -1215,7 +1215,7 @@ class MachineHandler(NodeHandler):
         return OwnerData.objects.get_owner_data(machine)
 
     def count(self, params):
-        qs = self.get_queryset()
+        qs = self.get_queryset(for_list=True)
         if "filter" in params:
             qs = self._filter(qs, "list", params["filter"])
         return {"count": qs.count()}
diff --git a/src/maasserver/websockets/handlers/tests/test_machine.py b/src/maasserver/websockets/handlers/tests/test_machine.py
index e8045c9..7c39ba3 100644
--- a/src/maasserver/websockets/handlers/tests/test_machine.py
+++ b/src/maasserver/websockets/handlers/tests/test_machine.py
@@ -7292,3 +7292,24 @@ class TestMachineHandlerNewSchema(MAASServerTestCase):
             len(nodes_in_zone),
             handler.count({"filter": {"zone": zone.name}})["count"],
         )
+
+    def test_count_endpoint_filter_simple_status(self):
+        owner = factory.make_User()
+        statuses = [NODE_STATUS.ALLOCATED, NODE_STATUS.FAILED_COMMISSIONING]
+        nodes = [
+            factory.make_Machine(
+                owner=owner,
+                status=statuses[idx],
+                hostname=f"node{idx}-{factory.make_string(10)}",
+            )
+            for idx in range(2)
+        ]
+        handler = MachineHandler(owner, {}, None)
+        self.assertEqual(
+            len(nodes),
+            handler.count({})["count"],
+        )
+        self.assertEqual(
+            1,
+            handler.count({"filter": {"simple_status": "allocated"}})["count"],
+        )

Follow ups