configurationengine/source/plugins/common/ConeCommandPlugin/commandplugin/commandml.py
author m2lahtel
Wed, 08 Sep 2010 12:20:56 +0300
changeset 4 0951727b8815
parent 3 e7e0ae78773e
permissions -rw-r--r--
Updated to 1.2.13 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
# Description:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
## 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
# @author <author>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
'''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
ConE plugin to run external applications/tools with given parameters in .commandml file. Notice that values can be also
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
fecthed from ConfML to maximize portability and minimize maintenance.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
'''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
import re
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
import os
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
import logging
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
import types
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    27
import pkg_resources
4
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
    28
import sys 
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
import subprocess
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    30
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    31
from cone.public import plugin,utils
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    33
def get_folder_set(folder):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    34
    """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    35
    Get a set object containing all files of given folder
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    36
    @param folder: the folder to create set for
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    37
    @return: a python set 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    38
    """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    39
    fileset = set()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    40
    for (root, _, filenames) in os.walk(folder):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    41
        for filename in filenames:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    42
            fname = utils.relpath(os.path.join(root,filename), folder)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    43
            fileset.add(fname)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    44
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    45
    return fileset
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
class CommandImpl(plugin.ImplBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
    Plugin implementation class. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
    IMPL_TYPE_ID = "commandml"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
    def __init__(self,ref,configuration, reader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
        Overloading the default constructor
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
        plugin.ImplBase.__init__(self,ref,configuration)###3
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
        self.desc = ""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
        self.logger = logging.getLogger('cone.commandml(%s)' % self.ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
        self.reader = reader
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    63
        for element in self.reader.elements:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    64
            element.set_logger(self.logger)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
    def generate(self, context=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
        Generate the given implementation.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    71
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    72
        self.create_output(context)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
        return 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
    def generate_layers(self,layers):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
        Generate the given Configuration layers.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        self.logger.info('Generating layers %s' % layers)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
        self.create_output(layers)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
        return 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
    
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    83
    def create_output(self, context, layers=None):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
        Function to generate output files.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    87
        self.context = context
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
        tmpDict = self.__create_helper_variables()
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    89
        # Get the contents of output folder before the generation
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    90
        outset_before = get_folder_set(context.output)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
        for element in self.reader.elements:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
            #Element can be either command or condition.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
            element.set_logger(self.logger)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    94
            element.execute(context, tmpDict)        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    95
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    96
        # Get the contents of output folder after the generation 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    97
        # and get the new files created by the set difference.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    98
        # NOTE! this does not recognize files outside output folder!
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    99
        outset_after = get_folder_set(context.output)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   100
        outset = outset_after - outset_before
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   101
        for outfile in outset:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   102
            context.add_file(outfile, implementation=self)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        return
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
    def __create_helper_variables(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
        Internal function to create dictionary containing most often used ConE "environment" variables.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        """        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        tmp = {}
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   110
        tmp["%CONE_OUT%"] = os.path.join(self.context.output, self.output).rstrip('\\')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   111
        tmp["%CONE_OUT_ABSOLUTE%"] = os.path.abspath(os.path.join(self.context.output, self.output)).rstrip('\\')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        return tmp    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
    def has_ref(self, refs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        @returns True if the implementation uses the given ref as input value.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
        Otherwise return False.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
                
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        # return true for now so that content copying is not filtered 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
        return None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
class CommandImplReader(plugin.ReaderBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
    Parses a single commandml file
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
    NAMESPACE = 'http://www.s60.com/xml/commandml/1'
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   128
    NAMESPACE_ID = 'commandml'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   129
    ROOT_ELEMENT_NAME = 'commandml'
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
    FILE_EXTENSIONS = ['commandml']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
    def __init__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
        Constructor
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
        self.output_dir = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
        self.input_dir = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
        self.namespaces = [self.NAMESPACE]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        self.dview = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
        self.elements = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
        self.tags = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
    def read_impl(cls, resource_ref, configuration, etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        reader = CommandImplReader()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
        reader.set_default_view(configuration.get_default_view())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
        reader.from_etree(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        impl = CommandImpl(resource_ref, configuration, reader)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        if reader.tags:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
            impl.set_tags(reader.tags)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        return impl
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   152
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   153
    @classmethod
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   154
    def get_schema_data(cls):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   155
        return pkg_resources.resource_string('commandplugin', 'xsd/commandml.xsd')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   156
    
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
    def set_default_view(self, dview):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
        Function to set default view that is needed when solving out ConfML reference information
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
        """        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        self.dview = dview
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
    def from_etree(self, etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        Parser function for commandml element.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
        self.parse_tree(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
    def parse_tree(self, etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        General parse function for condition and command elements.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        """        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        elements = list(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
        for element in elements:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
            if element.tag == "{%s}condition" % self.namespaces[0]:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
                self.elements.append(self.parse_condition(element))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
            elif element.tag == "{%s}command" % self.namespaces[0]:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
                self.elements.append(self.parse_command(element))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
                pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        self.tags = self.parse_tags(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
    def parse_condition(self, etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
        Parse function for condition element.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
        """        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
        condition = Condition()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
        condition.set_condition(etree.get("value"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
        condition.set_commands(self.parse_commands(etree))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
        condition.set_default_view(self.dview)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
        return condition                                   
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
    def parse_commands(self,etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
        Parser function for commands.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
        commands = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
        for com_elem in etree.findall("{%s}command" % self.namespaces[0]):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
            commands.append(self.parse_command(com_elem))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
        return commands
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
         
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
    def parse_command(self,etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
        Parser function for single command.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
        cmd = Command()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
        cmd.set_executable(etree.get("executable"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
        cmd.set_shell(etree.get("shell"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
        cmd.set_bufsize(etree.get("bufsize"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
        cmd.set_cwd(etree.get("cwd")) 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
        cmd.set_all_envs(etree.get("env"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
        cmd.set_all_arguments(self.parse_arguments(etree))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
        cmd.set_all_pipes(self.parse_pipes(etree))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
        cmd.set_filters(self.parse_filters(etree))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
        cmd.set_default_view(self.dview)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
        return cmd
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
    def parse_arguments(self,etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
        Parser function for command's arguments.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
        arguments = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
        for argument in etree.findall("{%s}argument" % self.namespaces[0]):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
            value = argument.get("value")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
            if value:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
                arguments.append(value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
        return arguments
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
    def parse_pipes(self,etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
        Parser function for command's pipes.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
        pipes = {}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
        for argument in etree.findall("{%s}pipe" % self.namespaces[0]):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
            name = argument.get("name")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
            value = argument.get("value")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
            if name:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
                pipes[name] = value        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
        return pipes
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
    def parse_filters(self,etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
        Parser function for command's filters.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
        filters = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
        for argument in etree.findall("{%s}filter" % self.namespaces[0]):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
            f = Filter()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
            f.set_severity(argument.get("severity"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
            f.set_condition(argument.get("condition"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
            f.set_input(argument.get("input"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
            f.set_formatter(argument.get("formatter"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
            filters.append(f)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
        return filters
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
    def parse_tags(self,etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
        tags = {}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
        for tag in etree.getiterator("{%s}tag" % self.namespaces[0]):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
            tagname = tag.get('name','')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
            tagvalue = tag.get('value')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
            values = tags.get(tagname,[])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
            values.append(tagvalue)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
            tags[tagname] = values
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
        return tags
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
class Condition(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
    Condition class is a simple wrapper class for commands so that commands are executed
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
    only if condition is True. Otherwise class does nothing. Class has similar interface 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
    than Command class so that they can be used similar way from plugin perspective. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
    def __init__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
        self.condition = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
        self.commands = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
        self.logger = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
        self.dview = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
    def set_condition(self, condition):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
        self.condition = condition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
    def set_default_view(self, dview):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
        self.dview = dview
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
    def set_commands(self, commands):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
        self.commands = commands
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   287
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
    def set_logger(self, logger):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
        self.logger = logger
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   290
        for cmd in self.commands:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
            cmd.set_logger(logger)        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   292
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   293
    def add_command(self, command):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   294
        self.commands.append(command)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   295
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   296
    def execute(self, context, replaceDict=None):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   297
        if self._solve_condition(self.condition, context):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
            #Condition is true -> running command
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   299
            for command in self.commands:                
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   300
                command.execute(context, replaceDict)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
            self.logger.info("Ignoring %s because it is evaluated as False." % self.condition)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   303
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   304
    def _solve_condition(self, condition_str, context):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
        Internal function to handle condition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
        if condition_str != "":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
            #Expanding ConfML information
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
            modstr = utils.expand_delimited_tokens(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
                condition_str,
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   312
                lambda ref, index: repr(context.configuration.get_default_view().get_feature(ref).get_value()))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
            return eval(modstr)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
            #Empty condition is true always.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
class Command(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
    Command is a class that executes actual commands. It provides ways to handle input, output and error 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
    streams and to control execution parameters.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
    def __init__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
        Constructor
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
        """        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
        self.executable = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
        self.shell = False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
        self.bufsize = 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
        self.cwd = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
        self.envs = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
        self.arguments = []
4
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   334
        self.pipes = {'stdout': subprocess.PIPE, 'stderr': subprocess.PIPE}
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
        self.streams = {}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
        self.filters = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
        self.logger = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
        self.dview = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
    def set_executable(self, executable):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
        self.executable = executable
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
    def set_shell(self, shell):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
        if shell and shell.lower() in ('true', 'yes', '1', 1, True):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
            self.shell = True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   347
            self.shell = False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   349
    def set_bufsize(self, bufsize):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
        if bufsize:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
            self.bufsize = int(bufsize)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
    def set_cwd(self, cwd):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
        self.cwd = cwd
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   355
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
    def set_all_envs(self, envs):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   357
        self.envs = envs
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   358
    def set_default_view(self, dview):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
        self.dview = dview
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
    def set_env(self, name, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   362
        self.envs[name] = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   364
    def set_all_arguments(self, args):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
        self.arguments = args
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   366
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   367
    def get_arguments_string(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   368
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   369
        Function to return arguments as a string
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   371
        arg_string = ""        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   372
        for value in self.arguments:            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   373
            arg_string += value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   374
            arg_string += " "                
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   375
        return arg_string
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   376
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   377
    def get_pipe(self, name, mode='w'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   378
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   379
        Function to return pipe based on the pipe name in requested mode.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   380
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   381
        if self.pipes.has_key(name) and isinstance(self.pipes[name], types.IntType):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   382
        #Subprocess pipe
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   383
            return self.pipes[name]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   384
        elif self.pipes.has_key(name) and isinstance(self.pipes[name], types.StringType):            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   385
            return file(self.pipes[name], mode)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   386
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   387
            return None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   388
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   389
    def set_streams(self, stdin, stdout, stderr):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   390
        self.streams["stdin"] = stdin
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   391
        self.streams["stdout"] = stdout
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   392
        self.streams["stderr"] = stderr
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   393
                        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   394
    def get_streams(self, name, mode="r"):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   395
        if self.streams.has_key(name) and self.streams[name]:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   396
        #OK for streams set with subprocess.PIPE
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   397
            return self.streams[name]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   398
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   399
        #For file objects
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   400
            return self.get_pipe(name, mode)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   401
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   402
    def set_filters(self, filters):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   403
        self.filters = filters
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   404
        for f in self.filters:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   405
            f.set_command(self)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   406
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   407
    def get_filters(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   408
        return self.filters
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   409
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   410
    def set_argument(self, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   411
        self.arguments.append(value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   412
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   413
    def set_all_pipes(self, pipes):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   414
        for pipe in pipes.keys():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   415
            self.set_pipe(pipe, pipes[pipe])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   416
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   417
    def set_pipe(self, name, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   418
        if value == "PIPE":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   419
            #Creating new stream for this.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   420
            self.pipes[name] = subprocess.PIPE
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   421
        elif value == "STDOUT":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   422
            self.pipes[name] = subprocess.STDOUT
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   423
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   424
            #Setting filename
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   425
            self.pipes[name] = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   426
            #self.pipes[name] = file(value, 'w')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   427
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   428
    def handle_filters(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   429
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   430
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   431
        for filter in self.filters:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   432
            filter.report(self.logger)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   433
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   434
    def execute(self, context, replaceDict=None):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   435
        self.dview = context.configuration.get_default_view()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   436
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   437
        self.solve_refs()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   438
        
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   439
        try:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   440
            if self.envs:   env_dict = eval(self.envs)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   441
            else:           env_dict = None
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   442
        except Exception, e:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   443
            raise RuntimeError("Failed to evaluate env dictionary: %s: %s" % (e.__class__.__name__, e))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   444
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   445
        exit_code = 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   446
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   447
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   448
                if self.cwd is not None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   449
                    cwd = self.__replace_helper_variables(self.cwd, replaceDict)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   450
                else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   451
                    cwd = self.cwd
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   452
                command_str = self.executable + " " + self.__replace_helper_variables(self.get_arguments_string(), replaceDict)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   453
                self.logger.info("Running command: \"%s\"" % command_str)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   454
                self.logger.info("with args: shell=%s envs=%s cwd=%s bufsize=%s stdin=%s stdout=%s stderr=%s" \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   455
                                 % (self.shell, self.envs, cwd, self.bufsize, \
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   456
                                    self.get_pipe("stdin", 'r'),self.get_pipe("stdout"), self.get_pipe("stderr")))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   457
                pid = subprocess.Popen(command_str, shell=self.shell, env=env_dict, cwd=cwd,\
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   458
                                          bufsize=self.bufsize, stdin = self.get_pipe("stdin", 'r'),\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   459
                                          stdout = self.get_pipe("stdout"), stderr = self.get_pipe("stderr"))
4
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   460
                
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   461
                #log stdout and stderr to logger
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   462
                stdout_value, stderr_value = pid.communicate()
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   463
                if stdout_value != None: self.logger.info("stdout: %s" % stdout_value)
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   464
                if stderr_value != None: self.logger.warning("stderr: %s" % stderr_value)
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   465
                
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   466
                #Waiting for process to complete
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   467
                retcode = pid.wait()
4
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   468
                
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   469
                #Storing stream information for possible further processing.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   470
                self.set_streams(pid.stdin, pid.stdout, pid.stderr)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   471
                
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   472
                if retcode < 0:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   473
                    self.logger.error("Child was terminated by signal %s" % (-retcode))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   474
                else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   475
                    self.logger.info("Child returned: %s" % retcode)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   476
            except OSError, e:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   477
                self.logger.error("Execution failed: %s", repr(e))            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   478
            self.handle_filters()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   479
        except Exception,e:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   480
            utils.log_exception(self.logger, "Failed to execute command: %s" % e)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   481
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   482
    def set_logger(self, logger):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   483
        self.logger = logger        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   484
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   485
    def __replace_helper_variables(self, inputstr, dictionary):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   486
        retstr = inputstr
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   487
        for key in dictionary.keys():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   488
            retstr = retstr.replace(key, dictionary[key])            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   489
        return retstr
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   490
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   491
    def solve_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   492
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   493
        Function to solve references just before generation.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   494
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   495
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   496
        self.executable = self.__solve_ref(self.executable)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   497
        self.shell = self.__solve_ref(self.shell)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   498
        self.bufsize = self.__solve_ref(self.bufsize)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   499
        self.cwd = self.__solve_ref(self.cwd)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   500
        self.envs = self.__solve_ref(self.envs)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   501
        for argument in self.arguments:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   502
            self.arguments[self.arguments.index(argument)] = self.__solve_ref(argument) 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   503
        for pipe in self.pipes.keys():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   504
            self.pipes[pipe] = self.__solve_ref(self.pipes[pipe])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   505
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   506
    def __solve_ref(self, inputstr):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   507
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   508
        Internal function to solve whether input is ref or just normal input string. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   509
        For refs actual ConfML value is resolved and returned. Non-refs are returned 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   510
        as such.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   511
        """        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   512
        if inputstr and isinstance(inputstr, types.StringType):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   513
            return utils.expand_refs_by_default_view(inputstr, self.dview)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   514
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   515
            return inputstr
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   516
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   517
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   518
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   519
class Filter(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   520
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   521
    Filter class handles printing information to ConE log using filtering information.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   522
    Filtering severity, condition and the format of output can be configured in command ml. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   523
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   524
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   525
    def __init__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   526
        self.severity = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   527
        self.condition = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   528
        self.input = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   529
        self.command = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   530
        self.formatter = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   531
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   532
    def set_severity(self, severity):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   533
        self.severity = severity
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   534
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   535
    def set_condition(self, condition):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   536
        self.condition = condition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   537
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   538
    def set_input(self, input):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   539
        self.input = input
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   540
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   541
    def set_command(self, command):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   542
        self.command = command
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   543
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   544
    def set_formatter(self, formatter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   545
        self.formatter = formatter
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   546
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   547
    def report(self, logger):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   548
        input_pipe = self.command.get_streams(self.input)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   549
        if isinstance(input_pipe, types.FileType):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   550
            #Subprocess.PIPE and file descriptors supported only.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   551
            data = input_pipe.read()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   552
            pattern = re.compile(self.condition)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   553
            for line in data.splitlines():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   554
                mo = pattern.match(line)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   555
                if mo:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   556
                    lf = self.__get_logger_function(logger)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   557
                    if self.formatter:                        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   558
                        lf(self.formatter % mo.groupdict())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   559
                    else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   560
                        lf(line)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   561
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   562
    def __get_logger_function(self, logger):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   563
        if self.severity == "info":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   564
            return logger.info
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   565
        elif self.severity == "warning":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   566
            return logger.warning
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   567
        elif self.severity == "debug":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   568
            return logger.debug
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   569
        elif self.severity == "exception":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   570
            return logger.exception
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   571
        elif self.severity == "error":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   572
            return logger.error
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   573
        elif self.severity == "critical":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   574
            return logger.critical
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   575
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   576
            #Default
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   577
            return logger.info
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   578
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   579
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   580
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   581
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   582
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   583
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   584
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   585