| Home | Trees | Indices | Help |
|---|
|
|
1 #! /usr/bin/env python
2 #
3 import os,sys,os.path
4 import types
5 from dataclasses import *
6 from xmlwriter import *
7 from os.path import expandvars
8 # this needs to be in the client
9 from iceprod.core.paramdb import *
10 from iceprod.core.inspectv2 import *
11 from iceprod.core import functions
12 import dataclasses
13 import logger
14 import iceprod.core.logger
15
16 libs = []
17 _outfile = sys.argv[-1]
18 sys.argv = sys.argv[:-1] # remove last entry
19
20 _paramdb = XMLParamDB()
21 _pdbcache = dict()
22 _metaproject_name = None
23 _metaproject_version = None
24
25 logger = logging.getLogger('tray2xml')
26
28 global _metaproject_name
29 global _metaproject_version
30 meta = meta.split(".")
31 _metaproject_name = meta[0]
32 _metaproject_version = meta
33
35 """
36 Extract metaproject name from svn
37 @return: name
38 """
39 global _metaproject_name
40 if _metaproject_name:
41 return _metaproject_name
42
43 revision = "0"
44 handle = os.popen("svn info " + expandvars("$I3_SRC"))
45 for line in handle.readlines():
46 if line.strip().startswith("URL"):
47 url = line.split("/")
48 for i in range(len(url)):
49 if url[i].startswith("meta-projects"):
50 _metaproject_name = url[i+1]
51 return _metaproject_name
52
54 """
55 Extract version tuple from project
56 @param project: name of project
57 @return: integer tuple corresponding to project version
58 """
59 global _metaproject_version
60 if _metaproject_version and not project:
61 return _metaproject_version
62 version_regex = r'http://.+projects/.+'
63
64 if metaproject:
65 svn_projectfile = os.popen('svn info ' + expandvars('$I3_SRC') , 'r' )
66 else:
67 svn_projectfile = os.popen('svn info ' + expandvars('$I3_SRC/') + project, 'r' )
68 svn_data = svn_projectfile.read()
69
70 version = "V00-00-00"
71 revision = "Revision: 0"
72 version_search = re.search(version_regex,svn_data)
73 try:
74 version = version_search.group()
75 except: pass
76 revision_search = re.search(r'Revis.*:.*[0-9]+',svn_data)
77 try:
78 revision = revision_search.group()
79 except: pass
80
81 version = re.sub(r'http://.+projects/%s/' % project,'',version)
82 version = version.replace('/','.')
83 revision = revision.split(':')[-1].strip()
84 return version
85
86
88 """
89 Convert text version number into an integer tuple
90 @param versiontxt: text containing version information
91 @return: integer tuple
92 """
93
94 vtuple = ('0',)*3
95 if versiontxt.startswith('trunk'):
96 return ('-1','0',str(revision))
97
98 pver = re.sub(r'[A-Z]','',versiontxt)
99 pver = pver.split("-")[0:3]
100 if len(pver) < 3: return vtuple
101 try:
102 pver = tuple(pver)
103 except:
104 os._exit(1)
105 print >> sys.stderr, pver
106 return pver
107
108
109
111 global _paramdb
112 _cache = expandvars('$I3_BUILD/inspect_cache.xml')
113 if url : # use the server instead of cache
114 _paramdb = RPCParamDB(url)
115 logger.info("pdb access through %s" % url)
116 return
117 elif not os.path.exists(_cache):
118 _paramdb = XMLParamDB()
119 srcpath = expandvars("$I3_SRC")
120 libdir = os.path.join(expandvars("$I3_BUILD"),"lib")
121 i3inspect = IceTrayInspectV2(srcpath,libdir)
122 logger.info("inspect",srcpath)
123 i3inspect.InspectProjects(expandvars('$I3_SRC'))
124 logger.info("writing",_cache)
125 i3inspect.toXML(_cache)
126 logger.info("loading",_cache)
127 _paramdb.loadfile(_cache)
128
129
132
134
135 if isinstance(object,T2XType):
136 return object.type
137 elif type(object) is types.IntType:
138 return "int"
139 elif type(object) is types.FloatType:
140 return "float"
141 elif type(object) is types.StringType:
142 return "string"
143 elif type(object) is types.BooleanType:
144 return "bool"
145 elif isinstance(object,OMKey):
146 return "OMKey"
147 elif isinstance(object,list) and len(object) > 0:
148 return gettype(object[0])+'v'
149 else:
150 return 'NaT'
151
156
157
159 if not repr(value) == 'OMKey':
160 return Value(value)
161 elif repr(value) == 'OMKey':
162 return pyOMKey(getval(value.stringid),getval(value.omid))
163 else:
164 print >> sys.stderr,repr(value)
165 os._exit(1)
166
167 return None
168
169
171 vect = False
172 p = Parameter()
173 p.SetName(name)
174 try:
175 p.SetType(gettype(value))
176 except UndefinedTypeException,e:
177 sys.excepthook(sys.exc_type,sys.exc_value,sys.exc_traceback)
178 logger.error(e)
179 print >> sys.stderr, name,type(value),e
180
181 if p.GetType() in VectorTypes:
182 p.SetValue(map(parse_parameter,map(getval,value)))
183 else:
184 p.SetValue(parse_parameter(getval(value)))
185 return p
186
195
196
203
205
206
208 global _outfile
209 if not _paramdb.cached: loadpdb()
210 self.steering = Steering()
211 self.tray = IceTrayConfig()
212 self.connect_boxes = True
213 mname = getmetaproject()
214 m = MetaProject()
215 m.SetName(mname)
216 mver = getversion(mname,True)
217 m.SetVersion(mver)
218 _paramdb.SetMetaProjectId(m)
219 self.tray.AddMetaProject(mname, m)
220
221 for lib in libs:
222 for p in _paramdb.GetProjects(m.GetId()):
223 if p.GetName() == lib:
224 m.AddProject(lib, p)
225
227 self.tray.AddIceProdPre(pre)
228
230 self.tray.AddIceProdPost(post)
231
233 if _pdbcache.has_key(module.GetClass()):
234 project = _pdbcache[module.GetClass()]
235 module.AddProject(project.GetName(),project)
236 return
237 print "missing project for class '%s'" % module.GetClass()
238 projectlist = map(Project.GetName,metaproject.GetProjectList())
239 projectlist.append('[Specify a missing project]')
240 projectname = functions.get_choice(projectlist,"choose the project for '%s':" % module.GetClass())
241 if projectname == '[Specify a missing project]':
242 sys.stdout.write('type the name of the project: ')
243 projectname = sys.stdin.readline().strip()
244 if metaproject.HasProject(projectname):
245 project = metaproject.GetProject(projectname)
246 module.AddProject(project.GetName(),project)
247 else:
248 for project in _paramdb.GetProjects(metaproject.GetId()):
249 if project.GetName() == projectname:
250 metaproject.AddProject(project.GetName(),project)
251 module.AddProject(project.GetName(),project)
252 break
253 _pdbcache[module.GetClass()] = project
254
256 global _paramdb
257 s = Service()
258 s.SetClass(classname)
259 s.SetName(objname)
260 mp = self.tray.GetMetaProjects().values()[0]
261 for project in _paramdb.GetProjectsSM(s,mp):
262 for d in _paramdb.GetProjectDependencies(project.GetId(),mp.GetId()):
263 if not mp.HasProject(d.GetName()):
264 mp.AddProject(d.GetName(),d)
265 project.AddDependency(d.GetName())
266 s.AddProject(project.GetName(),project)
267 if not mp.HasProject(project.GetName()):
268 mp.AddProject(project.GetName(),project)
269 break
270 if not s.GetProjectList():
271 self.MissingProject(s,mp)
272 self.tray.AddService(s)
273 setpar = lambda (param,val): s.AddParameter(make_parameter(param,val))
274 return lambda *pair: map(setpar,pair)
275
277 global _paramdb
278 m = Module()
279 m.SetClass(classname)
280 m.SetName(objname)
281 mp = self.tray.GetMetaProjects().values()[0]
282 for project in _paramdb.GetProjectsMM(m,mp):
283 for d in _paramdb.GetProjectDependencies(project.GetId(),mp.GetId()):
284 if not mp.HasProject(d.GetName()):
285 mp.AddProject(d.GetName(),d)
286 project.AddDependency(d.GetName())
287 m.AddProject(project.GetName(),project)
288 if not mp.HasProject(project.GetName()):
289 mp.AddProject(project.GetName(),project)
290 break
291 if not m.GetProjectList():
292 self.MissingProject(m,mp)
293 self.tray.AddModule(m)
294 setpar = lambda (param,val): m.AddParameter(make_parameter(param,val))
295 return lambda *pair: map(setpar,pair)
296
298
299 if self.tray.HasService(modname):
300 self.tray.GetService(modname).AddParameter(make_parameter(param,value))
301 elif self.tray.HasModule(modname):
302 self.tray.GetModule(modname).AddParameter(make_parameter(param,value))
303
305 self.connect_boxes = False
306 conn = Connection()
307 conn.From(outmod,outbox)
308 conn.To(inmod,inbox)
309 self.tray.AddConnection(conn)
310
312 outmod = None
313 # if self.connect_boxes:
314 # for module in self.tray.GetModules():
315 # if outmod:
316 # inmod = module.GetName()
317 # conn = Connection()
318 # conn.From(outmod,"OutBox")
319 # conn.To(inmod,"default")
320 # self.tray.AddConnection(conn)
321 # outmod = module.GetName()
322
323 for mp in self.tray.GetMetaProjects().values():
324 for project in mp.GetProjects().values():
325 logger.debug("dependencies for %d, %s:" % (project.GetId(),project.GetName()))
326 for d in _paramdb.GetProjectDependencies(project.GetId(),mp.GetId()):
327 logger.debug("\t%s" % d.GetName())
328 if not mp.HasProject(d.GetName()):
329 mp.AddProject(d.GetName(),d)
330 project.AddDependency(d.GetName())
331 if frames:
332 self.tray.SetEvents(frames)
333 return self.tray
334
336 self.steering.AddTray(self.tray)
337 writer = IceTrayXMLWriter(self.steering)
338 if self.output == '-':
339 writer.write_to_file()
340 else:
341 writer.write_to_file(self.output)
342
345
347
351
353 """
354 Add entry for module
355 """
356 pre = IceProdPre()
357 pre.SetName(name)
358 pre.SetClass(type)
359 self.tray.AddIceProdPre(pre)
360 self.modules[name] = pre
361 self.last_added = name
362 return self
363
365 """
366 Set parameter value for plugin
367 """
368 self.modules[module].AddParameter(make_parameter(param,value))
369 return self
370
372 for pair in args:
373 self.modules[self.last_added].AddParameter(make_parameter(pair[0],pair[1]))
374 return self
375
377
379
383
385 """
386 Add entry for module
387 """
388 post = IceProdPost()
389 post.SetName(name)
390 post.SetClass(type)
391 self.tray.AddIceProdPost(post)
392 self.modules[name] = post
393 self.last_added = name
394 return self
395
397 """
398 Set parameter value for plugin
399 """
400 self.modules[module].AddParameter(make_parameter(param,value))
401 return self
402
404 for pair in args:
405 self.modules[self.last_added].AddParameter(make_parameter(pair[0],pair[1]))
406 return self
407
409
| Home | Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0.1 on Fri Jan 4 16:45:34 2013 | http://epydoc.sourceforge.net |