def ListProperties(self, pattern=None, _type=None, **kwargs):
        # setup a test for the optional parameters
        def passesOptionalTest(x):
            for arg, challenge in kwargs.iteritems():
                func = getattr(x, arg, None)
                if func and func() != challenge:
                    return False
            return True
            
        # set up the name testing based on the pattern
        if pattern:           
            # if there is a wild card in the pattern
            if '*' in pattern:
                pattern = pattern.replace('*', '.*')
                # name testing function
                passesNameTest = lambda x: re.match(pattern, x.GetName())
            else:
                passesNameTest = lambda x: pattern == x.GetName()      
        else:
            passesNameTest = lambda x: True
        
        # add type testing
        if _type:
            propertyType = self.kPropertyTypes[_type][0]
            passesTypeTest = lambda x: x.GetPropertyType() == propertyType
        else:
            passesTypeTest = lambda x: True
            
        properties = []
        for p in self.component.PropertyList:
            # odd bug that some items are None
            if p is None:
                continue
            
            if not passesOptionalTest(p):
                continue
            
            if not passesTypeTest(p):
                continue
            
            if passesNameTest(p):
                properties.append(p)
        
        return properties
Returns a list of property names from the PropertyList with optional filters
dataset/ETHPy150Open CountZer0/PipelineConstructionSet/python/moBu/site-packages/PyMoBu-0.2/pymobu/components/__init__.py/PMBComponent.ListProperties