This file is indexed.

/usr/lib/python2.7/dist-packages/framework/subsystems/oeventsd/filter.py is in fso-frameworkd 0.10.1-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# -*- coding: UTF-8 -*-
"""
The freesmartphone Events Module - Python Implementation

(C) 2008 Jan 'Shoragan' Lübbe <jluebbe@lasnet.de>
(C) 2008 Guillaume 'Charlie' Chereau
(C) 2008 Openmoko, Inc.
GPLv2 or later

Package: oeventsd
Module: filter

"""

__version__ = "0.2.0"
MODULE_NAME = "oeventsd.filter"

import logging
logger = logging.getLogger( MODULE_NAME )

#============================================================================#
class Filter( object ):
#============================================================================#
    """Base class for every filter

       A filter is used after a rule has been triggered to decide if the actions
       will be called or not. When a rule is triggered, the trigger generate a dict
       of values, that can be later used by the filter.

       All the filters need to implement the filter method, taking an arbitrary
       number of keywords argument (**kargs) representing the event generated dict
       of values. The method returns True if the filter accept the event, False otherwise.
    """
    def __init__( self, *args, **kwargs ):
        pass

    def filter( self, **kargs ):
        # The default filter is always True
        # Fixme: unnecessary and time consuming call due to outside to inside evaluations
        return True

    def __invert__( self ):
        """Return the inverted filter of this filter

           The __invert__ method is called by the `~` operator.
        """
        return InvertFilter( self )

    def __or__( self, f ):
        """Return a filter that is the logical OR operation between this filter and an other filter
        """
        return OrFilter( self, f )

    def __and__( self, f ):
        return AndFilter( self, f )

    def enable( self ):
        """enable the filter

        This is used because some filter need to connect to external signals,
        e.g : WhileRule
        """
        pass

    def disable( self ):
        """disable the filter"""
        pass

    def __repr__( self ):
        return "base filter"

#============================================================================#
class AttributeFilter( Filter ):
#============================================================================#
    """This filter is True if all the keywords argument are present in the
       call and have the given value
    """
    def __init__( self, **kargs ):
        Filter.__init__( self )
        self.kargs = kargs

    def filter( self, **kargs ):
        return all( key in kargs and kargs[key] == value for (key, value) in self.kargs.items() )

    def __repr__( self ):
        return "and".join( "%s == %s" % (key, value) for (key, value) in self.kargs.items() )

#============================================================================#
class InvertFilter( Filter ):
#============================================================================#
    """This filer returns the negation of the argument filter"""
    def __init__( self, filter ):
        Filter.__init__( self )
        self.__filter = filter

    def filter( self, **kargs ):
        return not self.__filter.filter( **kargs )

    def enable( self ):
        self.__filter.enable()

    def disable( self ):
        self.__filter.disable()

    def __repr__( self ):
        return "~(%s)" % self.__filter

#============================================================================#
class AndFilter( Filter ):
#============================================================================#
    """This filter returns the AND logical operation between a list of filters"""
    def __init__( self, *filters ):
        Filter.__init__( self )
        assert all( isinstance( f, Filter ) for f in filters )
        self.filters = filters

    def filter( self, **kargs ):
        return all( f.filter( **kargs ) for f in self.filters )

    def enable( self ):
        for f in self.filters:
            f.enable()

    def disable( self ):
        for f in self.filters:
            f.disable()

    def __repr__( self ):
        return "And(%s)" % ','.join( str( f ) for f in self.filters )

#============================================================================#
class OrFilter( Filter ):
#============================================================================#
    """This filter returns the OR logical operation between a list of filters"""
    def __init__( self, *filters ):
        Filter.__init__( self )
        assert all( isinstance( f, Filter ) for f in filters )
        self.filters = filters

    def filter( self, **kargs ):
        return any( f.filter( **kargs ) for f in self.filters )

    def enable( self ):
        for f in self.filters:
            f.enable()

    def disable( self ):
        for f in self.filters:
            f.disable()

    def __repr__( self ):
        return "Or(%s)" % ','.join( str( f ) for f in self.filters )