From info at egenix.com Tue Apr 1 12:18:30 2008 From: info at egenix.com (eGenix Team: M.-A. Lemburg) Date: Tue Apr 1 11:18:43 2008 Subject: [egenix-users] ANN: eGenix MoinMoin action plugins for renaming and search&replace Message-ID: <47F1FDE6.2030709@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com Action Plugins for MoinMoin This announcement is also available on our web-site for online reading: http://www.egenix.com/company/news/MoinMoin-Action-Plugins-1.0.html ________________________________________________________________________ eGenix and MoinMoin eGenix uses the MoinMoin wiki implementation internally as knowledge base and to document product development. Every now and then we need to do major search&replace on our wiki - e.g. due to a change in product name or to update an external URL. Instead of applying the changes manually, we created two new actions for MoinMoin to simplify this task. Both have proven to be very useful in day-to-day operation and therefore we are releasing them to the community under the GPLv2. "Rename Multiple Pages" Action, Version 1.0 -------------------------------------------- A plugin to quickly rename a whole set of pages in a MoinMoin wiki. "Search And Replace Multiple Pages" Action, Version 1.0 -------------------------------------------- This plugin can be used to quickly rename a whole set of pages in a MoinMoin wiki. eGenix MoinMoin Library ----------------------- Over time, we expect to release more useful MoinMoin plugins or patches. We'll be publishing them in our new MoinMoin Library. http://www.egenix.com/library/moinmoin/ ________________________________________________________________________ More Information Please see http://www.egenix.com/library/moinmoin/ for more information and downloads. Enjoy, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Mar 31 2008) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ :::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! :::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 From david.huard at gmail.com Wed Apr 9 19:27:54 2008 From: david.huard at gmail.com (David Huard) Date: Wed Apr 9 20:36:01 2008 Subject: [egenix-users] Unsupported ISO format string Message-ID: Hi all, I just wanted to point out that the Date parser in mx.DateTime does not seem to interpret correctly the hour field in the following ISO string: In [10]: dt.DateFrom('1979-01-01T01') Out[10]: The problem is related to the fact that the minute group is not optional. Putting it optional doesn't solve the problem since the regular expression relies on the presence of : to identify the time string, which is absent in this case. Unless I'm wrong, this use case is ISO 8601 compliant. I patched my local copy, but let's say it's a rather ugly hack based on adding an isoT regular expression. Regards, David Huard Please CC to my personal email. From gosnat at bethel.edu Wed Apr 9 16:26:46 2008 From: gosnat at bethel.edu (Nathan Gossett) Date: Wed Apr 9 22:27:18 2008 Subject: [egenix-users] way to prevent floats from truncating to ints? Message-ID: <47FD2686.4080804@bethel.edu> I'm using mxODBC to work with an Oracle 9 database, and when I try to fetch FLOAT data, they are being returned as ints. Basically, I'm having the same issue as problem two in this posting: http://www.egenix.com/mailman-archives/egenix-users/2003-June/113452.html Setting the "leave scale 0 floats untouched" option is not really a solution, because then all of the NUMBER(10,0) data is returned as floats (which causes problems since they are supposed to be integers). I realize that mxODBC is acting exactly as documented, but I need floats to be returned as floating point numbers, while integers are returned as integers. Is there some way around this? From mal at egenix.com Wed Apr 9 23:52:15 2008 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Apr 9 22:52:31 2008 Subject: [egenix-users] way to prevent floats from truncating to ints? In-Reply-To: <47FD2686.4080804@bethel.edu> References: <47FD2686.4080804@bethel.edu> Message-ID: <47FD2C7F.9050904@egenix.com> On 2008-04-09 22:26, Nathan Gossett wrote: > I'm using mxODBC to work with an Oracle 9 database, and when I try to > fetch FLOAT data, they are being returned as ints. Basically, I'm > having the same issue as problem two in this posting: > > http://www.egenix.com/mailman-archives/egenix-users/2003-June/113452.html > > Setting the "leave scale 0 floats untouched" option is not really a > solution, because then all of the NUMBER(10,0) data is returned as > floats (which causes problems since they are supposed to be integers). I > realize that mxODBC is acting exactly as documented, but I need floats > to be returned as floating point numbers, while integers are returned as > integers. Is there some way around this? What you are seeing is caused by a bug in the Oracle ODBC driver you are using: it returns a scale 0 value for regular floating values instead of the true value. As a result the mxODBC Zope DA then assumes that the scale of the float value is indeed 0 and thus an integer and truncates the values depending on the setting of the connection option. There are ways to work around this problem by fetching all numbers as floats and then applying the conversion from floats to integers where necessary "by hand", but this is not ideal. Please first try with the latest Oracle ODBC driver from the Oracle Full Client (not the Oracle Instance Client), apply all available patches and let us know whether the problem still persists with that driver version. If that doesn't help either, we'll have to add a work-around to the underlying mxODBC Python interface and include that in the next version of the mxODBC Zope DA. Thanks, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Apr 09 2008) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ :::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! :::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 From mal at egenix.com Wed Apr 9 23:55:16 2008 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Apr 9 22:55:33 2008 Subject: [egenix-users] Unsupported ISO format string In-Reply-To: References: Message-ID: <47FD2D34.5090104@egenix.com> On 2008-04-09 20:27, David Huard wrote: > Hi all, > > I just wanted to point out that the Date parser in mx.DateTime does not > seem to interpret correctly the hour field in the following ISO string: > > In [10]: dt.DateFrom('1979-01-01T01') > Out[10]: 2aaab2688870> > > The problem is related to the fact that the minute group is not optional. > Putting it optional doesn't solve the problem since the regular > expression relies on the presence of : to identify the time string, which > is absent in this case. > > Unless I'm wrong, this use case is ISO 8601 compliant. > > I patched my local copy, but let's say it's a rather ugly hack based on > adding an isoT regular expression. Thanks for letting us know. The generic parser tries to parse the date and time parts in two steps. To fix this issue, we'll have to add support for parsing both in one go. I'll add a ticket for that and see whether we can add support for this in the next release. Thanks, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Apr 09 2008) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ :::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! :::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 From Cliff.Xuan at artsalliancemedia.com Tue Apr 15 17:15:25 2008 From: Cliff.Xuan at artsalliancemedia.com (Cliff Xuan) Date: Tue Apr 15 17:15:58 2008 Subject: [egenix-users] How to do "where foo in ?" clause in mxodbc? Message-ID: <49A0DBD9577C0A4096A969872C94980A010D0ACB@aam-ex-1.aam.local> Hi there, I am trying to do this in mxodbc, but apparently it doesn't work. Would really appreciate if someone can enlighten me. >>> names = ('Andy','Bob', 'Charlie') >>> sql = "select * from customer where firstname in ?" >>> cur.execute(sql, (names,)) Traceback (most recent call last): File "", line 1, in ? ProgrammingError: ('37000', 0, '[Microsoft][ODBC SQL Server Driver]Syntax error or access violation', 4504) The objective is to be able to use the SQL "in" clause, e.g. select * from customer where firstname in ('Andy','Bob', 'Charlie'). Many thanks, Cliff -------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20080415/ce3fba33/attachment.htm From mal at egenix.com Tue Apr 15 18:44:27 2008 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Apr 15 17:44:47 2008 Subject: [egenix-users] How to do "where foo in ?" clause in mxodbc? In-Reply-To: <49A0DBD9577C0A4096A969872C94980A010D0ACB@aam-ex-1.aam.local> References: <49A0DBD9577C0A4096A969872C94980A010D0ACB@aam-ex-1.aam.local> Message-ID: <4804CD5B.7020309@egenix.com> On 2008-04-15 17:15, Cliff Xuan wrote: > Hi there, > > I am trying to do this in mxodbc, but apparently it doesn't work. Would really appreciate if someone can enlighten me. > >>>> names = ('Andy','Bob', 'Charlie') >>>> sql = "select * from customer where firstname in ?" >>>> cur.execute(sql, (names,)) > Traceback (most recent call last): > File "", line 1, in ? > ProgrammingError: ('37000', 0, '[Microsoft][ODBC SQL Server Driver]Syntax error or access violation', 4504) > > The objective is to be able to use the SQL "in" clause, e.g. select * from customer where firstname in ('Andy','Bob', 'Charlie'). The binding parameters only allow scalar values to be passed to the database. Sequences are not supported by ODBC. You have two options: 1. Apply SQL-quoting to the sequence to turn it into a string that you can embed into the SQL statement. This is easy in most cases, since the Python tuple representation is compatible with the SQL dialects of many databases. cur.execute("select * from customer where firstname in %r" % names) For non-ASCII data, you will have to apply proper SQL quoting. 2. You write the sequence data into a temporary table and reference this table in your query. This option is better if you have long sequences, since the length of the SQL statements that you can send to the database is usually limited. Option 2 is also the faster variant if you use the sequence multiple times. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Apr 15 2008) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ :::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! :::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 From mal at egenix.com Wed Apr 16 18:42:59 2008 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Apr 16 17:43:19 2008 Subject: [egenix-users] How to do "where foo in ?" clause in mxodbc? In-Reply-To: <49A0DBD9577C0A4096A969872C94980A010D0ACD@aam-ex-1.aam.local> References: <49A0DBD9577C0A4096A969872C94980A010D0ACB@aam-ex-1.aam.local> <4804CD5B.7020309@egenix.com> <49A0DBD9577C0A4096A969872C94980A010D0ACD@aam-ex-1.aam.local> Message-ID: <48061E83.6070800@egenix.com> Hi Cliff, On 2008-04-16 17:14, Cliff Xuan wrote: > Hi Marc-Andre, > > Thanks very much for your reply. > > I had a go with the simpler first approach and it worked quite well even though a bit slow because I'm using the tuple many times. If you're using the same query (with the embedded tuple) over and over again, it's faster to assign the statement to a variable. Provided you use a dedicated cursor for the query, mxODBC will then reuse the already prepared statement for subsequent queries: stmt = "select * from customer where firstname in %(s)" % repr(names)[1:-1] ... cur.execute(stmt) ... cur.execute(stmt) ... cur.execute(stmt) ... cur.execute(stmt) (only the first .execute() call will run through the prepare step, the subsequent calls will reuse the already prepared access plan) Note that for MS SQL Server, we have found that using cur.executedirect() often results in better performance. You might want to experiment with that as well. > I'm sure you know this little trick I found but just to make life easier for other people reading the email, I found it's safer to use the following: >>>>> names = ('Andy','Bob', 'Charlie') >>>> cur.execute("select * from customer where firstname in %(s)" % repr(names)[1:-1]) > > It handles tuple with a trailing comma, for example: >>>> names = ('Andy','Bob','Charlie',) > > Thanks > Cliff > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tue 4/15/2008 4:44 PM > To: Cliff Xuan > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] How to do "where foo in ?" clause in mxodbc? > > On 2008-04-15 17:15, Cliff Xuan wrote: >> Hi there, >> >> I am trying to do this in mxodbc, but apparently it doesn't work. Would really appreciate if someone can enlighten me. >> >>>>> names = ('Andy','Bob', 'Charlie') >>>>> sql = "select * from customer where firstname in ?" >>>>> cur.execute(sql, (names,)) >> Traceback (most recent call last): >> File "", line 1, in ? >> ProgrammingError: ('37000', 0, '[Microsoft][ODBC SQL Server Driver]Syntax error or access violation', 4504) >> >> The objective is to be able to use the SQL "in" clause, e.g. select * from customer where firstname in ('Andy','Bob', 'Charlie'). > > The binding parameters only allow scalar values to be passed to the > database. Sequences are not supported by ODBC. > > You have two options: > > 1. Apply SQL-quoting to the sequence to turn it into a string that > you can embed into the SQL statement. > > This is easy in most cases, since the Python tuple representation > is compatible with the SQL dialects of many databases. > > cur.execute("select * from customer where firstname in %r" % names) > > For non-ASCII data, you will have to apply proper SQL quoting. > > 2. You write the sequence data into a temporary table and reference > this table in your query. > > This option is better if you have long sequences, since the length > of the SQL statements that you can send to the database is usually > limited. > > Option 2 is also the faster variant if you use the sequence multiple > times. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Apr 16 2008) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ :::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! :::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 From aaltepet at bethel.edu Wed Apr 16 16:36:22 2008 From: aaltepet at bethel.edu (Andy Altepeter) Date: Wed Apr 16 22:26:59 2008 Subject: [egenix-users] way to prevent floats from truncating to ints? Message-ID: <200804161536.22889.aaltepet@bethel.edu> Hi, This response is in reference to this message: http://lists.egenix.com/mailman-archives/egenix-users/2008-April/114362.html I've been working with Nathan. Regarding Marc's suggestion to: > Please first try with the latest Oracle ODBC driver from the > Oracle Full Client (not the Oracle Instance Client) I've downloaded and installed the oracle full client (10.2.0.3) on our RHEL 4 server. I've installed the complete client, even including the instant client option. But, I don't see that any ODBC drivers were installed. I'm not sure if the unix version of the oracle client even includes ODBC drivers? We're also using the RHEL 4 rpm for unixodbc, which is unixodbc-2.2.11. I've tried upgrading from the oracle instantclient 10.2.0.3 rpms to the 11.1.0.6.0 rpms. The newer version of the instantclient is apparently not supported by the version of unixodbc we have, I get an error about a certain function not being found (I don't recall which one it was). I guess I'm not sure where to go next. Thanks, Andy Altepeter Bethel University From mal at egenix.com Thu Apr 17 14:55:29 2008 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Apr 17 13:55:48 2008 Subject: [egenix-users] way to prevent floats from truncating to ints? In-Reply-To: <200804161536.22889.aaltepet@bethel.edu> References: <200804161536.22889.aaltepet@bethel.edu> Message-ID: <48073AB1.9040903@egenix.com> On 2008-04-16 22:36, Andy Altepeter wrote: > Hi, > > This response is in reference to this message: > http://lists.egenix.com/mailman-archives/egenix-users/2008-April/114362.html > > I've been working with Nathan. Regarding Marc's suggestion to: >> Please first try with the latest Oracle ODBC driver from the >> Oracle Full Client (not the Oracle Instance Client) > > I've downloaded and installed the oracle full client (10.2.0.3) on our RHEL 4 > server. I've installed the complete client, even including the instant client > option. But, I don't see that any ODBC drivers were installed. I'm not sure > if the unix version of the oracle client even includes ODBC drivers? It does, just like the Instant Client for Linux, and in case of problems with the Instant Client ODBC drivers, Oracle recommends to use the version from the full client, since those get updated more frequently. However, in your case (Oracle 9 database), I'm not sure whether using the Oracle 10R2 client would really help due to the version mismatch. > We're also using the RHEL 4 rpm for unixodbc, which is unixodbc-2.2.11. > > I've tried upgrading from the oracle instantclient 10.2.0.3 rpms to the > 11.1.0.6.0 rpms. The newer version of the instantclient is apparently not > supported by the version of unixodbc we have, I get an error about a certain > function not being found (I don't recall which one it was). If unixODBC doesn't work, you could try iODBC. unixODBC development seems to have stalled with the last new version released in 2006. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Apr 17 2008) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ :::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! :::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 From gosnat at bethel.edu Mon Apr 21 13:06:03 2008 From: gosnat at bethel.edu (Nathan Gossett) Date: Mon Apr 21 19:06:50 2008 Subject: [egenix-users] way to prevent floats from truncating to ints? In-Reply-To: <47FD2C7F.9050904@egenix.com> References: <47FD2686.4080804@bethel.edu> <47FD2C7F.9050904@egenix.com> Message-ID: <480CC97B.5000409@bethel.edu> Although we were never able to get the latest ODBC drivers to install correctly, we did manage to work around the issue by changing the offending column from a FLOAT to a NUMBER(10,2) type, which is correctly passed along without truncation even with the older driver. This might not be a total solution to the issue, but it will work for our purposes and I thought I'd pass it along for future reference. M.-A. Lemburg wrote: > On 2008-04-09 22:26, Nathan Gossett wrote: >> I'm using mxODBC to work with an Oracle 9 database, and when I try to >> fetch FLOAT data, they are being returned as ints. Basically, I'm >> having the same issue as problem two in this posting: >> >> http://www.egenix.com/mailman-archives/egenix-users/2003-June/113452.html >> >> Setting the "leave scale 0 floats untouched" option is not really a >> solution, because then all of the NUMBER(10,0) data is returned as >> floats (which causes problems since they are supposed to be integers). >> I realize that mxODBC is acting exactly as documented, but I need >> floats to be returned as floating point numbers, while integers are >> returned as integers. Is there some way around this? > > What you are seeing is caused by a bug in the Oracle ODBC driver > you are using: it returns a scale 0 value for regular floating > values instead of the true value. As a result the mxODBC Zope DA > then assumes that the scale of the float value is indeed 0 and > thus an integer and truncates the values depending on the setting > of the connection option. > > There are ways to work around this problem by fetching all numbers > as floats and then applying the conversion from floats to integers > where necessary "by hand", but this is not ideal. > > Please first try with the latest Oracle ODBC driver from the > Oracle Full Client (not the Oracle Instance Client), apply > all available patches and let us know whether the problem still > persists with that driver version. > > If that doesn't help either, we'll have to add a work-around to the > underlying mxODBC Python interface and include that in the next version > of the mxODBC Zope DA. > > Thanks, From mal at egenix.com Tue Apr 22 13:48:08 2008 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Apr 22 12:48:23 2008 Subject: [egenix-users] way to prevent floats from truncating to ints? In-Reply-To: <480CC97B.5000409@bethel.edu> References: <47FD2686.4080804@bethel.edu> <47FD2C7F.9050904@egenix.com> <480CC97B.5000409@bethel.edu> Message-ID: <480DC268.2060300@egenix.com> On 2008-04-21 19:06, Nathan Gossett wrote: > Although we were never able to get the latest ODBC drivers to install > correctly, we did manage to work around the issue by changing the > offending column from a FLOAT to a NUMBER(10,2) type, which is correctly > passed along without truncation even with the older driver. This might > not be a total solution to the issue, but it will work for our purposes > and I thought I'd pass it along for future reference. Thank you for providing this tip. Perhaps it's also possible to convince the ODBC driver to send correct precision information by using CAST() in the queries. > M.-A. Lemburg wrote: >> On 2008-04-09 22:26, Nathan Gossett wrote: >>> I'm using mxODBC to work with an Oracle 9 database, and when I try to >>> fetch FLOAT data, they are being returned as ints. Basically, I'm >>> having the same issue as problem two in this posting: >>> >>> http://www.egenix.com/mailman-archives/egenix-users/2003-June/113452.html >>> >>> >>> Setting the "leave scale 0 floats untouched" option is not really a >>> solution, because then all of the NUMBER(10,0) data is returned as >>> floats (which causes problems since they are supposed to be >>> integers). I realize that mxODBC is acting exactly as documented, but >>> I need floats to be returned as floating point numbers, while >>> integers are returned as integers. Is there some way around this? >> >> What you are seeing is caused by a bug in the Oracle ODBC driver >> you are using: it returns a scale 0 value for regular floating >> values instead of the true value. As a result the mxODBC Zope DA >> then assumes that the scale of the float value is indeed 0 and >> thus an integer and truncates the values depending on the setting >> of the connection option. >> >> There are ways to work around this problem by fetching all numbers >> as floats and then applying the conversion from floats to integers >> where necessary "by hand", but this is not ideal. >> >> Please first try with the latest Oracle ODBC driver from the >> Oracle Full Client (not the Oracle Instance Client), apply >> all available patches and let us know whether the problem still >> persists with that driver version. >> >> If that doesn't help either, we'll have to add a work-around to the >> underlying mxODBC Python interface and include that in the next version >> of the mxODBC Zope DA. >> >> Thanks, > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > https://www.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Apr 22 2008) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ :::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! :::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611