diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/plugins/scripting/scripts/projectdocumentor | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/plugins/scripting/scripts/projectdocumentor')
3 files changed, 198 insertions, 0 deletions
diff --git a/kexi/plugins/scripting/scripts/projectdocumentor/Makefile.am b/kexi/plugins/scripting/scripts/projectdocumentor/Makefile.am new file mode 100644 index 00000000..9d32e165 --- /dev/null +++ b/kexi/plugins/scripting/scripts/projectdocumentor/Makefile.am @@ -0,0 +1,4 @@ +include $(top_srcdir)/kexi/Makefile.global + +scriptsdir = $(kde_datadir)/kexi/scripts/projectdocumentor +scripts_SCRIPTS = ProjectDocumentor.py ProjectDocumentor.rc diff --git a/kexi/plugins/scripting/scripts/projectdocumentor/ProjectDocumentor.py b/kexi/plugins/scripting/scripts/projectdocumentor/ProjectDocumentor.py new file mode 100755 index 00000000..89a60301 --- /dev/null +++ b/kexi/plugins/scripting/scripts/projectdocumentor/ProjectDocumentor.py @@ -0,0 +1,186 @@ +""" +Project Documentor + +Description: +This script collects various informations about a Kexi project +and exports them to a HTML file. + +Author: +Sebastian Sauer <[email protected]> + +Copyright: +Dual-licensed under LGPL v2+higher and the BSD license. +""" + +class DataProvider: + def __init__(self): + import kexiapp + keximainwindow = kexiapp.get("KexiAppMainWindow") + + try: + self.connection = keximainwindow.getConnection() + except: + raise "No connection established. Please open the project to be documented first." + + def printConnection(self): + condata = self.connection.data() + infos = [] + for item in ("caption", "description", "driverName", "hostName", "port", "userName", "fileName", "dbPath", "localSocketFileName", "serverInfoString"): + result = getattr(condata, item)() + if result != None and result != "" and (item != "port" or result != 0): + infos.append( (item, result) ) + return infos + + def printDriver(self): + driver = self.connection.driver() + result = [ ("Version", "%s.%s" % (driver.versionMajor(),driver.versionMinor())) ] + conlist = driver.connectionsList() + if len(conlist) > 0: + result.append( ("Connections",str(conlist)) ) + return result + + def printDatabases(self): + result = [ ("Current database", self.connection.currentDatabase()) ] + dbnames = self.connection.databaseNames() + if len(dbnames) > 0: + result.append( ("Databases",str(dbnames)) ) + return result + + def printTables(self): + result = [] + for t in self.connection.tableNames(): + tableschema = self.connection.tableSchema(t) + ti = [] + for i in ("name", "caption", "description"): + v = getattr(tableschema,i)() + if v != None and v != "": + ti.append( (i,v) ) + tf = [] + for field in tableschema.fieldlist().fields(): + tfi = [] + for n in ("caption","description","type","subType","typeGroup","length","defaultValue"): + v = getattr(field,n)() + if v != None and v != "": + tfi.append( (n,v) ) + props = [] + for n in ("PrimaryKey","ForeignKey","AutoInc","UniqueKey","NotNull", "NotEmpty","Indexed","Unsigned"): + v = getattr(field,"is%s" % n)() + if v != None and v != "" and v != False and v != 0: + props.append( "%s " % n ) + if len(props) > 0: + tfi.append( ("properties",props) ) + + tf.append( (field.name(), tfi) ) + ti.append( ("fields", tf) ) + if len(ti) > 0: + result.append( (t, ti) ) + return result + + def printQueries(self): + result = [] + for q in self.connection.queryNames(): + queryschema = self.connection.querySchema(q) + qi = [] + for i in ("name", "caption", "description", "statement"): + v = getattr(queryschema,i)() + if v != None and v != "": + qi.append( (i,v) ) + if len(qi) > 0: + result.append( (q, qi) ) + return result + +class GuiApp: + def __init__(self, dataprovider): + self.dataprovider = dataprovider + + try: + import gui + except: + raise "Import of the Kross GUI module failed." + + self.dialog = gui.Dialog("Project Documentor") + + self.dialog.addLabel(self.dialog, "Save information about the project to an HTML file.") + + self.file = self.dialog.addFileChooser(self.dialog, + "File:", + gui.getHome() + "/projectdoc.html", + (('HTML files', '*.html'),('All files', '*'))) + + self.printCheckBoxes = {} + for d in dir(self.dataprovider): + if d.startswith("print"): + self.printCheckBoxes[d] = self.dialog.addCheckBox(self.dialog, d[5:], True) + + #value = getattr(self.dataprovider,d)() + #if value != None and len(value) > 0: + # f.write("<h2>%s</h2>" % d[5:]) + # f.write( self.toHTML(value) ) + + #self.exportProjectdetails = + #self.exportTableschemas = self.dialog.addCheckBox(self.dialog, "Table schemas", True) + #self.exportQueryschemas = self.dialog.addCheckBox(self.dialog, "Query schemas", True) + + btnframe = self.dialog.addFrame(self.dialog) + self.dialog.addButton(btnframe, "Save", self.doSave) + self.dialog.addButton(btnframe, "Cancel", self.dialog.close) + + self.dialog.show() + + def toHTML(self, value): + import types + result = "" + if isinstance(value, types.TupleType): + result += "<ul>" + if len(value) == 1: + result += "<li>%s</li>" % value + elif len(value) == 2: + result += "<li>%s: %s</li>" % (value[0], self.toHTML(value[1])) + elif len(value) > 2: + for item in value: + i = self.toHTML(item) + if i != "": + result += "<li>%s</li>" % i + result += "</ul>" + elif isinstance(value, types.ListType): + for item in value: + result += "%s" % self.toHTML(item) + else: + result += "%s" % value + return result + + def doSave(self): + file = str( self.file.get() ) + print "Attempting to save project documentation to file: %s" % file + + f = open(file, "w") + + f.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>") + f.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 4.01 Strict//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11-strict.dtd\">") + f.write("<html><head><title>Project information</title>") + f.write("<style type=\"text/css\">") + f.write(" html { background-color:#fafafa; }") + f.write(" body { background-color:#ffffff; margin:1em; padding:1em; border:#99a 1px solid; color:#003; }") + f.write("</style>") + f.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />") + f.write("</head><body><h1>Project information</h1>") + + for d in dir(self.dataprovider): + if d.startswith("print"): + print "GuiApp.doSave() CHECK %s" % d + a = self.printCheckBoxes[d] + if a and a.isChecked(): + print "GuiApp.doSave() BEGIN %s" % d + value = getattr(self.dataprovider,d)() + if value != None and len(value) > 0: + f.write("<h2>%s</h2>" % d[5:]) + f.write( self.toHTML(value) ) + print "GuiApp.doSave() END %s" % d + + f.close() + + print "Successfully saved project documentation to file: %s" % file + self.dialog.close() + +GuiApp( DataProvider() ) + diff --git a/kexi/plugins/scripting/scripts/projectdocumentor/ProjectDocumentor.rc b/kexi/plugins/scripting/scripts/projectdocumentor/ProjectDocumentor.rc new file mode 100644 index 00000000..bb0f6c69 --- /dev/null +++ b/kexi/plugins/scripting/scripts/projectdocumentor/ProjectDocumentor.rc @@ -0,0 +1,8 @@ +<KrossScripting> + <ScriptAction + name="projectdocumentor" + text="Project Documentation Generator" + icon="contents" + interpreter="python" + file="ProjectDocumentor.py" /> +</KrossScripting> |