diff -r 7685cec9fd3c -r f2ddfa555b0f doc/api/python/dependancygraph-pysrc.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/api/python/dependancygraph-pysrc.html Fri Sep 11 11:54:49 2009 +0100
@@ -0,0 +1,986 @@
+
+
+
+
+ dependancygraph
+
+
+
+
+
+
+
+
+
+
+
+ Module dependancygraph
+
+ |
+
+
+ |
+
+
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20 import os
+ 21 import amara
+ 22 import codecs
+ 23 import zipfile
+ 24 from Ft.Lib import Uri
+ 25
+ 27 - def __init__(self, name, license, version=''):
+
32
+ 36 - def addConf(self, name, des, color):
+
37 self.libraries[name] = (des, [], color)
+
45 (_, libs, _) = self.libraries[conf]
+
46 return libs
+
48 (des, _, _) = self.libraries[conf]
+
49 return des
+
51 (_, _, color) = self.libraries[conf]
+
52 return color
+
53
+ 54 COLORS = ['pink', 'red', 'lightblue', 'orange', 'green', 'yellow', 'turquoise', 'limegreen']
+ 55
+ 58 self.ivyfilename = ivyfilename
+
59 self.ivyxml = amara.parse(Uri.OsPathToUri(ivyfilename))
+
60 self.group = ModuleGroup()
+
61
+
66
+
68 license = ''
+
69 for module in self.ivyxml['ivy-module'].dependencies.xml_children:
+
70 if hasattr(module, 'data'):
+
71 if 'License:' in module.data:
+
72 license = module.data.strip()
+
73 elif hasattr(module, 'name'):
+
74 modulename = module.name.replace('-', '_')
+
75
+
76 if module.org != 'SWEPT':
+
77 self.group.addLibrary(module.conf, Library(modulename, license))
+
78 license = ''
+
79
+
81 for module in self.ivyxml['ivy-module'].dependencies.xml_children:
+
82 if hasattr(module, 'name'):
+
83 if 'jars' in module.name:
+
84 ivydir = os.path.dirname(self.ivyfilename)
+
85 ivydir = os.path.join(ivydir, 'modules')
+
86 ivyjarfile = os.path.join(ivydir, module.name + '-1.0.ivy.xml')
+
87 ivymodulexml = amara.parse(Uri.OsPathToUri(ivyjarfile))
+
88 license = ''
+
89 for artifact in ivymodulexml['ivy-module'].publications.xml_children:
+
90 if hasattr(artifact, 'data'):
+
91 if 'License:' in artifact.data:
+
92 license = artifact.data.strip()
+
93 elif hasattr(artifact, 'name'):
+
94 bits = artifact.name.split('-')
+
95 name = bits[0]
+
96 version = ''
+
97 if len(bits) > 1:
+
98 version = bits[1]
+
99 self.group.addLibrary(module.conf, Library(name, license, version))
+
100 license = ''
+
101
+102 PYTHON_GROUP = True
+103 SUBCON_PYTHON_GROUP = False
+104
+105 -def readEggs(libraries, dirtosearch, internaldir):
+
106 libraries.addConf(PYTHON_GROUP, 'Python libs', libraries.getColor('core_install'))
+
107 libraries.addConf(SUBCON_PYTHON_GROUP, 'Python subcon libs', libraries.getColor('subcon'))
+
108
+
109 for x in [os.walk(dirtosearch, topdown=False), os.walk(internaldir, topdown=False)]:
+
110 for root, _, files in x:
+
111 notinsubcon = os.path.normpath(internaldir) in os.path.normpath(root)
+
112
+
113 for fname in files:
+
114 filename = os.path.join(root, fname)
+
115 if fname == 'PKG-INFO':
+
116 pkgmetafile = open(filename)
+
117 library = readPkgInfo(pkgmetafile)
+
118 pkgmetafile.close()
+
119
+
120 requirefilename = os.path.join(filename, '..', 'requires.txt')
+
121 if os.path.exists(requirefilename):
+
122 requiresfile = open(requirefilename)
+
123 readRequiresFile(requiresfile, library)
+
124 requiresfile.close()
+
125
+
126 libraries.addLibrary(notinsubcon, library)
+
127
+
128 if os.path.isfile(filename) and fname.endswith('.egg'):
+
129 eggfile = zipfile.ZipFile(filename, 'r', zipfile.ZIP_DEFLATED)
+
130
+
131 data = eggfile.read('EGG-INFO/PKG-INFO')
+
132
+
133 library = readPkgInfo(data.split('\n'))
+
134
+
135 if 'EGG-INFO/requires.txt' in eggfile.namelist():
+
136 requiresdata = eggfile.read('EGG-INFO/requires.txt')
+
137 readRequiresFile(requiresdata.split('\n'), library)
+
138
+
139 libraries.addLibrary(notinsubcon, library)
+
140
+
141 eggfile.close()
+
142
+144 for line in data:
+
145 line = line.strip()
+
146 if line != '' and not (line.startswith('[') and line.endswith(']')):
+
147 library.requires.append(line.split('>=')[0].strip())
+
148
+150 name = ''
+
151 version = ''
+
152 license = ''
+
153 license2 = ''
+
154
+
155 for line in data:
+
156 if 'Name:' in line:
+
157 name = line.strip().replace('Name: ', '')
+
158 if 'Version:' in line:
+
159 version = line.strip().replace('Version: ', '')
+
160 if 'License:' in line:
+
161 license = line.strip().replace('License: ', '')
+
162 if 'Classifier: License :: ' in line:
+
163 license2 = license2 + ' ' + line.strip().replace('Classifier: License :: ', '').replace('OSI Approved :: ', '')
+
164
+
165 if license.lower() == 'unknown' or license == '' or license2 != '':
+
166 license = license2
+
167
+
168 return Library(name, license, version)
+
169
+171 newgraphdata = []
+
172 for line in graphdata:
+
173 newline = line
+
174 for conf in group.libraries:
+
175 for module in group.getLibraries(conf):
+
176 if module.name.lower() in line.lower() and 'label=' in line:
+
177 newline = line.replace('label=', 'color=%s,label=' % group.getColor(conf))
+
178
+
179 if module.license != '':
+
180 newline = newline.replace("\"];", "|%s\"];" % module.license)
+
181
+
182 break
+
183 newgraphdata.append(newline)
+
184 return newgraphdata
+
185
+187 key = """subgraph cluster1 {
+
188 label = "Key";
+
189 style=filled;
+
190 color=lightgrey;
+
191 """
+
192
+
193 for conf in group.libraries:
+
194 if conf != PYTHON_GROUP and conf != SUBCON_PYTHON_GROUP:
+
195 key = key + "\"%s: %s\" [style=filled,color=%s];" % (conf, group.getDescription(conf), group.getColor(conf))
+
196
+
197 key = key + "}"
+
198 return key
+
199
+200 -def createGraph(ivyxmlfilename, graphfilename, dirtosearch, internaldir, subcon):
+
201 readivy = ReadIvyConfig(ivyxmlfilename)
+
202 readivy.readConfigurations()
+
203 readivy.readModules()
+
204 readivy.readSubModules()
+
205
+
206 group = readivy.group
+
207
+
208 readEggs(group, dirtosearch, internaldir)
+
209
+
210 key = createKey(group)
+
211
+
212 graphdata = loadGraphFile(graphfilename)
+
213
+
214 newgraphdata = addLicensesColors(graphdata, group)
+
215
+
216
+
217 newgraphdata[-1] = newgraphdata[-1].replace('}', key + '\n}')
+
218
+
219 graphwritefile = codecs.open(graphfilename, 'w', 'utf8')
+
220 graphwritefile.writelines(newgraphdata)
+
221 graphwritefile.close()
+
222
+
223 linkPythonLibs(group, graphfilename, subcon)
+
224
+226 destgraphfile = codecs.open(graphfilename, 'r', 'utf8')
+
227 graphdata = []
+
228 for line in destgraphfile:
+
229 graphdata.append(line)
+
230 destgraphfile.close()
+
231 return graphdata
+
232
+233 -def addToGraph(graphfilenametoadd, destgraphfilename):
+
234 graphdata = loadGraphFile(destgraphfilename)
+
235
+
236 graphfile = codecs.open(graphfilenametoadd, 'r', 'utf8')
+
237 graphdatatoadd = ''
+
238 for line in graphfile:
+
239 line = line.replace('digraph {', '')
+
240 graphdatatoadd = graphdatatoadd + line
+
241 graphfile.close()
+
242
+
243 graphdata[-1] = graphdata[-1].replace('}', graphdatatoadd)
+
244
+
245 graphwritefile = codecs.open(destgraphfilename, 'w', 'utf8')
+
246 graphwritefile.writelines(graphdata)
+
247 graphwritefile.close()
+
248
+250 graphdata = loadGraphFile(destgraphfilename)
+251
+252 output = "helium_ant -> helium_python;\n"
+253
+254 if subcon:
+255 list = [SUBCON_PYTHON_GROUP]
+256 else:
+257 list = [SUBCON_PYTHON_GROUP, PYTHON_GROUP]
+258
+259 for group in list:
+260 for lib in libraries.getLibraries(group):
+261 output = output + ("helium_python -> \"%s\";\n" % lib.name)
+262 output = output + ("\"%s\" [style=filled,shape=record,color=%s,label=\"%s %s|%s\"];\n" % (lib.name, libraries.getColor(group), lib.name, lib.version, lib.license))
+263
+264 for require in lib.requires:
+265 output = output + ("\"%s\" -> \"%s\";\n" % (lib.name, require))
+266
+267 graphdata.reverse()
+268 for line in graphdata:
+269 if line.strip() == '':
+270 graphdata.pop(0)
+271 else:
+272 break
+273 graphdata.reverse()
+274
+275 graphdata[-1] = graphdata[-1].replace('}', output + '}')
+276
+277 graphwritefile = codecs.open(destgraphfilename, 'w', 'utf8')
+278 graphwritefile.writelines(graphdata)
+279 graphwritefile.close()
+280
+282 out = open(output, 'w')
+
283 db = amara.parse(Uri.OsPathToUri(database))
+
284 out.write('digraph G {\n')
+
285 for p in db.antDatabase.project:
+
286 items = []
+
287 if hasattr(p, 'property'):
+
288 for prop in p.property:
+
289 if 'external' + os.sep in os.path.abspath(str(prop.defaultValue)):
+
290 items.append(str(prop.defaultValue))
+
291 if hasattr(p, 'fileDependency'):
+
292 for dep in p.fileDependency:
+
293 dep = str(dep).split(' ')[0]
+
294 if 'external' + os.sep in os.path.abspath(str(dep)):
+
295 items.append(str(dep))
+
296
+
297 items = set(items)
+
298 for i in items:
+
299 out.write('\"%s\" -> \"%s\"\n' % (str(p.name), i.replace(os.environ['HELIUM_HOME'], 'helium').replace(os.sep, '/')))
+
300 out.write('}')
+
301 out.close()
+
302
+304 if hasattr(t, 'signal'):
+
305 for signal in t.signal:
+
306 if macro:
+
307 output.append("\"%s\" [fontname=\"Times-Italic\"];" % str(t.name))
+
308 output.append('subgraph \"cluster%s\" {label = \"%s\"; \"%s\"}\n' % (str(p.name), str(p.name), str(t.name)))
+
309 output.append('\"%s\" -> \"%s\" [style=dotted]\n' % (str(t.name), signal))
+
310 if hasattr(t, 'log'):
+
311 for log in t.log:
+
312 logdir = '/output/logs/'
+
313 logname = os.path.basename(str(log))
+
314 if not ('**' in logname):
+
315 logname = logname.replace('*', '${sysdef.configuration}').replace('--logfile=', '')
+
316 if not logdir in logname:
+
317 logname = logdir + logname
+
318 logname = logname.replace(os.sep, '/')
+
319
+
320 if macro:
+
321 output.append("\"%s\" [fontname=\"Times-Italic\"];" % str(t.name))
+
322 output.append('subgraph \"cluster%s\" {label = \"%s\"; \"%s\"}\n' % (str(p.name), str(p.name), str(t.name)))
+
323 output.append('\"%s\" -> \"%s\"\n' % (str(t.name), logname))
+
324
+342
+
+
+
+
+
+
+
+
+
+