Package vbaconf
[hide private]
[frames] | no frames]

Source Code for Package vbaconf

  1  #============================================================================  
  2  #Name        : __init__.py  
  3  #Part of     : Helium  
  4   
  5  #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
  6  #All rights reserved. 
  7  #This component and the accompanying materials are made available 
  8  #under the terms of the License "Eclipse Public License v1.0" 
  9  #which accompanies this distribution, and is available 
 10  #at the URL "http://www.eclipse.org/legal/epl-v10.html". 
 11  # 
 12  #Initial Contributors: 
 13  #Nokia Corporation - initial contribution. 
 14  # 
 15  #Contributors: 
 16  # 
 17  #Description: 
 18  #=============================================================================== 
 19   
 20  """ Helper to convert delivery.xml and prep.xml to VirtualBuildArea 
 21      configuration file. 
 22  """ 
 23  from  xml.dom.minidom import getDOMImplementation 
 24  import amara 
 25  import ccm 
 26  import re 
 27  import os.path 
 28  import sys 
 29  import configuration 
 30   
31 -def cleanup_path(path):
32 """ Returns path without any sequence of '/' and replacing '\' by '/' """ 33 return re.sub(r'/+', '/', re.sub(r'\\', '/', path))
34
35 -def generate_config(deliveryinput, prepinput):
36 """ deliveryinput: path to delivery conf file (old format). 37 prepinput: path to the prep conf file. 38 Return XML Document object. 39 """ 40 impl = getDOMImplementation() 41 doc = getDOMImplementation().createDocument(None, "virtualBuildArea", None) 42 vba = doc.getElementsByTagName("virtualBuildArea")[0] 43 44 # Loading delivery content 45 delivery = amara.parse(open(deliveryinput, 'r')) 46 # loading prep file 47 prep = amara.parse(open(prepinput, 'r')) 48 # analysing preparation creation 49 for source in prep.xml_xpath('/prepSpec/source'): 50 basedir = cleanup_path(source.basedir) 51 for copy in source.xml_xpath('./copy'): 52 src = cleanup_path(copy.name) 53 for p in delivery.xml_xpath('/deliveryConfiguration/*'): 54 ccmp = ccm.FourPartName(p.project) 55 p_dir = cleanup_path(p.dir) 56 #print "ccmp: %s" % ccmp 57 #print "pdir: %s" % p_dir 58 # looking for project_name/project_name pattern, and if dest doesn't exist 59 if (re.match(r"%s/%s" % (ccmp.name, ccmp.name), src, re.I) is not None) and not hasattr(copy, 'dest'): 60 print "All object from root." 61 add = doc.createElementNS("", "add") 62 add.setAttributeNS("", "project", str(ccmp)) 63 vba.appendChild(add) 64 objs = doc.createElementNS("", "objects") 65 objs.setAttributeNS("", "from", ccmp.name) 66 add.appendChild(objs) 67 # looking for project_name/project_name pattern, and if dest exists 68 elif (re.match(r"%s/%s" % (ccmp.name, ccmp.name), src, re.I) is not None) and hasattr(copy, 'dest'): 69 if os.path.basename(copy.dest).lower() == ccmp.name.lower(): 70 add = doc.createElementNS("", "add") 71 add.setAttributeNS("", "project", str(ccmp)) 72 add.setAttributeNS("", "to", cleanup_path('/' + os.path.dirname(copy.dest))) 73 vba.appendChild(add) 74 else: 75 add = doc.createElementNS("", "add") 76 add.setAttributeNS("", "project", str(ccmp)) 77 add.setAttributeNS("", "to", cleanup_path('/' + copy.dest)) 78 vba.appendChild(add) 79 # for directory copy 80 elif cleanup_path(basedir + "/" + src) == p_dir: 81 print "Adding to subdirectory" 82 print ccmp.name, basedir + "/" + src, p_dir 83 add = doc.createElementNS("", "add") 84 add.setAttributeNS("", "project", str(ccmp)) 85 if hasattr(copy, 'dest'): 86 add.setAttributeNS("", "to", cleanup_path('/' + copy.dest + '/' + ccmp.name)) 87 else: 88 add.setAttributeNS("", "to", cleanup_path('/'+ ccmp.name)) 89 vba.appendChild(add) 90 elif p_dir.startswith(cleanup_path(basedir + "/" + src + '/')): 91 print "Adding to subdirectory" 92 delta = p_dir[len(cleanup_path(basedir)):] 93 add = doc.createElementNS("", "add") 94 add.setAttributeNS("", "project", str(ccmp)) 95 if hasattr(copy, 'dest'): 96 add.setAttributeNS("", "to", cleanup_path('/' + os.path.dirname(copy.dest) + '/' + delta + '/' + ccmp.name)) 97 else: 98 add.setAttributeNS("", "to", cleanup_path(delta + '/' + ccmp.name)) 99 vba.appendChild(add) 100 return doc
101 102 103
104 -class AbstractConfigConverter:
105
106 - def __init__(self):
107 pass
108
109 - def _get_projects_configs(self):
110 raise Exception("Todo: not implemented.")
111
112 - def _get_prep_configs(self):
113 raise Exception("Todo: not implemented.")
114
115 - def generate_config(self):
116 """ deliveryinput: path to delivery conf file (old format). 117 prepinput: path to the prep conf file. 118 Return XML Document object. 119 """ 120 impl = getDOMImplementation() 121 doc = getDOMImplementation().createDocument(None, "virtualBuildArea", None) 122 vba = doc.getElementsByTagName("virtualBuildArea")[0] 123 124 # analysing preparation creation 125 for copy in self._get_prep_configs(): 126 basedir = cleanup_path(copy.basedir) 127 src = cleanup_path(copy.name) 128 for p in self._get_projects_configs(): 129 ccmp = ccm.FourPartName(p.project) 130 p_dir = cleanup_path(p.dir) 131 #print "ccmp: %s" % ccmp 132 #print "pdir: %s" % p_dir 133 # looking for project_name/project_name pattern, and if dest doesn't exist 134 if (re.match(r"%s/%s" % (ccmp.name, ccmp.name), src, re.I) is not None) and not hasattr(copy, 'dest'): 135 print "All object from root." 136 add = doc.createElementNS("", "add") 137 add.setAttributeNS("", "project", str(ccmp)) 138 vba.appendChild(add) 139 objs = doc.createElementNS("", "objects") 140 objs.setAttributeNS("", "from", ccmp.name) 141 add.appendChild(objs) 142 # looking for project_name/project_name pattern, and if dest exists 143 elif (re.match(r"%s/%s" % (ccmp.name, ccmp.name), src, re.I) is not None) and hasattr(copy, 'dest'): 144 if os.path.basename(copy.dest).lower() == ccmp.name.lower(): 145 add = doc.createElementNS("", "add") 146 add.setAttributeNS("", "project", str(ccmp)) 147 add.setAttributeNS("", "to", cleanup_path('/' + os.path.dirname(copy.dest))) 148 vba.appendChild(add) 149 else: 150 add = doc.createElementNS("", "add") 151 add.setAttributeNS("", "project", str(ccmp)) 152 add.setAttributeNS("", "to", cleanup_path('/' + copy.dest)) 153 vba.appendChild(add) 154 # for directory copy 155 elif cleanup_path(basedir + "/" + src) == p_dir: 156 print "Adding to subdirectory" 157 print ccmp.name, basedir + "/" + src, p_dir 158 add = doc.createElementNS("", "add") 159 add.setAttributeNS("", "project", str(ccmp)) 160 if hasattr(copy, 'dest'): 161 add.setAttributeNS("", "to", cleanup_path('/' + copy.dest + '/' + ccmp.name)) 162 else: 163 add.setAttributeNS("", "to", cleanup_path('/'+ ccmp.name)) 164 vba.appendChild(add) 165 elif p_dir.startswith(cleanup_path(basedir + "/" + src + '/')): 166 print "Adding to subdirectory" 167 delta = p_dir[len(cleanup_path(basedir)):] 168 add = doc.createElementNS("", "add") 169 add.setAttributeNS("", "project", str(ccmp)) 170 if hasattr(copy, 'dest'): 171 add.setAttributeNS("", "to", cleanup_path('/' + os.path.dirname(copy.dest) + '/' + delta + '/' + ccmp.name)) 172 else: 173 add.setAttributeNS("", "to", cleanup_path(delta + '/' + ccmp.name)) 174 vba.appendChild(add) 175 return doc
176 177
178 -class ConfigConverter(AbstractConfigConverter):
179 - def __init__(self, deliveryinput, prepinput):
180 AbstractConfigConverter.__init__(self) 181 self._deliveryinput = deliveryinput 182 self._prepinput = prepinput
183
184 - def _get_projects_configs(self):
185 # Loading delivery content 186 delivery = amara.parse(open(self._deliveryinput, 'r')) 187 return delivery.xml_xpath('/deliveryConfiguration/*')
188
189 - def _get_prep_configs(self):
190 # loading prep file 191 prep = amara.parse(open(self._prepinput, 'r')) 192 class __ConfigWrapper: 193 """ wrapper object to access directly conf property. """ 194 def __init__(self, source, config): 195 self.basedir = source.basedir 196 self.name = config.name 197 if hasattr(copy, 'dest'): 198 self.dest = copy.dest
199 200 result = [] 201 for source in prep.xml_xpath('/prepSpec/source'): 202 for copy in source.xml_xpath('./copy'): 203 result.append(__ConfigWrapper(source, copy)) 204 return result 205 206
207 -class ConfigConverterNewDelivery(ConfigConverter):
208 - def __init__(self, deliveryinput, prepinput):
209 ConfigConverter.__init__(self, deliveryinput, prepinput) 210 configBuilder = configuration.NestedConfigurationBuilder(open(self._deliveryinput, 'r')) 211 self.__configs = configBuilder.getConfiguration().getConfigurations()
212
213 - def _get_projects_configs(self):
214 class __ConfigWrapper: 215 """ wrapper object to access directly conf property. """ 216 def __init__(self, config): 217 self.project = config.name 218 self.dir = config['dir']
219 # Loading delivery content 220 return map(lambda c: __ConfigWrapper(c), self.__configs) 221