From 02daf6f724fbcab516a905993668f9e280c3fbae Mon Sep 17 00:00:00 2001 From: Cisphyx Date: Thu, 4 Feb 2021 14:00:39 -0500 Subject: [PATCH] Fix layer.getPropCount for univ props (#2073) * Fix layer.getPropCount for univ props --- synapse/lib/layer.py | 11 +++++++++++ synapse/lib/stormtypes.py | 2 ++ synapse/tests/test_lib_stormtypes.py | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/synapse/lib/layer.py b/synapse/lib/layer.py index 1daeaabd11..dc64b39a62 100644 --- a/synapse/lib/layer.py +++ b/synapse/lib/layer.py @@ -1540,6 +1540,17 @@ async def getPropCount(self, formname, propname=None, maxsize=None): return await self.layrslab.countByPref(abrv, db=self.byprop, maxsize=maxsize) + async def getUnivPropCount(self, propname, maxsize=None): + ''' + Return the number of universal property rows in the layer for the given prop. + ''' + try: + abrv = self.getPropAbrv(None, propname) + except s_exc.NoSuchAbrv: + return 0 + + return await self.layrslab.countByPref(abrv, db=self.byprop, maxsize=maxsize) + async def liftByTag(self, tag, form=None): try: diff --git a/synapse/lib/stormtypes.py b/synapse/lib/stormtypes.py index f406302d17..7504aa0e59 100644 --- a/synapse/lib/stormtypes.py +++ b/synapse/lib/stormtypes.py @@ -4117,6 +4117,8 @@ async def _methGetPropCount(self, propname, maxsize=None): if prop.isform: todo = s_common.todo('getPropCount', prop.name, None, maxsize=maxsize) + elif prop.isuniv: + todo = s_common.todo('getUnivPropCount', prop.name, maxsize=maxsize) else: todo = s_common.todo('getPropCount', prop.form.name, prop.name, maxsize=maxsize) diff --git a/synapse/tests/test_lib_stormtypes.py b/synapse/tests/test_lib_stormtypes.py index 5acf2dce6a..e62723e026 100644 --- a/synapse/tests/test_lib_stormtypes.py +++ b/synapse/tests/test_lib_stormtypes.py @@ -3382,9 +3382,16 @@ async def test_stormtypes_layer_counts(self): self.eq(3, await core.callStorm('return($lib.layer.get().getTagCount(foo.bar))')) self.eq(2, await core.callStorm('return($lib.layer.get().getTagCount(foo.bar, formname=inet:ipv4))')) + self.eq(6, await core.callStorm("return($lib.layer.get().getPropCount('.created'))")) + self.eq(2, await core.callStorm("return($lib.layer.get().getPropCount(inet:ipv4.created))")) + self.eq(0, await core.callStorm("return($lib.layer.get().getPropCount('.seen'))")) + with self.raises(s_exc.NoSuchProp): await core.callStorm('return($lib.layer.get().getPropCount(newp:newp))') + with self.raises(s_exc.NoSuchProp): + await core.callStorm("return($lib.layer.get().getPropCount('.newp'))") + async def test_lib_stormtypes_cmdopts(self): pdef = { 'name': 'foo',