Skip to content

Commit fa5fc27

Browse files
authored
Merge branch 'remove-univprops' into interface-triggers
2 parents a24cbaf + 82409d1 commit fa5fc27

File tree

6 files changed

+124
-76
lines changed

6 files changed

+124
-76
lines changed

synapse/datamodel.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,11 @@ def reqPropList(self, name, extra=None):
652652
(prevname := self.formprevnames.get(name)) is not None):
653653
mesg = f'No property named {name}. Did you mean {prevname}?'
654654

655-
raise s_exc.NoSuchProp.init(name, mesg=mesg)
655+
exc = s_exc.NoSuchProp.init(name, mesg=mesg)
656+
if extra is not None:
657+
exc = extra(exc)
658+
659+
raise exc
656660

657661
def reqMetaType(self, name):
658662
if (mtyp := self.metatypes.get(name)) is not None:

synapse/lib/ast.py

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,12 +1680,7 @@ async def lift(self, runt, path):
16801680
parts = name.split('::')
16811681
name, pivs = parts[0], parts[1:]
16821682

1683-
if (prop := runt.model.props.get(name)) is not None:
1684-
props = (prop,)
1685-
elif (proplist := runt.model.ifaceprops.get(name)) is not None:
1686-
props = [runt.model.props.get(propname) for propname in proplist]
1687-
else:
1688-
raise self.kids[0].addExcInfo(s_exc.NoSuchProp.init(name))
1683+
props = runt.model.reqPropList(name, extra=self.kids[0].addExcInfo)
16891684

16901685
try:
16911686
if pivs is not None:
@@ -1747,12 +1742,7 @@ async def lift(self, runt, path):
17471742
parts = name.split('::')
17481743
name, pivs = parts[0], parts[1:]
17491744

1750-
if (prop := runt.model.props.get(name)) is not None:
1751-
props = (prop,)
1752-
elif (proplist := runt.model.ifaceprops.get(name)) is not None:
1753-
props = [runt.model.props.get(propname) for propname in proplist]
1754-
else:
1755-
raise self.kids[0].addExcInfo(s_exc.NoSuchProp.init(name))
1745+
props = runt.model.reqPropList(name, extra=self.kids[0].addExcInfo)
17561746

17571747
try:
17581748
if pivs is not None:
@@ -2158,12 +2148,7 @@ async def lift(self, runt, path):
21582148
parts = name.split('::')
21592149
name, pivs = parts[0], parts[1:]
21602150

2161-
if (prop := runt.model.props.get(name)) is not None:
2162-
props = (prop,)
2163-
elif (proplist := runt.model.ifaceprops.get(name)) is not None:
2164-
props = [runt.model.props.get(propname) for propname in proplist]
2165-
else:
2166-
raise self.kids[0].addExcInfo(s_exc.NoSuchProp.init(name))
2151+
props = runt.model.reqPropList(name, extra=self.kids[0].addExcInfo)
21672152

21682153
try:
21692154
if pivs is not None:
@@ -2221,12 +2206,7 @@ async def lift(self, runt, path):
22212206
parts = name.split('::')
22222207
name, pivs = parts[0], parts[1:]
22232208

2224-
if (prop := runt.model.props.get(name)) is not None:
2225-
props = (prop,)
2226-
elif (proplist := runt.model.ifaceprops.get(name)) is not None:
2227-
props = [runt.model.props.get(propname) for propname in proplist]
2228-
else:
2229-
raise self.kids[0].addExcInfo(s_exc.NoSuchProp.init(name))
2209+
props = runt.model.reqPropList(name, extra=self.kids[0].addExcInfo)
22302210

22312211
try:
22322212
if pivs is not None:

synapse/lib/layer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5498,7 +5498,7 @@ async def syncIndexEvents(self, offs, matchdef, wait=True):
54985498
The matchdef dict may contain the following keys: forms, props, tags, tagprops. The value must be a
54995499
sequence of strings. Each key/val combination is treated as an "or", so each key and value yields more events.
55005500
forms: EDIT_NODE_ADD and EDIT_NODE_DEL events. Matches events for nodes with forms in the value list.
5501-
props: EDIT_PROP_SET and EDIT_PROP_DEL events. Values must be the form:prop.
5501+
props: EDIT_PROP_SET and EDIT_PROP_DEL events. Values must be in form:prop format.
55025502
tags: EDIT_TAG_SET and EDIT_TAG_DEL events. Values must be the raw tag with no #.
55035503
tagprops: EDIT_TAGPROP_SET and EDIT_TAGPROP_DEL events. Values must be just the prop or tag:prop.
55045504

synapse/lib/stormtypes.py

Lines changed: 57 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7059,21 +7059,29 @@ async def _methGetPropCount(self, propname, valu=undef):
70597059
await self.runt.reqUserCanReadLayer(layriden)
70607060
layr = self.runt.view.core.getLayer(layriden)
70617061

7062-
prop = self.runt.view.core.model.reqProp(propname)
7062+
if valu is not undef:
7063+
valu = await toprim(valu)
70637064

7064-
if valu is undef:
7065-
if prop.isform:
7066-
return layr.getPropCount(prop.name, None)
7065+
props = self.runt.model.reqPropList(propname)
7066+
count = 0
70677067

7068-
return layr.getPropCount(prop.form.name, prop.name)
7068+
for prop in props:
7069+
await asyncio.sleep(0)
70697070

7070-
valu = await toprim(valu)
7071-
norm, info = prop.type.norm(valu)
7071+
if valu is undef:
7072+
if prop.isform:
7073+
count += layr.getPropCount(prop.name, None)
7074+
else:
7075+
count += layr.getPropCount(prop.form.name, prop.name)
7076+
continue
70727077

7073-
if prop.isform:
7074-
return layr.getPropValuCount(prop.name, None, prop.type.stortype, norm)
7078+
norm, info = prop.type.norm(valu)
7079+
if prop.isform:
7080+
count += layr.getPropValuCount(prop.name, None, prop.type.stortype, norm)
7081+
else:
7082+
count += layr.getPropValuCount(prop.form.name, prop.name, prop.type.stortype, norm)
70757083

7076-
return layr.getPropValuCount(prop.form.name, prop.name, prop.type.stortype, norm)
7084+
return count
70777085

70787086
@stormfunc(readonly=True)
70797087
async def _methGetPropArrayCount(self, propname, valu=undef):
@@ -7083,26 +7091,35 @@ async def _methGetPropArrayCount(self, propname, valu=undef):
70837091
await self.runt.reqUserCanReadLayer(layriden)
70847092
layr = self.runt.view.core.getLayer(layriden)
70857093

7086-
prop = self.runt.view.core.model.reqProp(propname)
7094+
props = self.runt.model.reqPropList(propname)
7095+
count = 0
70877096

7088-
if not prop.type.isarray:
7089-
mesg = f'Property is not an array type: {prop.type.name}.'
7097+
if not props[0].type.isarray:
7098+
mesg = f'Property is not an array type: {propname}.'
70907099
raise s_exc.BadTypeValu(mesg=mesg)
70917100

7092-
if valu is undef:
7093-
if prop.isform:
7094-
return layr.getPropArrayCount(prop.name, None)
7101+
if valu is not undef:
7102+
valu = await toprim(valu)
70957103

7096-
return layr.getPropArrayCount(prop.form.name, prop.name)
7104+
for prop in props:
7105+
await asyncio.sleep(0)
70977106

7098-
valu = await toprim(valu)
7099-
atyp = prop.type.arraytype
7100-
norm, info = atyp.norm(valu)
7107+
if valu is undef:
7108+
if prop.isform:
7109+
count += layr.getPropArrayCount(prop.name, None)
7110+
else:
7111+
count += layr.getPropArrayCount(prop.form.name, prop.name)
7112+
continue
7113+
7114+
atyp = prop.type.arraytype
7115+
norm, info = atyp.norm(valu)
71017116

7102-
if prop.isform:
7103-
return layr.getPropArrayValuCount(prop.name, None, atyp.stortype, norm)
7117+
if prop.isform:
7118+
count += layr.getPropArrayValuCount(prop.name, None, atyp.stortype, norm)
7119+
else:
7120+
count += layr.getPropArrayValuCount(prop.form.name, prop.name, atyp.stortype, norm)
71047121

7105-
return layr.getPropArrayValuCount(prop.form.name, prop.name, atyp.stortype, norm)
7122+
return count
71067123

71077124
@stormfunc(readonly=True)
71087125
async def _methGetTagPropCount(self, tag, propname, form=None, valu=undef):
@@ -7135,18 +7152,26 @@ async def _methGetPropValues(self, propname):
71357152
await self.runt.reqUserCanReadLayer(layriden)
71367153
layr = self.runt.view.core.getLayer(layriden)
71377154

7138-
prop = self.runt.view.core.model.reqProp(propname)
7155+
props = self.runt.model.reqPropList(propname)
71397156

7140-
formname = None
7141-
propname = None
7157+
genrs = []
7158+
lastvalu = None
71427159

7143-
if prop.isform:
7144-
formname = prop.name
7145-
else:
7146-
formname = prop.form.name
7147-
propname = prop.name
7160+
for prop in props:
7161+
if prop.isform:
7162+
formname = prop.name
7163+
propname = None
7164+
else:
7165+
formname = prop.form.name
7166+
propname = prop.name
7167+
7168+
genrs.append(layr.iterPropValues(formname, propname, prop.type.stortype))
7169+
7170+
async for _, valu in s_common.merggenr2(genrs):
7171+
if valu == lastvalu:
7172+
continue
71487173

7149-
async for indx, valu in layr.iterPropValues(formname, propname, prop.type.stortype):
7174+
lastvalu = valu
71507175
yield valu
71517176

71527177
@stormfunc(readonly=True)

synapse/lib/view.py

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,8 @@ async def getPropCount(self, propname, valu=s_common.novalu):
10761076
count = 0
10771077

10781078
for prop in props:
1079+
await asyncio.sleep(0)
1080+
10791081
if prop.isform:
10801082
formname = prop.name
10811083
propname = None
@@ -1085,13 +1087,11 @@ async def getPropCount(self, propname, valu=s_common.novalu):
10851087

10861088
if valu is s_common.novalu:
10871089
for layr in self.layers:
1088-
await asyncio.sleep(0)
10891090
count += layr.getPropCount(formname, propname)
10901091
continue
10911092

10921093
norm, info = prop.type.norm(valu)
10931094
for layr in self.layers:
1094-
await asyncio.sleep(0)
10951095
count += layr.getPropValuCount(formname, propname, prop.type.stortype, norm)
10961096

10971097
return count
@@ -1129,6 +1129,8 @@ async def getPropArrayCount(self, propname, valu=s_common.novalu):
11291129
count = 0
11301130

11311131
for prop in props:
1132+
await asyncio.sleep(0)
1133+
11321134
if prop.isform:
11331135
formname = prop.name
11341136
propname = None
@@ -1138,15 +1140,13 @@ async def getPropArrayCount(self, propname, valu=s_common.novalu):
11381140

11391141
if valu is s_common.novalu:
11401142
for layr in self.layers:
1141-
await asyncio.sleep(0)
11421143
count += layr.getPropArrayCount(formname, propname)
11431144
continue
11441145

11451146
atyp = prop.type.arraytype
11461147
norm, info = atyp.norm(valu)
11471148

11481149
for layr in self.layers:
1149-
await asyncio.sleep(0)
11501150
count += layr.getPropArrayValuCount(formname, propname, atyp.stortype, norm)
11511151

11521152
return count
@@ -1202,6 +1202,9 @@ async def wrapgenr(lidx, genr, formname, propname):
12021202
async for indx, valu in genr:
12031203
yield indx, valu, lidx, formname, propname
12041204

1205+
genrs = []
1206+
lastvalu = None
1207+
12051208
for prop in props:
12061209
if prop.isform:
12071210
formname = prop.name
@@ -1210,12 +1213,10 @@ async def wrapgenr(lidx, genr, formname, propname):
12101213
formname = prop.form.name
12111214
propname = prop.name
12121215

1213-
genrs = []
12141216
for lidx, layr in enumerate(self.layers):
12151217
genr = layr.iterPropValues(formname, propname, prop.type.stortype)
12161218
genrs.append(wrapgenr(lidx, genr, formname, propname))
12171219

1218-
lastvalu = None
12191220
async for indx, valu, lidx, formname, propname in s_common.merggenr2(genrs):
12201221
if valu == lastvalu:
12211222
continue
@@ -1224,7 +1225,6 @@ async def wrapgenr(lidx, genr, formname, propname):
12241225
lastvalu = valu
12251226
yield valu
12261227
else:
1227-
valid = False
12281228
async for nid in self.layers[lidx].iterPropIndxNids(formname, propname, indx):
12291229
for layr in self.layers[0:lidx]:
12301230
if (sode := layr._getStorNode(nid)) is None:
@@ -1237,9 +1237,6 @@ async def wrapgenr(lidx, genr, formname, propname):
12371237
sode['antiprops'].get(propname) is not None):
12381238
break
12391239
else:
1240-
valid = True
1241-
1242-
if valid:
12431240
lastvalu = valu
12441241
yield valu
12451242
break
@@ -2422,10 +2419,6 @@ async def _addNodeDef(self, nodedefn, user, runt=None):
24222419

24232420
props = forminfo.get('props')
24242421

2425-
# remove any created props...
2426-
if props is not None:
2427-
props.pop('.created', None)
2428-
24292422
async with self.getEditor(user=user) as editor:
24302423

24312424
try:

0 commit comments

Comments
 (0)