10 if os.path.join( os.environ[
'CMSSW_BASE'],
'src')
not in sys.path:
11 sys.path.append( os.path.join( os.environ[
'CMSSW_BASE'],
'src') )
15 payload2xmlCodeTemplate =
""" 21 #include <boost/python/class.hpp> 22 #include <boost/python/module.hpp> 23 #include <boost/python/init.hpp> 24 #include <boost/python/def.hpp> 29 #include "boost/archive/xml_oarchive.hpp" 30 #include "CondFormats/Serialization/interface/Serializable.h" 31 #include "CondFormats/Serialization/interface/Archive.h" 33 #include "CondCore/Utilities/src/CondFormats.h" 35 namespace { // Avoid cluttering the global namespace. 37 std::string %(plTypeSan)s2xml( const std::string &payloadData, const std::string &payloadType ) { 40 std::unique_ptr< %(plType)s > payload; 42 std::stringbuf sdataBuf; 43 sdataBuf.pubsetbuf( const_cast<char *> ( payloadData.c_str() ), payloadData.size() ); 45 std::istream inBuffer( &sdataBuf ); 46 eos::portable_iarchive ia( inBuffer ); 47 payload.reset( new %(plType)s ); 50 // now we have the object in memory, convert it to xml in a string and return it 52 std::ostringstream outBuffer; 53 boost::archive::xml_oarchive xmlResult( outBuffer ); 54 xmlResult << boost::serialization::make_nvp( "cmsCondPayload", *payload ); 56 return outBuffer.str(); 62 BOOST_PYTHON_MODULE(%(mdName)s) 64 using namespace boost::python; 65 def ("%(plTypeSan)s2xml", %(plTypeSan)s2xml); 70 buildFileTemplate =
""" 71 <flags CXXFLAGS="-Wno-sign-compare -Wno-unused-variable -Os"/> 73 <use name="boost_python"/> 74 <use name="boost_iostreams"/> 75 <use name="boost_serialization"/> 76 <use name="boost_program_options"/> 77 <use name="CondCore/CondDB"/> 78 <use name="CondFormats/HLTObjects"/> 79 <use name="CondFormats/Alignment"/> 80 <use name="CondFormats/BeamSpotObjects"/> 81 <use name="CondFormats/CastorObjects"/> 82 <use name="CondFormats/HIObjects"/> 83 <use name="CondFormats/CSCObjects"/> 84 <use name="CondFormats/DTObjects"/> 85 <use name="CondFormats/ESObjects"/> 86 <use name="CondFormats/EcalObjects"/> 87 <use name="CondFormats/EgammaObjects"/> 88 <use name="CondFormats/Luminosity"/> 89 <use name="CondFormats/HcalObjects"/> 90 <use name="CondFormats/JetMETObjects"/> 91 <use name="CondFormats/L1TObjects"/> 92 <use name="CondFormats/PhysicsToolsObjects"/> 93 <use name="CondFormats/GeometryObjects"/> 94 <use name="CondFormats/RecoMuonObjects"/> 95 <use name="CondFormats/RPCObjects"/> 96 <use name="CondFormats/RunInfo"/> 97 <use name="CondFormats/SiPixelObjects"/> 98 <use name="CondFormats/SiStripObjects"/> 99 <use name="CondFormats/Common"/> 100 <use name="CondFormats/BTauObjects"/> 101 <use name="CondFormats/MFObjects"/> 102 <use name="CondFormats/PCLConfig"/> 118 if not os.path.exists( os.path.join( os.environ[
'CMSSW_BASE'],
'src') ):
119 raise Exception(
"Looks like you are not running in a CMSSW developer area, $CMSSW_BASE/src/ does not exist")
121 self.fakePkgName =
"fakeSubSys4pl/fakePkg4pl" 122 self._pl2xml_tmpDir = os.path.join( os.environ[
'CMSSW_BASE'],
'src', self.fakePkgName )
124 self.doCleanup =
True 129 shutil.rmtree(
'/'.
join( self._pl2xml_tmpDir.split(
'/')[:-1] ) )
130 os.unlink( os.path.join( os.environ[
'CMSSW_BASE'],
'src',
'./pl2xmlComp.so') )
138 libDir = os.path.join( os.environ[
"CMSSW_BASE"],
'lib', os.environ[
"SCRAM_ARCH"] )
139 pluginList = glob.glob( libDir +
'/plugin%s_toXML.so' %
sanitize(payloadType) )
143 libDir = os.path.join( os.environ[
"CMSSW_RELEASE_BASE"],
'lib', os.environ[
"SCRAM_ARCH"] )
144 pluginList = glob.glob( libDir +
'/plugin%s_toXML.so' %
sanitize(payloadType) )
152 if len(pluginList) > 0:
153 dirPath, libName = os.path.split( pluginList[0] )
154 sys.path.append(dirPath)
156 xmlConverter = importlib.import_module( libName.replace(
'.so',
'') )
158 self.doCleanup =
False 164 startTime = time.time()
166 Payload = session.get_dbtype(self.conddb.Payload)
168 result = session.query(Payload.data, Payload.object_type).
filter(Payload.hash == payload).
one()
169 data, plType = result
171 info = {
"mdName" :
"pl2xmlComp",
177 if converter:
return converter
179 code = payload2xmlCodeTemplate % info
181 tmpDir = self._pl2xml_tmpDir
182 if ( os.path.exists( tmpDir ) ) :
183 msg =
'\nERROR: %s already exists, please remove if you did not create that manually !!' % tmpDir
184 self.doCleanup =
False 187 os.makedirs( tmpDir+
'/src' )
189 buildFileName =
"%s/BuildFile.xml" % (tmpDir,)
190 with open(buildFileName,
'w')
as buildFile:
191 buildFile.write( buildFileTemplate )
194 tmpFileName =
"%s/src/%s" % (tmpDir, info[
'mdName'],)
195 with open(tmpFileName+
'.cpp',
'w')
as codeFile:
199 libDir = os.path.join( os.environ[
"CMSSW_BASE"],
'tmp', os.environ[
"SCRAM_ARCH"],
'src', self.fakePkgName,
'src', self.fakePkgName.replace(
'/',
''))
200 libName = libDir +
'/lib%s.so' % self.fakePkgName.replace(
'/',
'')
201 cmd =
"source /afs/cern.ch/cms/cmsset_default.sh;" 202 cmd +=
"(cd %s ; scram b 2>&1 >build.log && cp %s $CMSSW_BASE/src/pl2xmlComp.so )" % (tmpDir, libName)
204 if ret != 0 : self.doCleanup =
False 206 buildTime = time.time()-startTime
207 print >> sys.stderr,
"buillding done in ", buildTime,
'sec., return code from build: ', ret
212 return importlib.import_module(
'pl2xmlComp' )
219 msg =
"Error preparing code for "+payload
224 Payload = session.get_dbtype(self.conddb.Payload)
226 result = session.query(Payload.data, Payload.object_type).
filter(Payload.hash == payload).
one()
227 data, plType = result
229 convFuncName =
sanitize(plType)+
'2xml' 231 func = getattr(xmlConverter, convFuncName)
def __init__(self, condDBIn)
def replace(string, replacements)
def discover(self, payloadType)
def prepPayload2xml(self, session, payload)
def payload2xml(self, session, payload)
static std::string join(char **cmd)