1import six
2# coding=utf-8
3
4
5class Processor(object):
6    """
7    Processor base class
8    """
9    name = None
10    parent = None
11    supported = None
12    enabled = True
13
14    def __init__(self, name=None, parent=None, supported=None):
15        self.name = name
16        self.parent = parent
17        self.supported = supported if supported else lambda parent: True
18
19    @property
20    def info(self):
21        return self.name
22
23    def process(self, content, debug=False, **kwargs):
24        return content
25
26    def __repr__(self):
27        return "Processor <%s %s>" % (self.__class__.__name__, self.info)
28
29    def __str__(self):
30        return repr(self)
31
32    def __unicode__(self):
33        return six.text_type(repr(self))
34
35
36class FuncProcessor(Processor):
37    func = None
38
39    def __init__(self, func, name=None, parent=None, supported=None):
40        super(FuncProcessor, self).__init__(name=name, supported=supported)
41        self.func = func
42
43    def process(self, content, debug=False, **kwargs):
44        return self.func(content)
45