Tag mapper: Add rule types to upper-case, lower-case or capitalize tags

This commit is contained in:
Kovid Goyal 2015-11-05 13:52:38 +05:30
parent 5a488dc7fd
commit b53305c316
2 changed files with 43 additions and 29 deletions

View File

@ -71,6 +71,15 @@ def apply_rules(tag, rules):
break break
tags.appendleft(tag) tags.appendleft(tag)
break break
if ac == 'capitalize':
ans.append(tag.capitalize())
break
if ac == 'lower':
ans.append(icu_lower(tag))
break
if ac == 'upper':
ans.append(icu_upper(tag))
break
else: # no rule matched, default keep else: # no rule matched, default keep
ans.append(tag) ans.append(tag)
@ -99,34 +108,36 @@ def map_tags(tags, rules=()):
return uniq(filter(None, ans)) return uniq(filter(None, ans))
def test(): def test():
rules = [{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t2'}]
assert map_tags(['t1', 'x1'], rules) == ['t2', 'x1'] def rule(action, query, replace=None, match_type='one_of'):
rules = [{'action':'replace', 'query':'(.)1', 'match_type':'matches', 'replace':r'\g<1>2'}] ans = {'action':action, 'query': query, 'match_type':match_type}
assert map_tags(['t1', 'x1'], rules) == ['t2', 'x2'] if replace is not None:
rules = [{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t2, t3'}] ans['replace'] = replace
assert map_tags(['t1', 'x1'], rules) == ['t2', 't3', 'x1'] return ans
rules = [{'action':'replace', 'query':'(.)1', 'match_type':'matches', 'replace':r'\g<1>2,3'}]
assert map_tags(['t1', 'x1'], rules) == ['t2', '3', 'x2'] def run(rules, tags, expected):
rules = [ if isinstance(rules, dict):
{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':r't2,t3'}, rules = [rules]
{'action':'remove', 'query':'t2', 'match_type':'one_of'}, if isinstance(tags, type('')):
] tags = [x.strip() for x in tags.split(',')]
assert map_tags(['t1', 'x1'], rules) == ['t3', 'x1'] if isinstance(expected, type('')):
rules = [{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t1'}] expected = [x.strip() for x in expected.split(',')]
assert map_tags(['t1', 'x1'], rules) == ['t1', 'x1'] ans = map_tags(tags, rules)
rules = [ if ans != expected:
{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t2'}, raise AssertionError('Expected: %r != %r' % (expected, ans))
{'action':'replace', 'query':'t2', 'match_type':'one_of', 'replace':'t1'},
] run(rule('capitalize', 't1,t2'), 't1,x1', 'T1,x1')
assert map_tags(['t1', 't2'], rules) == ['t1', 't2'] run(rule('upper', 'ta,t2'), 'ta,x1', 'TA,x1')
rules = [ run(rule('lower', 'ta,x1'), 'TA,X1', 'ta,x1')
{'action':'replace', 'query':'a', 'match_type':'one_of', 'replace':'A'}, run(rule('replace', 't1', 't2'), 't1,x1', 't2,x1')
] run(rule('replace', '(.)1', r'\g<1>2', 'matches'), 't1,x1', 't2,x2')
assert map_tags(['a', 'b'], rules) == ['A', 'b'] run(rule('replace', '(.)1', r'\g<1>2,3', 'matches'), 't1,x1', 't2,3,x2')
rules = [ run(rule('replace', 't1', 't2, t3'), 't1,x1', 't2,t3,x1')
{'action':'replace', 'query':'a,b', 'match_type':'one_of', 'replace':'A,B'}, run([rule('replace', 't1', 't2,t3'), rule('remove', 't2')], 't1,x1', 't3,x1')
] run(rule('replace', 't1', 't1'), 't1,x1', 't1,x1')
assert map_tags(['a', 'b'], rules) == ['A', 'B'] run([rule('replace', 't1', 't2'), rule('replace', 't2', 't1')], 't1,t2', 't1,t2')
run(rule('replace', 'a', 'A'), 'a,b', 'A,b')
run(rule('replace', 'a,b', 'A,B'), 'a,b', 'A,B')
if __name__ == '__main__': if __name__ == '__main__':
test() test()

View File

@ -26,7 +26,10 @@ class RuleEdit(QWidget):
ACTION_MAP = OrderedDict(( ACTION_MAP = OrderedDict((
('remove', _('Remove')), ('remove', _('Remove')),
('replace', _('Replace')), ('replace', _('Replace')),
('keep', _('Keep')) ('keep', _('Keep')),
('capitalize', _('Capitalize')),
('lower', _('Lower-case')),
('upper', _('Upper-case')),
)) ))
MATCH_TYPE_MAP = OrderedDict(( MATCH_TYPE_MAP = OrderedDict((