2
3 optionManager.add_option('-R','--rename-tag',
4 action="append",
5 dest='renameTags',
6 metavar="<OLD_NAME:NEW_NAME>",
7 type="string",
8 default=[],
9 help="change tag name from OLD_NAME to NEW_NAME")
10
11 optionManager.add_option('--delete-tag',
12 action="append",
13 dest='deleteTags',
14 metavar="<TAG_NAME>",
15 type="string",
16 default=[],
17 help="delete tag TAG_NAME")
18
19 optionManager.add_option('-S','--set-tag',
20 action="append",
21 dest='setTags',
22 metavar="<TAG_NAME:PYTHON_EXPRESSION>",
23 type="string",
24 default=[],
25 help="Add a new tag named TAG_NAME with "
26 "a value computed from PYTHON_EXPRESSION")
27
28 optionManager.add_option('--set-identifier',
29 action="store",
30 dest='setIdentifier',
31 metavar="<PYTHON_EXPRESSION>",
32 type="string",
33 default=None,
34 help="Set sequence identifier with "
35 "a value computed from PYTHON_EXPRESSION")
36
37 optionManager.add_option('-T','--set-definition',
38 action="store",
39 dest='setDefinition',
40 metavar="<PYTHON_EXPRESSION>",
41 type="string",
42 default=None,
43 help="Set sequence definition with "
44 "a value computed from PYTHON_EXPRESSION")
45
46 optionManager.add_option('-O','--only-valid-python',
47 action="store_true",
48 dest='onlyValid',
49 default=False,
50 help="only valid python expressions are allowed")
51
52
53
54
56 toDelete = options.deleteTags[:]
57 toRename = [x.split(':',1) for x in options.renameTags if len(x.split(':',1))==2]
58 toSet = [x.split(':',1) for x in options.setTags if len(x.split(':',1))==2]
59 newId = options.setIdentifier
60 newDef = options.setDefinition
61
62 def sequenceTagger(seq):
63 for i in toDelete:
64 if i in seq:
65 del seq[i]
66 for o,n in toRename:
67 if o in seq:
68 seq[n]=seq[o]
69 del seq[o]
70 for i,v in toSet:
71 try:
72 val = eval(v,{'sequence':seq},seq)
73 except Exception,e:
74 if options.onlyValid:
75 raise e
76 val = v
77 seq[i]=val
78 if newId is not None:
79 try:
80 val = eval(newId,{'sequence':seq},seq)
81 except Exception,e:
82 if options.onlyValid:
83 raise e
84 val = newId
85 seq.id=val
86 if newDef is not None:
87 try:
88 val = eval(newDef,{'sequence':seq},seq)
89 except Exception,e:
90 if options.onlyValid:
91 raise e
92 val = newDef
93 seq.definition=val
94 return seq
95
96 return sequenceTagger
97