Skip to content

Commit 56abe50

Browse files
authored
Add upper typeopt to string type (SYN-10051) (#4632)
1 parent 4653b3b commit 56abe50

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

synapse/lib/types.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2258,6 +2258,7 @@ class Str(Type):
22582258
('regex', None),
22592259
('lower', False),
22602260
('strip', True),
2261+
('upper', False),
22612262
('replace', ()),
22622263
('onespace', False),
22632264
('globsuffix', False),
@@ -2282,6 +2283,10 @@ def postTypeInit(self):
22822283

22832284
self.strtype = self.modl.type('str')
22842285

2286+
if self.opts.get('lower') and self.opts.get('upper'):
2287+
mesg = f'Str type ({self.name}) has both lower and upper set.'
2288+
raise s_exc.BadTypeDef(mesg=mesg)
2289+
22852290
self.regex = None
22862291
restr = self.opts.get('regex')
22872292
if restr is not None:
@@ -2313,6 +2318,8 @@ async def _normForLift(self, valu):
23132318
# doesnt have to be normable...
23142319
if self.opts.get('lower'):
23152320
valu = valu.lower()
2321+
elif self.opts.get('upper'):
2322+
valu = valu.upper()
23162323

23172324
for look, repl in self.opts.get('replace', ()):
23182325
valu = valu.replace(look, repl)
@@ -2353,6 +2360,8 @@ async def _normPyStr(self, valu, view=None):
23532360

23542361
if self.opts['lower']:
23552362
norm = norm.lower()
2363+
elif self.opts['upper']:
2364+
norm = norm.upper()
23562365

23572366
for look, repl in self.opts.get('replace', ()):
23582367
norm = norm.replace(look, repl)

synapse/tests/test_lib_types.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1699,6 +1699,12 @@ async def test_str(self):
16991699
lowr = model.type('str').clone({'lower': True})
17001700
self.eq('foo', (await lowr.norm('FOO'))[0])
17011701

1702+
uppr = model.type('str').clone({'upper': True})
1703+
self.eq('FOO', (await uppr.norm('foo'))[0])
1704+
1705+
with self.raises(s_exc.BadTypeDef):
1706+
model.type('str').clone({'upper': True, 'lower': True})
1707+
17021708
self.eq(True, await lowr.cmpr('xxherexx', '~=', 'here'))
17031709
self.eq(False, await lowr.cmpr('xxherexx', '~=', '^here'))
17041710

synapse/tests/test_model_infotech.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,14 @@ async def test_it_forms_simple(self):
396396
# self.eq(node.get('cisa:kev:added'), 1641081600000000)
397397
# self.eq(node.get('cisa:kev:duedate'), 1641081600000000)
398398

399+
nodes = await core.nodes('[ it:sec:cve=cve-2010-9998 ]')
400+
self.len(1, nodes)
401+
self.eq(nodes[0].ndef, ('it:sec:cve', 'CVE-2010-9998'))
402+
403+
nodes = await core.nodes('it:sec:cve^=cve-2010')
404+
self.len(1, nodes)
405+
self.eq(nodes[0].ndef, ('it:sec:cve', 'CVE-2010-9998'))
406+
399407
nodes = await core.nodes('[it:sec:cve=$valu]', opts={'vars': {'valu': 'CVE\u20122013\u20131138'}})
400408
self.len(1, nodes)
401409
node = nodes[0]

0 commit comments

Comments
 (0)