annotate phe/variant_filters/__init__.py @ 11:cd59be4a7fe3 draft default tip

Uploaded
author ulfschaefer
date Mon, 21 Dec 2015 11:12:19 -0500
parents c2f8e7580133
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
1 """Classes and functions for working with variant filters."""
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
2
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
3 from __builtin__ import __import__
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
4 from abc import abstractproperty
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
5 import abc
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
6 import argparse
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
7 import glob
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
8 import inspect
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
9 import logging
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
10 import os
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
11 import re
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
12 import sys
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
13
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
14 import vcf
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
15 import vcf.filters
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
16 from vcf.parser import _Filter
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
17
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
18 IUPAC_CODES = {frozenset(["A"]): "A",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
19 frozenset(["C"]): "C",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
20 frozenset(["G"]): "G",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
21 frozenset(["T"]): "T",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
22 frozenset(["A", "G"]): "R",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
23 frozenset(["C", "T"]): "Y",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
24 frozenset(["G", "C"]): "S",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
25 frozenset(["A", "T"]): "W",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
26 frozenset(["G", "T"]): "K",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
27 frozenset(["A", "C"]): "M",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
28 frozenset(["C", "G", "T"]): "B",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
29 frozenset(["A", "G", "T"]): "D",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
30 frozenset(["A", "C", "T"]): "H",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
31 frozenset(["A", "C", "G"]): "V"
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
32 }
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
33
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
34 class PHEFilterBase(vcf.filters.Base):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
35 """Base class for VCF filters."""
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
36 __meta__ = abc.ABCMeta
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
37
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
38 magic_sep = ":"
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
39 decoder_pattern = re.compile(magic_sep)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
40
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
41 @abc.abstractproperty
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
42 def parameter(self):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
43 """Short name of parameter being filtered."""
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
44 return self.parameter
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
45
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
46 @abc.abstractproperty
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
47 def _default_threshold(self):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
48 """Default threshold for filtering."""
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
49 return self._default_threshold
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
50
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
51 def __init__(self, args):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
52 super(PHEFilterBase, self).__init__(args)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
53
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
54 # Change the threshold to custom gq value.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
55 self.threshold = self._default_threshold
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
56
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
57 if isinstance(args, dict):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
58 self.threshold = args.get(self.parameter)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
59
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
60 def __str__(self):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
61 return self.filter_name()
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
62
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
63 def _check_record(self, record):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
64 if self.is_uncallable(record):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
65 return False
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
66 elif record.is_monomorphic:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
67 return None
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
68 else:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
69 return True
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
70
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
71 @abc.abstractmethod
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
72 def short_desc(self):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
73 """Short description of the filter (included in VCF)."""
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
74 raise NotImplementedError("Get short description is not implemented.")
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
75
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
76 def get_config(self):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
77 """This is used for reconstructing filter."""
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
78 return {self.parameter: self.threshold}
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
79
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
80 def filter_name(self):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
81 """Create filter names by their parameter separated by magic.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
82 E.g. if filter parameter is ad_ratio and threshold is 0.9 then
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
83 ad_ratio:0.9 if the filter name.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
84 """
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
85 return "%s%s%s" % (self.parameter, self.magic_sep, self.threshold)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
86
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
87 @staticmethod
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
88 def decode(filter_id):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
89 """Decode name of filter."""
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
90 conf = {}
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
91
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
92 if PHEFilterBase.magic_sep in filter_id:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
93 info = PHEFilterBase.decoder_pattern.split(filter_id)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
94 assert len(info) == 2
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
95 conf[info[0]] = info[1]
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
96 return conf
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
97
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
98 def is_gap(self):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
99 return False
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
100
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
101 def is_n(self):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
102 return True
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
103
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
104 def is_uncallable(self, record):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
105 """Filter a :py:class:`vcf.model._Record`."""
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
106
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
107 if len(record.samples) > 1:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
108 logging.warn("More than 1 sample detected. Only first is considered.")
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
109
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
110 try:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
111 record_gt = record.samples[0].data.GT
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
112 except AttributeError:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
113 logging.warn("Could not retrieve GQ score POS %i", record.POS)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
114 record_gt = "./."
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
115
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
116 if record_gt == "./.":
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
117 return True
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
118 else:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
119 return False
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
120
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
121 @staticmethod
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
122 def call_concensus(record):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
123 if not record.FILTER:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
124 sample_ad = frozenset([str(c).upper() for c in record.ALT])
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
125 return IUPAC_CODES.get(sample_ad, "N")
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
126
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
127 else:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
128 sample_ad = frozenset([str(c).upper() for c in record.ALT] + [record.REF])
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
129
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
130 return IUPAC_CODES.get(sample_ad, "N")
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
131
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
132 def dynamic_filter_loader():
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
133 """Fancy way of dynamically importing existing filters.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
134
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
135 Returns
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
136 -------
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
137 dict:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
138 Available filters dictionary. Keys are parameters that
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
139 can be supplied to the filters.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
140 """
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
141
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
142 # We assume the filters are in the same directory as THIS file.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
143 filter_dir = os.path.dirname(__file__)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
144 filter_dir = os.path.abspath(filter_dir)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
145
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
146 # This is populated when the module is first imported.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
147 avail_filters = {}
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
148
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
149 # Add this directory to the syspath.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
150 sys.path.insert(0, filter_dir)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
151
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
152 # Find all "py" files.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
153 for filter_mod in glob.glob(os.path.join(filter_dir, "*.py")):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
154
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
155 # Derive name of the module where filter is.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
156 filter_mod_file = os.path.basename(filter_mod)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
157
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
158 # Ignore this file, obviously.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
159 if filter_mod_file.startswith("__init__"):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
160 continue
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
161
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
162 # Import the module with a filter.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
163 mod = __import__(filter_mod_file.replace(".pyc", "").replace(".py", ""))
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
164
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
165 # Find all the classes contained in this module.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
166 classes = inspect.getmembers(mod, inspect.isclass)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
167 for cls_name, cls in classes:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
168 # For each class, if it is a sublass of PHEFilterBase, add it.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
169 if cls_name != "PHEFilterBase" and issubclass(cls, PHEFilterBase):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
170 # The parameters are inherited and defined within each filter.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
171 avail_filters[cls.parameter] = cls
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
172
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
173 sys.path.remove(filter_dir)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
174
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
175 return avail_filters
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
176
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
177 _avail_filters = dynamic_filter_loader()
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
178
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
179 def available_filters():
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
180 """Return list of available filters."""
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
181 return _avail_filters.keys()
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
182
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
183 def str_to_filters(filters):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
184 """Convert from filter string to array of filters.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
185 E.g. ad_ration:0.9,min_depth:5
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
186
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
187 Parameters:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
188 -----------
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
189 filters: str
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
190 String version of filters, separated by comma.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
191
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
192 Returns:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
193 --------
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
194 list:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
195 List of :py:class:`phe.variant_filters.PHEFilterBase` instances.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
196 """
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
197
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
198 config = {}
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
199 for kv_pair in filters.split(","):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
200 pair = kv_pair.split(":")
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
201 assert len(pair) == 2, "Filters should be separated by ':' %s" % kv_pair
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
202
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
203 # We don't care about casting them to correct type because Filters
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
204 # will do it for us.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
205 config[pair[0]] = pair[1]
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
206
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
207 return make_filters(config)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
208
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
209 def make_filters(config):
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
210 """Create a list of filters from *config*.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
211
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
212 Parameters:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
213 -----------
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
214 config: dict, optional
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
215 Dictionary with parameter: value pairs. For each parameter, an
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
216 appropriate Filter will be found and instanciated.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
217
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
218 Returns:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
219 --------
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
220 list:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
221 List of :py:class:`PHEFilterBase` filters.
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
222 """
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
223 filters = []
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
224
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
225 if config:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
226 for custom_filter in config:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
227 if custom_filter in _avail_filters:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
228 filters.append(_avail_filters[custom_filter](config))
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
229 else:
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
230 logging.error("Could not find appropriate filter for %s",
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
231 custom_filter)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
232 raise Exception("Filter %s could not be created. Please check your filter arguments." % custom_filter)
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
233
c2f8e7580133 Uploaded
ulfschaefer
parents:
diff changeset
234 return filters