configurationengine/source/plugins/symbian/ConeImagePlugin/imageplugin/generators.py
author terytkon
Thu, 11 Mar 2010 17:04:37 +0200
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
permissions -rw-r--r--
Adding EPL version of configurationengine.
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
Generator classes
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
'''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
import re
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
import os
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
import sys
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
import logging
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
import subprocess
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
import shutil
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
from cone.public import utils, exceptions
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
class InvalidInputFileException(RuntimeError):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
    Exception thrown in case of an invalid input file list.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
    pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
class OutputGenerator(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
    def __init__(self,outputpath,**kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
        self._configuration = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
        self._subpath = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
        self._contentpath = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
        self._command = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
        self._inputs = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
        for arg in kwargs.keys():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
            setattr(self, arg, kwargs[arg])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
        self._outputpath = outputpath
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
    def __str__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
        return "Generator for output %s: %s"  % (self.path,self.get_command())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
    def generate(self, context=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
        command = self.get_command()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
        if command:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
            return command.execute()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
            return 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
    def get_outputpath(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
        Get the confml ref value from configuration if the outputpath is actually a ref
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
        if self._outputpath and ConfmlRefs.is_confml_ref(self._outputpath):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
             oref = ConfmlRefs.get_confml_ref(self._outputpath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
             opath = self.configuration.get_default_view().get_feature(oref).get_value()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
             if opath == None: 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
                 logging.getLogger('cone.imageml').warning('Output path not set.')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
                 return self._outputpath 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
                 #raise exceptions.NotBound("Output path reference has no value %s" % oref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
             (drive,opath) = os.path.splitdrive(opath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
             opath = utils.resourceref.norm(opath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
             opath = utils.resourceref.remove_begin_slash(opath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
             return opath
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
             return self._outputpath
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
    def set_outputpath(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
        self._outputpath = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
    def del_outputpath(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
        self._outputpath = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
    def get_subpath(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
        return self._subpath
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
    def set_subpath(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
        self._subpath = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
    def del_subpath(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
        self._subpath = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
    def get_inputs(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
        return self._inputs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
    def set_inputs(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        self._inputs = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
    def del_inputs(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        self._inputs = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
    def get_configuration(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        return self._configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
    def set_configuration(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
        self._configuration= value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
        for input in self.inputs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
            input.configuration = self.configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
    def del_configuration(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        self._configuration= None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
    def path(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        return utils.resourceref.join_refs([self.subpath, self.outputpath])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
    def get_command(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        (_,ext) = os.path.splitext(self.path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
        if ext == '.mbm':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
            return BmconvCommand(self)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
        elif ext == '.mif':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
            return MifconvCommand(self)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
        elif ext == '.gif':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
            return CopyCommand(self)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
            return None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
    def get_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
        refs = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
        for input in self.inputs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
            refs.extend(input.get_refs())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
        return refs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
    configuration = property(get_configuration, set_configuration, del_configuration)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
    inputs = property(get_inputs, set_inputs, del_inputs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
    outputpath = property(get_outputpath, set_outputpath, del_outputpath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
    subpath = property(get_subpath, set_subpath, del_subpath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
class Command(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
    def __init__(self,generator):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        self._generator = generator
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
        self._workdir = 'conversion_workdir'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
    def execute(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
        """ Execute this command """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
        pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
    def get_command(self, input_files):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
        """ return the command as an array """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        return []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
    def create_workdir(self, input_files):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
        Extract the necessary input files from storage to a working directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
        @param input_files: The input files (a list of InputFile objects) 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        if not os.path.exists(self._workdir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
            os.makedirs(self._workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        for file in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
            self.import_to_work(file.filename)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
    def clean_workdir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        Clean up working directory 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        if os.path.exists(self._workdir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
            shutil.rmtree(self._workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
    def import_to_work(self,storage_filename):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        Convert a storage filename to a work filename
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        workfile = self.workfilename(storage_filename)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        res = self._generator.configuration.get_resource(storage_filename,"rb")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
        workfile = open(workfile,"wb")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
        workfile.write(res.read())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
        workfile.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
    def workfilename(self,filename):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        Convert a storage filename to a work filename
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
        (_,workname) = os.path.split(filename)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
        return os.path.join(self.workdir,workname)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
    def quote_needed(self,str):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
        Add quotes around str if it has spaces
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
        if str.split(' ',1) > 1:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
            return '"%s"' % str
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
            return str
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
    def tool(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
        return ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
    def generator(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
        return self._generator
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
    def workdir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        return self._workdir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
    def _get_filtered_input_files(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
        Get the list of InputFile objects and with ignored
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
        (optional empty or invalid files) entries filtered out.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
        Raise InvalidInputFileException if the input file list is invalid.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
        # Get all input files
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
        input_files = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
        for input in self.generator.inputs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
            input_files.extend(input.files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
        # Check if all are empty
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
        all_empty = True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
        for file in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
            if not file.is_empty():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
                all_empty = False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
                break
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
        if all_empty:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
            return []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
        # Create the filtered list
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
        result = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
        for file in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
            if file.is_empty():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
                if file.is_optional():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
                    # Optional file is empty: no error
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
                    pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
                else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
                    raise InvalidInputFileException("Input file empty but not optional")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
                if not file.is_valid():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
                    raise InvalidInputFileException("Invalid input file: '%s'" % file.path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
                else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
                    result.append(file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
        return result 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
class BmconvCommand(Command):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
    def __init__(self,generator):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
        super(BmconvCommand, self).__init__(generator)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
    def execute(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
        Execute the command in the current working directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
        input_files = self._get_filtered_input_files()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
        if len(input_files) == 0: return 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
        self.create_workdir(input_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
        if not os.path.exists(os.path.dirname(self.generator.path)):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
            os.makedirs(os.path.dirname(self.generator.path))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
        command = self.get_command(input_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
        p = subprocess.Popen(command,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
                             stdout=subprocess.PIPE,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
                             stderr=subprocess.PIPE)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
        # Wait for the process to return
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
        out, err = [ e.splitlines() for e in p.communicate() ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
        for outl in out:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
            if outl not in err:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
                logging.getLogger('cone.bmconv').info(outl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
        for outl in err:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
            logging.getLogger('cone.bmconv').error(outl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
        if p.returncode != 0:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
            logging.getLogger('cone.bmconv').error("Command returned with returncode %s: %s" % (p.returncode, ' '.join(command)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
            logging.getLogger('cone.bmconv').info("Command returned with returncode %s: %s" % (p.returncode, ' '.join(command)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
        if p.returncode == 0:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
        	self.clean_workdir()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
        return p.returncode 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
    def get_command(self, input_files):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
        command = [self.tool]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
        """ Add palette file """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
        if hasattr(self._generator,'palette'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
            command.append('/p%s' % os.path.abspath(self.generator.palette))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
        """ Add output file """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
        """ Add output file as compressed if needed """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   287
        if self.rom:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
            if self.compress:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
                command.append('/s')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   290
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
                command.append('/r')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   292
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   293
            pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   294
        command.append(os.path.normpath(self.generator.path))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   295
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   296
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   297
        for inputfile in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
            depth = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   299
            if inputfile.depth:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   300
                depth = '/%s' % inputfile.depth
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
            command.append('%s%s' % (depth,self.workfilename(inputfile.filename)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
        return command
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   303
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   304
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
    def tool(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
        if hasattr(self._generator,'tool'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
            return os.path.abspath(self._generator.tool)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
        elif hasattr(self._generator, 'tooldir'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
            return os.path.abspath(os.path.join(self._generator.tooldir, 'bmconv'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
            return 'bmconv'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
    def rom(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
        if hasattr(self._generator,'rom') and self._generator.rom.lower() == 'true':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
    def compress(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
        if hasattr(self._generator,'compress') and self._generator.compress.lower() == 'true':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
class MifconvCommand(Command):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
    def __init__(self,generator):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
        super(MifconvCommand, self).__init__(generator)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
    def execute(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
        Execute the command in the current working directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   334
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
        input_files = self._get_filtered_input_files()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
        if len(input_files) == 0: return 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
        self.create_workdir(input_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
        runenv = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
        runshell = True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
        if os.path.dirname(self.tool):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
            runenv = {}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
            runenv['path'] = os.path.dirname(self.tool)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
            runshell = True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
        if not os.path.exists(os.path.dirname(self.generator.path)):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
            os.makedirs(os.path.dirname(self.generator.path))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   347
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
        command = self.get_command(input_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   349
        p = subprocess.Popen(command,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
                             stdout=subprocess.PIPE,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
                             stderr=subprocess.PIPE,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
                             env=runenv,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
                             shell=runshell)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   355
        # Wait for the process to return
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
        out, err = [ e.splitlines() for e in p.communicate() ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   357
        for outl in out:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   358
            if outl not in err:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
                logging.getLogger('cone.mifconv').info(outl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
        for outl in err:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
            logging.getLogger('cone.mifconv').error(outl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   362
        if p.returncode != 0:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
            logging.getLogger('cone.mifconv').error("Command returned with returncode %s: %s" % (p.returncode, ' '.join(command)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   364
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
            logging.getLogger('cone.mifconv').info("Command returned with returncode %s: %s" % (p.returncode, ' '.join(command)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   366
        if p.returncode == 0:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   367
	        self.clean_workdir()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   368
        return p.returncode 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   369
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
    def get_command(self, input_files):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   371
        command = [self.tool]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   372
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   373
        """ Add output file """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   374
        command.append(os.path.normpath(self.generator.path))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   375
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   376
        """ Add temp_path """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   377
        command.append("/t%s" % self.temppath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   378
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   379
        # Add tool directory if given
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   380
        if hasattr(self._generator,'tooldir'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   381
            command.append('/S%s' % os.path.abspath(self.generator.tooldir))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   382
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   383
        """ Get input files """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   384
        for inputfile in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   385
            depth = 'c8'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   386
            if inputfile.depth:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   387
                depth = inputfile.depth
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   388
            command.append('/%s' % depth)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   389
            command.append( '%s' % self.workfilename(inputfile.filename))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   390
        return command
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   391
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   392
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   393
    def tool(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   394
        if hasattr(self._generator,'tool'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   395
            return os.path.abspath(self._generator.tool)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   396
        elif hasattr(self._generator, 'tooldir'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   397
            return os.path.abspath(os.path.join(self._generator.tooldir, 'mifconv'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   398
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   399
            return 'mifconv'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   400
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   401
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   402
    def temppath(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   403
        if hasattr(self._generator,'temp'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   404
            return os.path.abspath(self._generator.temp)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   405
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   406
            return self.workdir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   407
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   408
class CopyCommand(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   409
    def __init__(self,generator):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   410
        self._generator = generator
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   411
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   412
    def execute(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   413
        pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   414
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   415
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   416
    def tool(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   417
        return 'copy'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   418
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   419
class InputFile(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   420
    def __init__(self,path,**kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   421
        self.configuration = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   422
        self._depth = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   423
        for arg in kwargs.keys():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   424
            if arg == 'depth':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   425
                # Special handling for depth ('depth' is a property that
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   426
                # expands refs using '_depth' as the base)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   427
                self._depth = kwargs[arg]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   428
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   429
                setattr(self, arg, kwargs[arg])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   430
        self._path= path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   431
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   432
    def get_input(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   433
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   434
        Get the confml ref value from configuration if the outputpath is actually a ref 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   435
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   436
        if self._path and self.configuration is not None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   437
            dview = self.configuration.get_default_view()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   438
            def expand(ref, index):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   439
                value = dview.get_feature(ref).get_original_value()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   440
                if value is None:   return ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   441
                else:               return value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   442
            return utils.expand_delimited_tokens(self._path, expand)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   443
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   444
            return self._path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   445
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   446
    def set_input(self, value): self._path = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   447
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   448
    def del_input(self): self._path = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   449
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   450
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   451
    def type(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   452
        return 'file'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   453
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   454
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   455
    def depth(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   456
        if self._depth and self.configuration:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   457
            dview = self.configuration.get_default_view()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   458
            return utils.expand_refs_by_default_view(self._depth, dview)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   459
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   460
            return self._depth or ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   461
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   462
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   463
    def files(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   464
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   465
        Return a list of file names 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   466
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   467
        return [self]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   468
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   469
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   470
    def filename(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   471
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   472
        Return a the path to the layer specific filename
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   473
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   474
        if self.configuration and self.path:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   475
            content = self.configuration.layered_content().flatten()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   476
            inputpath = self.path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   477
            return content.get(inputpath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   478
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   479
            return self.path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   480
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   481
    path = property(get_input, set_input, del_input, "The input 'path'.")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   482
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   483
    def is_valid(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   484
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   485
        Return whether the input file is valid (not empty
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   486
        and exists in project content).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   487
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   488
        return not self.is_empty() and self.filename
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   489
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   490
    def is_empty(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   491
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   492
        Return whether the input file is empty.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   493
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   494
        return self.path in ('', None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   495
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   496
    def is_optional(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   497
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   498
        Return whether the input file is optional.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   499
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   500
        return hasattr(self, 'optional') \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   501
            and self.optional.lower() in ('1', 't', 'true', 'yes', 'y')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   502
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   503
    def get_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   504
        return utils.extract_delimited_tokens(self._path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   505
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   506
    def __repr__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   507
        return "InputFile(path=%r, optional=%r)" % (self._path, self.is_optional())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   508
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   509
class InputDir(InputFile):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   510
    def __init__(self,path,**kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   511
        super(InputDir,self).__init__(path,**kwargs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   512
        self._files = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   513
        self._include = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   514
        self._exclude = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   515
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   516
    def get_include(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   517
        return self._include.get('pattern',[])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   518
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   519
    def set_include(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   520
        self._include = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   521
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   522
    def del_include(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   523
        self._include = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   524
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   525
    def get_exclude(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   526
        return self._exclude.get('pattern',[])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   527
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   528
    def set_exclude(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   529
        self._exclude = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   530
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   531
    def del_exclude(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   532
        self._exclude = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   533
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   534
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   535
    def type(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   536
        return 'dir'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   537
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   538
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   539
    def files(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   540
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   541
        Return a list of file names under this directory definition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   542
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   543
        if self.configuration:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   544
            inputlist = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   545
            content = self.configuration.layered_content().flatten()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   546
            contentfiles = content.keys()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   547
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   548
            folderfiles = utils.resourceref.filter_resources(contentfiles, "^%s" % self.path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   549
            for inputfilter in self.include:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   550
                folderfiles = utils.resourceref.filter_resources(folderfiles, inputfilter)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   551
            for excludefilter in self.exclude:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   552
                folderfiles = utils.resourceref.neg_filter_resources(folderfiles, excludefilter)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   553
            folderfiles.sort()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   554
            for filename in folderfiles:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   555
                inputlist.append(InputFile(filename, **self.__dict__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   556
            return inputlist
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   557
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   558
            return []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   559
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   560
    include = property(get_include, set_include, del_include)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   561
    exclude = property(get_exclude, set_exclude, del_exclude)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   562
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   563
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   564
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   565
class ConfmlRefs(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   566
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   567
    ref_pattern = re.compile('^\$\{(.*)\}$')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   568
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   569
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   570
    def is_confml_ref(cls, variableref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   571
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   572
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   573
        Returns true if the given variable ref is a confml reference
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   574
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   575
        return cls.ref_pattern.match(variableref) != None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   576
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   577
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   578
    def get_confml_ref(cls, variableref):
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
        Returns true if the given variable ref is a confml reference
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   582
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   583
        matchref = cls.ref_pattern.match(variableref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   584
        if matchref:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   585
            return matchref.group(1)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   586
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   587
            return None