jtoolkit-cvs Mailing List for jToolkit (Page 4)
Brought to you by:
davidfraser,
friedelwolff
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
(15) |
Oct
(12) |
Nov
|
Dec
(4) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
|
Feb
(100) |
Mar
(27) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <dav...@us...> - 2004-02-09 14:39:30
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17817 Modified Files: database.py Log Message: added handling for int in dbrepr Index: database.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/database.py,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** database.py 9 Feb 2004 14:33:34 -0000 1.18 --- database.py 9 Feb 2004 14:36:09 -0000 1.19 *************** *** 333,336 **** --- 333,338 ---- if hasattr(value, 'dbrepr'): return value.dbrepr() + elif type(value) == int: + return repr(value) # otherwise try return repr(value) anyway self.errorhandler.logerror("unknown type in dbrepr: value=%r, type=%r" % (value, type(value))) |
From: <dav...@us...> - 2004-02-09 14:38:36
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17669 Modified Files: form.py Log Message: removed unneccessary session parameter to SimpleForm Index: form.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/form.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** form.py 9 Feb 2004 14:29:28 -0000 1.4 --- form.py 9 Feb 2004 14:35:22 -0000 1.5 *************** *** 166,171 **** class SimpleForm(widgets.Form): """base class viewing/editing form for config""" ! def __init__(self, session, record, formname, columnlist, formlayout, optionsdict, extrawidgets): ! self.instance = session.instance self.record = record self.formname = formname --- 166,170 ---- class SimpleForm(widgets.Form): """base class viewing/editing form for config""" ! def __init__(self, record, formname, columnlist, formlayout, optionsdict, extrawidgets): self.record = record self.formname = formname |
From: <dav...@us...> - 2004-02-09 14:38:08
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17463 Modified Files: grid.py Log Message: Corrected reference to class member Index: grid.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/grid.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** grid.py 9 Feb 2004 14:32:26 -0000 1.7 --- grid.py 9 Feb 2004 14:34:54 -0000 1.8 *************** *** 282,286 **** """adds all the cells for a row to the grid""" rowid = self.gridtable.getrowid(row) ! if selfhrefbase is not None: href = self.hrefbase if '?' in href: --- 282,287 ---- """adds all the cells for a row to the grid""" rowid = self.gridtable.getrowid(row) ! href = "" ! if self.hrefbase is not None: href = self.hrefbase if '?' in href: |
From: <dav...@us...> - 2004-02-09 14:36:54
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16682 Modified Files: database.py Log Message: split up access and oracle from sqlserver in dblogin so you don't have to specify DBHOST=None for them... Index: database.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/database.py,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** database.py 9 Feb 2004 14:21:46 -0000 1.17 --- database.py 9 Feb 2004 14:33:34 -0000 1.18 *************** *** 201,205 **** def dblogin(self): """Login to the database""" ! if self.DBTYPE in ('access', 'oracle', 'sqlserver'): self.errorhandler.logtrace('dblogin: dbname = %s, dbhost = %s, dbuser = %s' % \ (self.instance.DBNAME, self.instance.DBHOST, self.instance.DBUSER)) --- 201,210 ---- def dblogin(self): """Login to the database""" ! if self.DBTYPE in ('access', 'oracle'): ! self.errorhandler.logtrace('dblogin: dbname = %s, dbuser = %s' % \ ! (self.instance.DBNAME, self.instance.DBUSER)) ! self.db = self.driver.connect(None,database=self.instance.DBNAME,host=None, ! user=self.instance.DBUSER,password=self.instance.DBPASSWORD,provider=self.instance.DBPROVIDER) ! elif self.DBTYPE in 'sqlserver': self.errorhandler.logtrace('dblogin: dbname = %s, dbhost = %s, dbuser = %s' % \ (self.instance.DBNAME, self.instance.DBHOST, self.instance.DBUSER)) |
From: <dav...@us...> - 2004-02-09 14:35:46
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16475 Modified Files: grid.py Log Message: made SimpleGrid's hrefbase optional Index: grid.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/grid.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** grid.py 9 Feb 2004 14:31:29 -0000 1.6 --- grid.py 9 Feb 2004 14:32:26 -0000 1.7 *************** *** 219,228 **** style['text-decoration'] = 'none' # we need to set the style in both objects otherwise the link style can override it ! contents = widgets.Link(href, text, {'target':hreftarget,'style':style}) return table.TableCell(contents, newattribs={'valign':'top','style':style}) class SimpleGrid(Grid): """a grid with common methods for config pages""" ! def __init__(self, gridtable, columnlist, hrefbase, hreftarget='', colordefs={}, colordeps={}, headingcolumns=(), hidecolumns=(), filter=None): self.hrefbase = hrefbase self.hreftarget = hreftarget --- 219,231 ---- style['text-decoration'] = 'none' # we need to set the style in both objects otherwise the link style can override it ! if href is None: ! contents = text ! else: ! contents = widgets.Link(href, text, {'target':hreftarget,'style':style}) return table.TableCell(contents, newattribs={'valign':'top','style':style}) class SimpleGrid(Grid): """a grid with common methods for config pages""" ! def __init__(self, gridtable, columnlist, hrefbase=None, hreftarget='', colordefs={}, colordeps={}, headingcolumns=(), hidecolumns=(), filter=None): self.hrefbase = hrefbase self.hreftarget = hreftarget *************** *** 279,288 **** """adds all the cells for a row to the grid""" rowid = self.gridtable.getrowid(row) ! href = self.hrefbase ! if '?' in href: ! href += "&" ! else: ! href += "?" ! href += 'action=view&' + self.gridtable.rowidparamstring(rowid) rownum = self.maxrownum() + 1 for category in self.categories: --- 282,292 ---- """adds all the cells for a row to the grid""" rowid = self.gridtable.getrowid(row) ! if selfhrefbase is not None: ! href = self.hrefbase ! if '?' in href: ! href += "&" ! else: ! href += "?" ! href += 'action=view&' + self.gridtable.rowidparamstring(rowid) rownum = self.maxrownum() + 1 for category in self.categories: |
From: <dav...@us...> - 2004-02-09 14:34:43
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16264 Modified Files: grid.py Log Message: removed unneccessary session, self.instance from SimpleGrid Index: grid.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/grid.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** grid.py 9 Feb 2004 13:06:08 -0000 1.5 --- grid.py 9 Feb 2004 14:31:29 -0000 1.6 *************** *** 224,229 **** class SimpleGrid(Grid): """a grid with common methods for config pages""" ! def __init__(self, session, gridtable, columnlist, hrefbase, hreftarget='', colordefs={}, colordeps={}, headingcolumns=(), hidecolumns=(), filter=None): ! self.instance = session.instance self.hrefbase = hrefbase self.hreftarget = hreftarget --- 224,228 ---- class SimpleGrid(Grid): """a grid with common methods for config pages""" ! def __init__(self, gridtable, columnlist, hrefbase, hreftarget='', colordefs={}, colordeps={}, headingcolumns=(), hidecolumns=(), filter=None): self.hrefbase = hrefbase self.hreftarget = hreftarget |
From: <dav...@us...> - 2004-02-09 14:32:42
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15846 Modified Files: form.py Log Message: added support for valuemapisdict Index: form.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/form.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** form.py 14 Oct 2003 09:37:31 -0000 1.3 --- form.py 9 Feb 2004 14:29:28 -0000 1.4 *************** *** 38,41 **** --- 38,42 ---- self.value = value self.usescript = usescript + self.valuemapisdict = 0 def setposition(self, row, col, rowspan, colspan): *************** *** 135,139 **** script += "document.%s.%s = document.%s.%s\r" % (self.formname, self.altname, self.formname, self.name) # initialize the object with methods etc... ! script += "setupcombo(document.%s.%s, alloptions, valuemaps, %d)\r" % (self.formname, self.name, self.alwaysallowblank) return script --- 136,141 ---- script += "document.%s.%s = document.%s.%s\r" % (self.formname, self.altname, self.formname, self.name) # initialize the object with methods etc... ! script += "setupcombo(document.%s.%s, alloptions, valuemaps, %d, %d)\r" \ ! % (self.formname, self.name, self.alwaysallowblank, self.valuemapisdict) return script |
From: <dav...@us...> - 2004-02-09 14:30:47
|
Update of /cvsroot/jtoolkit/jToolkit/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15463 Modified Files: server.py Log Message: added support for entity tags, not_modified tag (still generates page but doesn't send it) Index: server.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/web/server.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** server.py 9 Feb 2004 12:21:43 -0000 1.8 --- server.py 9 Feb 2004 14:27:32 -0000 1.9 *************** *** 197,200 **** --- 197,205 ---- req.headers_out.add('Cache-Control', 'no-cache') req.headers_out.add('Pragma', 'no-cache') + if getattr(thepage, 'etag', None): + req.headers_out.add('Etag', thepage.etag) + reqetag = req.headers_in.get('If-None-Match', '') + if reqetag == thepage.etag: + return httpcodes.NOT_MODIFIED if isinstance(thepage, widgets.Widget): # get the content type... |
From: <dav...@us...> - 2004-02-09 14:27:29
|
Update of /cvsroot/jtoolkit/jToolkit/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14632 Modified Files: session.py Log Message: updated to use unicode gettext... Index: session.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/web/session.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** session.py 9 Feb 2004 13:38:18 -0000 1.7 --- session.py 9 Feb 2004 14:24:09 -0000 1.8 *************** *** 276,280 **** def localize(self, message): """returns the localized form of a message""" ! return self.translation.gettext(message) class LoginSession(Session): --- 276,280 ---- def localize(self, message): """returns the localized form of a message""" ! return self.translation.ugettext(message) class LoginSession(Session): |
From: <dav...@us...> - 2004-02-09 14:26:10
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14323 Modified Files: widgets.py Log Message: more unicode hacking ... (need to sort this all out properly later) Index: widgets.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/widgets.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** widgets.py 9 Feb 2004 14:06:58 -0000 1.10 --- widgets.py 9 Feb 2004 14:22:41 -0000 1.11 *************** *** 58,61 **** --- 58,62 ---- if quote: s = '"' + s.replace('"', """) + '"' + if type(s) == unicode: s = s.encode('iso8859') return s *************** *** 226,230 **** def gethtml(self): ! return self.getheader() + self.getbody() + self.getfooter() def getheader(self): --- 227,236 ---- def gethtml(self): ! header, body, footer = self.getheader(), self.getbody(), self.getfooter() ! if unicode in (type(header), type(body), type(footer)): ! if type(header) == str: header = header.decode('iso8859') ! if type(body) == str: body = body.decode('iso8859') ! if type(footer) == str: footer = footer.decode('iso8859') ! return header + body + footer def getheader(self): *************** *** 279,283 **** <h1>%s</h1>""" % (self.title) end = "</body>" ! return start + self.getcontents() + end def getfooter(self): --- 285,294 ---- <h1>%s</h1>""" % (self.title) end = "</body>" ! contents = self.getcontents() ! if unicode in (type(start), type(contents), type(end)): ! if type(start) == str: start = start.decode('iso8859') ! if type(contents) == str: contents = contents.decode('iso8859') ! if type(end) == str: end = end.decode('iso8859') ! return start + contents + end def getfooter(self): |
From: <dav...@us...> - 2004-02-09 14:25:00
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14080 Modified Files: database.py Log Message: added a nonetoblank method to get rid of nulls returned in place of blank strings Index: database.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/database.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** database.py 9 Feb 2004 14:10:00 -0000 1.16 --- database.py 9 Feb 2004 14:21:46 -0000 1.17 *************** *** 65,68 **** --- 65,73 ---- return text.lower() + def nonetoblank(text): + """converts None to a blank string""" + if text is None: return "" + return text + if threading: dbwrapperinitlock = threading.RLock() *************** *** 103,106 **** --- 108,112 ---- self.upper = upper self.lower = lower + self.nonetoblank = nonetoblank self.dbtypenames = dbtypenames[self.DBTYPE] # record statistics for optimisation |
From: <dav...@us...> - 2004-02-09 14:22:05
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12982 Modified Files: PyADO.py Log Message: added a simple speed test (users will need to change connect details and sql statement) useful for optimisations Index: PyADO.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/PyADO.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** PyADO.py 9 Feb 2004 14:04:47 -0000 1.7 --- PyADO.py 9 Feb 2004 14:18:50 -0000 1.8 *************** *** 403,407 **** --- 403,433 ---- theConnection.close() + def speedtest(): + import time + import ADOProviders + start = time.time() + conn = connect(None, user="ameriven", password="ameriven", host="", provider=ADOProviders.OracleProvider) + curs = conn.cursor() + connected = time.time() + curs.execute("select * from categorylists") + executed1 = time.time() + curs.fetchall() + fetched1 = time.time() + curs.execute("select * from categorylists") + executed2 = time.time() + curs.fetchall() + fetched2 = time.time() + conn.close() + print """connect: %0.3f + executed1: %0.3f + fetched1: %0.3f + executed2: %0.3f + fetched2: %0.3f""" % (-start+connected, -connected+executed1, -executed1+fetched1, -fetched1+executed2, -executed2+fetched2) + if __name__ == '__main__': + import sys + if '--speedtest' in sys.argv: + speedtest() + sys.exit() #database = 'C:\\Documents and Settings\\Administrator\\Desktop\\db1.mdb' #sql = 'select * from jobs' |
From: <dav...@us...> - 2004-02-09 14:14:46
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10548 Modified Files: dbtable.py Log Message: added support for deleting rows from table Index: dbtable.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/dbtable.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** dbtable.py 9 Feb 2004 14:09:25 -0000 1.8 --- dbtable.py 9 Feb 2004 14:11:12 -0000 1.9 *************** *** 128,131 **** --- 128,138 ---- self.db.update(self.tablename, self.rowidcols, rowid, updatedict) + def deleterow(self, argdict): + """delete the row in the table""" + rowid = self.getrowid(argdict) + if rowid is None: + raise TypeError, "rowid is None in deletelog" + self.db.delete(self.tablename, self.rowidcols, rowid) + def createtable(self): """creates the table represented by self, using tablename and columnlist and returning success""" |
From: <dav...@us...> - 2004-02-09 14:13:13
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9957 Modified Files: database.py Log Message: added support for dropping columns (for consistency with adding...) added support for deleting with multiple keys (factored out multiequalsphrase from update to help here) Index: database.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/database.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** database.py 9 Feb 2004 14:03:31 -0000 1.15 --- database.py 9 Feb 2004 14:10:00 -0000 1.16 *************** *** 254,257 **** --- 254,262 ---- return "alter table %s add %s %s" % (tablename, columnname, self.dbtypename(columntype)) + def getdropcolumnsql(self, tablename, columnname): + """returns the sql required to drop a column of the given name from a table""" + # TODO: verify this works on each database... + return "alter table %s drop column %s" % (tablename, columnname) + def dblowerfn(self): """return a function that converts text to lower case""" *************** *** 369,382 **** raise ValueError, "unknown action %r in update" % action sql = "update "+tablename+" set "+", ".join(updates) ! sql += " where " ! if type(keys) in (unicode, str): ! sql += self.equalsphrase(keys, keyvalues) ! else: ! if len(keys) == 1 and type(keyvalues) not in (tuple, list): ! sql += self.equalsphrase(keys[0], keyvalues) ! else: ! if len(keys) != len(keyvalues): ! self.errorhandler.logtrace("update: keys and keyvalues are of different lengths: %r, %r" % (keys, keyvalues)) ! sql += " and ".join([self.equalsphrase(keys[n], keyvalues[n]) for n in range(len(keys))]) self.errorhandler.logtrace("traceupdate: sql=%s, actiondict=%r" % (sql,actiondict)) if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') --- 374,378 ---- raise ValueError, "unknown action %r in update" % action sql = "update "+tablename+" set "+", ".join(updates) ! sql += " where " + self.multiequalsphrase(keys, keyvalues) self.errorhandler.logtrace("traceupdate: sql=%s, actiondict=%r" % (sql,actiondict)) if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') *************** *** 392,399 **** raise ! def delete(self,tablename,keyname,keyvalue): """delete from a table, trap errors. """ ! sql = "delete from "+tablename+" where "+self.equalsphrase(keyname, keyvalue) if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') try: --- 388,395 ---- raise ! def delete(self,tablename,keys,keyvalues): """delete from a table, trap errors. """ ! sql = "delete from "+tablename+" where "+self.multiequalsphrase(keys, keyvalues) if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') try: *************** *** 404,408 **** except self.dberror: self.db.rollback() ! self.errorhandler.logerror("sql error in delete: "+tablename+", %s=%r"%(keyname,keyvalue)+": "\ +"sql:"+sql+"\n"+self.errorhandler.exception_str()) raise --- 400,404 ---- except self.dberror: self.db.rollback() ! self.errorhandler.logerror("sql error in delete: "+tablename+", %r=%r"%(keys,keyvalues)+": "\ +"sql:"+sql+"\n"+self.errorhandler.exception_str()) raise *************** *** 542,545 **** --- 538,552 ---- return column + "=" + self.dbrepr(value) + def multiequalsphrase(self, keys, keyvalues): + if type(keys) in (unicode, str): + return self.equalsphrase(keys, keyvalues) + else: + if len(keys) == 1 and type(keyvalues) not in (tuple, list): + return self.equalsphrase(keys[0], keyvalues) + else: + if len(keys) != len(keyvalues): + self.errorhandler.logtrace("multiequalsphrase: keys and keyvalues are of different lengths: %r, %r" % (keys, keyvalues)) + return " and ".join([self.equalsphrase(keys[n], keyvalues[n]) for n in range(len(keys))]) + def catclauses(self, clauselist): """cat the clauses in the list into a string that can be used as a where clause""" |
From: <dav...@us...> - 2004-02-09 14:12:38
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9825 Modified Files: dbtable.py Log Message: added rowidexists function to dbtable Index: dbtable.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/dbtable.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** dbtable.py 9 Feb 2004 12:58:31 -0000 1.7 --- dbtable.py 9 Feb 2004 14:09:25 -0000 1.8 *************** *** 80,83 **** --- 80,89 ---- return record + def rowidexists(self, rowid): + """returns where a record exists with the given rowid""" + sql = "select count(*) from %s where %s" % (self.tablename, self.rowidclause(rowid)) + count = int(self.db.singlevalue(sql)) + return count > 0 + def getdefaultrecord(self): """retrieves a default record for new categories""" |
From: <dav...@us...> - 2004-02-09 14:10:12
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9284 Modified Files: widgets.py Log Message: improved escaping of refreshurl (only need to escape spaces) Index: widgets.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/widgets.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** widgets.py 9 Feb 2004 13:47:31 -0000 1.9 --- widgets.py 9 Feb 2004 14:06:58 -0000 1.10 *************** *** 24,29 **** # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - import urllib - class Widget: def __init__(self, tagname = "widget"): --- 24,27 ---- *************** *** 248,255 **** else: # TODO: check out the URL escaping more thoroughly... ! if '?' in refreshurl: ! # escape query as spaces problems when refreshing... ! querystart = refreshurl.find('?')+1 ! refreshurl = refreshurl[:querystart] + urllib.quote(refreshurl[querystart:]) result += """<meta http-equiv="Refresh" content="%d; URL=%s">""" % (refresh, refreshurl) # stylesheet info --- 246,251 ---- else: # TODO: check out the URL escaping more thoroughly... ! # escape query as spaces cause problems when refreshing... ! refreshurl = refreshurl.replace(' ','%20') result += """<meta http-equiv="Refresh" content="%d; URL=%s">""" % (refresh, refreshurl) # stylesheet info |
From: <dav...@us...> - 2004-02-09 14:08:54
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8970 Modified Files: table.py Log Message: added checks for empty tables Index: table.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/table.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** table.py 9 Feb 2004 13:55:54 -0000 1.4 --- table.py 9 Feb 2004 14:05:41 -0000 1.5 *************** *** 83,95 **** --- 83,99 ---- def maxrowspan(self, row): + if len(row) == 0: return 0 return max([cell.attribs['rowspan'] for cell in row.itervalues()]) def rowmaxcolnum(self, row): + if len(row) == 0: return 0 return max([col + cell.attribs['colspan']-1 for col, cell in row.iteritems()]) def minrownum(self): + if len(self.rowsdict) == 0: return 0 return min(self.rowsdict.iterkeys()) def maxrownum(self): + if len(self.rowsdict) == 0: return 0 return max([rownum + self.maxrowspan(row)-1 for rownum, row in self.rowsdict.iteritems()]) *************** *** 98,104 **** --- 102,110 ---- def mincolnum(self): + if len(self.rowsdict) == 0: return 0 return min([min(row.iterkeys()) for row in self.rowsdict.itervalues()]) def maxcolnum(self): + if len(self.rowsdict) == 0: return 0 return max([self.rowmaxcolnum(row) for row in self.rowsdict.itervalues()]) *************** *** 187,190 **** --- 193,197 ---- def shrinkrange(self): """removes all the empty rows and columns, reducing the range...""" + if len(self.rowsdict) == 0: return # detect which rows are empty emptyrows = [] |
From: <dav...@us...> - 2004-02-09 14:08:05
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8759 Modified Files: PyADO.py _PyADO.py Log Message: created class wrappers that wrap every attribute of Recordset, Connection Index: PyADO.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/PyADO.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** PyADO.py 9 Feb 2004 14:03:31 -0000 1.6 --- PyADO.py 9 Feb 2004 14:04:47 -0000 1.7 *************** *** 95,99 **** def __init__(self): """Initialises the internal connection object using _PyADO""" ! self.Conn = _PyADO.makeConn() def connect(self, dsn,user=None,password=None,host=None,database=None,provider=None): --- 95,99 ---- def __init__(self): """Initialises the internal connection object using _PyADO""" ! self.Conn = _PyADO.Connection() def connect(self, dsn,user=None,password=None,host=None,database=None,provider=None): *************** *** 223,227 **** Parameters may be provided as sequence or mapping and will be bound to variables in the operation.""" ! self.rs = _PyADO.makeRS() self.rsList = [self.rs] self.rsListPos = 0 --- 223,227 ---- Parameters may be provided as sequence or mapping and will be bound to variables in the operation.""" ! self.rs = _PyADO.Recordset() self.rsList = [self.rs] self.rsListPos = 0 *************** *** 341,345 **** self.rsListPos = 0 for rownumber in range(size): ! rs = _PyADO.makeRS() Query = operation % parameters[rownumber] rs.Open(Query, ActiveConnection = self.PassConn) --- 341,345 ---- self.rsListPos = 0 for rownumber in range(size): ! rs = _PyADO.Recordset() Query = operation % parameters[rownumber] rs.Open(Query, ActiveConnection = self.PassConn) Index: _PyADO.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/_PyADO.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** _PyADO.py 9 Feb 2004 14:03:31 -0000 1.1 --- _PyADO.py 9 Feb 2004 14:04:47 -0000 1.2 *************** *** 28,44 **** error = pythoncom.error ! def makeConn(): ! try: ! Conn = win32com.client.Dispatch("ADODB.Connection") ! return Conn ! except win32com.client.pythoncom.com_error, com_error: ! if com_error.args[0] == 0x800401f0: ! # this is the COM not initialized problem ! raise WindowsError("COM not initialized") ! else: ! raise ! def makeRS(): ! return win32com.client.Dispatch("ADODB.Recordset") --- 28,112 ---- error = pythoncom.error ! class ConnectionProperty(object): ! def __init__(self, Property): ! self.Property = Property ! def getValue(self): ! return self.Property.Value ! def setValue(self, newValue): ! self.Property.Value = newValue ! Value = property(getValue, setValue) ! class Connection(object): ! def __init__(self): ! try: ! self.Conn = win32com.client.Dispatch("ADODB.Connection") ! except win32com.client.pythoncom.com_error, com_error: ! if com_error.args[0] == 0x800401f0: ! # this is the COM not initialized problem ! raise WindowsError("COM not initialized") ! else: ! raise ! def Open(self, datasource, user, passwd): ! return self.Conn.Open(datasource, user, passwd) ! def Close(self): ! return self.Conn.Close() ! def getState(self): ! return self.Conn.State ! def getProvider(self): ! return self.Conn.Provider ! def setProvider(self, newProvider): ! self.Conn.Provider = newProvider ! def Properties(self, name): ! return ConnectionProperty(self.Conn.Properties(name)) ! State = property(getState) ! Provider = property(getProvider, setProvider) ! ! class RecordsetField(object): ! def __init__(self, Field): ! self.Field = Field ! def getValue(self): return self.Field.Value ! def getName(self): return self.Field.Name ! def getType(self): return self.Field.Type ! def getDefinedSize(self): return self.Field.DefinedSize ! def getActualSize(self): return self.Field.ActualSize ! def getPrecision(self): return self.Field.Precision ! def getNumericScale(self): return self.Field.NumericScale ! def getAttributes(self): return self.Field.Attributes ! Value = property(getValue) ! Name = property(getName) ! Type = property(getType) ! DefinedSize = property(getDefinedSize) ! ActualSize = property(getActualSize) ! Precision = property(getPrecision) ! NumericScale = property(getNumericScale) ! Attributes = property(getAttributes) ! ! class RecordsetFields(object): ! def __init__(self, Fields): ! self.Fields = Fields ! def getCount(self): ! return self.Fields.Count ! def Item(self, col): ! return RecordsetField(self.Fields.Item(col)) ! Count = property(getCount) ! ! class Recordset(object): ! def __init__(self): ! self.rs = win32com.client.Dispatch("ADODB.Recordset") ! def Open(self, operation, ActiveConnection): ! return self.rs.Open(operation, ActiveConnection.Conn) ! def Close(self): ! return self.rs.Close() ! def MoveNext(self): ! return self.rs.MoveNext() ! def getEOF(self): ! return self.rs.EOF ! def getRecordCount(self): ! return self.rs.RecordCount ! def getFields(self): ! return RecordsetFields(self.rs.Fields) ! EOF = property(getEOF) ! RecordCount = property(getRecordCount) ! Fields = property(getFields) |
From: <dav...@us...> - 2004-02-09 14:06:46
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8481 Modified Files: PyADO.py database.py Added Files: _PyADO.py Log Message: moved all COM stuff from PyADO into _PyADO (to prepare for doing it in C) --- NEW FILE: _PyADO.py --- """PyADO: a Python Database API driver that wraps around Microsoft ADO For Python DB-API Reference, see http://www.python.org/topics/database/DatabaseAPI-2.0.html _PyADO is a module that wraps the COM calls to speed them up """ # Copyright 2002, 2003 St James Software # # This file is part of jToolkit. # # jToolkit is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # jToolkit is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with jToolkit; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import pythoncom import win32com.client CoInitialize = win32com.client.pythoncom.CoInitialize error = pythoncom.error def makeConn(): try: Conn = win32com.client.Dispatch("ADODB.Connection") return Conn except win32com.client.pythoncom.com_error, com_error: if com_error.args[0] == 0x800401f0: # this is the COM not initialized problem raise WindowsError("COM not initialized") else: raise def makeRS(): return win32com.client.Dispatch("ADODB.Recordset") Index: PyADO.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/PyADO.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** PyADO.py 9 Feb 2004 13:14:29 -0000 1.5 --- PyADO.py 9 Feb 2004 14:03:31 -0000 1.6 *************** *** 21,28 **** # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - import pythoncom - import win32com.client from ADOTypes import * from ADOProviders import * # TODO: --- 21,27 ---- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from ADOTypes import * from ADOProviders import * + import _PyADO # TODO: *************** *** 35,38 **** --- 34,40 ---- # -------------------------------------------------------------------- + CoInitialize = _PyADO.CoInitialize + error = _PyADO.error + def connect(dsn,user=None,password=None,host=None,database=None,provider=None): """Constructor for creating a connection to the database. Returns a Connection Object. *************** *** 71,75 **** __init__() ! Initialises the internal connection object using win32com connect(dsn,user,password,host,database,provider) open the connection. this is called from the connect function outside this class --- 73,77 ---- __init__() ! Initialises the internal connection object using _PyADO connect(dsn,user,password,host,database,provider) open the connection. this is called from the connect function outside this class *************** *** 92,104 **** def __init__(self): ! """Initialises the internal connection object using win32com""" ! try: ! self.Conn = win32com.client.Dispatch("ADODB.Connection") ! except win32com.client.pythoncom.com_error, com_error: ! if com_error.args[0] == 0x800401f0: ! # this is the COM not initialized problem ! raise WindowsError("COM not initialized") ! else: ! raise def connect(self, dsn,user=None,password=None,host=None,database=None,provider=None): --- 94,99 ---- def __init__(self): ! """Initialises the internal connection object using _PyADO""" ! self.Conn = _PyADO.makeConn() def connect(self, dsn,user=None,password=None,host=None,database=None,provider=None): *************** *** 215,219 **** """ def __init__(self, Conn): ! """Initialises the internal Recordset object from the Connection using win32com""" self.arraysize = 1 self.PassConn = Conn --- 210,214 ---- """ def __init__(self, Conn): ! """Initialises the internal Recordset object from the Connection using _PyADO""" self.arraysize = 1 self.PassConn = Conn *************** *** 228,232 **** Parameters may be provided as sequence or mapping and will be bound to variables in the operation.""" ! self.rs = win32com.client.Dispatch("ADODB.Recordset") self.rsList = [self.rs] self.rsListPos = 0 --- 223,227 ---- Parameters may be provided as sequence or mapping and will be bound to variables in the operation.""" ! self.rs = _PyADO.makeRS() self.rsList = [self.rs] self.rsListPos = 0 *************** *** 346,350 **** self.rsListPos = 0 for rownumber in range(size): ! rs = win32com.client.Dispatch("ADODB.Recordset") Query = operation % parameters[rownumber] rs.Open(Query, ActiveConnection = self.PassConn) --- 341,345 ---- self.rsListPos = 0 for rownumber in range(size): ! rs = _PyADO.makeRS() Query = operation % parameters[rownumber] rs.Open(Query, ActiveConnection = self.PassConn) Index: database.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/database.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** database.py 9 Feb 2004 13:49:13 -0000 1.14 --- database.py 9 Feb 2004 14:03:31 -0000 1.15 *************** *** 37,42 **** """imports the PyADO module. returns module, error class""" from jToolkit.data import PyADO ! PyADO.win32com.client.pythoncom.CoInitialize() ! return PyADO, PyADO.pythoncom.error def importpg(): --- 37,42 ---- """imports the PyADO module. returns module, error class""" from jToolkit.data import PyADO ! PyADO.CoInitialize() ! return PyADO, PyADO.error def importpg(): |
From: <dav...@us...> - 2004-02-09 14:01:59
|
Update of /cvsroot/jtoolkit/jToolkit In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7648 Modified Files: errors.py Log Message: added code to make logaudit work for iso8859 encoded strings... Index: errors.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/errors.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** errors.py 9 Feb 2004 13:25:01 -0000 1.4 --- errors.py 9 Feb 2004 13:58:29 -0000 1.5 *************** *** 64,69 **** def logaudit(self, msg, recorddict=None): if recorddict is not None: ! recordstr = ', '.join([key + ':' + unicode(value) for key, value in recorddict.iteritems()]) msg+=recordstr self.writelog(self.instance.auditfile,msg) --- 64,72 ---- def logaudit(self, msg, recorddict=None): + def tounicode(value): + if type(value) == str: return value.decode('iso8859') + else: return unicode(value) if recorddict is not None: ! recordstr = ', '.join([key + ':' + tounicode(value) for key, value in recorddict.iteritems()]) msg+=recordstr self.writelog(self.instance.auditfile,msg) |
From: <dav...@us...> - 2004-02-09 13:59:08
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6901 Modified Files: table.py Log Message: convertedTable.getcontents to produce list of tags and join them (this allows for unicode/str type checking) Index: table.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/table.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** table.py 25 Sep 2003 17:36:55 -0000 1.3 --- table.py 9 Feb 2004 13:55:54 -0000 1.4 *************** *** 115,122 **** def getcontents(self): ! htmlstring = "" ! for rownum in self.rowrange(): #Now the elements of the toolbar ! htmlstring += self.getrowcontents(rownum) ! return htmlstring def rowempty(self, rownum): --- 115,126 ---- def getcontents(self): ! contentslist = [self.getrowcontents(rownum) for rownum in self.rowrange()] ! # TODO: investigate ways to neaten this up while still preventing ASCII decoding error... ! typelist = [type(p) for p in contentslist] ! if unicode in typelist and str in typelist: ! for n in range(len(contentslist)): ! if type(contentslist[n]) == str: ! contentslist[n] = contentslist[n].decode('iso8859') ! return "".join(contentslist) def rowempty(self, rownum): |
From: <dav...@us...> - 2004-02-09 13:52:26
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5313 Modified Files: database.py Log Message: added patch to encode sql for postgres Index: database.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/database.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** database.py 9 Feb 2004 13:26:54 -0000 1.13 --- database.py 9 Feb 2004 13:49:13 -0000 1.14 *************** *** 221,224 **** --- 221,225 ---- """execute a query, trap sql errors """ + if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') try: cursor = self.db.cursor() *************** *** 235,238 **** --- 236,240 ---- """run a query, trap sql errors """ + if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') try: cursor = self.db.cursor() *************** *** 332,335 **** --- 334,338 ---- sql = "insert into "+tablename+"("+",".join(cols)+")"+" values("+",".join(values)+")" self.errorhandler.logtrace("traceinsert: sql=%s" % (sql)) + if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') try: cursor = self.db.cursor() *************** *** 377,380 **** --- 380,384 ---- sql += " and ".join([self.equalsphrase(keys[n], keyvalues[n]) for n in range(len(keys))]) self.errorhandler.logtrace("traceupdate: sql=%s, actiondict=%r" % (sql,actiondict)) + if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') try: cursor = self.db.cursor() *************** *** 392,395 **** --- 396,400 ---- """ sql = "delete from "+tablename+" where "+self.equalsphrase(keyname, keyvalue) + if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') try: cursor = self.db.cursor() |
From: <dav...@us...> - 2004-02-09 13:51:36
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5142 Modified Files: dates.py Log Message: added trap for AttributeError in pywintypes... note that this may cause the error where every day comes out as Sunday to appear again... if using an older version of the Python Windows extensions... See https://sourceforge.net/tracker/?func=detail&atid=551956&aid=808465&group_id=78018 fix for PyTime.Format This is included from build 160 onwards... The error will only occur if: 1) using an older build that has the error 2) an error occurs when importing pywintypes (which can be patched to remove the error) Index: dates.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/dates.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** dates.py 9 Feb 2004 13:29:13 -0000 1.7 --- dates.py 9 Feb 2004 13:48:20 -0000 1.8 *************** *** 39,42 **** --- 39,45 ---- except ImportError: errortimetype = None + except AttributeError: + # TODO: write an error message - this means that pywintypes needs to be patched for __file__ AttributeError + errortimetype = None date = mxDateTime.DateTime |
From: <dav...@us...> - 2004-02-09 13:50:44
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4893 Modified Files: widgets.py Log Message: added escaping for refresh urls... avoiding the ? so mod_python gets the arguments properly... Index: widgets.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/widgets.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** widgets.py 9 Feb 2004 13:40:13 -0000 1.8 --- widgets.py 9 Feb 2004 13:47:31 -0000 1.9 *************** *** 24,27 **** --- 24,29 ---- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + import urllib + class Widget: def __init__(self, tagname = "widget"): *************** *** 245,248 **** --- 247,255 ---- result += """<meta http-equiv="Refresh" content="%d">""" % (refresh) else: + # TODO: check out the URL escaping more thoroughly... + if '?' in refreshurl: + # escape query as spaces problems when refreshing... + querystart = refreshurl.find('?')+1 + refreshurl = refreshurl[:querystart] + urllib.quote(refreshurl[querystart:]) result += """<meta http-equiv="Refresh" content="%d; URL=%s">""" % (refresh, refreshurl) # stylesheet info |
From: <dav...@us...> - 2004-02-09 13:43:29
|
Update of /cvsroot/jtoolkit/jToolkit/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3369 Modified Files: widgets.py Log Message: changed unicode format string (gave errors with encoded strings) Index: widgets.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/widgets/widgets.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** widgets.py 9 Feb 2004 13:30:48 -0000 1.7 --- widgets.py 9 Feb 2004 13:40:13 -0000 1.8 *************** *** 42,46 **** if type(attribs) == str: attribs = attribs.decode('iso8859') if type(contents) == str: contents = contents.decode('iso8859') ! return u"<%s %s>%s</%s>\r" % (tagname, attribs, contents, tagname) def getcontents(self): --- 42,46 ---- if type(attribs) == str: attribs = attribs.decode('iso8859') if type(contents) == str: contents = contents.decode('iso8859') ! return "<%s %s>%s</%s>\r" % (tagname, attribs, contents, tagname) def getcontents(self): |